* dwarf2read.c (dwarf_decode_lines): Properly deal with

unknown standard opcodes.
This commit is contained in:
Geoffrey Keating 2001-11-12 20:36:55 +00:00
parent 1902c51fa6
commit 9aa1fe7eee
2 changed files with 26 additions and 9 deletions

View file

@ -1,3 +1,8 @@
2001-11-11 Geoffrey Keating <geoffk@redhat.com>
* dwarf2read.c (dwarf_decode_lines): Properly deal with
unknown standard opcodes.
2001-11-11 Andrew Cagney <ac131313@redhat.com>
* README (alpha-dec-osf5.1): Mention -DUSE_LDR_ROUTINES.

View file

@ -3963,7 +3963,18 @@ dwarf_decode_lines (unsigned int offset, char *comp_dir, bfd *abfd,
{
op_code = read_1_byte (abfd, line_ptr);
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 */
record_line (current_subfile, line, address);
basic_block = 1;
}
else switch (op_code)
{
case DW_LNS_extended_op:
line_ptr += 1; /* ignore length */
@ -4061,14 +4072,15 @@ dwarf_decode_lines (unsigned int offset, char *comp_dir, bfd *abfd,
address += read_2_bytes (abfd, line_ptr);
line_ptr += 2;
break;
default: /* 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 */
record_line (current_subfile, line, address);
basic_block = 1;
default:
{ /* Unknown standard opcode, ignore it. */
int i;
for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
{
(void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
line_ptr += bytes_read;
}
}
}
}
}