From: nickc Date: Fri, 27 Aug 1999 10:34:57 +0000 (+0000) Subject: Patch from Jim Wilson - more bug fixes for line table decoding. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=f7819c1b21fecb2f3256b22b1a58997fc53d66f7;p=pf3gnuchains%2Fpf3gnuchains3x.git Patch from Jim Wilson - more bug fixes for line table decoding. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index cbfae904f3..d863c73f2a 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,12 @@ 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 adv by info.li_min_insn_length. diff --git a/binutils/readelf.c b/binutils/readelf.c index c785a491eb..00c71a3caa 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); }