From 7a4b7442d49a7f4ac3da7fc5a1ce2f92e37e8a08 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 27 Aug 1999 10:34:58 +0000 Subject: [PATCH] Patch from Jim Wilson - more bug fixes for line table decoding. --- binutils/ChangeLog | 7 +++++++ binutils/readelf.c | 15 +++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index cbfae904f33..d863c73f2a8 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,10 @@ +1999-08-27 Jim Wilson + + * readelf.c (display_debug_lines): Use i-1 not i in standard_opcodes + access. + (display_debug_aranges): New local excess. Use for calculating padding + and add that into ranges. Break from loop only if length is also 0. + 1999-08-27 Jim Wilson * readelf.c (display_debug_lines, case DW_LNS_const_add_pc): Multiply diff --git a/binutils/readelf.c b/binutils/readelf.c index c785a491eb4..00c71a3caab 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -4262,7 +4262,7 @@ display_debug_lines (section, start, file) printf (_("\n Opcodes:\n")); for (i = 1; i < info.li_opcode_base; i++) - printf (_(" Opcode %d has %d args\n"), i, standard_opcodes[i]); + printf (_(" Opcode %d has %d args\n"), i, standard_opcodes[i - 1]); /* Display the contents of the Directory table. */ data = standard_opcodes + info.li_opcode_base - 1; @@ -5754,6 +5754,7 @@ display_debug_aranges (section, start, file) unsigned char * ranges; unsigned long length; unsigned long address; + int excess; external = (DWARF2_External_ARange *) start; @@ -5773,19 +5774,25 @@ display_debug_aranges (section, start, file) ranges = start + sizeof (* external); + /* Must pad to an alignment boundary that is twice the pointer size. */ + excess = sizeof (*external) % (2 * arange.ar_pointer_size); + if (excess) + ranges += (2 * arange.ar_pointer_size) - excess; + for (;;) { address = byte_get (ranges, arange.ar_pointer_size); - if (address == 0) - break; - ranges += arange.ar_pointer_size; length = byte_get (ranges, arange.ar_pointer_size); ranges += arange.ar_pointer_size; + /* A pair of zeros marks the end of the list. */ + if (address == 0 && length == 0) + break; + printf (" %8.8lx %lu\n", address, length); } -- 2.30.2