Add ISA 3.1 check to powerpc-plxv-norel.exp

Message ID 351d5745e8d90f263e0ad07f6554dda2e19d2c9b.camel@us.ibm.com
State New
Headers show
Series
  • Add ISA 3.1 check to powerpc-plxv-norel.exp
Related show

Commit Message

Rustam Kovhaev via Gdb-patches June 23, 2021, 6:32 p.m.
GDB maintainers:

The following patch adds a test for ISA 3.1 support to the powerpc-
plxv-norel.exp test.  This test will fail on illegal instruction on
hardware that does not support ISA 3.1.  The ISA test was added to
lib/gdb.exp to make it available for use with other tests.

The patch has been tested on Power 9 and Power 10.  Additionally, the
test was run as a remote test between two different machines.  The
patch worked as expected in all cases.

Please let me know if the patch is acceptable for GDB mainline. 
Thanks.

                    Carl Love


---------------------------------------------

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-23  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.arch/powerpc-plxv-nonrel.exp          |  4 +-
 gdb/testsuite/lib/gdb.exp                     | 47 +++++++++++++++++++
 2 files changed, 49 insertions(+), 2 deletions(-)

-- 
2.27.0

Comments

Rustam Kovhaev via Gdb-patches June 24, 2021, 3:50 p.m. | #1
On Wed, Jun 23, 2021 at 11:32:22AM -0700, Carl Love wrote:

> gdb/testsuite/ChangeLog

> 2021-06-23  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.


This is OK.

Thanks,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU/Linux compilers and toolchain
  Ulrich.Weigand@de.ibm.com

Patch

diff --git a/gdb/testsuite/gdb.arch/powerpc-plxv-nonrel.exp b/gdb/testsuite/gdb.arch/powerpc-plxv-nonrel.exp
index 08f1a379efb..446b2bdd39a 100644
--- a/gdb/testsuite/gdb.arch/powerpc-plxv-nonrel.exp
+++ b/gdb/testsuite/gdb.arch/powerpc-plxv-nonrel.exp
@@ -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
 }
 
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index f6686e19162..566ffad14fd 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -3068,6 +3068,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.