[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 06/14] linux-user: avoid using glibc internals in _sy
From: |
riku . voipio |
Subject: |
[Qemu-devel] [PULL 06/14] linux-user: avoid using glibc internals in _syscall5 and in definition of target_sigevent struct |
Date: |
Fri, 2 May 2014 22:15:41 +0300 |
From: Natanael Copa <address@hidden>
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 <address@hidden>
Signed-off-by: Riku Voipio <address@hidden>
Reviewed-by: Peter Maydell <address@hidden>
---
linux-user/syscall.c | 2 +-
linux-user/syscall_defs.h | 16 +++++++++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 15de6f8..af0bb35 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -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
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index fdf9a47..69c3982 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 {
--
2.0.0.rc0
- [Qemu-devel] [PULL 00/14] linux-user update, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 01/14] linux-user: Add /proc/self/exe open forwarding, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 03/14] linux-user: Move if-elses to a switch statement., riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 06/14] linux-user: avoid using glibc internals in _syscall5 and in definition of target_sigevent struct,
riku . voipio <=
- [Qemu-devel] [PULL 02/14] linux-user: Assert stack used for auxvec, envp, argv, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 11/14] linux-user/elfload.c: Fix incorrect ARM HWCAP bits, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 08/14] linux-user: rename cpu- uname -> uname, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 05/14] linux-user: Handle arches with llseek instead of _llseek, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 04/14] linux-user: Add support for SCM_CREDENTIALS., riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 14/14] linux-user/elfload.c: Support ARM HWCAP2 flags, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 07/14] linux-user/signal.c: Set fault address in AArch64 signal info, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 13/14] linux-user/elfload.c: Fix A64 code which was incorrectly acting like A32, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 12/14] linux-user/elfload.c: Update ARM HWCAP bits, riku . voipio, 2014/05/02
- [Qemu-devel] [PULL 10/14] linux-user: remove configure option for setting uname release, riku . voipio, 2014/05/02