hc
2024-03-22 a0752693d998599af469473b8dc239ef973a012f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#ifndef __siginfo_t_defined
#define __siginfo_t_defined 1
 
#include <bits/wordsize.h>
#include <bits/types.h>
#include <bits/types/__sigval_t.h>
 
#define __SI_MAX_SIZE    128
#if __WORDSIZE == 64
# define __SI_PAD_SIZE    ((__SI_MAX_SIZE / sizeof (int)) - 4)
#else
# define __SI_PAD_SIZE    ((__SI_MAX_SIZE / sizeof (int)) - 3)
#endif
 
/* Some fields of siginfo_t have architecture-specific variations.  */
#include <bits/siginfo-arch.h>
#ifndef __SI_ALIGNMENT
# define __SI_ALIGNMENT        /* nothing */
#endif
#ifndef __SI_BAND_TYPE
# define __SI_BAND_TYPE        long int
#endif
#ifndef __SI_CLOCK_T
# define __SI_CLOCK_T        __clock_t
#endif
#ifndef __SI_ERRNO_THEN_CODE
# define __SI_ERRNO_THEN_CODE    1
#endif
#ifndef __SI_HAVE_SIGSYS
# define __SI_HAVE_SIGSYS    1
#endif
#ifndef __SI_SIGFAULT_ADDL
# define __SI_SIGFAULT_ADDL    /* nothing */
#endif
 
typedef struct
  {
    int si_signo;        /* Signal number.  */
#if __SI_ERRNO_THEN_CODE
    int si_errno;        /* If non-zero, an errno value associated with
                  this signal, as defined in <errno.h>.  */
    int si_code;        /* Signal code.  */
#else
    int si_code;
    int si_errno;
#endif
#if __WORDSIZE == 64
    int __pad0;            /* Explicit padding.  */
#endif
 
    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.  */
       __sigval_t 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.  */
       __sigval_t 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.  */
       __SI_CLOCK_T si_utime;
       __SI_CLOCK_T si_stime;
     } _sigchld;
 
   /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
   struct
     {
       void *si_addr;        /* Faulting insn/memory ref.  */
       __SI_SIGFAULT_ADDL
       short int si_addr_lsb;  /* Valid LSB of the reported address.  */
       union
         {
       /* used when si_code=SEGV_BNDERR */
       struct
         {
           void *_lower;
           void *_upper;
         } _addr_bnd;
       /* used when si_code=SEGV_PKUERR */
       __uint32_t _pkey;
         } _bounds;
     } _sigfault;
 
   /* SIGPOLL.  */
   struct
     {
       __SI_BAND_TYPE si_band;    /* Band event for SIGPOLL.  */
       int si_fd;
     } _sigpoll;
 
   /* SIGSYS.  */
#if __SI_HAVE_SIGSYS
   struct
     {
       void *_call_addr;    /* Calling user insn.  */
       int _syscall;    /* Triggering system call number.  */
       unsigned int _arch; /* AUDIT_ARCH_* of syscall.  */
     } _sigsys;
#endif
      } _sifields;
  } siginfo_t __SI_ALIGNMENT;
 
 
/* X/Open requires some more fields with fixed names.  */
#define si_pid        _sifields._kill.si_pid
#define si_uid        _sifields._kill.si_uid
#define si_timerid    _sifields._timer.si_tid
#define si_overrun    _sifields._timer.si_overrun
#define si_status    _sifields._sigchld.si_status
#define si_utime    _sifields._sigchld.si_utime
#define si_stime    _sifields._sigchld.si_stime
#define si_value    _sifields._rt.si_sigval
#define si_int        _sifields._rt.si_sigval.sival_int
#define si_ptr        _sifields._rt.si_sigval.sival_ptr
#define si_addr        _sifields._sigfault.si_addr
#define si_addr_lsb    _sifields._sigfault.si_addr_lsb
#define si_lower    _sifields._sigfault._bounds._addr_bnd._lower
#define si_upper    _sifields._sigfault._bounds._addr_bnd._upper
#define si_pkey        _sifields._sigfault._bounds._pkey
#define si_band        _sifields._sigpoll.si_band
#define si_fd        _sifields._sigpoll.si_fd
#if __SI_HAVE_SIGSYS
# define si_call_addr    _sifields._sigsys._call_addr
# define si_syscall    _sifields._sigsys._syscall
# define si_arch    _sifields._sigsys._arch
#endif
 
#endif