[PATCH] S/390: xfail test POSIX/signal.h
Stefan Liebler
stli@linux.vnet.ibm.com
Fri Mar 21 13:40:00 GMT 2014
On 03/14/2014 03:30 PM, Joseph S. Myers wrote:
> On Fri, 14 Mar 2014, Stefan Liebler wrote:
>
>> Hi,
>>
>> on S390x the conformance test conform/POSIX/signal.h/conform.out is failing,
>> due to incorrect type.
>> The member sa_flags in struct sigaction on s390x is defined
>> as unsigned long instead of int due to the kernel struct.
>> On other platforms, sa_flags is also unsigned long: ia64, sparc, hppa.
>
> If you need to XFAIL such a test on an architecture-specific basis, the
> XFAIL should have a comment explaining why the test is expected to fail.
>
> However, in this case I don't see the need to XFAIL it. As far as I can
> tell, the upper bits of sa_flags aren't actually assigned. So you should
> be able to change the structure so that sa_flags is int, with an adjacent
> padding field. This would mean random padding is passed to the kernel in
> what the kernel thinks is the high part of the field, so you should either
> get kernel agreement that this is OK, or make glibc's sigaction
> implementation copy the structure and zero the padding.
>
> (Again, file a bug in glibc Bugzilla before fixing it.)
>
Hi,
i talked to the kernel guys and the kernel has no problem with the
padding variable and its random content.
So i added the padding variable and changed sa_flags to int in order to
be POSIX conform.
Afterwards tested on S390/S390x.
Is this okay?
Bye
---
2014-03-21 Stefan Liebler <stli@linux.vnet.ibm.com>
[BZ #16713]
* sysdeps/unix/sysv/linux/s390/bits/sigaction.h
(__glibc_reserved0): New variable.
(sa_flags): Change type to int.
---
-------------- next part --------------
diff --git a/sysdeps/unix/sysv/linux/s390/bits/sigaction.h b/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
index f8baf84..b60b8f8 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
@@ -43,7 +43,8 @@ struct sigaction
#endif
/* Special flags. */
- unsigned long int sa_flags;
+ int __glibc_reserved0;
+ int sa_flags;
/* Restore handler. */
void (*sa_restorer) (void);
More information about the Libc-alpha
mailing list