aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2read.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-10-11 15:39:35 +0000
committerDaniel Jacobowitz <drow@false.org>2006-10-11 15:39:35 +0000
commit366da635ba4e3110b6fb0a7cd06ff67291f03c71 (patch)
tree43cea3e813e6823b54ed0e9203b2ae2c2cf487c1 /gdb/dwarf2read.c
parent07806542d5a4e7cc5364d82f3e2fc5e23ccdd1cb (diff)
downloadfsf-binutils-gdb-366da635ba4e3110b6fb0a7cd06ff67291f03c71.zip
fsf-binutils-gdb-366da635ba4e3110b6fb0a7cd06ff67291f03c71.tar.gz
fsf-binutils-gdb-366da635ba4e3110b6fb0a7cd06ff67291f03c71.tar.bz2
* dwarf2read.c (dwarf_decode_lines): Call record_line upon
encountering a different subfile.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r--gdb/dwarf2read.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 381585f..d026572 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -6625,6 +6625,7 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
CORE_ADDR baseaddr;
struct objfile *objfile = cu->objfile;
const int decode_for_pst_p = (pst != NULL);
+ struct subfile *last_subfile = NULL;
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
@@ -6674,6 +6675,12 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
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));
@@ -6728,8 +6735,16 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
case DW_LNS_copy:
lh->file_names[file - 1].included_p = 1;
if (!decode_for_pst_p)
- record_line (current_subfile, line,
- check_cu_functions (address, cu));
+ {
+ 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;
case DW_LNS_advance_pc:
@@ -6756,7 +6771,10 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
dir = lh->include_dirs[fe->dir_index - 1];
if (!decode_for_pst_p)
- dwarf2_start_subfile (fe->name, dir, comp_dir);
+ {
+ last_subfile = current_subfile;
+ dwarf2_start_subfile (fe->name, dir, comp_dir);
+ }
}
break;
case DW_LNS_set_column: