From ebceffa1196651683a7a6d31abb4b3b5adc6c168 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 7 Sep 2023 21:53:55 -0400 Subject: [PATCH 12/12] gdb/testsuite: add xfail for gdb/29965 in gdb.threads/process-exit-status-is-leader-exit-status.exp Bug 29965 shows on a Linux kernel >= 6.1, that test fails consistently with: FAIL: gdb.threads/process-exit-status-is-leader-exit-status.exp: iteration=0: continue (the program exited) ... FAIL: gdb.threads/process-exit-status-is-leader-exit-status.exp: iteration=9: continue (the program exited) This is due to a change in Linux kernel behavior [1] that affects exactly what this test tests. That is, if multiple threads (including the leader) call SYS_exit, the exit status of the process should be the exit status of the leader. After that change in the kernel, it is no longer the case. Add an xfail in the test, based on the Linux kernel version. The goal is that if a regression is introduced in GDB regarding this feature, it should be caught if running on an older kernel where the behavior was consistent. [1] https://bugzilla.suse.com/show_bug.cgi?id=1206926 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29965 Change-Id: If6ab7171c92bfc1a3b961c7179e26611773969eb Approved-By: Tom de Vries --- ...cess-exit-status-is-leader-exit-status.exp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp b/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp index f64d6a73dea..e470fe29110 100644 --- a/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp +++ b/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp @@ -41,6 +41,23 @@ for {set iteration 0} {$iteration < 10} {incr iteration} { return } - gdb_test "continue" "\\\[Inferior 1 \\(.*\\) exited with code 01\\\]" + gdb_test_multiple "continue" "" { + -re -wrap "\\\[Inferior 1 \\(.*\\) exited with code 01\\\]" { + pass $gdb_test_name + } + + -re -wrap "\\\[Inferior 1 \\(.*\\) exited with code $::decimal\\\]" { + set lkv [linux_kernel_version] + + if { [llength $lkv] != 0 } { + if { [version_compare {6 1 0} <= $lkv] } { + xfail "$gdb_test_name (PR 29965)" + return + } + } + + fail $gdb_test_name + } + } } } -- 2.35.3