* [PATCH] testsuite: dw2-ranges: declare function descriptors for ppc64 compatibility
@ 2011-02-16 19:31 Edjunior Barbosa Machado
2011-02-17 5:59 ` Joel Brobecker
0 siblings, 1 reply; 4+ messages in thread
From: Edjunior Barbosa Machado @ 2011-02-16 19:31 UTC (permalink / raw)
To: gdb-patches
Hi,
when running the testcase gdb.dwarf2/dw2-ranges.exp on ppc64, noticed that the
inferior fails in the first test (runto_main) with a segfault but then the
following 5 tests pass with success:
(gdb) break main
Breakpoint 1 at 0x10000584: file dw2-ranges.S, line 1.
(gdb) run
Starting program: /home/gdb/builds/build-64bit/gdb/testsuite/gdb.dwarf2/dw2-ranges
Program received signal SIGSEGV, Segmentation fault.
0x7d82100800000000 in ?? ()
(gdb) FAIL: gdb.dwarf2/dw2-ranges.exp: running to main in runto
info line main
Line 1 of "dw2-ranges.S" starts at address 0x10000584 <main> and ends at 0x10000588 <main2>.
(gdb) PASS: gdb.dwarf2/dw2-ranges.exp: info line main
...
The following patch adds function descriptors declarations to the inferior
source code (dw2-ranges*.S) for ppc64 compatibility. Successfully tested on
ppc32, ppc64 and x86 (however, I'm not sure if the current state of the
testcase is compatible with other architectures).
--
Edjunior Barbosa Machado
IBM Linux Technology Center
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.
---
gdb/testsuite/gdb.dwarf2/dw2-ranges.S | 19 +++++++++++++++++++
gdb/testsuite/gdb.dwarf2/dw2-ranges2.S | 18 ++++++++++++++++++
gdb/testsuite/gdb.dwarf2/dw2-ranges3.S | 9 +++++++++
3 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges.S b/gdb/testsuite/gdb.dwarf2/dw2-ranges.S
index f87e289..0400fdc 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges.S
@@ -30,9 +30,18 @@
.text
.globl main
+#ifdef __powerpc64__
+ .section ".opd","aw"
+main:
+ .quad .main, .TOC.@tocbase, 0
+ .section ".text"
+ .type main, @function
+.main: .int 0
+#else
.func main
main: .int 0
.endfunc
+#endif
.size main, . - main
/* `.fini' section is here to make sure `dw2-ranges.S'
@@ -40,7 +49,17 @@ main: .int 0
.section .fini, "ax", @progbits
.globl func
+#ifdef __powerpc64__
+ .section ".opd","aw"
+func:
+ .quad .func, .TOC.@tocbase, 0
+ .section ".text"
+ .type func, @function
+.func:
+ .size func, . - func
+#else
.func func
func: .int 0
.endfunc
+#endif
.size func, . - func
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges2.S b/gdb/testsuite/gdb.dwarf2/dw2-ranges2.S
index e41e5b3..1e97471 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges2.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges2.S
@@ -30,9 +30,18 @@
.text
.globl main2
+#ifdef __powerpc64__
+ .section ".opd","aw"
+main2:
+ .quad .main2, .TOC.@tocbase, 0
+ .section ".text"
+ .type main2, @function
+.main2: .int 0
+#else
.func main2
main2: .int 0
.endfunc
+#endif
.size main2, . - main2
/* `.fini' section is here to make sure `dw2-ranges.S'
@@ -40,7 +49,16 @@ main2: .int 0
.section .fini, "ax", @progbits
.globl func2
+#ifdef __powerpc64__
+ .section ".opd","aw"
+func2:
+ .quad .func2, .TOC.@tocbase, 0
+ .section ".text"
+ .type func2, @function
+.func2: .int 0
+#else
.func func2
func2: .int 0
.endfunc
+#endif
.size func2, . - func2
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges3.S b/gdb/testsuite/gdb.dwarf2/dw2-ranges3.S
index e1539ce..ed1831d 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges3.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges3.S
@@ -30,7 +30,16 @@
.text
.globl main3
+#ifdef __powerpc64__
+ .section ".opd","aw"
+main3:
+ .quad .main3, .TOC.@tocbase, 0
+ .section ".text"
+ .type main3, @function
+.main3: .int 0
+#else
.func main3
main3: .int 0
.endfunc
+#endif
.size main3, . - main3
--
1.7.2.3
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] testsuite: dw2-ranges: declare function descriptors for ppc64 compatibility
2011-02-16 19:31 [PATCH] testsuite: dw2-ranges: declare function descriptors for ppc64 compatibility Edjunior Barbosa Machado
@ 2011-02-17 5:59 ` Joel Brobecker
2011-02-17 21:58 ` Jan Kratochvil
0 siblings, 1 reply; 4+ messages in thread
From: Joel Brobecker @ 2011-02-17 5:59 UTC (permalink / raw)
To: Edjunior Barbosa Machado, Jan Kratochvil; +Cc: gdb-patches
> 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?
- 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?
I'm just a little concerned about polutting the essence of the
assembly file with target-specific stuff, so if we can avoid it...
--
Joel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] testsuite: dw2-ranges: declare function descriptors for ppc64 compatibility
2011-02-17 5:59 ` Joel Brobecker
@ 2011-02-17 21:58 ` Jan Kratochvil
2011-02-17 22:31 ` obsolete: " Jan Kratochvil
0 siblings, 1 reply; 4+ messages in thread
From: Jan Kratochvil @ 2011-02-17 21:58 UTC (permalink / raw)
To: Joel Brobecker; +Cc: Edjunior Barbosa Machado, gdb-patches
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)
+{
+}
^ permalink raw reply [flat|nested] 4+ messages in thread
* obsolete: Re: [PATCH] testsuite: dw2-ranges: declare function descriptors for ppc64 compatibility
2011-02-17 21:58 ` Jan Kratochvil
@ 2011-02-17 22:31 ` Jan Kratochvil
0 siblings, 0 replies; 4+ messages in thread
From: Jan Kratochvil @ 2011-02-17 22:31 UTC (permalink / raw)
To: Joel Brobecker; +Cc: Edjunior Barbosa Machado, gdb-patches
obsoleted by:
Re: [RFA] dw2-ranges.exp: Build dw2-ranges3.S with -gdwarf-2 (not -gstabs)
http://sourceware.org/ml/gdb-patches/2011-02/msg00440.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-02-17 22:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-16 19:31 [PATCH] testsuite: dw2-ranges: declare function descriptors for ppc64 compatibility Edjunior Barbosa Machado
2011-02-17 5:59 ` Joel Brobecker
2011-02-17 21:58 ` Jan Kratochvil
2011-02-17 22:31 ` obsolete: " Jan Kratochvil
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox