aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2011-12-02 01:28:55 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2011-12-02 01:28:55 +0000
commit9750bca92c8e67e36ac1b9724abfcb814efaf48f (patch)
tree6161738a1dcf9feccf4570fc2e413cf6d40ab797
parentf28c316a0bbb40b341e36d9e328a4d60121c395a (diff)
downloadgdb-9750bca92c8e67e36ac1b9724abfcb814efaf48f.zip
gdb-9750bca92c8e67e36ac1b9724abfcb814efaf48f.tar.gz
gdb-9750bca92c8e67e36ac1b9724abfcb814efaf48f.tar.bz2
gdb/
PR breakpoints/13346 * dwarf2read.c (process_psymtab_comp_unit): Set PSYMTABS_ADDRMAP_SUPPORTED. * psympriv.h (struct partial_symtab): Comment textlow and texthigh validity. New field psymtabs_addrmap_supported. * psymtab.c (find_pc_sect_psymtab_closer): New gdb_assert on psymtabs_addrmap_supported. (find_pc_sect_psymtab): Do not fallback to TEXTLOW and TEXTHIGH for !PSYMTABS_ADDRMAP_SUPPORTED. (dump_psymtab, maintenance_info_psymtabs): Print also psymtabs_addrmap_supported. gdb/testsuite/ PR breakpoints/13346 * gdb.dwarf2/dw2-objfile-overlap-inner.S: New file. * gdb.dwarf2/dw2-objfile-overlap-outer.S: New file. * gdb.dwarf2/dw2-objfile-overlap.exp: New file.
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/dwarf2read.c1
-rw-r--r--gdb/psympriv.h9
-rw-r--r--gdb/psymtab.c10
-rw-r--r--gdb/testsuite/ChangeLog7
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S177
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S208
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp47
8 files changed, 471 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a806a76..497f960 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,17 @@
+2011-12-02 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ PR breakpoints/13346
+ * dwarf2read.c (process_psymtab_comp_unit): Set
+ PSYMTABS_ADDRMAP_SUPPORTED.
+ * psympriv.h (struct partial_symtab): Comment textlow and texthigh
+ validity. New field psymtabs_addrmap_supported.
+ * psymtab.c (find_pc_sect_psymtab_closer): New gdb_assert on
+ psymtabs_addrmap_supported.
+ (find_pc_sect_psymtab): Do not fallback to TEXTLOW and TEXTHIGH for
+ !PSYMTABS_ADDRMAP_SUPPORTED.
+ (dump_psymtab, maintenance_info_psymtabs): Print also
+ psymtabs_addrmap_supported.
+
2011-12-01 Doug Evans <dje@google.com>
* python/py-type.c (type_object_methods): Fix "array" doc string.
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 3f66c67..a72e5af 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3462,6 +3462,7 @@ process_psymtab_comp_unit (struct objfile *objfile,
0,
objfile->global_psymbols.next,
objfile->static_psymbols.next);
+ pst->psymtabs_addrmap_supported = 1;
attr = dwarf2_attr (comp_unit_die, DW_AT_comp_dir, &cu);
if (attr != NULL)
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index 95d7676..cee3994 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -92,7 +92,8 @@ struct partial_symtab
struct section_offsets *section_offsets;
/* Range of text addresses covered by this file; texthigh is the
- beginning of the next section. */
+ beginning of the next section. Do not use if PSYMTABS_ADDRMAP_SUPPORTED
+ is set. */
CORE_ADDR textlow;
CORE_ADDR texthigh;
@@ -135,6 +136,12 @@ struct partial_symtab
unsigned char readin;
+ /* True iff objfile->psymtabs_addrmap is properly populated for this
+ partial_symtab. For discontiguous overlapping psymtabs is the only usable
+ info in PSYMTABS_ADDRMAP. */
+
+ unsigned char psymtabs_addrmap_supported;
+
/* Pointer to symtab eventually allocated for this source file, 0 if
!readin or if we haven't looked for the symtab after it was readin. */
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 6c4507d..8178c01 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -221,6 +221,8 @@ find_pc_sect_psymtab_closer (CORE_ADDR pc, struct obj_section *section,
struct partial_symtab *best_pst = pst;
CORE_ADDR best_addr = pst->textlow;
+ gdb_assert (!pst->psymtabs_addrmap_supported);
+
/* An objfile that has its functions reordered might have
many partial symbol tables containing the PC, but
we want the partial symbol table that contains the
@@ -344,7 +346,8 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
debug info type in single OBJFILE. */
ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst)
- if (pc >= pst->textlow && pc < pst->texthigh)
+ if (!pst->psymtabs_addrmap_supported
+ && pc >= pst->textlow && pc < pst->texthigh)
{
struct partial_symtab *best_pst;
@@ -976,6 +979,8 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
fprintf_filtered (outfile, "-");
fputs_filtered (paddress (gdbarch, psymtab->texthigh), outfile);
fprintf_filtered (outfile, "\n");
+ fprintf_filtered (outfile, " Address map supported - %s.\n",
+ psymtab->psymtabs_addrmap_supported ? "yes" : "no");
fprintf_filtered (outfile, " Depends on %d other partial symtabs.\n",
psymtab->number_of_dependencies);
for (i = 0; i < psymtab->number_of_dependencies; i++)
@@ -1781,6 +1786,9 @@ maintenance_info_psymtabs (char *regexp, int from_tty)
fputs_filtered (paddress (gdbarch, psymtab->texthigh),
gdb_stdout);
printf_filtered ("\n");
+ printf_filtered (" psymtabs_addrmap_supported %s\n",
+ (psymtab->psymtabs_addrmap_supported
+ ? "yes" : "no"));
printf_filtered (" globals ");
if (psymtab->n_global_syms)
{
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 341ce06..3a5716c 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2011-12-02 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ PR breakpoints/13346
+ * gdb.dwarf2/dw2-objfile-overlap-inner.S: New file.
+ * gdb.dwarf2/dw2-objfile-overlap-outer.S: New file.
+ * gdb.dwarf2/dw2-objfile-overlap.exp: New file.
+
2011-12-01 Joel Brobecker <brobecker@adacore.com>
* gdb.ada/homonym/pck.ads, gdb.ada/homonym/pck.adb: New files.
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S b/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S
new file mode 100644
index 0000000..8f11b78
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S
@@ -0,0 +1,177 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2011 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+ .text
+
+ .globl _start
+_start:
+
+ .globl inner
+ .type inner, %function
+inner:
+.Lbegin_inner:
+ .int 0
+.Lend_inner:
+ .size inner, . - inner
+
+/* Debug information */
+
+ .section .debug_info
+.Lcu1_begin:
+ /* CU header */
+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
+.Lcu1_start:
+ .2byte 2 /* DWARF Version */
+ .4byte .Labbrev1_begin /* Offset into abbrev section */
+ .byte 4 /* Pointer size */
+
+ /* CU die */
+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */
+ .4byte .Lline1_begin /* DW_AT_stmt_list */
+ .4byte .Ldebug_ranges /* DW_AT_ranges */
+ .ascii "inner.c\0" /* DW_AT_name */
+ .ascii "/tmp\0" /* DW_AT_comp_dir */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 1 /* DW_AT_language (C) */
+
+ /* inner */
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .byte 1 /* DW_AT_decl_file */
+ .byte 1 /* DW_AT_decl_line */
+ .ascii "inner\0" /* DW_AT_name */
+ .4byte .Lbegin_inner /* DW_AT_low_pc */
+ .4byte .Lend_inner /* DW_AT_high_pc */
+
+ .byte 0 /* End of children of CU */
+
+.Lcu1_end:
+
+/* DW_AT_ranges. */
+ .section .debug_ranges
+.Ldebug_ranges:
+ .4byte .Lbegin_inner
+ .4byte .Lend_inner
+ .4byte 0
+ .4byte 0
+
+/* Abbrev table */
+ .section .debug_abbrev
+.Labbrev1_begin:
+ .uleb128 1 /* Abbrev code */
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 1 /* has_children */
+ .uleb128 0x10 /* DW_AT_stmt_list */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .uleb128 0x55 /* DW_AT_ranges */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x1b /* DW_AT_comp_dir */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 2 /* Abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 0 /* has_children */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3a /* DW_AT_decl_file */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3b /* DW_AT_decl_line */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+/* Line table */
+ .section .debug_line
+.Lline1_begin:
+ .4byte .Lline1_end - .Lline1_start /* Initial length */
+.Lline1_start:
+ .2byte 2 /* Version */
+ .4byte .Lline1_lines - .Lline1_hdr /* header_length */
+.Lline1_hdr:
+ .byte 1 /* Minimum insn length */
+ .byte 1 /* default_is_stmt */
+ .byte 1 /* line_base */
+ .byte 1 /* line_range */
+ .byte 0x10 /* opcode_base */
+
+ /* Standard lengths */
+ .byte 0
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+
+ /* Include directories */
+ .ascii "/tmp\0"
+ .byte 0
+
+ /* File names */
+ .ascii "inner.c\0"
+ .uleb128 1
+ .uleb128 0
+ .uleb128 0
+
+ .byte 0
+
+.Lline1_lines:
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ .4byte .Lbegin_inner
+
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 1 /* ... to 2 */
+
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ .4byte .Lend_inner
+
+ .byte 0 /* DW_LNE_end_of_sequence */
+ .uleb128 1
+ .byte 1
+
+.Lline1_end:
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S b/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S
new file mode 100644
index 0000000..3012e45
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S
@@ -0,0 +1,208 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2011 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+ .text
+
+ .globl _start
+_start:
+
+ .globl outer_before
+ .type outer_before, %function
+outer_before:
+.Lbegin_outer_before:
+ .int 0
+.Lend_outer_before:
+ .size outer_before, . - outer_before
+
+ .globl outer_inner
+outer_inner:
+
+ .int 0
+
+ .globl outer_after
+ .type outer_after, %function
+outer_after:
+.Lbegin_outer_after:
+ .int 0
+.Lend_outer_after:
+ .size outer_after, . - outer_after
+
+/* Debug information */
+
+ .section .debug_info
+.Lcu1_begin:
+ /* CU header */
+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
+.Lcu1_start:
+ .2byte 2 /* DWARF Version */
+ .4byte .Labbrev1_begin /* Offset into abbrev section */
+ .byte 4 /* Pointer size */
+
+ /* CU die */
+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */
+ .4byte .Lline1_begin /* DW_AT_stmt_list */
+ .4byte .Ldebug_ranges /* DW_AT_ranges */
+ .ascii "outer.c\0" /* DW_AT_name */
+ .ascii "/tmp\0" /* DW_AT_comp_dir */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 1 /* DW_AT_language (C) */
+
+ /* outer_before */
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .byte 1 /* DW_AT_decl_file */
+ .byte 1 /* DW_AT_decl_line */
+ .ascii "outer_before\0" /* DW_AT_name */
+ .4byte .Lbegin_outer_before /* DW_AT_low_pc */
+ .4byte .Lend_outer_before /* DW_AT_high_pc */
+
+ /* outer_after */
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .byte 1 /* DW_AT_decl_file */
+ .byte 2 /* DW_AT_decl_line */
+ .ascii "outer_after\0" /* DW_AT_name */
+ .4byte .Lbegin_outer_after /* DW_AT_low_pc */
+ .4byte .Lend_outer_after /* DW_AT_high_pc */
+
+ .byte 0 /* End of children of CU */
+
+.Lcu1_end:
+
+/* DW_AT_ranges. */
+ .section .debug_ranges
+.Ldebug_ranges:
+ .4byte .Lbegin_outer_before
+ .4byte .Lend_outer_before
+ .4byte .Lbegin_outer_after
+ .4byte .Lend_outer_after
+ .4byte 0
+ .4byte 0
+
+/* Abbrev table */
+ .section .debug_abbrev
+.Labbrev1_begin:
+ .uleb128 1 /* Abbrev code */
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 1 /* has_children */
+ .uleb128 0x10 /* DW_AT_stmt_list */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .uleb128 0x55 /* DW_AT_ranges */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x1b /* DW_AT_comp_dir */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 2 /* Abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 0 /* has_children */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3a /* DW_AT_decl_file */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3b /* DW_AT_decl_line */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+/* Line table */
+ .section .debug_line
+.Lline1_begin:
+ .4byte .Lline1_end - .Lline1_start /* Initial length */
+.Lline1_start:
+ .2byte 2 /* Version */
+ .4byte .Lline1_lines - .Lline1_hdr /* header_length */
+.Lline1_hdr:
+ .byte 1 /* Minimum insn length */
+ .byte 1 /* default_is_stmt */
+ .byte 1 /* line_base */
+ .byte 1 /* line_range */
+ .byte 0x10 /* opcode_base */
+
+ /* Standard lengths */
+ .byte 0
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+
+ /* Include directories */
+ .ascii "/tmp\0"
+ .byte 0
+
+ /* File names */
+ .ascii "outer.c\0"
+ .uleb128 1
+ .uleb128 0
+ .uleb128 0
+
+ .byte 0
+
+.Lline1_lines:
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ .4byte .Lbegin_outer_before
+
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ .4byte .Lbegin_outer_after
+
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 2 /* ... to 3 */
+
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ .4byte .Lend_outer_after
+
+ .byte 0 /* DW_LNE_end_of_sequence */
+ .uleb128 1
+ .byte 1
+
+.Lline1_end:
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp b/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp
new file mode 100644
index 0000000..4ae4815
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp
@@ -0,0 +1,47 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+ return 0
+}
+
+set testfile "dw2-objfile-overlap"
+set srcfile_outer ${testfile}-outer.S
+set srcfile_inner ${testfile}-inner.S
+set executable_outer ${testfile}-outer.x
+set binfile_outer ${objdir}/${subdir}/${executable_outer}
+set binfile_inner ${objdir}/${subdir}/${testfile}-inner.x
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile_outer}" "${binfile_outer}" \
+ object {}] != ""
+ || [gdb_compile "${srcdir}/${subdir}/${srcfile_inner}" "${binfile_inner}" \
+ object {}] != "" } {
+ return -1
+}
+
+clean_restart $executable_outer
+
+gdb_test "add-symbol-file $binfile_inner outer_inner" \
+ {Reading symbols from .*\.\.\.done\.} "add-symbol-file" \
+ "\r\n\t\\.text_addr = 0x\[0-9a-f\]+\r\n\\(y or n\\) \$" "y"
+
+# Expand symtab for ${binfile_outer}.
+gdb_breakpoint "*outer_before"
+
+# FAIL was:
+# No line number information available for address 0x4 <outer_inner>
+gdb_test "info line inner" {Line 2 of "inner\.c" starts at address .*}