* [patch] info-fun-opt.exp
@ 2012-06-05 6:35 Doug Evans
2012-06-05 7:52 ` Yao Qi
2012-06-06 15:56 ` Jan Kratochvil
0 siblings, 2 replies; 4+ messages in thread
From: Doug Evans @ 2012-06-05 6:35 UTC (permalink / raw)
To: gdb-patches
Hi.
Regardless of how we fix the issue outlined here:
http://sourceware.org/ml/gdb-patches/2012-06/msg00109.html
here's a testcase that triggers the issue.
I will check it in once we decide on a fix.
When run with current cvs gdb and a recent gcc it hits the
assert failure in dw2_find_pc_sect_symtab when used with cc-with-index.sh.
(gdb) info fun foo
../../gdb.git/gdb/dwarf2read.c:3049: internal-error: dw2_find_pc_sect_symtab: Assertion `result != NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) FAIL: gdb.opt/info-fun-opt.exp: info fun foo (GDB internal error)
2012-06-04 Doug Evans <dje@google.com>
* gdb.opt/info-fun-opt.cc: New file.
* gdb.opt/info-fun-opt.exp: New file.
Index: gdb.opt/info-fun-opt.cc
===================================================================
RCS file: gdb.opt/info-fun-opt.cc
diff -N gdb.opt/info-fun-opt.cc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.opt/info-fun-opt.cc 5 Jun 2012 06:27:47 -0000
@@ -0,0 +1,40 @@
+/* Copyright (C) 2012 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/>. */
+
+class B1
+{
+ public:
+ virtual int foo () { return 1; }
+};
+
+class B2
+{
+ public:
+ virtual int foo () { return 2; }
+};
+
+class M : public B1, B2
+{
+ public:
+ virtual int foo () { return dynamic_cast<B1*>(this)->foo (); }
+};
+
+int
+main ()
+{
+ M *m = new M;
+
+ return m->foo ();
+}
Index: gdb.opt/info-fun-opt.exp
===================================================================
RCS file: gdb.opt/info-fun-opt.exp
diff -N gdb.opt/info-fun-opt.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.opt/info-fun-opt.exp 5 Jun 2012 06:27:47 -0000
@@ -0,0 +1,29 @@
+# Copyright 2012 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/>.
+#
+# This file is part of the gdb testsuite.
+
+# Test "info fun" on optimized code.
+# This exercises the use of blockvector.map when tested with cc-with-index.sh.
+
+set basename "info-fun-opt"
+set testfile $basename
+
+if { [prepare_for_testing $testfile.exp $testfile $testfile.cc \
+ {debug c++ optimize=-O2}] } {
+ return -1
+}
+
+gdb_test "info fun foo" "File.*info-fun-opt.*foo.*foo.*foo.*"
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch] info-fun-opt.exp
2012-06-05 6:35 [patch] info-fun-opt.exp Doug Evans
@ 2012-06-05 7:52 ` Yao Qi
2012-06-06 15:56 ` Jan Kratochvil
1 sibling, 0 replies; 4+ messages in thread
From: Yao Qi @ 2012-06-05 7:52 UTC (permalink / raw)
To: Doug Evans; +Cc: gdb-patches
On 06/05/2012 02:35 PM, Doug Evans wrote:
> +# Test "info fun" on optimized code.
> +# This exercises the use of blockvector.map when tested with cc-with-index.sh.
> +
Hi, Doug,
It is a c++ test, so you may need this check
if {[skip_cplus_tests]} {
continue
}
> +set basename "info-fun-opt"
> +set testfile $basename
--
Yao (é½å°§)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch] info-fun-opt.exp
2012-06-05 6:35 [patch] info-fun-opt.exp Doug Evans
2012-06-05 7:52 ` Yao Qi
@ 2012-06-06 15:56 ` Jan Kratochvil
2012-07-13 20:27 ` [commit] " Jan Kratochvil
1 sibling, 1 reply; 4+ messages in thread
From: Jan Kratochvil @ 2012-06-06 15:56 UTC (permalink / raw)
To: Doug Evans; +Cc: gdb-patches
On Tue, 05 Jun 2012 08:35:06 +0200, Doug Evans wrote:
> (gdb) info fun foo
> ../../gdb.git/gdb/dwarf2read.c:3049: internal-error: dw2_find_pc_sect_symtab: Assertion `result != NULL' failed.
> A problem internal to GDB has been detected,
> further debugging may prove unreliable.
> Quit this debugging session? (y or n) FAIL: gdb.opt/info-fun-opt.exp: info fun foo (GDB internal error)
>
>
> 2012-06-04 Doug Evans <dje@google.com>
>
> * gdb.opt/info-fun-opt.cc: New file.
> * gdb.opt/info-fun-opt.exp: New file.
I would prefer the patch below as a dependency on specific compiler output has
proven to be fragile. In this case the important was ELF symbol:
0000000000400750 W non-virtual thunk to M::foo()
Thanks,
Jan
gdb/testsuite/
2012-06-06 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.dwarf2/dw2-minsym-in-cu.S: New file.
* gdb.dwarf2/dw2-minsym-in-cu.exp: New file.
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S b/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S
new file mode 100644
index 0000000..2f8068e
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S
@@ -0,0 +1,108 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2004, 2007-2012 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
+.Lbegin_text1:
+
+ .globl main
+ .type main, %function
+main:
+.Lbegin_main:
+ .int 0
+.Lend_main:
+ .size main, .-main
+
+ .globl func2
+ .type func2, %function
+func2:
+ .int 0
+ .size func2, .-func2
+
+.Lend_text1:
+
+/* 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 .Lend_text1 /* DW_AT_high_pc */
+ .4byte .Lbegin_text1 /* DW_AT_low_pc */
+ .ascii "file1.txt\0" /* DW_AT_name */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 1 /* DW_AT_language (C) */
+
+ /* main */
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .ascii "main\0" /* DW_AT_name */
+ .4byte .Ldebug_ranges /* DW_AT_ranges */
+
+ .byte 0 /* End of children of CU */
+.Lcu1_end:
+
+/* DW_AT_ranges. */
+ .section .debug_ranges
+.Ldebug_ranges:
+ .4byte .Lbegin_main
+ .4byte .Lend_main - 1
+ /* Make it slightly more interesting to set pending_addrmap_interesting. */
+ .4byte .Lend_main - 1
+ .4byte .Lend_main
+ .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 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x3 /* DW_AT_name */
+ .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 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x55 /* DW_AT_ranges */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp b/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp
new file mode 100644
index 0000000..60e80c9
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp
@@ -0,0 +1,34 @@
+# Copyright 2004-2005, 2007-2012 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
+}
+
+# This testfile has reproducibility only with cc-with-index.sh.
+
+set testfile "dw2-minsym-in-cu"
+set srcfile ${testfile}.S
+set executable ${testfile}
+
+if [prepare_for_testing ${testfile}.exp ${executable} ${srcfile}] {
+ return -1
+}
+
+# Ask for address which is still located in this CU but not described by
+# any DIE.
+gdb_test "info fun func2"
^ permalink raw reply [flat|nested] 4+ messages in thread
* [commit] [patch] info-fun-opt.exp
2012-06-06 15:56 ` Jan Kratochvil
@ 2012-07-13 20:27 ` Jan Kratochvil
0 siblings, 0 replies; 4+ messages in thread
From: Jan Kratochvil @ 2012-07-13 20:27 UTC (permalink / raw)
To: Doug Evans; +Cc: gdb-patches
Hi Doug,
checked in.
Thanks,
Jan
http://sourceware.org/ml/gdb-cvs/2012-07/msg00096.html
--- src/gdb/ChangeLog 2012/07/13 20:15:50 1.14462
+++ src/gdb/ChangeLog 2012/07/13 20:26:09 1.14463
@@ -1,4 +1,16 @@
2012-07-13 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Doug Evans <dje@google.com>
+
+ * buildsym.c (end_symtab_1): Split it to ...
+ (end_symtab_get_static_block): ... this ...
+ (end_symtab_from_static_block): ... and this function.
+ (end_symtab, end_expandable_symtab): Call them.
+ * buildsym.h (end_symtab_get_static_block)
+ (end_symtab_from_static_block): New declarations.
+ * dwarf2read.c (process_full_comp_unit): New variable static_block.
+ Set its valid CU ranges.
+
+2012-07-13 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2loc.c (disassemble_dwarf_expression): Handle
DW_OP_GNU_parameter_ref.
--- src/gdb/testsuite/ChangeLog 2012/07/13 08:14:36 1.3291
+++ src/gdb/testsuite/ChangeLog 2012/07/13 20:26:10 1.3292
@@ -1,4 +1,10 @@
2012-07-13 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Doug Evans <dje@google.com>
+
+ * gdb.dwarf2/dw2-minsym-in-cu.S: New file.
+ * gdb.dwarf2/dw2-minsym-in-cu.exp: New file.
+
+2012-07-13 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix gdbserver run regression.
* gdb.trace/disconnected-tracing.exp (executabel): Fix typo.
--- src/gdb/buildsym.c 2012/07/10 20:20:15 1.100
+++ src/gdb/buildsym.c 2012/07/13 20:26:10 1.101
@@ -957,42 +957,28 @@
}
}
-/* Finish the symbol definitions for one main source file, close off
- all the lexical contexts for that file (creating struct block's for
- them), then make the struct symtab for that file and put it in the
- list of all such.
-
- END_ADDR is the address of the end of the file's text. SECTION is
- the section number (in objfile->section_offsets) of the blockvector
- and linetable.
-
- If EXPANDABLE is non-zero the dictionaries for the global and static
- blocks are made expandable.
-
- Note that it is possible for end_symtab() to return NULL. In
- particular, for the DWARF case at least, it will return NULL when
- it finds a compilation unit that has exactly one DIE, a
- TAG_compile_unit DIE. This can happen when we link in an object
- file that was compiled from an empty source file. Returning NULL
- is probably not the correct thing to do, because then gdb will
- never know about this empty file (FIXME). */
-
-static struct symtab *
-end_symtab_1 (CORE_ADDR end_addr, struct objfile *objfile, int section,
- int expandable)
+/* Implementation of the first part of end_symtab. It allows modifying
+ STATIC_BLOCK before it gets finalized by end_symtab_from_static_block.
+ If the returned value is NULL there is no blockvector created for
+ this symtab (you still must call end_symtab_from_static_block).
+
+ END_ADDR is the same as for end_symtab: the address of the end of the
+ file's text.
+
+ If EXPANDABLE is non-zero the STATIC_BLOCK dictionary is made
+ expandable. */
+
+struct block *
+end_symtab_get_static_block (CORE_ADDR end_addr, struct objfile *objfile,
+ int expandable)
{
- struct symtab *symtab = NULL;
- struct blockvector *blockvector;
- struct subfile *subfile;
- struct context_stack *cstk;
- struct subfile *nextsub;
-
/* Finish the lexical context of the last function in the file; pop
the context stack. */
if (context_stack_depth > 0)
{
- cstk = pop_context ();
+ struct context_stack *cstk = pop_context ();
+
/* Make a block for the local symbols within. */
finish_block (cstk->name, &local_symbols, cstk->old_blocks,
cstk->start_addr, end_addr, objfile);
@@ -1058,18 +1044,51 @@
&& have_line_numbers == 0
&& pending_macros == NULL)
{
- /* Ignore symtabs that have no functions with real debugging
- info. */
+ /* Ignore symtabs that have no functions with real debugging info. */
+ return NULL;
+ }
+ else
+ {
+ /* Define the STATIC_BLOCK. */
+ return finish_block_internal (NULL, &file_symbols, NULL,
+ last_source_start_addr, end_addr, objfile,
+ 0, expandable);
+ }
+}
+
+/* Implementation of the second part of end_symtab. Pass STATIC_BLOCK
+ as value returned by end_symtab_get_static_block.
+
+ SECTION is the same as for end_symtab: the section number
+ (in objfile->section_offsets) of the blockvector and linetable.
+
+ If EXPANDABLE is non-zero the GLOBAL_BLOCK dictionary is made
+ expandable. */
+
+struct symtab *
+end_symtab_from_static_block (struct block *static_block,
+ struct objfile *objfile, int section,
+ int expandable)
+{
+ struct symtab *symtab = NULL;
+ struct blockvector *blockvector;
+ struct subfile *subfile;
+ struct subfile *nextsub;
+
+ if (static_block == NULL)
+ {
+ /* Ignore symtabs that have no functions with real debugging info. */
blockvector = NULL;
}
else
{
- /* Define the STATIC_BLOCK & GLOBAL_BLOCK, and build the
+ CORE_ADDR end_addr = BLOCK_END (static_block);
+
+ /* Define after STATIC_BLOCK also GLOBAL_BLOCK, and build the
blockvector. */
- finish_block_internal (0, &file_symbols, 0, last_source_start_addr,
- end_addr, objfile, 0, expandable);
- finish_block_internal (0, &global_symbols, 0, last_source_start_addr,
- end_addr, objfile, 1, expandable);
+ finish_block_internal (NULL, &global_symbols, NULL,
+ last_source_start_addr, end_addr, objfile,
+ 1, expandable);
blockvector = make_blockvector (objfile);
}
@@ -1251,21 +1270,46 @@
return symtab;
}
-/* See end_symtab_1 for details. */
+/* Finish the symbol definitions for one main source file, close off
+ all the lexical contexts for that file (creating struct block's for
+ them), then make the struct symtab for that file and put it in the
+ list of all such.
+
+ END_ADDR is the address of the end of the file's text. SECTION is
+ the section number (in objfile->section_offsets) of the blockvector
+ and linetable.
+
+ Note that it is possible for end_symtab() to return NULL. In
+ particular, for the DWARF case at least, it will return NULL when
+ it finds a compilation unit that has exactly one DIE, a
+ TAG_compile_unit DIE. This can happen when we link in an object
+ file that was compiled from an empty source file. Returning NULL
+ is probably not the correct thing to do, because then gdb will
+ never know about this empty file (FIXME).
+
+ If you need to modify STATIC_BLOCK before it is finalized you should
+ call end_symtab_get_static_block and end_symtab_from_static_block
+ yourself. */
struct symtab *
end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
{
- return end_symtab_1 (end_addr, objfile, section, 0);
+ struct block *static_block;
+
+ static_block = end_symtab_get_static_block (end_addr, objfile, 0);
+ return end_symtab_from_static_block (static_block, objfile, section, 0);
}
-/* See end_symtab_1 for details. */
+/* Same as end_symtab except create a symtab that can be later added to. */
struct symtab *
end_expandable_symtab (CORE_ADDR end_addr, struct objfile *objfile,
int section)
{
- return end_symtab_1 (end_addr, objfile, section, 1);
+ struct block *static_block;
+
+ static_block = end_symtab_get_static_block (end_addr, objfile, 1);
+ return end_symtab_from_static_block (static_block, objfile, section, 1);
}
/* Subroutine of augment_type_symtab to simplify it.
--- src/gdb/buildsym.h 2012/07/10 20:20:15 1.33
+++ src/gdb/buildsym.h 2012/07/13 20:26:10 1.34
@@ -258,6 +258,15 @@
extern char *pop_subfile (void);
+extern struct block *end_symtab_get_static_block (CORE_ADDR end_addr,
+ struct objfile *objfile,
+ int expandable);
+
+extern struct symtab *end_symtab_from_static_block (struct block *static_block,
+ struct objfile *objfile,
+ int section,
+ int expandable);
+
extern struct symtab *end_symtab (CORE_ADDR end_addr,
struct objfile *objfile, int section);
--- src/gdb/dwarf2read.c 2012/07/13 20:15:03 1.685
+++ src/gdb/dwarf2read.c 2012/07/13 20:26:10 1.686
@@ -6593,6 +6593,7 @@
struct symtab *symtab;
struct cleanup *back_to, *delayed_list_cleanup;
CORE_ADDR baseaddr;
+ struct block *static_block;
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
@@ -6623,7 +6624,17 @@
it, by scanning the DIE's below the compilation unit. */
get_scope_pc_bounds (cu->dies, &lowpc, &highpc, cu);
- symtab = end_symtab (highpc + baseaddr, objfile, SECT_OFF_TEXT (objfile));
+ static_block = end_symtab_get_static_block (highpc + baseaddr, objfile, 0);
+
+ /* If the comp unit has DW_AT_ranges, it may have discontiguous ranges.
+ Also, DW_AT_ranges may record ranges not belonging to any child DIEs
+ (such as virtual method tables). Record the ranges in STATIC_BLOCK's
+ addrmap to help ensure it has an accurate map of pc values belonging to
+ this comp unit. */
+ dwarf2_record_block_ranges (cu->dies, static_block, baseaddr, cu);
+
+ symtab = end_symtab_from_static_block (static_block, objfile,
+ SECT_OFF_TEXT (objfile), 0);
if (symtab != NULL)
{
--- src/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S
+++ src/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S 2012-07-13 20:26:31.658295000 +0000
@@ -0,0 +1,108 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2004, 2007-2012 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
+.Lbegin_text1:
+
+ .globl main
+ .type main, %function
+main:
+.Lbegin_main:
+ .int 0
+.Lend_main:
+ .size main, .-main
+
+ .globl func2
+ .type func2, %function
+func2:
+ .int 0
+ .size func2, .-func2
+
+.Lend_text1:
+
+/* 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 .Lend_text1 /* DW_AT_high_pc */
+ .4byte .Lbegin_text1 /* DW_AT_low_pc */
+ .ascii "file1.txt\0" /* DW_AT_name */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 1 /* DW_AT_language (C) */
+
+ /* main */
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .ascii "main\0" /* DW_AT_name */
+ .4byte .Ldebug_ranges /* DW_AT_ranges */
+
+ .byte 0 /* End of children of CU */
+.Lcu1_end:
+
+/* DW_AT_ranges. */
+ .section .debug_ranges
+.Ldebug_ranges:
+ .4byte .Lbegin_main
+ .4byte .Lend_main - 1
+ /* Make it slightly more interesting to set pending_addrmap_interesting. */
+ .4byte .Lend_main - 1
+ .4byte .Lend_main
+ .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 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x3 /* DW_AT_name */
+ .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 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x55 /* DW_AT_ranges */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
--- src/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp
+++ src/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp 2012-07-13 20:26:32.216111000 +0000
@@ -0,0 +1,34 @@
+# Copyright 2004-2005, 2007-2012 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
+}
+
+# This testfile has reproducibility only with cc-with-index.sh.
+
+set testfile "dw2-minsym-in-cu"
+set srcfile ${testfile}.S
+set executable ${testfile}
+
+if [prepare_for_testing ${testfile}.exp ${executable} ${srcfile}] {
+ return -1
+}
+
+# Ask for address which is still located in this CU but not described by
+# any DIE.
+gdb_test "info fun func2" {All functions matching regular expression "func2":}
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-07-13 20:27 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-05 6:35 [patch] info-fun-opt.exp Doug Evans
2012-06-05 7:52 ` Yao Qi
2012-06-06 15:56 ` Jan Kratochvil
2012-07-13 20:27 ` [commit] " Jan Kratochvil
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox