From: Andrew Burgess Date: Wed, 25 Jun 2025 10:24:30 +0000 (+0100) Subject: gdb/testsuite: handle failure to start process for later attach test X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b95b15404f2ddd2136bf2997c47c88b6001fa5f2;p=thirdparty%2Fbinutils-gdb.git gdb/testsuite: handle failure to start process for later attach test Commit: commit b23903836007d1acaf7f8c059ab000ee83fcebfa Date: Tue Mar 21 13:01:26 2023 +0100 gdb: linux-namespaces: enter user namespace when appropriate added a new test gdb.base/user-namespace-attach.exp. It has been reported that this test will sometimes fail, like this: (gdb) attach 184732 Attaching to process 184732 warning: process 184732 is a zombie - the process has already terminated ptrace: Operation not permitted. (gdb) FAIL: gdb.base/user-namespace-attach.exp: flags=--mount --map-root-user: attach to inferior the test tries to run the 'unshare' application. Sometimes though, the application is present, but the set of flags used is not supported (maybe due to restrictions on the local machine), so we see behaviour like this: $ unshare --mount --map-root-user /bin/true; echo $? unshare: unshare failed: Operation not permitted 1 Handle this case by first running 'unshare' with the same flags, but using '/bin/true', if this fails then assume the flags are not supported, and skip the test. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33108 --- diff --git a/gdb/testsuite/gdb.base/user-namespace-attach.exp b/gdb/testsuite/gdb.base/user-namespace-attach.exp index 9936bb998eb..741093c2c14 100644 --- a/gdb/testsuite/gdb.base/user-namespace-attach.exp +++ b/gdb/testsuite/gdb.base/user-namespace-attach.exp @@ -56,10 +56,22 @@ proc run_test { flags } { set prefix "" } + set unshare_cmd "unshare $flags" + # Run '/bin/true' using UNSHARE_CMD. If the flags in UNSHARE_CMD + # aren't supported then this will fail, this means we shouldn't + # spawn the command with our test executable and try attaching. + # + # This will also fail if /bin/true isn't present, or doesn't work + # as we expect. But this should be fine for many targets. + set res [remote_exec target "$unshare_cmd /bin/true"] + if { [lindex $res 0] != 0 } { + unsupported "unshare flags not supported" + return + } set inferior_spawn_id \ - [spawn_wait_for_attach [list "unshare $flags $::binfile"]] + [spawn_wait_for_attach [list "$unshare_cmd $::binfile"]] if { $inferior_spawn_id == -1 } { unsupported "failed to spawn for attach" return