Index: bfd/ChangeLog
2001-11-11 Geoffrey Keating <geoffk@redhat.com> * dwarf2.c (decode_line_info): Properly deal with unknown standard opcodes. Index: binutils/ChangeLog 2001-11-11 Geoffrey Keating <geoffk@redhat.com> * readelf.c (display_debug_lines): Deal with unknown standard opcodes. Handle DW_LNS_set_prologue_end, DW_LNS_set_epilogue_begin, DW_LNS_set_isa. Index: include/elf/ChangeLog 2001-11-11 Geoffrey Keating <geoffk@redhat.com> * dwarf2.h (dwarf_line_number_ops): Add DWARF 3 opcodes.
This commit is contained in:
parent
8b982acfc6
commit
1a509dcc12
6 changed files with 86 additions and 27 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2001-11-13 Geoffrey Keating <geoffk@redhat.com>
|
||||||
|
|
||||||
|
* dwarf2.c (decode_line_info): Properly deal with unknown standard
|
||||||
|
opcodes.
|
||||||
|
|
||||||
2001-11-13 John Marshall <jmarshall@acm.org>
|
2001-11-13 John Marshall <jmarshall@acm.org>
|
||||||
Alan Modra <amodra@bigpond.net.au>
|
Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
|
39
bfd/dwarf2.c
39
bfd/dwarf2.c
|
@ -979,7 +979,22 @@ decode_line_info (unit, stash)
|
||||||
op_code = read_1_byte (abfd, line_ptr);
|
op_code = read_1_byte (abfd, line_ptr);
|
||||||
line_ptr += 1;
|
line_ptr += 1;
|
||||||
|
|
||||||
switch (op_code)
|
if (op_code >= lh.opcode_base)
|
||||||
|
{ /* Special operand. */
|
||||||
|
adj_opcode = op_code - lh.opcode_base;
|
||||||
|
address += (adj_opcode / lh.line_range)
|
||||||
|
* lh.minimum_instruction_length;
|
||||||
|
line += lh.line_base + (adj_opcode % lh.line_range);
|
||||||
|
/* Append row to matrix using current values. */
|
||||||
|
add_line_info (table, address, filename, line, column, 0);
|
||||||
|
basic_block = 1;
|
||||||
|
if (need_low_pc)
|
||||||
|
{
|
||||||
|
need_low_pc = 0;
|
||||||
|
low_pc = address;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else switch (op_code)
|
||||||
{
|
{
|
||||||
case DW_LNS_extended_op:
|
case DW_LNS_extended_op:
|
||||||
line_ptr += 1; /* Ignore length. */
|
line_ptr += 1; /* Ignore length. */
|
||||||
|
@ -1079,19 +1094,15 @@ decode_line_info (unit, stash)
|
||||||
address += read_2_bytes (abfd, line_ptr);
|
address += read_2_bytes (abfd, line_ptr);
|
||||||
line_ptr += 2;
|
line_ptr += 2;
|
||||||
break;
|
break;
|
||||||
default: /* Special operand. */
|
default:
|
||||||
adj_opcode = op_code - lh.opcode_base;
|
{ /* Unknown standard opcode, ignore it. */
|
||||||
address += (adj_opcode / lh.line_range)
|
int i;
|
||||||
* lh.minimum_instruction_length;
|
for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
|
||||||
line += lh.line_base + (adj_opcode % lh.line_range);
|
{
|
||||||
/* Append row to matrix using current values. */
|
(void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
|
||||||
add_line_info (table, address, filename, line, column, 0);
|
line_ptr += bytes_read;
|
||||||
basic_block = 1;
|
}
|
||||||
if (need_low_pc)
|
}
|
||||||
{
|
|
||||||
need_low_pc = 0;
|
|
||||||
low_pc = address;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
|
2001-11-13 Geoffrey Keating <geoffk@redhat.com>
|
||||||
|
|
||||||
|
* readelf.c (display_debug_lines): Deal with unknown standard
|
||||||
|
opcodes. Handle DW_LNS_set_prologue_end, DW_LNS_set_epilogue_begin,
|
||||||
|
DW_LNS_set_isa.
|
||||||
|
|
||||||
2001-11-13 Timothy Wall <twall@alum.mit.edu>
|
2001-11-13 Timothy Wall <twall@alum.mit.edu>
|
||||||
|
|
||||||
* MAINTAINERS: Add self as tic54x maintainer. This target
|
* MAINTAINERS: Add self as tic54x maintainer. This target
|
||||||
includes the IBM C54XDSP clone.
|
includes the IBM C54XDSP clone.
|
||||||
|
|
||||||
2001-11-12 * Steven J. Hill <sjhill@realitydiluted.com>
|
2001-11-12 * Steven J. Hill <sjhill@realitydiluted.com>
|
||||||
|
|
||||||
* bucomm.c (make_tempname): Use mkstemp in place of mktemp.
|
* bucomm.c (make_tempname): Use mkstemp in place of mktemp.
|
||||||
|
|
||||||
2001-11-09 Jeffrey A Law (law@cygnus.com)
|
2001-11-09 Jeffrey A Law (law@cygnus.com)
|
||||||
|
|
|
@ -5888,7 +5888,19 @@ display_debug_lines (section, start, file)
|
||||||
|
|
||||||
op_code = * data ++;
|
op_code = * data ++;
|
||||||
|
|
||||||
switch (op_code)
|
if (op_code >= info.li_opcode_base)
|
||||||
|
{
|
||||||
|
op_code -= info.li_opcode_base;
|
||||||
|
adv = (op_code / info.li_line_range) * info.li_min_insn_length;
|
||||||
|
state_machine_regs.address += adv;
|
||||||
|
printf (_(" Special opcode %d: advance Address by %d to 0x%lx"),
|
||||||
|
op_code, adv, state_machine_regs.address);
|
||||||
|
adv = (op_code % info.li_line_range) + info.li_line_base;
|
||||||
|
state_machine_regs.line += adv;
|
||||||
|
printf (_(" and Line by %d to %d\n"),
|
||||||
|
adv, state_machine_regs.line);
|
||||||
|
}
|
||||||
|
else switch (op_code)
|
||||||
{
|
{
|
||||||
case DW_LNS_extended_op:
|
case DW_LNS_extended_op:
|
||||||
data += process_extended_line_op (data, info.li_default_is_stmt,
|
data += process_extended_line_op (data, info.li_default_is_stmt,
|
||||||
|
@ -5958,20 +5970,36 @@ display_debug_lines (section, start, file)
|
||||||
adv, state_machine_regs.address);
|
adv, state_machine_regs.address);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DW_LNS_set_prologue_end:
|
||||||
|
printf (_(" Set prologue_end to true\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DW_LNS_set_epilogue_begin:
|
||||||
|
printf (_(" Set epilogue_begin to true\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DW_LNS_set_isa:
|
||||||
|
adv = read_leb128 (data, & bytes_read, 0);
|
||||||
|
data += bytes_read;
|
||||||
|
printf (_(" Set ISA to %d\n"), adv);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
op_code -= info.li_opcode_base;
|
printf (_(" Unknown opcode %d with operands: "), op_code);
|
||||||
adv = (op_code / info.li_line_range) * info.li_min_insn_length;
|
{
|
||||||
state_machine_regs.address += adv;
|
int i;
|
||||||
printf (_(" Special opcode %d: advance Address by %d to 0x%lx"),
|
for (i = standard_opcodes[op_code - 1]; i > 0 ; --i)
|
||||||
op_code, adv, state_machine_regs.address);
|
{
|
||||||
adv = (op_code % info.li_line_range) + info.li_line_base;
|
printf ("0x%lx%s", read_leb128 (data, &bytes_read, 0),
|
||||||
state_machine_regs.line += adv;
|
i == 1 ? "" : ", ");
|
||||||
printf (_(" and Line by %d to %d\n"),
|
data += bytes_read;
|
||||||
adv, state_machine_regs.line);
|
}
|
||||||
|
putchar ('\n');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf ("\n");
|
putchar ('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2001-11-11 Geoffrey Keating <geoffk@redhat.com>
|
||||||
|
|
||||||
|
* dwarf2.h (dwarf_line_number_ops): Add DWARF 3 opcodes.
|
||||||
|
|
||||||
2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
|
2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
|
||||||
|
|
||||||
* mmix.h: New file.
|
* mmix.h: New file.
|
||||||
|
|
|
@ -588,7 +588,11 @@ enum dwarf_line_number_ops
|
||||||
DW_LNS_negate_stmt = 6,
|
DW_LNS_negate_stmt = 6,
|
||||||
DW_LNS_set_basic_block = 7,
|
DW_LNS_set_basic_block = 7,
|
||||||
DW_LNS_const_add_pc = 8,
|
DW_LNS_const_add_pc = 8,
|
||||||
DW_LNS_fixed_advance_pc = 9
|
DW_LNS_fixed_advance_pc = 9,
|
||||||
|
/* DWARF 3 */
|
||||||
|
DW_LNS_set_prologue_end = 10,
|
||||||
|
DW_LNS_set_epilogue_begin = 11,
|
||||||
|
DW_LNS_set_isa = 12
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Line number extended opcodes. */
|
/* Line number extended opcodes. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue