linux-user: avoid using glibc internals in _syscall5 and in definition of target_sigevent struct

Use the public sigset_t instead of the glibc specific internal
__sigset_t in _syscall.

Calculate the sigevent pad size is calculated in similar way as kernel
does it instead of using glibc internal field _pad.

This is needed for building with musl libc.

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Natanael Copa 2014-04-29 13:11:20 +02:00 committed by Riku Voipio
parent a29e5ba21f
commit 34d6086236
2 changed files with 16 additions and 2 deletions

View File

@ -411,7 +411,7 @@ static int sys_inotify_init1(int flags)
#endif
#define __NR_sys_ppoll __NR_ppoll
_syscall5(int, sys_ppoll, struct pollfd *, fds, nfds_t, nfds,
struct timespec *, timeout, const __sigset_t *, sigmask,
struct timespec *, timeout, const sigset_t *, sigmask,
size_t, sigsetsize)
#endif

View File

@ -2552,12 +2552,26 @@ struct target_timer_t {
abi_ulong ptr;
};
#define TARGET_SIGEV_MAX_SIZE 64
/* This is architecture-specific but most architectures use the default */
#ifdef TARGET_MIPS
#define TARGET_SIGEV_PREAMBLE_SIZE (sizeof(int32_t) * 2 + sizeof(abi_long))
#else
#define TARGET_SIGEV_PREAMBLE_SIZE (sizeof(int32_t) * 2 \
+ sizeof(target_sigval_t))
#endif
#define TARGET_SIGEV_PAD_SIZE ((TARGET_SIGEV_MAX_SIZE \
- TARGET_SIGEV_PREAMBLE_SIZE) \
/ sizeof(int32_t))
struct target_sigevent {
target_sigval_t sigev_value;
int32_t sigev_signo;
int32_t sigev_notify;
union {
int32_t _pad[ARRAY_SIZE(((struct sigevent *)0)->_sigev_un._pad)];
int32_t _pad[TARGET_SIGEV_PAD_SIZE];
int32_t _tid;
struct {