gdb/testsuite/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 8 Sep 2011 17:40:54 +0000 (17:40 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 8 Sep 2011 17:40:54 +0000 (17:40 +0000)
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.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/typeddwarf.exp
gdb/testsuite/gdb.trace/backtrace.exp
gdb/testsuite/gdb.trace/collection.exp
gdb/testsuite/gdb.trace/report.exp
gdb/testsuite/gdb.trace/unavailable.exp
gdb/testsuite/gdb.trace/while-dyn.exp
gdb/testsuite/lib/gdb.exp

index f130a8316bb4423de445ba5c29e164a96f932336..b875a0b6d5a8ff0fc691096704735d9614f469b4 100644 (file)
@@ -1,3 +1,16 @@
+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
index 36a17e5372d3adc3caeb9da5b0f33a07a25787dd..ca0db06ec244b048520b18a7c719248c6c38bf0d 100644 (file)
@@ -22,10 +22,10 @@ if ![dwarf2_support] {
     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
index 9b72d491e52f135c2ba0df99b8afeb09a38abb15..e2807c5686bcd99940db14931196bc196a43262b 100644 (file)
@@ -150,10 +150,10 @@ gdb_trace_setactions "8.6: setup TP to collect regs, args, and locals" \
        "$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 {
index 4917ea847dabad9feedc0777dfc34659fcc986a9..4d57ad49b15a05debbe725484822c3eeeacbe40d 100644 (file)
@@ -45,11 +45,11 @@ if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 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"
index 8bb678095c6694b2b9d2e8d400e5e3afda38bd19..f765a5742aece07dcf7b90769d830260c63c4471 100644 (file)
@@ -159,11 +159,11 @@ gdb_trace_setactions "9.x: setup TP to collect locals" \
        "$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"
index fce65cacb3585241487bea7c0eb376fef1241c89..7278ebf8558d173131347c2cb8ea2ccf79a193a9 100644 (file)
@@ -30,11 +30,11 @@ if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 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 @@ proc gdb_unavailable_registers_test { } {
 
     # 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"
index 6227f23d9da77c8e2f404738e1f253dd69ead13b..58aa7103ad80cc2d64e3ed15ad1c66a6c2c310a4 100644 (file)
@@ -52,9 +52,9 @@ if { ![gdb_target_supports_trace] } then {
 # 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"
index ef5ad5cef5f806eb6b95cbfb73891a82a6f314ce..b22e32262d61344f856e4e827b2bd914c9ebb5a7 100644 (file)
@@ -1604,6 +1604,49 @@ proc is_lp64_target {} {
     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 @@ proc is_x86_like_target {} {
     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.