From Jerome Guitton <guitton@adacore.com>
* dwarf2read.c (dwarf2_debug_line_missing_end_sequence_complaint): New function. (dwarf_decode_lines): Detect null file numbers. Detect the end of the line program sequence when no end sequence is emitted.
This commit is contained in:
parent
00b22944a0
commit
59205f5a0e
|
@ -1,3 +1,11 @@
|
||||||
|
2008-11-15 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
From Jerome Guitton <guitton@adacore.com>
|
||||||
|
* dwarf2read.c (dwarf2_debug_line_missing_end_sequence_complaint):
|
||||||
|
New function.
|
||||||
|
(dwarf_decode_lines): Detect null file numbers. Detect the end of
|
||||||
|
the line program sequence when no end sequence is emitted.
|
||||||
|
|
||||||
2008-11-15 Joel Brobecker <brobecker@adacore.com>
|
2008-11-15 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* ada-lang.c (ada_evaluate_subexp): Improve handling of integer
|
* ada-lang.c (ada_evaluate_subexp): Improve handling of integer
|
||||||
|
|
|
@ -699,6 +699,13 @@ dwarf2_debug_line_missing_file_complaint (void)
|
||||||
_(".debug_line section has line data without a file"));
|
_(".debug_line section has line data without a file"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dwarf2_debug_line_missing_end_sequence_complaint (void)
|
||||||
|
{
|
||||||
|
complaint (&symfile_complaints,
|
||||||
|
_(".debug_line section has line program sequence without an end"));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dwarf2_complex_location_expr_complaint (void)
|
dwarf2_complex_location_expr_complaint (void)
|
||||||
{
|
{
|
||||||
|
@ -7092,6 +7099,11 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
||||||
{
|
{
|
||||||
op_code = read_1_byte (abfd, line_ptr);
|
op_code = read_1_byte (abfd, line_ptr);
|
||||||
line_ptr += 1;
|
line_ptr += 1;
|
||||||
|
if (line_ptr > line_end)
|
||||||
|
{
|
||||||
|
dwarf2_debug_line_missing_end_sequence_complaint ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (op_code >= lh->opcode_base)
|
if (op_code >= lh->opcode_base)
|
||||||
{
|
{
|
||||||
|
@ -7100,7 +7112,7 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
||||||
address += (adj_opcode / lh->line_range)
|
address += (adj_opcode / lh->line_range)
|
||||||
* lh->minimum_instruction_length;
|
* lh->minimum_instruction_length;
|
||||||
line += lh->line_base + (adj_opcode % lh->line_range);
|
line += lh->line_base + (adj_opcode % lh->line_range);
|
||||||
if (lh->num_file_names < file)
|
if (lh->num_file_names < file || file == 0)
|
||||||
dwarf2_debug_line_missing_file_complaint ();
|
dwarf2_debug_line_missing_file_complaint ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -7132,15 +7144,6 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
||||||
{
|
{
|
||||||
case DW_LNE_end_sequence:
|
case DW_LNE_end_sequence:
|
||||||
end_sequence = 1;
|
end_sequence = 1;
|
||||||
|
|
||||||
if (lh->num_file_names < file)
|
|
||||||
dwarf2_debug_line_missing_file_complaint ();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lh->file_names[file - 1].included_p = 1;
|
|
||||||
if (!decode_for_pst_p)
|
|
||||||
record_line (current_subfile, 0, address);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case DW_LNE_set_address:
|
case DW_LNE_set_address:
|
||||||
address = read_address (abfd, line_ptr, cu, &bytes_read);
|
address = read_address (abfd, line_ptr, cu, &bytes_read);
|
||||||
|
@ -7182,7 +7185,7 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DW_LNS_copy:
|
case DW_LNS_copy:
|
||||||
if (lh->num_file_names < file)
|
if (lh->num_file_names < file || file == 0)
|
||||||
dwarf2_debug_line_missing_file_complaint ();
|
dwarf2_debug_line_missing_file_complaint ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -7220,7 +7223,7 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
||||||
|
|
||||||
file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
|
file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
|
||||||
line_ptr += bytes_read;
|
line_ptr += bytes_read;
|
||||||
if (lh->num_file_names < file)
|
if (lh->num_file_names < file || file == 0)
|
||||||
dwarf2_debug_line_missing_file_complaint ();
|
dwarf2_debug_line_missing_file_complaint ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -7271,6 +7274,14 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (lh->num_file_names < file || file == 0)
|
||||||
|
dwarf2_debug_line_missing_file_complaint ();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lh->file_names[file - 1].included_p = 1;
|
||||||
|
if (!decode_for_pst_p)
|
||||||
|
record_line (current_subfile, 0, address);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (decode_for_pst_p)
|
if (decode_for_pst_p)
|
||||||
|
|
Loading…
Reference in New Issue