Patch from Jim Wilson - more bug fixes for line table decoding.
This commit is contained in:
parent
cb30237e0f
commit
7a4b7442d4
2 changed files with 18 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
|||
1999-08-27 Jim Wilson <wilson@cygnus.com>
|
||||
|
||||
* 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 <wilson@cygnus.com>
|
||||
|
||||
* readelf.c (display_debug_lines, case DW_LNS_const_add_pc): Multiply
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue