commit: 3ddc73a7a86edfde1829d6e0494cbe1f4b7c9584
parent 48cbfdd7c67c2fb1ece1e07abf3674be8b5361a8
Author: Michael Forney <mforney@mforney.org>
Date: Fri, 30 Oct 2020 20:39:26 -0700
musl: Add patch to support SIGEV_THREAD_ID
This is needed by qemu-linux-user.
Diffstat:
2 files changed, 78 insertions(+), 1 deletion(-)
diff --git a/pkg/musl/patch/0002-add-support-for-SIGEV_THREAD_ID-timers.patch b/pkg/musl/patch/0002-add-support-for-SIGEV_THREAD_ID-timers.patch
@@ -0,0 +1,77 @@
+From fd3bc4cba48c8da106618fe9c025a9ebbb0da7be Mon Sep 17 00:00:00 2001
+From: James Y Knight <jyknight@google.com>
+Date: Sun, 30 Jun 2019 21:55:20 -0400
+Subject: [PATCH] add support for SIGEV_THREAD_ID timers
+
+This is like SIGEV_SIGNAL, but targeted to a particular thread's
+tid, rather than the process.
+---
+ include/signal.h | 16 +++++++++++++---
+ src/time/timer_create.c | 8 ++++++--
+ 2 files changed, 19 insertions(+), 5 deletions(-)
+
+diff --git a/include/signal.h b/include/signal.h
+index fbdf667b..9ed929e4 100644
+--- a/include/signal.h
++++ b/include/signal.h
+@@ -180,14 +180,24 @@ struct sigevent {
+ union sigval sigev_value;
+ int sigev_signo;
+ int sigev_notify;
+- void (*sigev_notify_function)(union sigval);
+- pthread_attr_t *sigev_notify_attributes;
+- char __pad[56-3*sizeof(long)];
++ union {
++ char __pad[64 - 2*sizeof(int) - sizeof(union sigval)];
++ pid_t sigev_notify_thread_id;
++ struct {
++ void (*sigev_notify_function)(union sigval);
++ pthread_attr_t *sigev_notify_attributes;
++ } __sev_thread;
++ } __sev_fields;
+ };
+
++#define sigev_notify_thread_id __sev_fields.sigev_notify_thread_id
++#define sigev_notify_function __sev_fields.__sev_thread.sigev_notify_function
++#define sigev_notify_attributes __sev_fields.__sev_thread.sigev_notify_attributes
++
+ #define SIGEV_SIGNAL 0
+ #define SIGEV_NONE 1
+ #define SIGEV_THREAD 2
++#define SIGEV_THREAD_ID 4
+
+ int __libc_current_sigrtmin(void);
+ int __libc_current_sigrtmax(void);
+diff --git a/src/time/timer_create.c b/src/time/timer_create.c
+index 455d49fc..4015673f 100644
+--- a/src/time/timer_create.c
++++ b/src/time/timer_create.c
+@@ -83,11 +83,15 @@ int timer_create(clockid_t clk, struct sigevent *restrict evp, timer_t *restrict
+ switch (evp ? evp->sigev_notify : SIGEV_SIGNAL) {
+ case SIGEV_NONE:
+ case SIGEV_SIGNAL:
++ case SIGEV_THREAD_ID:
+ if (evp) {
+ ksev.sigev_value = evp->sigev_value;
+ ksev.sigev_signo = evp->sigev_signo;
+ ksev.sigev_notify = evp->sigev_notify;
+- ksev.sigev_tid = 0;
++ if (evp->sigev_notify == SIGEV_THREAD_ID)
++ ksev.sigev_tid = evp->sigev_notify_thread_id;
++ else
++ ksev.sigev_tid = 0;
+ ksevp = &ksev;
+ }
+ if (syscall(SYS_timer_create, clk, ksevp, &timerid) < 0)
+@@ -115,7 +119,7 @@ int timer_create(clockid_t clk, struct sigevent *restrict evp, timer_t *restrict
+
+ ksev.sigev_value.sival_ptr = 0;
+ ksev.sigev_signo = SIGTIMER;
+- ksev.sigev_notify = 4; /* SIGEV_THREAD_ID */
++ ksev.sigev_notify = SIGEV_THREAD_ID;
+ ksev.sigev_tid = td->tid;
+ if (syscall(SYS_timer_create, clk, &ksev, &timerid) < 0)
+ timerid = -1;
+--
+2.29.0
+
diff --git a/pkg/musl/ver b/pkg/musl/ver
@@ -1 +1 @@
-1.2.1 r1
+1.2.1 r2