From e21d8399303b3d2b77e1a526dcbeffcfce678e6f Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Wed, 11 May 2022 09:32:58 +0200 Subject: [PATCH] [gdb/testsuite] Remove target limits in gdb.base/catch-syscall.exp In test-case gdb.base/catch-syscall.exp, proc test_catch_syscall_multi_arch we test for supported targets using istarget, like so: ... if { [istarget "i*86-*-*"] || [istarget "x86_64-*-*"] } { ... } elseif { [istarget "powerpc-*-linux*"] \ || [istarget "powerpc64*-linux*"] } { ... ... but the tests excercised there can all be executed if gdb is configured with --enable-targets=all. Rewrite the proc to iterate over all cases, and check if the test is supported by trying "set arch $arch1" and "set arch $arch2". Tested on x86_64-linux, with: - a gdb build with --enable-targets=all, and - a gdb build build with my usual --enable-targets setting (too long to include here) which means the sparc vs sparc:v9 case is unsupported. --- gdb/testsuite/gdb.base/catch-syscall.exp | 106 +++++++++++++---------- 1 file changed, 61 insertions(+), 45 deletions(-) diff --git a/gdb/testsuite/gdb.base/catch-syscall.exp b/gdb/testsuite/gdb.base/catch-syscall.exp index 1427dfece6d..be119786734 100644 --- a/gdb/testsuite/gdb.base/catch-syscall.exp +++ b/gdb/testsuite/gdb.base/catch-syscall.exp @@ -565,59 +565,33 @@ proc test_catch_syscall_with_wrong_args_noxml {} { } } -proc test_catch_syscall_multi_arch {} { +proc test_catch_syscall_multi_arch_1 { + arch1 arch2 syscall1_name syscall2_name syscall_number +} { global decimal binfile - if { [istarget "i*86-*-*"] || [istarget "x86_64-*-*"] } { - set arch1 "i386" - set arch2 "i386:x86-64" - set syscall1_name "exit" - set syscall2_name "write" - set syscall_number 1 - } elseif { [istarget "powerpc-*-linux*"] \ - || [istarget "powerpc64*-linux*"] } { - set arch1 "powerpc:common" - set arch2 "powerpc:common64" - set syscall1_name "openat" - set syscall2_name "unlinkat" - set syscall_number 286 - } elseif { [istarget "sparc-*-linux*"] \ - || [istarget "sparc64-*-linux*"] } { - set arch1 "sparc" - set arch2 "sparc:v9" - set syscall1_name "setresuid32" - set syscall2_name "setresuid" - set syscall_number 108 - } elseif { [istarget "mips*-linux*"] } { - # MIPS does not use the same numbers for syscalls on 32 and 64 - # bits. - verbose "Not testing MIPS for multi-arch syscall support" - return - } elseif { [istarget "arm*-linux*"] } { - # catch syscall supports only 32-bit ARM for now. - verbose "Not testing ARM for multi-arch syscall support" - return - } elseif { [istarget "aarch64*-linux*"] } { - set arch1 "aarch64" - set arch2 "arm" - set syscall1_name "reboot" - set syscall2_name "_newselect" - set syscall_number 142 - } elseif { [istarget "s390*-linux*"] } { - set arch1 "s390:31-bit" - set arch2 "s390:64-bit" - set syscall1_name "_newselect" - set syscall2_name "select" - set syscall_number 142 - } - - with_test_prefix "multiple targets" { + with_test_prefix "multiple targets: $arch1 vs $arch2" { # We are not interested in loading any binary here, and in # some systems (PowerPC, for example), if we load a binary # there is no way to set other architecture. gdb_exit gdb_start + set supported 1 + foreach arch [list $arch1 $arch2] { + gdb_test_multiple "set architecture $arch" "" { + -re -wrap "Undefined item: \"$arch\"\\." { + set supported 0 + unsupported $gdb_test_name + } + -re -wrap "The target architecture is set to \"$arch\"\\." { + } + } + } + if { $supported == 0 } { + return + } + gdb_test "set architecture $arch1" \ "The target architecture is set to \"$arch1\"\\." @@ -636,6 +610,48 @@ proc test_catch_syscall_multi_arch {} { } } +proc test_catch_syscall_multi_arch {} { + set arch1 "i386" + set arch2 "i386:x86-64" + set syscall1_name "exit" + set syscall2_name "write" + set syscall_number 1 + test_catch_syscall_multi_arch_1 $arch1 $arch2 $syscall1_name \ + $syscall2_name $syscall_number + + set arch1 "powerpc:common" + set arch2 "powerpc:common64" + set syscall1_name "openat" + set syscall2_name "unlinkat" + set syscall_number 286 + test_catch_syscall_multi_arch_1 $arch1 $arch2 $syscall1_name \ + $syscall2_name $syscall_number + + set arch1 "sparc" + set arch2 "sparc:v9" + set syscall1_name "setresuid32" + set syscall2_name "setresuid" + set syscall_number 108 + test_catch_syscall_multi_arch_1 $arch1 $arch2 $syscall1_name \ + $syscall2_name $syscall_number + + set arch1 "aarch64" + set arch2 "arm" + set syscall1_name "reboot" + set syscall2_name "_newselect" + set syscall_number 142 + test_catch_syscall_multi_arch_1 $arch1 $arch2 $syscall1_name \ + $syscall2_name $syscall_number + + set arch1 "s390:31-bit" + set arch2 "s390:64-bit" + set syscall1_name "_newselect" + set syscall2_name "select" + set syscall_number 142 + test_catch_syscall_multi_arch_1 $arch1 $arch2 $syscall1_name \ + $syscall2_name $syscall_number +} + proc do_syscall_tests_without_xml {} { # Make sure GDB doesn't load the syscalls xml from the system data # directory. -- 2.30.2