]>
Commit | Line | Data |
---|---|---|
b667dd70 | 1 | //===-- sanitizer_platform_limits_freebsd.cpp -----------------------------===// |
eac97531 | 2 | // |
b667dd70 ML |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. | |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
eac97531 ML |
6 | // |
7 | //===----------------------------------------------------------------------===// | |
8 | // | |
9 | // This file is a part of Sanitizer common code. | |
10 | // | |
b667dd70 | 11 | // Sizes and layouts of platform-specific FreeBSD data structures. |
eac97531 ML |
12 | //===----------------------------------------------------------------------===// |
13 | ||
14 | #include "sanitizer_platform.h" | |
15 | ||
b667dd70 ML |
16 | #if SANITIZER_FREEBSD |
17 | ||
3c6331c2 ML |
18 | #include <sys/capsicum.h> |
19 | #include <sys/consio.h> | |
20 | #include <sys/filio.h> | |
21 | #include <sys/ipc.h> | |
22 | #include <sys/kbio.h> | |
23 | #include <sys/link_elf.h> | |
24 | #include <sys/mman.h> | |
25 | #include <sys/mount.h> | |
26 | #include <sys/mqueue.h> | |
27 | #include <sys/msg.h> | |
28 | #include <sys/mtio.h> | |
29 | #include <sys/ptrace.h> | |
30 | #include <sys/resource.h> | |
31 | #include <sys/signal.h> | |
32 | #include <sys/socket.h> | |
33 | #include <sys/sockio.h> | |
34 | #include <sys/soundcard.h> | |
35 | #include <sys/stat.h> | |
36 | #include <sys/statvfs.h> | |
37 | #include <sys/time.h> | |
38 | #include <sys/timeb.h> | |
39 | #include <sys/times.h> | |
40 | #include <sys/timespec.h> | |
41 | #include <sys/types.h> | |
42 | #include <sys/ucontext.h> | |
43 | #include <sys/utsname.h> | |
44 | // | |
eac97531 | 45 | #include <arpa/inet.h> |
3c6331c2 ML |
46 | #include <net/ethernet.h> |
47 | #include <net/if.h> | |
48 | #include <net/ppp_defs.h> | |
49 | #include <net/route.h> | |
50 | #include <netdb.h> | |
51 | #include <netinet/in.h> | |
52 | #include <netinet/ip_mroute.h> | |
53 | // | |
eac97531 | 54 | #include <dirent.h> |
3c6331c2 | 55 | #include <dlfcn.h> |
b667dd70 | 56 | #include <fstab.h> |
3c6331c2 ML |
57 | #include <fts.h> |
58 | #include <glob.h> | |
eac97531 | 59 | #include <grp.h> |
3c6331c2 | 60 | #include <ifaddrs.h> |
eac97531 | 61 | #include <limits.h> |
eac97531 ML |
62 | #include <poll.h> |
63 | #include <pthread.h> | |
64 | #include <pwd.h> | |
b667dd70 | 65 | #include <regex.h> |
3c6331c2 | 66 | #include <semaphore.h> |
eac97531 ML |
67 | #include <signal.h> |
68 | #include <stddef.h> | |
b667dd70 ML |
69 | #include <stdio.h> |
70 | #include <stringlist.h> | |
71 | #include <term.h> | |
3c6331c2 ML |
72 | #include <termios.h> |
73 | #include <time.h> | |
74 | #include <utime.h> | |
eac97531 | 75 | #include <utmpx.h> |
b667dd70 | 76 | #include <vis.h> |
3c6331c2 ML |
77 | #include <wchar.h> |
78 | #include <wordexp.h> | |
b667dd70 ML |
79 | |
80 | #define _KERNEL // to declare 'shminfo' structure | |
3c6331c2 | 81 | #include <sys/shm.h> |
b667dd70 ML |
82 | #undef _KERNEL |
83 | ||
84 | #undef INLINE // to avoid clashes with sanitizers' definitions | |
85 | ||
86 | #undef IOC_DIRMASK | |
87 | ||
eac97531 ML |
88 | // Include these after system headers to avoid name clashes and ambiguities. |
89 | #include "sanitizer_internal_defs.h" | |
3c6331c2 | 90 | #include "sanitizer_libc.h" |
b667dd70 | 91 | #include "sanitizer_platform_limits_freebsd.h" |
eac97531 ML |
92 | |
93 | namespace __sanitizer { | |
3c6331c2 ML |
94 | void *__sanitizer_get_link_map_by_dlopen_handle(void *handle) { |
95 | void *p = nullptr; | |
96 | return internal_dlinfo(handle, RTLD_DI_LINKMAP, &p) == 0 ? p : nullptr; | |
97 | } | |
98 | ||
99 | unsigned struct_cap_rights_sz = sizeof(cap_rights_t); | |
100 | unsigned struct_utsname_sz = sizeof(struct utsname); | |
101 | unsigned struct_stat_sz = sizeof(struct stat); | |
102 | unsigned struct_rusage_sz = sizeof(struct rusage); | |
103 | unsigned struct_tm_sz = sizeof(struct tm); | |
104 | unsigned struct_passwd_sz = sizeof(struct passwd); | |
105 | unsigned struct_group_sz = sizeof(struct group); | |
106 | unsigned siginfo_t_sz = sizeof(siginfo_t); | |
107 | unsigned struct_sigaction_sz = sizeof(struct sigaction); | |
108 | unsigned struct_stack_t_sz = sizeof(stack_t); | |
109 | unsigned struct_itimerval_sz = sizeof(struct itimerval); | |
110 | unsigned pthread_t_sz = sizeof(pthread_t); | |
111 | unsigned pthread_mutex_t_sz = sizeof(pthread_mutex_t); | |
112 | unsigned pthread_cond_t_sz = sizeof(pthread_cond_t); | |
113 | unsigned pid_t_sz = sizeof(pid_t); | |
114 | unsigned timeval_sz = sizeof(timeval); | |
115 | unsigned uid_t_sz = sizeof(uid_t); | |
116 | unsigned gid_t_sz = sizeof(gid_t); | |
117 | unsigned fpos_t_sz = sizeof(fpos_t); | |
118 | unsigned mbstate_t_sz = sizeof(mbstate_t); | |
119 | unsigned sigset_t_sz = sizeof(sigset_t); | |
120 | unsigned struct_timezone_sz = sizeof(struct timezone); | |
121 | unsigned struct_tms_sz = sizeof(struct tms); | |
122 | unsigned struct_sigevent_sz = sizeof(struct sigevent); | |
123 | unsigned struct_sched_param_sz = sizeof(struct sched_param); | |
124 | unsigned struct_statfs_sz = sizeof(struct statfs); | |
125 | unsigned struct_sockaddr_sz = sizeof(struct sockaddr); | |
126 | unsigned ucontext_t_sz = sizeof(ucontext_t); | |
127 | unsigned struct_rlimit_sz = sizeof(struct rlimit); | |
128 | unsigned struct_timespec_sz = sizeof(struct timespec); | |
129 | unsigned struct_utimbuf_sz = sizeof(struct utimbuf); | |
130 | unsigned struct_itimerspec_sz = sizeof(struct itimerspec); | |
131 | unsigned struct_timeb_sz = sizeof(struct timeb); | |
132 | unsigned struct_msqid_ds_sz = sizeof(struct msqid_ds); | |
133 | unsigned struct_mq_attr_sz = sizeof(struct mq_attr); | |
134 | unsigned struct_statvfs_sz = sizeof(struct statvfs); | |
135 | unsigned struct_shminfo_sz = sizeof(struct shminfo); | |
136 | unsigned struct_shm_info_sz = sizeof(struct shm_info); | |
137 | unsigned struct_regmatch_sz = sizeof(regmatch_t); | |
138 | unsigned struct_regex_sz = sizeof(regex_t); | |
139 | unsigned struct_fstab_sz = sizeof(struct fstab); | |
140 | unsigned struct_FTS_sz = sizeof(FTS); | |
141 | unsigned struct_FTSENT_sz = sizeof(FTSENT); | |
142 | unsigned struct_StringList_sz = sizeof(StringList); | |
eac97531 | 143 | |
3c6331c2 ML |
144 | const uptr sig_ign = (uptr)SIG_IGN; |
145 | const uptr sig_dfl = (uptr)SIG_DFL; | |
146 | const uptr sig_err = (uptr)SIG_ERR; | |
147 | const uptr sa_siginfo = (uptr)SA_SIGINFO; | |
eac97531 | 148 | |
3c6331c2 ML |
149 | int shmctl_ipc_stat = (int)IPC_STAT; |
150 | int shmctl_ipc_info = (int)IPC_INFO; | |
151 | int shmctl_shm_info = (int)SHM_INFO; | |
152 | int shmctl_shm_stat = (int)SHM_STAT; | |
153 | unsigned struct_utmpx_sz = sizeof(struct utmpx); | |
eac97531 | 154 | |
3c6331c2 | 155 | int map_fixed = MAP_FIXED; |
eac97531 | 156 | |
3c6331c2 ML |
157 | int af_inet = (int)AF_INET; |
158 | int af_inet6 = (int)AF_INET6; | |
eac97531 | 159 | |
3c6331c2 ML |
160 | uptr __sanitizer_in_addr_sz(int af) { |
161 | if (af == AF_INET) | |
162 | return sizeof(struct in_addr); | |
163 | else if (af == AF_INET6) | |
164 | return sizeof(struct in6_addr); | |
165 | else | |
166 | return 0; | |
167 | } | |
eac97531 | 168 | |
3c6331c2 ML |
169 | unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); |
170 | int glob_nomatch = GLOB_NOMATCH; | |
171 | int glob_altdirfunc = GLOB_ALTDIRFUNC; | |
eac97531 | 172 | |
3c6331c2 | 173 | unsigned path_max = PATH_MAX; |
eac97531 | 174 | |
3c6331c2 ML |
175 | // ioctl arguments |
176 | unsigned struct_ifreq_sz = sizeof(struct ifreq); | |
177 | unsigned struct_termios_sz = sizeof(struct termios); | |
178 | unsigned struct_winsize_sz = sizeof(struct winsize); | |
b667dd70 | 179 | #if SOUND_VERSION >= 0x040000 |
3c6331c2 ML |
180 | unsigned struct_copr_buffer_sz = 0; |
181 | unsigned struct_copr_debug_buf_sz = 0; | |
182 | unsigned struct_copr_msg_sz = 0; | |
b667dd70 | 183 | #else |
3c6331c2 ML |
184 | unsigned struct_copr_buffer_sz = sizeof(struct copr_buffer); |
185 | unsigned struct_copr_debug_buf_sz = sizeof(struct copr_debug_buf); | |
186 | unsigned struct_copr_msg_sz = sizeof(struct copr_msg); | |
b667dd70 | 187 | #endif |
3c6331c2 ML |
188 | unsigned struct_midi_info_sz = sizeof(struct midi_info); |
189 | unsigned struct_mtget_sz = sizeof(struct mtget); | |
190 | unsigned struct_mtop_sz = sizeof(struct mtop); | |
191 | unsigned struct_sbi_instrument_sz = sizeof(struct sbi_instrument); | |
192 | unsigned struct_seq_event_rec_sz = sizeof(struct seq_event_rec); | |
193 | unsigned struct_synth_info_sz = sizeof(struct synth_info); | |
194 | unsigned struct_audio_buf_info_sz = sizeof(struct audio_buf_info); | |
195 | unsigned struct_ppp_stats_sz = sizeof(struct ppp_stats); | |
196 | unsigned struct_sioc_sg_req_sz = sizeof(struct sioc_sg_req); | |
197 | unsigned struct_sioc_vif_req_sz = sizeof(struct sioc_vif_req); | |
198 | const unsigned long __sanitizer_bufsiz = BUFSIZ; | |
eac97531 | 199 | |
3c6331c2 | 200 | const unsigned IOCTL_NOT_PRESENT = 0; |
eac97531 | 201 | |
3c6331c2 ML |
202 | unsigned IOCTL_FIOASYNC = FIOASYNC; |
203 | unsigned IOCTL_FIOCLEX = FIOCLEX; | |
204 | unsigned IOCTL_FIOGETOWN = FIOGETOWN; | |
205 | unsigned IOCTL_FIONBIO = FIONBIO; | |
206 | unsigned IOCTL_FIONCLEX = FIONCLEX; | |
207 | unsigned IOCTL_FIOSETOWN = FIOSETOWN; | |
208 | unsigned IOCTL_SIOCADDMULTI = SIOCADDMULTI; | |
209 | unsigned IOCTL_SIOCATMARK = SIOCATMARK; | |
210 | unsigned IOCTL_SIOCDELMULTI = SIOCDELMULTI; | |
211 | unsigned IOCTL_SIOCGIFADDR = SIOCGIFADDR; | |
212 | unsigned IOCTL_SIOCGIFBRDADDR = SIOCGIFBRDADDR; | |
213 | unsigned IOCTL_SIOCGIFCONF = SIOCGIFCONF; | |
214 | unsigned IOCTL_SIOCGIFDSTADDR = SIOCGIFDSTADDR; | |
215 | unsigned IOCTL_SIOCGIFFLAGS = SIOCGIFFLAGS; | |
216 | unsigned IOCTL_SIOCGIFMETRIC = SIOCGIFMETRIC; | |
217 | unsigned IOCTL_SIOCGIFMTU = SIOCGIFMTU; | |
218 | unsigned IOCTL_SIOCGIFNETMASK = SIOCGIFNETMASK; | |
219 | unsigned IOCTL_SIOCGPGRP = SIOCGPGRP; | |
220 | unsigned IOCTL_SIOCSIFADDR = SIOCSIFADDR; | |
221 | unsigned IOCTL_SIOCSIFBRDADDR = SIOCSIFBRDADDR; | |
222 | unsigned IOCTL_SIOCSIFDSTADDR = SIOCSIFDSTADDR; | |
223 | unsigned IOCTL_SIOCSIFFLAGS = SIOCSIFFLAGS; | |
224 | unsigned IOCTL_SIOCSIFMETRIC = SIOCSIFMETRIC; | |
225 | unsigned IOCTL_SIOCSIFMTU = SIOCSIFMTU; | |
226 | unsigned IOCTL_SIOCSIFNETMASK = SIOCSIFNETMASK; | |
227 | unsigned IOCTL_SIOCSPGRP = SIOCSPGRP; | |
228 | unsigned IOCTL_TIOCCONS = TIOCCONS; | |
229 | unsigned IOCTL_TIOCEXCL = TIOCEXCL; | |
230 | unsigned IOCTL_TIOCGETD = TIOCGETD; | |
231 | unsigned IOCTL_TIOCGPGRP = TIOCGPGRP; | |
232 | unsigned IOCTL_TIOCGWINSZ = TIOCGWINSZ; | |
233 | unsigned IOCTL_TIOCMBIC = TIOCMBIC; | |
234 | unsigned IOCTL_TIOCMBIS = TIOCMBIS; | |
235 | unsigned IOCTL_TIOCMGET = TIOCMGET; | |
236 | unsigned IOCTL_TIOCMSET = TIOCMSET; | |
237 | unsigned IOCTL_TIOCNOTTY = TIOCNOTTY; | |
238 | unsigned IOCTL_TIOCNXCL = TIOCNXCL; | |
239 | unsigned IOCTL_TIOCOUTQ = TIOCOUTQ; | |
240 | unsigned IOCTL_TIOCPKT = TIOCPKT; | |
241 | unsigned IOCTL_TIOCSCTTY = TIOCSCTTY; | |
242 | unsigned IOCTL_TIOCSETD = TIOCSETD; | |
243 | unsigned IOCTL_TIOCSPGRP = TIOCSPGRP; | |
244 | unsigned IOCTL_TIOCSTI = TIOCSTI; | |
245 | unsigned IOCTL_TIOCSWINSZ = TIOCSWINSZ; | |
246 | unsigned IOCTL_SIOCGETSGCNT = SIOCGETSGCNT; | |
247 | unsigned IOCTL_SIOCGETVIFCNT = SIOCGETVIFCNT; | |
248 | unsigned IOCTL_MTIOCGET = MTIOCGET; | |
249 | unsigned IOCTL_MTIOCTOP = MTIOCTOP; | |
250 | unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE = SNDCTL_DSP_GETBLKSIZE; | |
251 | unsigned IOCTL_SNDCTL_DSP_GETFMTS = SNDCTL_DSP_GETFMTS; | |
252 | unsigned IOCTL_SNDCTL_DSP_NONBLOCK = SNDCTL_DSP_NONBLOCK; | |
253 | unsigned IOCTL_SNDCTL_DSP_POST = SNDCTL_DSP_POST; | |
254 | unsigned IOCTL_SNDCTL_DSP_RESET = SNDCTL_DSP_RESET; | |
255 | unsigned IOCTL_SNDCTL_DSP_SETFMT = SNDCTL_DSP_SETFMT; | |
256 | unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT = SNDCTL_DSP_SETFRAGMENT; | |
257 | unsigned IOCTL_SNDCTL_DSP_SPEED = SNDCTL_DSP_SPEED; | |
258 | unsigned IOCTL_SNDCTL_DSP_STEREO = SNDCTL_DSP_STEREO; | |
259 | unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE = SNDCTL_DSP_SUBDIVIDE; | |
260 | unsigned IOCTL_SNDCTL_DSP_SYNC = SNDCTL_DSP_SYNC; | |
261 | unsigned IOCTL_SNDCTL_FM_4OP_ENABLE = SNDCTL_FM_4OP_ENABLE; | |
262 | unsigned IOCTL_SNDCTL_FM_LOAD_INSTR = SNDCTL_FM_LOAD_INSTR; | |
263 | unsigned IOCTL_SNDCTL_MIDI_INFO = SNDCTL_MIDI_INFO; | |
264 | unsigned IOCTL_SNDCTL_MIDI_PRETIME = SNDCTL_MIDI_PRETIME; | |
265 | unsigned IOCTL_SNDCTL_SEQ_CTRLRATE = SNDCTL_SEQ_CTRLRATE; | |
266 | unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT = SNDCTL_SEQ_GETINCOUNT; | |
267 | unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT = SNDCTL_SEQ_GETOUTCOUNT; | |
268 | unsigned IOCTL_SNDCTL_SEQ_NRMIDIS = SNDCTL_SEQ_NRMIDIS; | |
269 | unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS = SNDCTL_SEQ_NRSYNTHS; | |
270 | unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND = SNDCTL_SEQ_OUTOFBAND; | |
271 | unsigned IOCTL_SNDCTL_SEQ_PANIC = SNDCTL_SEQ_PANIC; | |
272 | unsigned IOCTL_SNDCTL_SEQ_PERCMODE = SNDCTL_SEQ_PERCMODE; | |
273 | unsigned IOCTL_SNDCTL_SEQ_RESET = SNDCTL_SEQ_RESET; | |
274 | unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES = SNDCTL_SEQ_RESETSAMPLES; | |
275 | unsigned IOCTL_SNDCTL_SEQ_SYNC = SNDCTL_SEQ_SYNC; | |
276 | unsigned IOCTL_SNDCTL_SEQ_TESTMIDI = SNDCTL_SEQ_TESTMIDI; | |
277 | unsigned IOCTL_SNDCTL_SEQ_THRESHOLD = SNDCTL_SEQ_THRESHOLD; | |
278 | unsigned IOCTL_SNDCTL_SYNTH_INFO = SNDCTL_SYNTH_INFO; | |
279 | unsigned IOCTL_SNDCTL_SYNTH_MEMAVL = SNDCTL_SYNTH_MEMAVL; | |
280 | unsigned IOCTL_SNDCTL_TMR_CONTINUE = SNDCTL_TMR_CONTINUE; | |
281 | unsigned IOCTL_SNDCTL_TMR_METRONOME = SNDCTL_TMR_METRONOME; | |
282 | unsigned IOCTL_SNDCTL_TMR_SELECT = SNDCTL_TMR_SELECT; | |
283 | unsigned IOCTL_SNDCTL_TMR_SOURCE = SNDCTL_TMR_SOURCE; | |
284 | unsigned IOCTL_SNDCTL_TMR_START = SNDCTL_TMR_START; | |
285 | unsigned IOCTL_SNDCTL_TMR_STOP = SNDCTL_TMR_STOP; | |
286 | unsigned IOCTL_SNDCTL_TMR_TEMPO = SNDCTL_TMR_TEMPO; | |
287 | unsigned IOCTL_SNDCTL_TMR_TIMEBASE = SNDCTL_TMR_TIMEBASE; | |
288 | unsigned IOCTL_SOUND_MIXER_READ_ALTPCM = SOUND_MIXER_READ_ALTPCM; | |
289 | unsigned IOCTL_SOUND_MIXER_READ_BASS = SOUND_MIXER_READ_BASS; | |
290 | unsigned IOCTL_SOUND_MIXER_READ_CAPS = SOUND_MIXER_READ_CAPS; | |
291 | unsigned IOCTL_SOUND_MIXER_READ_CD = SOUND_MIXER_READ_CD; | |
292 | unsigned IOCTL_SOUND_MIXER_READ_DEVMASK = SOUND_MIXER_READ_DEVMASK; | |
293 | unsigned IOCTL_SOUND_MIXER_READ_ENHANCE = SOUND_MIXER_READ_ENHANCE; | |
294 | unsigned IOCTL_SOUND_MIXER_READ_IGAIN = SOUND_MIXER_READ_IGAIN; | |
295 | unsigned IOCTL_SOUND_MIXER_READ_IMIX = SOUND_MIXER_READ_IMIX; | |
296 | unsigned IOCTL_SOUND_MIXER_READ_LINE = SOUND_MIXER_READ_LINE; | |
297 | unsigned IOCTL_SOUND_MIXER_READ_LINE1 = SOUND_MIXER_READ_LINE1; | |
298 | unsigned IOCTL_SOUND_MIXER_READ_LINE2 = SOUND_MIXER_READ_LINE2; | |
299 | unsigned IOCTL_SOUND_MIXER_READ_LINE3 = SOUND_MIXER_READ_LINE3; | |
300 | unsigned IOCTL_SOUND_MIXER_READ_LOUD = SOUND_MIXER_READ_LOUD; | |
301 | unsigned IOCTL_SOUND_MIXER_READ_MIC = SOUND_MIXER_READ_MIC; | |
302 | unsigned IOCTL_SOUND_MIXER_READ_MUTE = SOUND_MIXER_READ_MUTE; | |
303 | unsigned IOCTL_SOUND_MIXER_READ_OGAIN = SOUND_MIXER_READ_OGAIN; | |
304 | unsigned IOCTL_SOUND_MIXER_READ_PCM = SOUND_MIXER_READ_PCM; | |
305 | unsigned IOCTL_SOUND_MIXER_READ_RECLEV = SOUND_MIXER_READ_RECLEV; | |
306 | unsigned IOCTL_SOUND_MIXER_READ_RECMASK = SOUND_MIXER_READ_RECMASK; | |
307 | unsigned IOCTL_SOUND_MIXER_READ_RECSRC = SOUND_MIXER_READ_RECSRC; | |
308 | unsigned IOCTL_SOUND_MIXER_READ_SPEAKER = SOUND_MIXER_READ_SPEAKER; | |
309 | unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS = SOUND_MIXER_READ_STEREODEVS; | |
310 | unsigned IOCTL_SOUND_MIXER_READ_SYNTH = SOUND_MIXER_READ_SYNTH; | |
311 | unsigned IOCTL_SOUND_MIXER_READ_TREBLE = SOUND_MIXER_READ_TREBLE; | |
312 | unsigned IOCTL_SOUND_MIXER_READ_VOLUME = SOUND_MIXER_READ_VOLUME; | |
313 | unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM = SOUND_MIXER_WRITE_ALTPCM; | |
314 | unsigned IOCTL_SOUND_MIXER_WRITE_BASS = SOUND_MIXER_WRITE_BASS; | |
315 | unsigned IOCTL_SOUND_MIXER_WRITE_CD = SOUND_MIXER_WRITE_CD; | |
316 | unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE = SOUND_MIXER_WRITE_ENHANCE; | |
317 | unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN = SOUND_MIXER_WRITE_IGAIN; | |
318 | unsigned IOCTL_SOUND_MIXER_WRITE_IMIX = SOUND_MIXER_WRITE_IMIX; | |
319 | unsigned IOCTL_SOUND_MIXER_WRITE_LINE = SOUND_MIXER_WRITE_LINE; | |
320 | unsigned IOCTL_SOUND_MIXER_WRITE_LINE1 = SOUND_MIXER_WRITE_LINE1; | |
321 | unsigned IOCTL_SOUND_MIXER_WRITE_LINE2 = SOUND_MIXER_WRITE_LINE2; | |
322 | unsigned IOCTL_SOUND_MIXER_WRITE_LINE3 = SOUND_MIXER_WRITE_LINE3; | |
323 | unsigned IOCTL_SOUND_MIXER_WRITE_LOUD = SOUND_MIXER_WRITE_LOUD; | |
324 | unsigned IOCTL_SOUND_MIXER_WRITE_MIC = SOUND_MIXER_WRITE_MIC; | |
325 | unsigned IOCTL_SOUND_MIXER_WRITE_MUTE = SOUND_MIXER_WRITE_MUTE; | |
326 | unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN = SOUND_MIXER_WRITE_OGAIN; | |
327 | unsigned IOCTL_SOUND_MIXER_WRITE_PCM = SOUND_MIXER_WRITE_PCM; | |
328 | unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV = SOUND_MIXER_WRITE_RECLEV; | |
329 | unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC = SOUND_MIXER_WRITE_RECSRC; | |
330 | unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER = SOUND_MIXER_WRITE_SPEAKER; | |
331 | unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH = SOUND_MIXER_WRITE_SYNTH; | |
332 | unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE = SOUND_MIXER_WRITE_TREBLE; | |
333 | unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME = SOUND_MIXER_WRITE_VOLUME; | |
334 | unsigned IOCTL_VT_ACTIVATE = VT_ACTIVATE; | |
335 | unsigned IOCTL_VT_GETMODE = VT_GETMODE; | |
336 | unsigned IOCTL_VT_OPENQRY = VT_OPENQRY; | |
337 | unsigned IOCTL_VT_RELDISP = VT_RELDISP; | |
338 | unsigned IOCTL_VT_SETMODE = VT_SETMODE; | |
339 | unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE; | |
340 | unsigned IOCTL_GIO_SCRNMAP = GIO_SCRNMAP; | |
341 | unsigned IOCTL_KDDISABIO = KDDISABIO; | |
342 | unsigned IOCTL_KDENABIO = KDENABIO; | |
343 | unsigned IOCTL_KDGETLED = KDGETLED; | |
344 | unsigned IOCTL_KDGETMODE = KDGETMODE; | |
345 | unsigned IOCTL_KDGKBMODE = KDGKBMODE; | |
346 | unsigned IOCTL_KDGKBTYPE = KDGKBTYPE; | |
347 | unsigned IOCTL_KDMKTONE = KDMKTONE; | |
348 | unsigned IOCTL_KDSETLED = KDSETLED; | |
349 | unsigned IOCTL_KDSETMODE = KDSETMODE; | |
350 | unsigned IOCTL_KDSKBMODE = KDSKBMODE; | |
351 | unsigned IOCTL_KIOCSOUND = KIOCSOUND; | |
352 | unsigned IOCTL_PIO_SCRNMAP = PIO_SCRNMAP; | |
353 | unsigned IOCTL_SNDCTL_DSP_GETISPACE = SNDCTL_DSP_GETISPACE; | |
eac97531 | 354 | |
3c6331c2 ML |
355 | const int si_SEGV_MAPERR = SEGV_MAPERR; |
356 | const int si_SEGV_ACCERR = SEGV_ACCERR; | |
357 | const int unvis_valid = UNVIS_VALID; | |
358 | const int unvis_validpush = UNVIS_VALIDPUSH; | |
359 | } // namespace __sanitizer | |
eac97531 ML |
360 | |
361 | using namespace __sanitizer; | |
362 | ||
363 | COMPILER_CHECK(sizeof(__sanitizer_pthread_attr_t) >= sizeof(pthread_attr_t)); | |
364 | ||
365 | COMPILER_CHECK(sizeof(socklen_t) == sizeof(unsigned)); | |
366 | CHECK_TYPE_SIZE(pthread_key_t); | |
367 | ||
368 | // There are more undocumented fields in dl_phdr_info that we are not interested | |
369 | // in. | |
370 | COMPILER_CHECK(sizeof(__sanitizer_dl_phdr_info) <= sizeof(dl_phdr_info)); | |
371 | CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_addr); | |
372 | CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_name); | |
373 | CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr); | |
374 | CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum); | |
375 | ||
376 | CHECK_TYPE_SIZE(glob_t); | |
377 | CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc); | |
378 | CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv); | |
379 | CHECK_SIZE_AND_OFFSET(glob_t, gl_offs); | |
b667dd70 ML |
380 | CHECK_SIZE_AND_OFFSET(glob_t, gl_flags); |
381 | CHECK_SIZE_AND_OFFSET(glob_t, gl_closedir); | |
382 | CHECK_SIZE_AND_OFFSET(glob_t, gl_readdir); | |
383 | CHECK_SIZE_AND_OFFSET(glob_t, gl_opendir); | |
384 | CHECK_SIZE_AND_OFFSET(glob_t, gl_lstat); | |
385 | CHECK_SIZE_AND_OFFSET(glob_t, gl_stat); | |
eac97531 ML |
386 | |
387 | CHECK_TYPE_SIZE(addrinfo); | |
388 | CHECK_SIZE_AND_OFFSET(addrinfo, ai_flags); | |
389 | CHECK_SIZE_AND_OFFSET(addrinfo, ai_family); | |
390 | CHECK_SIZE_AND_OFFSET(addrinfo, ai_socktype); | |
391 | CHECK_SIZE_AND_OFFSET(addrinfo, ai_protocol); | |
392 | CHECK_SIZE_AND_OFFSET(addrinfo, ai_protocol); | |
393 | CHECK_SIZE_AND_OFFSET(addrinfo, ai_addrlen); | |
394 | CHECK_SIZE_AND_OFFSET(addrinfo, ai_canonname); | |
395 | CHECK_SIZE_AND_OFFSET(addrinfo, ai_addr); | |
396 | ||
397 | CHECK_TYPE_SIZE(hostent); | |
398 | CHECK_SIZE_AND_OFFSET(hostent, h_name); | |
399 | CHECK_SIZE_AND_OFFSET(hostent, h_aliases); | |
400 | CHECK_SIZE_AND_OFFSET(hostent, h_addrtype); | |
401 | CHECK_SIZE_AND_OFFSET(hostent, h_length); | |
402 | CHECK_SIZE_AND_OFFSET(hostent, h_addr_list); | |
403 | ||
404 | CHECK_TYPE_SIZE(iovec); | |
405 | CHECK_SIZE_AND_OFFSET(iovec, iov_base); | |
406 | CHECK_SIZE_AND_OFFSET(iovec, iov_len); | |
407 | ||
408 | CHECK_TYPE_SIZE(msghdr); | |
409 | CHECK_SIZE_AND_OFFSET(msghdr, msg_name); | |
410 | CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen); | |
411 | CHECK_SIZE_AND_OFFSET(msghdr, msg_iov); | |
412 | CHECK_SIZE_AND_OFFSET(msghdr, msg_iovlen); | |
413 | CHECK_SIZE_AND_OFFSET(msghdr, msg_control); | |
414 | CHECK_SIZE_AND_OFFSET(msghdr, msg_controllen); | |
415 | CHECK_SIZE_AND_OFFSET(msghdr, msg_flags); | |
416 | ||
417 | CHECK_TYPE_SIZE(cmsghdr); | |
418 | CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len); | |
419 | CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level); | |
420 | CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type); | |
421 | ||
422 | COMPILER_CHECK(sizeof(__sanitizer_dirent) <= sizeof(dirent)); | |
423 | CHECK_SIZE_AND_OFFSET(dirent, d_ino); | |
eac97531 ML |
424 | CHECK_SIZE_AND_OFFSET(dirent, d_reclen); |
425 | ||
eac97531 ML |
426 | CHECK_TYPE_SIZE(ifconf); |
427 | CHECK_SIZE_AND_OFFSET(ifconf, ifc_len); | |
428 | CHECK_SIZE_AND_OFFSET(ifconf, ifc_ifcu); | |
429 | ||
430 | CHECK_TYPE_SIZE(pollfd); | |
431 | CHECK_SIZE_AND_OFFSET(pollfd, fd); | |
432 | CHECK_SIZE_AND_OFFSET(pollfd, events); | |
433 | CHECK_SIZE_AND_OFFSET(pollfd, revents); | |
434 | ||
435 | CHECK_TYPE_SIZE(nfds_t); | |
436 | ||
437 | CHECK_TYPE_SIZE(sigset_t); | |
438 | ||
439 | COMPILER_CHECK(sizeof(__sanitizer_sigaction) == sizeof(struct sigaction)); | |
440 | // Can't write checks for sa_handler and sa_sigaction due to them being | |
441 | // preprocessor macros. | |
442 | CHECK_STRUCT_SIZE_AND_OFFSET(sigaction, sa_mask); | |
eac97531 ML |
443 | |
444 | CHECK_TYPE_SIZE(wordexp_t); | |
445 | CHECK_SIZE_AND_OFFSET(wordexp_t, we_wordc); | |
446 | CHECK_SIZE_AND_OFFSET(wordexp_t, we_wordv); | |
447 | CHECK_SIZE_AND_OFFSET(wordexp_t, we_offs); | |
448 | ||
449 | CHECK_TYPE_SIZE(tm); | |
450 | CHECK_SIZE_AND_OFFSET(tm, tm_sec); | |
451 | CHECK_SIZE_AND_OFFSET(tm, tm_min); | |
452 | CHECK_SIZE_AND_OFFSET(tm, tm_hour); | |
453 | CHECK_SIZE_AND_OFFSET(tm, tm_mday); | |
454 | CHECK_SIZE_AND_OFFSET(tm, tm_mon); | |
455 | CHECK_SIZE_AND_OFFSET(tm, tm_year); | |
456 | CHECK_SIZE_AND_OFFSET(tm, tm_wday); | |
457 | CHECK_SIZE_AND_OFFSET(tm, tm_yday); | |
458 | CHECK_SIZE_AND_OFFSET(tm, tm_isdst); | |
b667dd70 ML |
459 | CHECK_SIZE_AND_OFFSET(tm, tm_gmtoff); |
460 | CHECK_SIZE_AND_OFFSET(tm, tm_zone); | |
eac97531 ML |
461 | |
462 | CHECK_TYPE_SIZE(ether_addr); | |
463 | ||
464 | CHECK_TYPE_SIZE(ipc_perm); | |
465 | CHECK_SIZE_AND_OFFSET(ipc_perm, key); | |
466 | CHECK_SIZE_AND_OFFSET(ipc_perm, seq); | |
467 | CHECK_SIZE_AND_OFFSET(ipc_perm, uid); | |
468 | CHECK_SIZE_AND_OFFSET(ipc_perm, gid); | |
469 | CHECK_SIZE_AND_OFFSET(ipc_perm, cuid); | |
470 | CHECK_SIZE_AND_OFFSET(ipc_perm, cgid); | |
eac97531 ML |
471 | |
472 | CHECK_TYPE_SIZE(shmid_ds); | |
473 | CHECK_SIZE_AND_OFFSET(shmid_ds, shm_perm); | |
474 | CHECK_SIZE_AND_OFFSET(shmid_ds, shm_segsz); | |
475 | CHECK_SIZE_AND_OFFSET(shmid_ds, shm_atime); | |
476 | CHECK_SIZE_AND_OFFSET(shmid_ds, shm_dtime); | |
477 | CHECK_SIZE_AND_OFFSET(shmid_ds, shm_ctime); | |
478 | CHECK_SIZE_AND_OFFSET(shmid_ds, shm_cpid); | |
479 | CHECK_SIZE_AND_OFFSET(shmid_ds, shm_lpid); | |
480 | CHECK_SIZE_AND_OFFSET(shmid_ds, shm_nattch); | |
481 | ||
482 | CHECK_TYPE_SIZE(clock_t); | |
483 | ||
484 | CHECK_TYPE_SIZE(ifaddrs); | |
485 | CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_next); | |
486 | CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_name); | |
487 | CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_addr); | |
488 | CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_netmask); | |
eac97531 | 489 | #undef ifa_dstaddr |
b667dd70 | 490 | CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr); |
eac97531 ML |
491 | CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data); |
492 | ||
493 | CHECK_TYPE_SIZE(timeb); | |
494 | CHECK_SIZE_AND_OFFSET(timeb, time); | |
495 | CHECK_SIZE_AND_OFFSET(timeb, millitm); | |
496 | CHECK_SIZE_AND_OFFSET(timeb, timezone); | |
497 | CHECK_SIZE_AND_OFFSET(timeb, dstflag); | |
498 | ||
499 | CHECK_TYPE_SIZE(passwd); | |
500 | CHECK_SIZE_AND_OFFSET(passwd, pw_name); | |
501 | CHECK_SIZE_AND_OFFSET(passwd, pw_passwd); | |
502 | CHECK_SIZE_AND_OFFSET(passwd, pw_uid); | |
503 | CHECK_SIZE_AND_OFFSET(passwd, pw_gid); | |
504 | CHECK_SIZE_AND_OFFSET(passwd, pw_dir); | |
505 | CHECK_SIZE_AND_OFFSET(passwd, pw_shell); | |
506 | ||
507 | CHECK_SIZE_AND_OFFSET(passwd, pw_gecos); | |
508 | ||
509 | CHECK_TYPE_SIZE(group); | |
510 | CHECK_SIZE_AND_OFFSET(group, gr_name); | |
511 | CHECK_SIZE_AND_OFFSET(group, gr_passwd); | |
512 | CHECK_SIZE_AND_OFFSET(group, gr_gid); | |
513 | CHECK_SIZE_AND_OFFSET(group, gr_mem); | |
514 | ||
b667dd70 | 515 | #if HAVE_RPC_XDR_H |
eac97531 ML |
516 | CHECK_TYPE_SIZE(XDR); |
517 | CHECK_SIZE_AND_OFFSET(XDR, x_op); | |
518 | CHECK_SIZE_AND_OFFSET(XDR, x_ops); | |
519 | CHECK_SIZE_AND_OFFSET(XDR, x_public); | |
520 | CHECK_SIZE_AND_OFFSET(XDR, x_private); | |
521 | CHECK_SIZE_AND_OFFSET(XDR, x_base); | |
522 | CHECK_SIZE_AND_OFFSET(XDR, x_handy); | |
523 | COMPILER_CHECK(__sanitizer_XDR_ENCODE == XDR_ENCODE); | |
524 | COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE); | |
525 | COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE); | |
b667dd70 | 526 | #endif |
eac97531 ML |
527 | |
528 | CHECK_TYPE_SIZE(sem_t); | |
529 | ||
b667dd70 ML |
530 | COMPILER_CHECK(sizeof(__sanitizer_cap_rights_t) >= sizeof(cap_rights_t)); |
531 | #endif // SANITIZER_FREEBSD |