[gdb/testsuite] Detect 'No MPX support'
authorTom de Vries <tdevries@suse.de>
Thu, 14 Apr 2022 10:32:51 +0000 (12:32 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 14 Apr 2022 10:32:51 +0000 (12:32 +0200)
On openSUSE Leap 15.3, mpx support has been disabled for m32, so I run into:
...
(gdb) run ^M
Starting program: outputs/gdb.arch/i386-mpx/i386-mpx ^M
[Thread debugging using libthread_db enabled]^M
Using host libthread_db library "/lib64/libthread_db.so.1".^M
No MPX support^M
...
and eventually into all sort of fails in this and other mpx test-cases.

Fix this by detecting the "No MPX support" message in have_mpx.

Tested on x86_64-linux with target boards unix and unix/-m32.

gdb/testsuite/lib/gdb.exp

index 902fb4a7b5eedf0a4e3ccdb0397f68467a24b20c..7c35fbb18c4e7f4b45a57b92c55aa150f9cc0b7d 100644 (file)
@@ -8329,6 +8329,29 @@ gdb_caching_proc have_mpx {
 
     remote_file build delete $obj
 
+    if { $status == 0 } {
+       verbose "$me:  returning $status" 2
+       return $status
+    }
+
+    # Compile program with -mmpx -fcheck-pointer-bounds, try to trigger
+    # 'No MPX support', in other words, see if kernel supports mpx.
+    set src { int main (void) { return 0; } }
+    set comp_flags {}
+    append comp_flags " additional_flags=-mmpx"
+    append comp_flags " additional_flags=-fcheck-pointer-bounds"
+    if {![gdb_simple_compile $me-2 $src executable $comp_flags]} {
+        return 0
+    }
+
+    set result [remote_exec target $obj]
+    set status [lindex $result 0]
+    set output [lindex $result 1]
+    set status [expr ($status == 0) \
+                   && ![string equal $output "No MPX support\r\n"]]
+
+    remote_file build delete $obj
+
     verbose "$me:  returning $status" 2
     return $status
 }