2 * Dwarf address ranges parsing code.
11 dwarfaddrtounit(Dwarf
*d
, ulong addr
, ulong
*unit
)
15 ulong len
, id
, off
, base
, size
;
18 memset(&b
, 0, sizeof b
);
20 b
.p
= d
->aranges
.data
;
21 b
.ep
= b
.p
+ d
->aranges
.len
;
26 if (!len
) { b
.ep
= b
.p
- 4; return -1; }
27 if((id
= dwarfget2(&b
)) != 2){
30 werrstr("buffer underflow reading address ranges header");
32 werrstr("bad dwarf version 0x%x 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
);
52 if(base
<= addr
&& addr
< base
+size
){
61 werrstr("address 0x%lux is not listed in dwarf debugging symbols", addr
);