ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

dwarfaranges.c
Go to the documentation of this file.
00001 /*
00002  * Dwarf address ranges parsing code.
00003  */
00004 
00005 #define NTOSAPI
00006 #include <ntddk.h>
00007 #include <reactos/rossym.h>
00008 #include "rossympriv.h"
00009 #include <ntimage.h>
00010 
00011 #define NDEBUG
00012 #include <debug.h>
00013 
00014 #include "dwarf.h"
00015 
00016 int
00017 dwarfaddrtounit(Dwarf *d, ulong addr, ulong *unit)
00018 {
00019     DwarfBuf b;
00020     int segsize, i;
00021     ulong len, id, off, base, size;
00022     uchar *start, *end;
00023 
00024     memset(&b, 0, sizeof b);
00025     b.d = d;
00026     b.p = d->aranges.data;
00027     b.ep = b.p + d->aranges.len;
00028 
00029     while(b.p < b.ep){
00030         start = b.p;
00031         len = dwarfget4(&b);
00032         if (!len) { b.ep = b.p - 4; return -1; }
00033         if((id = dwarfget2(&b)) != 2){
00034             if(b.p == nil){
00035             underflow:
00036                 werrstr("buffer underflow reading address ranges header");
00037             }else
00038                 werrstr("bad dwarf version 0x%x in address ranges header", id);
00039             return -1;
00040         }
00041         off = dwarfget4(&b);
00042         b.addrsize = dwarfget1(&b);
00043         if(d->addrsize == 0)
00044             d->addrsize = b.addrsize;
00045         segsize = dwarfget1(&b);
00046         USED(segsize);  /* what am i supposed to do with this? */
00047         if(b.p == nil)
00048             goto underflow;
00049         if((i = (b.p-start) % (2*b.addrsize)) != 0)
00050             b.p += 2*b.addrsize - i;
00051         end = start+4+len;
00052         while(b.p!=nil && b.p<end){
00053             base = dwarfgetaddr(&b);
00054             size = dwarfgetaddr(&b);
00055             if (!size) continue;
00056             if(b.p == nil)
00057                 goto underflow;
00058             if(base <= addr && addr < base+size){
00059                 *unit = off;
00060                 return 0;
00061             }
00062         }
00063         if(b.p == nil)
00064             goto underflow;
00065         b.p = end;
00066     }
00067     werrstr("address 0x%lux is not listed in dwarf debugging symbols", addr);
00068     return -1;
00069 }
00070 
00071 

Generated on Sat May 26 2012 04:35:17 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.