]> xenbits.xensource.com Git - unikraft/libs/newlib.git/commitdiff
Add missing symbols to the uksignal interface
authorRazvan Virtan <razvanvirtan@gmail.com>
Mon, 4 Oct 2021 16:50:18 +0000 (19:50 +0300)
committerUnikraft <monkey@unikraft.io>
Sat, 27 Nov 2021 17:59:15 +0000 (17:59 +0000)
The Go runtime requires some symbols related to signals that are not
currently defined in `signal.h` (after the uksignal support was added).
Changes brought in this commit:
- add missing fields to `siginfo_t`
- declare `sigaltstack` (the stub implementation is added to uksignal
in a separate pull request, part of the core Unikraft repository)
- add symbols for `ss_flags` values

Signed-off-by: Răzvan Vîrtan <virtanrazvan@gmail.com>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Pull-Request: #11

musl-imported/include/signal.h

index 55b40d15b66d7cd18c94659f731985f8f6944ff2..5a53589720b143f05968a753dda8ae74df8ee735 100644 (file)
@@ -65,11 +65,33 @@ typedef __sigset_t sigset_t;
 
 #define NSIG _NSIG
 
+/* XXX: not used - defined just for newlib */
+union sigval {
+       int    sival_int;       /* Integer signal value */
+       void  *sival_ptr;       /* Pointer signal value */
+};
+
 typedef struct {
        int          si_signo;    /* Signal number */
        int          si_code;     /* Cause of the signal */
        pid_t          si_pid;      /* Sending process ID */
+       union sigval si_value;    /* Signal value */
+
+       union {
+               struct {
+                       void *si_addr;
+                       short si_addr_lsb;
+                       union {
+                               struct {
+                                       void *si_lower;
+                                       void *si_upper;
+                               } __addr_bnd;
+                               unsigned si_pkey;
+                       } __first;
+               } __sigfault;
+       } __si_fields;
 } siginfo_t;
+#define si_addr    __si_fields.__sigfault.si_addr
 
 struct sigaction {
        union {
@@ -119,18 +141,18 @@ int sigismember(const sigset_t *set, int signo);
 int siginterrupt(int sig, int flag);
 void psignal(int sig, const char *s);
 
-/* TODO: not used - defined just for newlib */
-union sigval {
-       int    sival_int;       /* Integer signal value */
-       void  *sival_ptr;       /* Pointer signal value */
-};
-
 struct sigevent {
        int              sigev_notify;  /* Notification type */
        int              sigev_signo;   /* Signal number */
        union sigval     sigev_value;   /* Signal value */
 };
 
+/*
+ * Possible values for ss_flags in stack_t below.
+ */
+#define        SS_ONSTACK      0x1
+#define        SS_DISABLE      0x2
+
 /* TODO: not used - defined just for v8 */
 typedef struct sigaltstack {
        void *ss_sp;
@@ -138,6 +160,8 @@ typedef struct sigaltstack {
        size_t ss_size;
 } stack_t;
 
+int sigaltstack(const stack_t *ss, stack_t *old_ss);
+
 #ifdef __cplusplus
 }
 #endif