- Fix crash on missing filenames debug info (BZ 242155).
This commit is contained in:
parent
1485ed2965
commit
da8ce49b55
@ -738,3 +738,147 @@ instructions that take RMC operands.
|
||||
--
|
||||
Alan Modra
|
||||
IBM OzLabs - Linux Technology Centre
|
||||
|
||||
|
||||
|
||||
2007-05-14 Paul Brook <paul@codesourcery.com>
|
||||
Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* dwarf2read.c (dwarf2_debug_line_missing_file_complaint): New
|
||||
function.
|
||||
(dwarf_decode_lines): Check for line info without a file.
|
||||
|
||||
--- src/gdb/dwarf2read.c 2007/04/18 13:25:04 1.218
|
||||
+++ src/gdb/dwarf2read.c 2007/05/14 17:15:20 1.219
|
||||
@@ -688,6 +688,13 @@
|
||||
}
|
||||
|
||||
static void
|
||||
+dwarf2_debug_line_missing_file_complaint (void)
|
||||
+{
|
||||
+ complaint (&symfile_complaints,
|
||||
+ _(".debug_line section has line data without a file"));
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
dwarf2_complex_location_expr_complaint (void)
|
||||
{
|
||||
complaint (&symfile_complaints, _("location expression too complex"));
|
||||
@@ -6708,19 +6715,24 @@
|
||||
address += (adj_opcode / lh->line_range)
|
||||
* lh->minimum_instruction_length;
|
||||
line += lh->line_base + (adj_opcode % lh->line_range);
|
||||
- lh->file_names[file - 1].included_p = 1;
|
||||
- if (!decode_for_pst_p)
|
||||
- {
|
||||
- if (last_subfile != current_subfile)
|
||||
- {
|
||||
- if (last_subfile)
|
||||
- record_line (last_subfile, 0, address);
|
||||
- last_subfile = current_subfile;
|
||||
+ 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)
|
||||
+ {
|
||||
+ if (last_subfile != current_subfile)
|
||||
+ {
|
||||
+ if (last_subfile)
|
||||
+ record_line (last_subfile, 0, address);
|
||||
+ last_subfile = current_subfile;
|
||||
+ }
|
||||
+ /* Append row to matrix using current values. */
|
||||
+ record_line (current_subfile, line,
|
||||
+ check_cu_functions (address, cu));
|
||||
}
|
||||
- /* Append row to matrix using current values. */
|
||||
- record_line (current_subfile, line,
|
||||
- check_cu_functions (address, cu));
|
||||
- }
|
||||
+ }
|
||||
basic_block = 1;
|
||||
}
|
||||
else switch (op_code)
|
||||
@@ -6734,9 +6746,15 @@
|
||||
{
|
||||
case DW_LNE_end_sequence:
|
||||
end_sequence = 1;
|
||||
- lh->file_names[file - 1].included_p = 1;
|
||||
- if (!decode_for_pst_p)
|
||||
- record_line (current_subfile, 0, address);
|
||||
+
|
||||
+ 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;
|
||||
case DW_LNE_set_address:
|
||||
address = read_address (abfd, line_ptr, cu, &bytes_read);
|
||||
@@ -6769,17 +6787,22 @@
|
||||
}
|
||||
break;
|
||||
case DW_LNS_copy:
|
||||
- lh->file_names[file - 1].included_p = 1;
|
||||
- if (!decode_for_pst_p)
|
||||
+ if (lh->num_file_names < file)
|
||||
+ dwarf2_debug_line_missing_file_complaint ();
|
||||
+ else
|
||||
{
|
||||
- if (last_subfile != current_subfile)
|
||||
- {
|
||||
- if (last_subfile)
|
||||
- record_line (last_subfile, 0, address);
|
||||
- last_subfile = current_subfile;
|
||||
- }
|
||||
- record_line (current_subfile, line,
|
||||
- check_cu_functions (address, cu));
|
||||
+ lh->file_names[file - 1].included_p = 1;
|
||||
+ if (!decode_for_pst_p)
|
||||
+ {
|
||||
+ if (last_subfile != current_subfile)
|
||||
+ {
|
||||
+ if (last_subfile)
|
||||
+ record_line (last_subfile, 0, address);
|
||||
+ last_subfile = current_subfile;
|
||||
+ }
|
||||
+ record_line (current_subfile, line,
|
||||
+ check_cu_functions (address, cu));
|
||||
+ }
|
||||
}
|
||||
basic_block = 0;
|
||||
break;
|
||||
@@ -6806,15 +6806,19 @@ dwarf_decode_lines (struct line_header *
|
||||
|
||||
file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
|
||||
line_ptr += bytes_read;
|
||||
- fe = &lh->file_names[file - 1];
|
||||
- if (fe->dir_index)
|
||||
- dir = lh->include_dirs[fe->dir_index - 1];
|
||||
-
|
||||
- if (!decode_for_pst_p)
|
||||
- {
|
||||
- last_subfile = current_subfile;
|
||||
- dwarf2_start_subfile (fe->name, dir, comp_dir, file);
|
||||
- }
|
||||
+ if (lh->num_file_names < file)
|
||||
+ dwarf2_debug_line_missing_file_complaint ();
|
||||
+ else
|
||||
+ {
|
||||
+ fe = &lh->file_names[file - 1];
|
||||
+ if (fe->dir_index)
|
||||
+ dir = lh->include_dirs[fe->dir_index - 1];
|
||||
+ if (!decode_for_pst_p)
|
||||
+ {
|
||||
+ last_subfile = current_subfile;
|
||||
+ dwarf2_start_subfile (fe->name, dir, comp_dir, file);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
break;
|
||||
case DW_LNS_set_column:
|
||||
|
5
gdb.spec
5
gdb.spec
@ -11,7 +11,7 @@ Name: gdb
|
||||
Version: 6.6
|
||||
|
||||
# The release always contains a leading reserved number, start it at 1.
|
||||
Release: 14%{?dist}
|
||||
Release: 15%{?dist}
|
||||
|
||||
License: GPL
|
||||
Group: Development/Debuggers
|
||||
@ -637,6 +637,9 @@ fi
|
||||
# don't include the files in include, they are part of binutils
|
||||
|
||||
%changelog
|
||||
* Tue Jun 5 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-15
|
||||
- Fix crash on missing filenames debug info (BZ 242155).
|
||||
|
||||
* Sat Apr 28 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-14
|
||||
- Fixup for the PPC Power6/DFP instructions disassembly (BZ 230000).
|
||||
- New testcase for the GCORE buffer overflow (for BZ 238285, formerly 235753).
|
||||
|
Loading…
Reference in New Issue
Block a user