Skip to content

Commit 53beb83

Browse files
committed
In the DWARF4 GNU split DWARF extension, ranges inside a .dwo are represented by DW_FORM_sec_offset but need to be adjusted by the rnglist_base value to find the proper values in the binary.
1 parent 5903dc3 commit 53beb83

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

src/read/dwarf.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,12 @@ impl<R: Reader> Dwarf<R> {
297297
unit: &Unit<R>,
298298
offset: RangeListsOffset<R::Offset>,
299299
) -> Result<RngListIter<R>> {
300+
let offset = if self.file_type == DwarfFileType::Dwo && unit.header.version() < 5 {
301+
RangeListsOffset(offset.0.wrapping_add(unit.rnglists_base.0))
302+
} else {
303+
offset
304+
};
305+
300306
self.ranges.ranges(
301307
offset,
302308
unit.encoding(),
@@ -312,6 +318,11 @@ impl<R: Reader> Dwarf<R> {
312318
unit: &Unit<R>,
313319
offset: RangeListsOffset<R::Offset>,
314320
) -> Result<RawRngListIter<R>> {
321+
let offset = if self.file_type == DwarfFileType::Dwo && unit.header.version() < 5 {
322+
RangeListsOffset(offset.0.wrapping_add(unit.rnglists_base.0))
323+
} else {
324+
offset
325+
};
315326
self.ranges.raw_ranges(offset, unit.encoding())
316327
}
317328

0 commit comments

Comments
 (0)