If pointer_size has not been found then assume that it is 4 in order to

prevent a seg fault when process_extend_line_op attempts to read the line
data.
This commit is contained in:
Nick Clifton 2005-05-12 09:05:36 +00:00
parent b41cde4409
commit 52d1fb02ab
2 changed files with 18 additions and 4 deletions

View file

@ -1,3 +1,9 @@
2005-05-12 Nick Clifton <nickc@redhat.com>
* readelf.c (display_debug_lines): If pointer_size has not been
found then assume that it is 4 in order to prevent a seg fault
when process_extend_line_op attempts to read the line data.
2005-05-11 Alan Modra <amodra@bigpond.net.au>
* readelf.c (get_ppc_dynamic_type): New function for DT_PPC_GLINK.

View file

@ -7166,8 +7166,8 @@ reset_state_machine (int is_stmt)
state_machine_regs.last_file_entry = 0;
}
/* Handled an extend line op. Returns true if this is the end
of sequence. */
/* Handled an extend line op.
Returns the number of bytes read. */
static int
process_extended_line_op (unsigned char *data, int is_stmt, int pointer_size)
@ -9097,7 +9097,9 @@ display_debug_lines (Elf_Internal_Shdr *section,
printf (_(" Line Base: %d\n"), info.li_line_base);
printf (_(" Line Range: %d\n"), info.li_line_range);
printf (_(" Opcode Base: %d\n"), info.li_opcode_base);
printf (_(" (Pointer size: %u)\n"), pointer_size);
printf (_(" (Pointer size: %u)%s\n"),
pointer_size,
warned_about_missing_comp_units ? " [assumed]" : "" );
end_of_sequence = data + info.li_length + initial_length_size;
@ -9188,6 +9190,12 @@ display_debug_lines (Elf_Internal_Shdr *section,
else switch (op_code)
{
case DW_LNS_extended_op:
if (pointer_size == 0)
{
warn (_("Extend line ops need a valid pointer size, guessing at 4"));
pointer_size = 4;
}
data += process_extended_line_op (data, info.li_default_is_stmt,
pointer_size);
break;