In both debug_ranges and debug_loc a base address entry can be the first in the range or loc list. If so print the offset and set first to false. Otherwise don't print the entry list offset, but do set first to false.
Signed-off-by: Mark Wielaard <m...@klomp.org> --- src/ChangeLog | 6 ++++++ src/readelf.c | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8eb2103d..01386af2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2020-09-01 Mark Wielaard <m...@klomp.org> + + * readelf.c (print_debug_ranges_section): Base address entry can + be first. + (print_debug_loc_section): Likewise. + 2020-08-26 Mark Wielaard <m...@klomp.org> * readelf.c (print_debug_line_section): It is not an error if there diff --git a/src/readelf.c b/src/readelf.c index 41933d95..dd6e28af 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -6045,10 +6045,16 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, if (begin == (Dwarf_Addr) -1l) /* Base address entry. */ { - printf (gettext (" [%6tx] base address\n "), offset); + if (first) + printf (" [%6tx] ", offset); + else + printf (" "); + puts (gettext ("base address")); + printf (" "); print_dwarf_addr (dwflmod, address_size, end, end); printf ("\n"); base = end; + first = false; } else if (begin == 0 && end == 0) /* End of list entry. */ { @@ -9615,10 +9621,16 @@ print_debug_loc_section (Dwfl_Module *dwflmod, if (begin == (Dwarf_Addr) -1l) /* Base address entry. */ { - printf (gettext (" [%6tx] base address\n "), offset); + if (first) + printf (" [%6tx] ", offset); + else + printf (" "); + puts (gettext ("base address")); + printf (" "); print_dwarf_addr (dwflmod, address_size, end, end); printf ("\n"); base = end; + first = false; } else if (begin == 0 && end == 0) /* End of list entry. */ { -- 2.18.4