This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA] dw2-ranges.exp: Build dw2-ranges3.S with -gdwarf-2 (not -gstabs)
On Thu, 17 Feb 2011 07:56:58 +0100, Joel Brobecker wrote:
> > definitely not, see:
>
> Sorry, but I can't seem to connect the dots. Why not just add a comment
> in the testcase just before the compile command explaining why you
> deliberately compile with stabs?
Explained, updated the patch. Verified it FAILs with the fix unpatched.
In fact in the previous .S variant the unpatched version falsely PASSed.
(as the .S variant has generated parasitic DWARF at least on Fedora 15)
Thanks,
Jan
2011-02-17 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.dwarf2/dw2-ranges.S: Rename to ...
* gdb.dwarf2/dw2-ranges.c: ... here, convert it to C.
* gdb.dwarf2/dw2-ranges.exp: Skip the testcase on !$gcc_compiled.
Rename srcfile, srcfile2 and srcfile3, new asmfile, asmfile2 and
asmfile3. Comment the STABS (#3) file compilation. Compile
everything through assembler. Provide KFAIL for symtab/12497.
* gdb.dwarf2/dw2-ranges2.S: Rename to ...
* gdb.dwarf2/dw2-ranges2.c: ... here, convert it to C.
* gdb.dwarf2/dw2-ranges3.S: Rename to ...
* gdb.dwarf2/dw2-ranges3.c: ... here, convert it to C.
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges.S
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- Copyright 2007, 2008, 2009, 2010, 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/>.
- */
-
-/* Despite the sections below will be adjacent the assembler has to produce
- DW_AT_ranges as the linker could place both sections at arbitrary locations.
- */
-
- /* Such directive is required by GAS for builds without `-g'. */
- .file 1 "dw2-ranges.S"
-
- /* Without this directive GAS will not emit DWARF2 unless we provide an
- instruction to assemble. We want to avoid any instructions to
- remain architecture independent. */
- .loc_mark_labels 1
-
- .text
-
- .globl main
- .func main
-main: .int 0
- .endfunc
- .size main, . - main
-
- /* `.fini' section is here to make sure `dw2-ranges.S'
- vs. `dw2-ranges2.S' overlap their DW_AT_ranges with each other. */
- .section .fini, "ax", @progbits
-
- .globl func
- .func func
-func: .int 0
- .endfunc
- .size func, . - func
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges.c
@@ -0,0 +1,34 @@
+/*
+ Copyright 2007, 2008, 2009, 2010, 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/>.
+ */
+
+/* Despite the sections below will be adjacent the assembler has to produce
+ DW_AT_ranges as the linker could place both sections at arbitrary locations.
+ */
+
+/* `.fini' section is here to make sure `dw2-ranges.c'
+ vs. `dw2-ranges2.c' overlap their DW_AT_ranges with each other. */
+
+void __attribute__ ((section (".fini")))
+func (void)
+{
+}
+
+int
+main (void)
+{
+ return 0;
+}
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp
@@ -23,24 +23,47 @@ if {![dwarf2_support]} {
return 0
}
+# The .c files use __attribute__.
+if [get_compiler_info unused] {
+ return -1;
+}
+if !$gcc_compiled {
+ verbose "Skipping DW_AT_ranges test."
+ return 0
+}
+
set testfile "dw2-ranges"
-set srcfile ${testfile}.S
-set srcfile2 ${testfile}2.S
-set srcfile3 ${testfile}3.S
+set srcfile ${testfile}.c
+set srcfile2 ${testfile}2.c
+set srcfile3 ${testfile}3.c
+set asmfile ${objdir}/${subdir}/${testfile}.s
+set asmfile2 ${objdir}/${subdir}/${testfile}2.s
+set asmfile3 ${objdir}/${subdir}/${testfile}3.s
set objfile ${objdir}/${subdir}/${testfile}.o
set objfile2 ${objdir}/${subdir}/${testfile}2.o
set objfile3 ${objdir}/${subdir}/${testfile}3.o
set binfile ${objdir}/${subdir}/${testfile}
-if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {additional_flags=-gdwarf-2}] != "" } {
+# Generate .s without debug info but provide debug info by the assembler.
+# This way we get DW_TAG_compile_unit DIE and only that DIE.
+
+if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${asmfile}" assembly {}] != ""
+ || [gdb_compile "${asmfile}" "${objfile}" object {additional_flags=-gdwarf-2}] != "" } {
return -1
}
-if {[gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${objfile2}" object {additional_flags=-gdwarf-2}] != "" } {
+if {[gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${asmfile2}" assembly {}] != ""
+ || [gdb_compile "${asmfile2}" "${objfile2}" object {additional_flags=-gdwarf-2}] != "" } {
return -1
}
-if {[gdb_compile "${srcdir}/${subdir}/${srcfile3}" "${objfile3}" object {additional_flags=-gstabs}] != "" } {
+
+# STABS compilation is intentional as it tests the STABS lookup where is no
+# partial_symtab->psymtabs_addrmap supported for that CU (Compilation Unit) in
+# a file containing psymtabs_addrmap-supporting DWARF CUs.
+if {[gdb_compile "${srcdir}/${subdir}/${srcfile3}" "${asmfile3}" assembly {}] != ""
+ || [gdb_compile "${asmfile3}" "${objfile3}" object {additional_flags=-gstabs}] != "" } {
return -1
}
+
if {[gdb_compile "${objfile} ${objfile2} ${objfile3}" "${binfile}" executable {}] != "" } {
return -1
}
@@ -62,4 +85,13 @@ gdb_test "info line main" "Line \[0-9\]* of .* starts at address .* and ends at
gdb_test "info line func" "Line \[0-9\]* of .* starts at address .* and ends at .*"
gdb_test "info line main2" "Line \[0-9\]* of .* starts at address .* and ends at .*"
gdb_test "info line func2" "Line \[0-9\]* of .* starts at address .* and ends at .*"
-gdb_test "info line main3" "Line \[0-9\]* of .* starts at address .* and ends at .*"
+
+set test "info line main3"
+gdb_test_multiple $test $test {
+ -re "Line \[0-9\]* of .* starts at address .* and ends at .*\r\n$gdb_prompt $" {
+ pass $test
+ }
+ -re "Line \[0-9\]* of .* is at address .* but contains no code\\.\r\n$gdb_prompt $" {
+ kfail symtab/12497 $test
+ }
+}
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges2.S
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- Copyright 2007, 2009, 2010, 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/>.
- */
-
-/* Despite the sections below will be adjacent the assembler has to produce
- DW_AT_ranges as the linker could place both sections at arbitrary locations.
- */
-
- /* Such directive is required by GAS for builds without `-g'. */
- .file 1 "dw2-ranges2.S"
-
- /* Without this directive GAS will not emit DWARF2 unless we provide an
- instruction to assemble. We want to avoid any instructions to
- remain architecture independent. */
- .loc_mark_labels 1
-
- .text
-
- .globl main2
- .func main2
-main2: .int 0
- .endfunc
- .size main2, . - main2
-
- /* `.fini' section is here to make sure `dw2-ranges.S'
- vs. `dw2-ranges2.S' overlap their DW_AT_ranges with each other. */
- .section .fini, "ax", @progbits
-
- .globl func2
- .func func2
-func2: .int 0
- .endfunc
- .size func2, . - func2
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges2.c
@@ -0,0 +1,33 @@
+/*
+ Copyright 2007, 2009, 2010, 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/>.
+ */
+
+/* Despite the sections below will be adjacent the assembler has to produce
+ DW_AT_ranges as the linker could place both sections at arbitrary locations.
+ */
+
+/* `.fini' section is here to make sure `dw2-ranges.c'
+ vs. `dw2-ranges2.c' overlap their DW_AT_ranges with each other. */
+
+void __attribute__ ((section (".fini")))
+func2 (void)
+{
+}
+
+void
+main2 (void)
+{
+}
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges3.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- Copyright 2007, 2008, 2009, 2010, 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/>.
- */
-
-/* Despite the sections below will be adjacent the assembler has to produce
- DW_AT_ranges as the linker could place both sections at arbitrary locations.
- */
-
- /* Such directive is required by GAS for builds without `-g'. */
- .file 1 "dw2-ranges3.S"
-
- /* Without this directive GAS will not emit DWARF2 unless we provide an
- instruction to assemble. We want to avoid any instructions to
- remain architecture independent. */
- .loc_mark_labels 1
-
- .text
-
- .globl main3
- .func main3
-main3: .int 0
- .endfunc
- .size main3, . - main3
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges3.c
@@ -0,0 +1,21 @@
+/*
+ Copyright 2007, 2008, 2009, 2010, 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/>.
+ */
+
+void
+main3 (void)
+{
+}