diff options
| author | Natanael Copa <ncopa@alpinelinux.org> | 2014-04-29 13:11:20 +0200 |
|---|---|---|
| committer | Riku Voipio <riku.voipio@linaro.org> | 2014-05-02 21:59:28 +0300 |
| commit | 34d6086236baeb59f4b46e2380f2b271acd6f6cf (patch) | |
| tree | 8c06a8dede03f4e4660f7b23f3eb2ac81d112dde /linux-user/syscall_defs.h | |
| parent | a29e5ba21f3dc01cd7f12aac9216e06e7bdd0e9e (diff) | |
| download | focaccia-qemu-34d6086236baeb59f4b46e2380f2b271acd6f6cf.tar.gz focaccia-qemu-34d6086236baeb59f4b46e2380f2b271acd6f6cf.zip | |
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>
Diffstat (limited to 'linux-user/syscall_defs.h')
| -rw-r--r-- | linux-user/syscall_defs.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index fdf9a47595..69c3982ee6 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -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 { |