2 * Dwarf address ranges parsing code.
12 dwarfaddrtounit(Dwarf *d, ulong addr, ulong *unit)
16 ulong len, id, off, base, size;
19 memset(&b, 0, sizeof b);
21 b.p = d->aranges.data;
22 b.ep = b.p + d->aranges.len;
27 if((id = dwarfget2(&b)) != 2){
30 werrstr("buffer underflow reading address ranges header");
32 werrstr("bad dwarf version 0x%lux in address ranges header", id);
36 b.addrsize = dwarfget1(&b);
38 d->addrsize = b.addrsize;
39 segsize = dwarfget1(&b);
40 USED(segsize); /* what am i supposed to do with this? */
43 if((i = (b.p-start) % (2*b.addrsize)) != 0)
44 b.p += 2*b.addrsize - i;
46 while(b.p!=nil && b.p<end){
47 base = dwarfgetaddr(&b);
48 size = dwarfgetaddr(&b);
51 if(base <= addr && addr < base+size){
60 werrstr("address 0x%lux is not listed in dwarf debugging symbols", addr);