This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patch] testsuite: Fix x32, introduce is_amd64_regs_target
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: Pedro Alves <pedro at codesourcery dot com>, Mark Kettenis <mark dot kettenis at xs4all dot nl>, "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Thu, 8 Sep 2011 19:43:32 +0200
- Subject: Re: [patch] testsuite: Fix x32, introduce is_amd64_regs_target
On Thu, 08 Sep 2011 17:53:34 +0200, Pedro Alves wrote:
> I don't believe that triplet was ever accepted.
+
On Thu, 08 Sep 2011 17:57:04 +0200, Mark Kettenis wrote:
> Where? Neither the config.guess/config.sub in the gcc svn repo, nor
> the one in the src cvs repo will ever return such a triplet.
OK, I Googled some posted patches and assumed it is the reality, I agree there
isn't x32 vendor in the FSF repositories.
On Thu, 08 Sep 2011 18:01:41 +0200, H.J. Lu wrote:
> I am using x86_64-x32-linux* for x32. Instead, I
> am using x86_64-*-linux* with sizeof (long) == 4.
Updated the comment to:
+# Return 1 if target has x86_64 registers - either amd64 or x32.
+# x32 target identifies as x86_64-*-linux*, therefore it cannot be determined
+# just from the target string.
+proc is_amd64_regs_target {} {
Checked in.
Thanks,
Jan
http://sourceware.org/ml/gdb-cvs/2011-09/msg00048.html
--- src/gdb/testsuite/ChangeLog 2011/09/08 15:38:15 1.2848
+++ src/gdb/testsuite/ChangeLog 2011/09/08 17:40:52 1.2849
@@ -1,5 +1,18 @@
2011-09-08 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Fix compatibility with x32 arch.
+ * testsuite/gdb.dwarf2/typeddwarf.exp: Check also is_lp64_target.
+ * testsuite/gdb.trace/backtrace.exp: Use is_amd64_regs_target and
+ is_x86_like_target.
+ * testsuite/gdb.trace/collection.exp: Likewise.
+ * testsuite/gdb.trace/report.exp: Likewise.
+ * testsuite/gdb.trace/unavailable.exp: Likewise.
+ * testsuite/gdb.trace/while-dyn.exp: Likewise.
+ * testsuite/lib/gdb.exp (is_amd64_regs_target): New function.
+ (is_x86_like_target): Check also is_amd64_regs_target.
+
+2011-09-08 Jan Kratochvil <jan.kratochvil@redhat.com>
+
PR breakpoints/12435
* gdb.arch/amd64-prologue-xmm.c: New file.
* gdb.arch/amd64-prologue-xmm.exp: New file.
--- src/gdb/testsuite/gdb.dwarf2/typeddwarf.exp 2011/07/22 15:31:52 1.3
+++ src/gdb/testsuite/gdb.dwarf2/typeddwarf.exp 2011/09/08 17:40:53 1.4
@@ -22,10 +22,10 @@
return 0
}
-# This test can only be run on x86 and amd64 targets.
+# This test can only be run on x86 and amd64 targets (and not x32).
if { [is_x86_like_target] } {
set sfile ${test}.S
-} elseif {[istarget "x86_64-*-*"]} {
+} elseif {[istarget "x86_64-*-*"] && [is_lp64_target]} {
set sfile ${test}-amd64.S
} else {
return 0
--- src/gdb/testsuite/gdb.trace/backtrace.exp 2011/08/26 09:20:44 1.19
+++ src/gdb/testsuite/gdb.trace/backtrace.exp 2011/09/08 17:40:53 1.20
@@ -150,10 +150,10 @@
"$tdp4" \
"collect \$regs, \$args, \$locs" "^$"
-if {([istarget "x86_64-*"] || [istarget "i?86-*"]) && [is_lp64_target]} then {
+if [is_amd64_regs_target] {
set fpreg "\$rbp"
set spreg "\$rsp"
-} elseif {[istarget "x86_64-*"] || [istarget "i?86-*"]} then {
+} elseif [is_x86_like_target] {
set fpreg "\$ebp"
set spreg "\$esp"
} else {
--- src/gdb/testsuite/gdb.trace/collection.exp 2011/08/26 09:20:44 1.25
+++ src/gdb/testsuite/gdb.trace/collection.exp 2011/09/08 17:40:53 1.26
@@ -45,11 +45,11 @@
set ws "\[\r\n\t \]+"
set cr "\[\r\n\]+"
-if {([istarget "x86_64-*"] || [istarget "i?86-*"]) && [is_lp64_target]} then {
+if [is_amd64_regs_target] {
set fpreg "rbp"
set spreg "rsp"
set pcreg "rip"
-} elseif {[istarget "x86_64-*"] || [istarget "i?86-*"]} then {
+} elseif [is_x86_like_target] {
set fpreg "ebp"
set spreg "esp"
set pcreg "eip"
--- src/gdb/testsuite/gdb.trace/report.exp 2011/08/26 09:20:44 1.20
+++ src/gdb/testsuite/gdb.trace/report.exp 2011/09/08 17:40:53 1.21
@@ -159,11 +159,11 @@
"$tdp4" \
"collect \$locs" "^$"
-if {([istarget "x86_64-*"] || [istarget "i?86-*"]) && [is_lp64_target]} then {
+if [is_amd64_regs_target] {
set fpreg "rbp"
set spreg "rsp"
set pcreg "rip"
-} elseif {[istarget "x86_64-*"] || [istarget "i?86-*"]} then {
+} elseif [is_x86_like_target] {
set fpreg "ebp"
set spreg "esp"
set pcreg "eip"
--- src/gdb/testsuite/gdb.trace/unavailable.exp 2011/08/26 09:20:44 1.10
+++ src/gdb/testsuite/gdb.trace/unavailable.exp 2011/09/08 17:40:54 1.11
@@ -30,11 +30,11 @@
set ws "\[\r\n\t \]+"
set cr "\[\r\n\]+"
-if {([istarget "x86_64-*"] || [istarget "i?86-*"]) && [is_lp64_target]} then {
+if [is_amd64_regs_target] {
set fpreg "rbp"
set spreg "rsp"
set pcreg "rip"
-} elseif {[istarget "x86_64-*"] || [istarget "i?86-*"]} then {
+} elseif [is_x86_like_target] {
set fpreg "ebp"
set spreg "esp"
set pcreg "eip"
@@ -295,12 +295,12 @@
# Test reading uncollected pseudo-registers. The set of which
# depends on target.
- if {$pcreg == "rip"} then {
+ if [is_amd64_regs_target] {
# Check the raw register first.
test_register_unavailable "\$rax"
test_register_unavailable "\$eax"
test_register_unavailable "\$ax"
- } elseif {$pcreg == "eip"} then {
+ } elseif [is_x86_like_target] {
# Check the raw register first.
test_register_unavailable "\$eax"
test_register_unavailable "\$ax"
--- src/gdb/testsuite/gdb.trace/while-dyn.exp 2011/08/26 09:20:44 1.19
+++ src/gdb/testsuite/gdb.trace/while-dyn.exp 2011/09/08 17:40:54 1.20
@@ -52,9 +52,9 @@
# test while-stepping dynamically (live target)
#
-if {([istarget "x86_64-*"] || [istarget "i?86-*"]) && [is_lp64_target]} then {
+if [is_amd64_regs_target] {
set fpreg "\$rbp"
-} elseif {[istarget "x86_64-*"] || [istarget "i?86-*"]} then {
+} elseif [is_x86_like_target] {
set fpreg "\$ebp"
} else {
set fpreg "\$fp"
--- src/gdb/testsuite/lib/gdb.exp 2011/07/15 14:11:22 1.184
+++ src/gdb/testsuite/lib/gdb.exp 2011/09/08 17:40:54 1.185
@@ -1604,6 +1604,49 @@
return [set is_lp64_target_saved($board) 1]
}
+# Return 1 if target has x86_64 registers - either amd64 or x32.
+# x32 target identifies as x86_64-*-linux*, therefore it cannot be determined
+# just from the target string.
+proc is_amd64_regs_target {} {
+ global is_amd64_regs_target_saved
+
+ if {![istarget "x86_64-*-*"]} {
+ return 0
+ }
+
+ # Use the cached value, if it exists. Cache value per "board" to handle
+ # runs with multiple options (e.g. unix/{-m32,-64}) correctly.
+ set me "is_amd64_regs_target"
+ set board [target_info name]
+ if [info exists is_amd64_regs_target_saved($board)] {
+ verbose "$me: returning saved $is_amd64_regs_target_saved($board)" 2
+ return $is_amd64_regs_target_saved($board)
+ }
+
+ set src reg64[pid].s
+ set obj reg64[pid].o
+
+ set f [open $src "w"]
+ foreach reg \
+ {rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15} {
+ puts $f "\tincq %$reg"
+ }
+ close $f
+
+ verbose "$me: compiling testfile $src" 2
+ set lines [gdb_compile $src $obj object {quiet}]
+ file delete $src
+ file delete $obj
+
+ if ![string match "" $lines] then {
+ verbose "$me: testfile compilation failed, returning 0" 2
+ return [set is_amd64_regs_target_saved($board) 0]
+ }
+
+ verbose "$me: returning 1" 2
+ return [set is_amd64_regs_target_saved($board) 1]
+}
+
# Return 1 if this target is an x86 or x86-64 with -m32.
proc is_x86_like_target {} {
if {[istarget i?86-*]} {
@@ -1612,7 +1655,7 @@
if {![istarget "x86_64-*-*"]} {
return 0
}
- return [is_ilp32_target]
+ return [expr [is_ilp32_target] && ![is_amd64_regs_target]]
}
# Return 1 if displaced stepping is supported on target, otherwise, return 0.