gdb/testsuite: add xfail for gdb/29965 in gdb.threads/process-exit-status-is-leader...
authorSimon Marchi <simon.marchi@efficios.com>
Fri, 8 Sep 2023 01:53:55 +0000 (21:53 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 26 Sep 2023 18:20:07 +0000 (14:20 -0400)
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 <tdevries@suse.de>
gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp

index f64d6a73deaf151fa3e519a813adcee5535cd6eb..e470fe291108c0372b6e6848c030ea69fd5d3773 100644 (file)
@@ -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
+           }
+       }
     }
 }