[PATCH] gdb/testsuite: add xfail for gdb/29965 in gdb.threads/process-exit-status-is-leader-exit-status.exp

Simon Marchi simark@simark.ca
Tue Sep 26 18:22:04 GMT 2023


On 9/26/23 12:55, Tom de Vries via Gdb-patches wrote:
> On 9/8/23 03:53, Simon Marchi via Gdb-patches wrote:
>> 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.
>>
> 
> Hi,
> 
> thanks for doing this.
> 
> I've rebooted into tumbleweed, applied the patch and confirmed that the xfail is triggered.

Thanks!

> 
>> [1] https://bugzilla.suse.com/show_bug.cgi?id=1206926
>>
>> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29965
>> Change-Id: If6ab7171c92bfc1a3b961c7179e26611773969eb
>> ---
>>   ...cess-exit-status-is-leader-exit-status.exp | 21 ++++++++++++++++++-
>>   1 file changed, 20 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 f64d6a73deaf..2bc73fdde07f 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,25 @@ 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 } {
>> +            lassign $lkv major minor patch
>> +
>> +            if { ($major == 6 && $minor >= 1) || $major > 6 } {
> 
> You could consider using version_compare here, but it's no requirement.
> 
> LGTM.
> 
> Approved-By: Tom de Vries <tdevries@suse.de>

I didn't know about version_compare, I changed the code to use it and
pushed the patch, thanks!

Simon


More information about the Gdb-patches mailing list