Commit b9c9a33b authored by Martin Schwidefsky's avatar Martin Schwidefsky

s390/compat: correct ucontext layout for high gprs

The uc_sigmask definition in the kernel differs from the one in the
glibc, the kernel uc_sigmask has 64 bits while the glibc verison
is 1024 bits. The extension of the ucontext structure for 64-bit
register support for 31-bit compat processes added a new field
uc_gprs_high which starts 8 bytes after the uc_sigmask field.
As the glibc view of the ucontext assumes a size of 128 bytes for
uc_sigmask add a 120 byte padding to the kernel structure
ucontext_extended after the 8 byte uc_sigmask.
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 2c3e7e15
...@@ -16,7 +16,9 @@ struct ucontext_extended { ...@@ -16,7 +16,9 @@ struct ucontext_extended {
struct ucontext *uc_link; struct ucontext *uc_link;
stack_t uc_stack; stack_t uc_stack;
_sigregs uc_mcontext; _sigregs uc_mcontext;
unsigned long uc_sigmask[2]; sigset_t uc_sigmask;
/* Allow for uc_sigmask growth. Glibc uses a 1024-bit sigset_t. */
unsigned char __unused[128 - sizeof(sigset_t)];
unsigned long uc_gprs_high[16]; unsigned long uc_gprs_high[16];
}; };
...@@ -27,7 +29,9 @@ struct ucontext { ...@@ -27,7 +29,9 @@ struct ucontext {
struct ucontext *uc_link; struct ucontext *uc_link;
stack_t uc_stack; stack_t uc_stack;
_sigregs uc_mcontext; _sigregs uc_mcontext;
sigset_t uc_sigmask; /* mask last for extensibility */ sigset_t uc_sigmask;
/* Allow for uc_sigmask growth. Glibc uses a 1024-bit sigset_t. */
unsigned char __unused[128 - sizeof(sigset_t)];
}; };
#endif /* !_ASM_S390_UCONTEXT_H */ #endif /* !_ASM_S390_UCONTEXT_H */
...@@ -69,7 +69,9 @@ struct ucontext32 { ...@@ -69,7 +69,9 @@ struct ucontext32 {
__u32 uc_link; /* pointer */ __u32 uc_link; /* pointer */
compat_stack_t uc_stack; compat_stack_t uc_stack;
_sigregs32 uc_mcontext; _sigregs32 uc_mcontext;
compat_sigset_t uc_sigmask; /* mask last for extensibility */ compat_sigset_t uc_sigmask;
/* Allow for uc_sigmask growth. Glibc uses a 1024-bit sigset_t. */
unsigned char __unused[128 - sizeof(compat_sigset_t)];
}; };
struct stat64_emu31; struct stat64_emu31;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment