This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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)
+{
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]