Add ISA 3.1 check to powerpc-plxv-norel.exp
authorCarl Love <cel@us.ibm.com>
Wed, 16 Jun 2021 17:07:39 +0000 (12:07 -0500)
committerCarl Love <cel@us.ibm.com>
Fri, 25 Jun 2021 16:08:47 +0000 (11:08 -0500)
This patch adds a file with the ISA 3.1 check.  The ISA 3.1 check is
added to the test to ensure the test is only run on ISA 3.1 or newer.

gdb/testsuite/ChangeLog
2021-06-25  Carl Love  <cel@us.ibm.com>

* gdb.arch/powerpc-plxv-norel.exp: Add call to skip_power_isa_3_1_tests.
* lib/gdb.exp(skip_power_isa_3_1_tests): New gdb_caching_proc test.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/powerpc-plxv-nonrel.exp
gdb/testsuite/lib/gdb.exp

index e5164c731adb1cce7b070a074dc5e031d14ec882..040a12fe879582253c1cfb9571c7b39135d8250c 100644 (file)
@@ -1,3 +1,9 @@
+gdb/testsuite/ChangeLog
+2021-06-25  Carl Love  <cel@us.ibm.com>
+
+       * gdb.arch/powerpc-plxv-norel.exp: Add call to skip_power_isa_3_1_tests.
+       * lib/gdb.exp(skip_power_isa_3_1_tests): New gdb_caching_proc test.
+
 2021-06-25  Tom Tromey  <tromey@adacore.com>
 
        * gdb.ada/py_range.exp: Add type name test cases.
index 08f1a379efbafa07bbc779a541494524ea6d09a7..446b2bdd39aa182e57f64bd02f58ab66b4c865a6 100644 (file)
@@ -16,8 +16,8 @@
 # Test to see if gdb is properly single stepping over the
 # displaced plxv instruction.
 
-if { ![istarget powerpc*-*] } {
-    verbose "Skipping powerpc plxv test."
+if { ![istarget powerpc*-*] || [skip_power_isa_3_1_tests] } {
+    verbose "Skipping powerpc ISA 3.1 plxv test."
     return
 }
 
index 02b65617ea4037502c64d692b05ac0b772656560..1013120045a34bf2cc36937da08f9dfbb4e16ca6 100644 (file)
@@ -3129,6 +3129,53 @@ gdb_caching_proc skip_altivec_tests {
     return $skip_vmx_tests
 }
 
+# Run a test on the power target to see if it supports ISA 3.1 instructions
+gdb_caching_proc skip_power_isa_3_1_tests {
+    global srcdir subdir gdb_prompt inferior_exited_re
+
+    set me "skip_power_isa_3_1_tests"
+
+    # Compile a test program containing ISA 3.1 instructions.
+    set src {
+       int main() {
+       asm volatile ("pnop"); // marker
+               asm volatile ("nop");
+               return 0;
+           }
+       }
+
+    if {![gdb_simple_compile $me $src executable ]} {
+        return 1
+    }
+
+    # No error message, compilation succeeded so now run it via gdb.
+
+    gdb_exit
+    gdb_start
+    gdb_reinitialize_dir $srcdir/$subdir
+    gdb_load "$obj"
+    gdb_run_cmd
+    gdb_expect {
+        -re ".*Illegal instruction.*${gdb_prompt} $" {
+            verbose -log "\n$me Power ISA 3.1 hardware not detected"
+            set skip_power_isa_3_1_tests 1
+        }
+        -re ".*$inferior_exited_re normally.*${gdb_prompt} $" {
+            verbose -log "\n$me: Power ISA 3.1 hardware detected"
+            set skip_power_isa_3_1_tests 0
+        }
+        default {
+          warning "\n$me: default case taken"
+            set skip_power_isa_3_1_tests 1
+        }
+    }
+    gdb_exit
+    remote_file build delete $obj
+
+    verbose "$me:  returning $skip_power_isa_3_1_tests" 2
+    return $skip_power_isa_3_1_tests
+}
+
 # Run a test on the target to see if it supports vmx hardware.  Return 0 if so,
 # 1 if it does not.  Based on 'check_vmx_hw_available' from the GCC testsuite.