 diff -Naur ../newlib-2.5.0.20170922/newlib/libc/include/sys/signal.h ./newlib/libc/include/sys/signal.h
 --- ../newlib-2.5.0.20170922/newlib/libc/include/sys/signal.h
 +++ ./newlib/libc/include/sys/signal.h
-@@ -72,7 +72,7 @@
- } siginfo_t;
+@@ -44,16 +44,47 @@
+   void  *sival_ptr;    /* Pointer signal value */
+ };
+ 
++#define __SI_MAX_SIZE     128
++#define __SIGEV_MAX_SIZE  64
++#if __WORDSIZE == 64
++#define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 4)
++#define __SIGEV_PAD_SIZE  ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
++#else
++#define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 3)
++#define __SIGEV_PAD_SIZE  ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
++#endif
++
++#if __WORDSIZE == 64
++#else
++#endif
++
++#if defined __x86_64__ && __WORDSIZE == 32
++typedef __clock_t __attribute__ ((__aligned__ (4))) __sigchld_clock_t;
++#define __SI_ALIGNMENT __attribute__ ((__aligned__ (8)))
++#else
++typedef __clock_t __sigchld_clock_t;
++#define __SI_ALIGNMENT
++#endif
++
+ struct sigevent {
+   int              sigev_notify;               /* Notification type */
+   int              sigev_signo;                /* Signal number */
+   union sigval     sigev_value;                /* Signal value */
+ 
+-#if defined(_POSIX_THREADS)
+-  void           (*sigev_notify_function)( union sigval );
+-                                               /* Notification function */
+-  pthread_attr_t  *sigev_notify_attributes;    /* Notification Attributes */
+-#endif
++  union {
++    int _pad[__SIGEV_PAD_SIZE];
++
++    /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
++       thread to receive the signal.  */
++    __pid_t _tid;
++
++    #if defined(_POSIX_THREADS)
++    struct {
++      void (*sigev_notify_function)( union sigval ); /* Notification function */
++      pthread_attr_t  *sigev_notify_attributes;    /* Notification Attributes */
++    } _sigev_thread;
++    #endif
++  } _sigev_un;
+ };
+ 
+ /* Signal Actions, P1003.1b-1993, p. 64 */
+@@ -69,10 +100,62 @@
+   int          si_signo;    /* Signal number */
+   int          si_code;     /* Cause of the signal */
+   union sigval si_value;    /* Signal value */
+-} siginfo_t;
++  union {
++    int _pad[__SI_PAD_SIZE];
++
++    /* kill().  */
++    struct {
++      __pid_t si_pid;  /* Sending process ID.  */
++      __uid_t si_uid;  /* Real user ID of sending process.  */
++    } _kill;
++
++    /* POSIX.1b timers.  */
++    struct {
++      int si_tid;              /* Timer ID.  */
++      int si_overrun;          /* Overrun count.  */
++      union sigval si_sigval;  /* Signal value.  */
++    } _timer;
++
++    /* POSIX.1b signals.  */
++    struct {
++      __pid_t si_pid;          /* Sending process ID.  */
++      __uid_t si_uid;          /* Real user ID of sending process.  */
++      union sigval si_sigval;  /* Signal value.  */
++    } _rt;
++
++    /* SIGCHLD.  */
++    struct {
++      __pid_t si_pid;    /* Which child.  */
++      __uid_t si_uid;    /* Real user ID of sending process.  */
++      int si_status;     /* Exit value or signal.  */
++      __sigchld_clock_t si_utime;
++      __sigchld_clock_t si_stime;
++    } _sigchld;
++
++    /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
++    struct {
++      void *si_addr;          /* Faulting insn/memory ref.  */
++      short int si_addr_lsb;  /* Valid LSB of the reported address.  */
++    } _sigfault;
++
++    /* SIGPOLL.  */
++    struct {
++      long int si_band;  /* Band event for SIGPOLL.  */
++      int si_fd;
++    } _sigpoll;
++
++    /* SIGSYS.  */
++    struct {
++      void *_call_addr;    /* Calling user insn.  */
++      int _syscall;        /* Triggering system call number.  */
++      unsigned int _arch;  /* AUDIT_ARCH_* of syscall.  */
++    } _sigsys;
++  } _sifields;
++} siginfo_t __SI_ALIGNMENT;
++
  #endif /* defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309 */
  
 -#if defined(__rtems__)

 
 /*  3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */
 
@@ -112,7 +112,7 @@
 #define sa_sigaction  _signal_handlers._sigaction
 #endif
 

 
 #define SA_NOCLDSTOP 1  /* only value supported now for sa_flags */
 
 typedef void (*_sig_func_ptr)(int);
 
-struct sigaction 
+struct sigaction
 {
 	_sig_func_ptr sa_handler;
 	sigset_t sa_mask;
 	int sa_flags;
 };
