aboutsummaryrefslogtreecommitdiffstats
path: root/main/qemu/0001-linux-user-avoid-using-glibc-internals-in-_syscall5-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/qemu/0001-linux-user-avoid-using-glibc-internals-in-_syscall5-.patch')
-rw-r--r--main/qemu/0001-linux-user-avoid-using-glibc-internals-in-_syscall5-.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/main/qemu/0001-linux-user-avoid-using-glibc-internals-in-_syscall5-.patch b/main/qemu/0001-linux-user-avoid-using-glibc-internals-in-_syscall5-.patch
new file mode 100644
index 0000000000..2ee0bbe7ff
--- /dev/null
+++ b/main/qemu/0001-linux-user-avoid-using-glibc-internals-in-_syscall5-.patch
@@ -0,0 +1,68 @@
+From 73a0fc74069c5dd4c5895a406b9cc64358da90e6 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Wed, 23 Apr 2014 16:51:31 +0200
+Subject: [PATCH 1/6] 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>
+---
+ 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 9864813..c8989b6 100644
+--- a/linux-user/syscall.c
++++ b/linux-user/syscall.c
+@@ -406,7 +406,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 {
+--
+1.9.2
+