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: [PATCH] testsuite: dw2-ranges: declare function descriptors for ppc64 compatibility


On Thu, 17 Feb 2011 06:45:45 +0100, Joel Brobecker wrote:
> > 2011-02-16  Edjunior Machado  <emachado@br.ibm.com>
> > 
> > gdb/
> > 	* gdb.dwarf2/dw2-ranges.S: Add .opd section with function
> > 	descriptors for ppc64 compatibility.
> > 	* gdb.dwarf2/dw2-ranges2.S: Likewise.
> > 	* gdb.dwarf2/dw2-ranges3.S: Likewise.
> 
> No objection from my end, but just some thoughts on this testcase,
> aimed mostly at Jan:
> 
>   - Do we really need to start the testcase at all.  The comment
>     explains why we do this, but does this testcase in particular
>     bring something extra?

Yes, we need to start it so that in PIE testsuite mode is seen the fix of
objfile_relocate by a7ce094d68b83637001f03c8ee0455fa76db16d4.  It is also
commented appropriately, not sure what to do more with the testcase.

In general I find this testsuite very useful repeatedly showing regressions
for various expand-symtabs, gdb_index-s etc.


>   - Can we maybe tweak the testcase so that the main function is
>     written in C, rather than ASM.  Then have the C function call
>     the old main, and the testcase run until the beginning on main.
>     Would things work with powerpc64 as well, if we did that?

Yes, we can, but re-verifying all the 3 FAILs still FAIL was a bit of patch
work.
	5d19e3cb9409da992721aeb305bd89b43cf72ade
	b5830bae4e60b65f37560ce1ede15e8036c20f2d
	a7ce094d68b83637001f03c8ee0455fa76db16d4

I agree it is now much more clean, also found that symtab/12497 as there was
a STABS+DWARF2 combination before which did not test it well.

This patch is against 8eccfd2103e78a2ab03f44625740687d3fcb4407, there are some
floating changes around these testfiles now.

It works now on both ppc64 and ppc64->ppc.



Thanks,
Jan


gdb/
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.  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,22 +23,40 @@ 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}] != "" } {
+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 {}] != "" } {
@@ -62,4 +80,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]