e9e82c1f8fc99a16a1982a81463d41b6f49d3bbd
2 * Dwarf address ranges parsing code.
7 #include <reactos/rossym.h>
8 #include "rossympriv.h"
17 dwarfaddrtounit(Dwarf
*d
, ulong addr
, ulong
*unit
)
21 ulong len
, id
, off
, base
, size
;
24 memset(&b
, 0, sizeof b
);
26 b
.p
= d
->aranges
.data
;
27 b
.ep
= b
.p
+ d
->aranges
.len
;
32 if (!len
) { b
.ep
= b
.p
- 4; return -1; }
33 if((id
= dwarfget2(&b
)) != 2){
36 werrstr("buffer underflow reading address ranges header");
38 werrstr("bad dwarf version 0x%x in address ranges header", id
);
42 b
.addrsize
= dwarfget1(&b
);
44 d
->addrsize
= b
.addrsize
;
45 segsize
= dwarfget1(&b
);
46 USED(segsize
); /* what am i supposed to do with this? */
49 if((i
= (b
.p
-start
) % (2*b
.addrsize
)) != 0)
50 b
.p
+= 2*b
.addrsize
- i
;
52 while(b
.p
!=nil
&& b
.p
<end
){
53 base
= dwarfgetaddr(&b
);
54 size
= dwarfgetaddr(&b
);
58 if(base
<= addr
&& addr
< base
+size
){
67 werrstr("address 0x%lux is not listed in dwarf debugging symbols", addr
);