master
  1//===-- sanitizer_platform_limits_freebsd.h -------------------------------===//
  2//
  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
  6//
  7//===----------------------------------------------------------------------===//
  8//
  9// This file is a part of Sanitizer common code.
 10//
 11// Sizes and layouts of platform-specific FreeBSD data structures.
 12//===----------------------------------------------------------------------===//
 13
 14#ifndef SANITIZER_PLATFORM_LIMITS_FREEBSD_H
 15#define SANITIZER_PLATFORM_LIMITS_FREEBSD_H
 16
 17#if SANITIZER_FREEBSD
 18
 19#  include "sanitizer_internal_defs.h"
 20#  include "sanitizer_platform.h"
 21#  include "sanitizer_platform_limits_posix.h"
 22
 23// Get sys/_types.h, because that tells us whether 64-bit inodes are
 24// used in struct dirent below.
 25#  include <sys/_types.h>
 26
 27namespace __sanitizer {
 28void *__sanitizer_get_link_map_by_dlopen_handle(void *handle);
 29#  define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) \
 30    (link_map *)__sanitizer_get_link_map_by_dlopen_handle(handle)
 31
 32extern unsigned struct_utsname_sz;
 33extern unsigned struct_stat_sz;
 34#  if defined(__powerpc64__)
 35const unsigned struct___old_kernel_stat_sz = 0;
 36#  else
 37const unsigned struct___old_kernel_stat_sz = 32;
 38#  endif
 39extern unsigned struct_rusage_sz;
 40extern unsigned siginfo_t_sz;
 41extern unsigned struct_itimerval_sz;
 42extern unsigned pthread_t_sz;
 43extern unsigned pthread_mutex_t_sz;
 44extern unsigned pthread_cond_t_sz;
 45extern unsigned pid_t_sz;
 46extern unsigned timeval_sz;
 47extern unsigned uid_t_sz;
 48extern unsigned gid_t_sz;
 49extern unsigned fpos_t_sz;
 50extern unsigned mbstate_t_sz;
 51extern unsigned struct_timezone_sz;
 52extern unsigned struct_tms_sz;
 53extern unsigned struct_itimerspec_sz;
 54extern unsigned struct_sigevent_sz;
 55extern unsigned struct_stack_t_sz;
 56extern unsigned struct_sched_param_sz;
 57extern unsigned struct_statfs64_sz;
 58extern unsigned struct_statfs_sz;
 59extern unsigned struct_sockaddr_sz;
 60unsigned ucontext_t_sz(void *ctx);
 61extern unsigned struct_rlimit_sz;
 62extern unsigned struct_utimbuf_sz;
 63extern unsigned struct_timespec_sz;
 64extern unsigned struct_regmatch_sz;
 65extern unsigned struct_regex_sz;
 66extern unsigned struct_FTS_sz;
 67extern unsigned struct_FTSENT_sz;
 68extern const int unvis_valid;
 69extern const int unvis_validpush;
 70
 71struct __sanitizer_iocb {
 72  u64 aio_data;
 73  u32 aio_key_or_aio_reserved1;  // Simply crazy.
 74  u32 aio_reserved1_or_aio_key;  // Luckily, we don't need these.
 75  u16 aio_lio_opcode;
 76  s16 aio_reqprio;
 77  u32 aio_fildes;
 78  u64 aio_buf;
 79  u64 aio_nbytes;
 80  s64 aio_offset;
 81  u64 aio_reserved2;
 82  u64 aio_reserved3;
 83};
 84
 85struct __sanitizer_io_event {
 86  u64 data;
 87  u64 obj;
 88  u64 res;
 89  u64 res2;
 90};
 91
 92const unsigned iocb_cmd_pread = 0;
 93const unsigned iocb_cmd_pwrite = 1;
 94const unsigned iocb_cmd_preadv = 7;
 95const unsigned iocb_cmd_pwritev = 8;
 96
 97struct __sanitizer___sysctl_args {
 98  int *name;
 99  int nlen;
100  void *oldval;
101  uptr *oldlenp;
102  void *newval;
103  uptr newlen;
104  unsigned long ___unused[4];
105};
106
107struct __sanitizer_ipc_perm {
108  unsigned int cuid;
109  unsigned int cgid;
110  unsigned int uid;
111  unsigned int gid;
112  unsigned short mode;
113  unsigned short seq;
114  long key;
115};
116
117struct __sanitizer_protoent {
118  char *p_name;
119  char **p_aliases;
120  int p_proto;
121};
122
123struct __sanitizer_netent {
124  char *n_name;
125  char **n_aliases;
126  int n_addrtype;
127  u32 n_net;
128};
129
130#  if !defined(__i386__)
131typedef long long __sanitizer_time_t;
132#  else
133typedef long __sanitizer_time_t;
134#  endif
135
136struct __sanitizer_shmid_ds {
137  __sanitizer_ipc_perm shm_perm;
138  unsigned long shm_segsz;
139  unsigned int shm_lpid;
140  unsigned int shm_cpid;
141  int shm_nattch;
142  __sanitizer_time_t shm_atime;
143  __sanitizer_time_t shm_dtime;
144  __sanitizer_time_t shm_ctime;
145};
146
147extern unsigned struct_msqid_ds_sz;
148extern unsigned struct_mq_attr_sz;
149extern unsigned struct_timeb_sz;
150extern unsigned struct_statvfs_sz;
151
152struct __sanitizer_iovec {
153  void *iov_base;
154  uptr iov_len;
155};
156
157struct __sanitizer_ifaddrs {
158  struct __sanitizer_ifaddrs *ifa_next;
159  char *ifa_name;
160  unsigned int ifa_flags;
161  void *ifa_addr;     // (struct sockaddr *)
162  void *ifa_netmask;  // (struct sockaddr *)
163#  undef ifa_dstaddr
164  void *ifa_dstaddr;  // (struct sockaddr *)
165  void *ifa_data;
166};
167
168typedef unsigned __sanitizer_pthread_key_t;
169
170struct __sanitizer_passwd {
171  char *pw_name;
172  char *pw_passwd;
173  int pw_uid;
174  int pw_gid;
175  __sanitizer_time_t pw_change;
176  char *pw_class;
177  char *pw_gecos;
178  char *pw_dir;
179  char *pw_shell;
180  __sanitizer_time_t pw_expire;
181  int pw_fields;
182};
183
184struct __sanitizer_group {
185  char *gr_name;
186  char *gr_passwd;
187  int gr_gid;
188  char **gr_mem;
189};
190
191typedef long __sanitizer_suseconds_t;
192
193struct __sanitizer_timeval {
194  __sanitizer_time_t tv_sec;
195  __sanitizer_suseconds_t tv_usec;
196};
197
198struct __sanitizer_itimerval {
199  struct __sanitizer_timeval it_interval;
200  struct __sanitizer_timeval it_value;
201};
202
203struct __sanitizer_timeb {
204  __sanitizer_time_t time;
205  unsigned short millitm;
206  short timezone;
207  short dstflag;
208};
209
210struct __sanitizer_ether_addr {
211  u8 octet[6];
212};
213
214struct __sanitizer_tm {
215  int tm_sec;
216  int tm_min;
217  int tm_hour;
218  int tm_mday;
219  int tm_mon;
220  int tm_year;
221  int tm_wday;
222  int tm_yday;
223  int tm_isdst;
224  long int tm_gmtoff;
225  const char *tm_zone;
226};
227
228struct __sanitizer_msghdr {
229  void *msg_name;
230  unsigned msg_namelen;
231  struct __sanitizer_iovec *msg_iov;
232  unsigned msg_iovlen;
233  void *msg_control;
234  unsigned msg_controllen;
235  int msg_flags;
236};
237
238struct __sanitizer_cmsghdr {
239  unsigned cmsg_len;
240  int cmsg_level;
241  int cmsg_type;
242};
243
244struct __sanitizer_dirent {
245#  if defined(__INO64)
246  unsigned long long d_fileno;
247  unsigned long long d_off;
248#  else
249  unsigned int d_fileno;
250#  endif
251  unsigned short d_reclen;
252  u8 d_type;
253  u8 d_pad0;
254  u16 d_namlen;
255  u16 d_pad1;
256  char d_name[256];
257};
258
259u16 __sanitizer_dirsiz(const __sanitizer_dirent *dp);
260
261// 'clock_t' is 32 bits wide on x64 FreeBSD
262typedef int __sanitizer_clock_t;
263typedef int __sanitizer_clockid_t;
264
265#  if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__) || \
266      defined(__mips__)
267typedef unsigned __sanitizer___kernel_uid_t;
268typedef unsigned __sanitizer___kernel_gid_t;
269#  else
270typedef unsigned short __sanitizer___kernel_uid_t;
271typedef unsigned short __sanitizer___kernel_gid_t;
272#  endif
273typedef long long __sanitizer___kernel_off_t;
274
275#  if defined(__powerpc__) || defined(__mips__)
276typedef unsigned int __sanitizer___kernel_old_uid_t;
277typedef unsigned int __sanitizer___kernel_old_gid_t;
278#  else
279typedef unsigned short __sanitizer___kernel_old_uid_t;
280typedef unsigned short __sanitizer___kernel_old_gid_t;
281#  endif
282
283typedef long long __sanitizer___kernel_loff_t;
284typedef struct {
285  unsigned long fds_bits[1024 / (8 * sizeof(long))];
286} __sanitizer___kernel_fd_set;
287
288// This thing depends on the platform. We are only interested in the upper
289// limit. Verified with a compiler assert in .cpp.
290union __sanitizer_pthread_attr_t {
291  char size[128];
292  void *align;
293};
294
295const unsigned old_sigset_t_sz = sizeof(unsigned long);
296
297struct __sanitizer_sigset_t {
298  // uint32_t * 4
299  unsigned int __bits[4];
300};
301
302typedef __sanitizer_sigset_t __sanitizer_kernel_sigset_t;
303
304union __sanitizer_sigval {
305  int sival_int;
306  void *sival_ptr;
307};
308
309struct __sanitizer_siginfo {
310  int si_signo;
311  int si_errno;
312  int si_code;
313  pid_t si_pid;
314  u32 si_uid;
315  int si_status;
316  void *si_addr;
317  union __sanitizer_sigval si_value;
318#  if SANITIZER_WORDSIZE == 64
319  char data[40];
320#  else
321  char data[32];
322#  endif
323};
324
325typedef __sanitizer_siginfo __sanitizer_siginfo_t;
326
327using __sanitizer_sighandler_ptr = void (*)(int sig);
328using __sanitizer_sigactionhandler_ptr = void (*)(int sig,
329                                                  __sanitizer_siginfo *siginfo,
330                                                  void *uctx);
331
332struct __sanitizer_sigaction {
333  union {
334    __sanitizer_sigactionhandler_ptr sigaction;
335    __sanitizer_sighandler_ptr handler;
336  };
337  int sa_flags;
338  __sanitizer_sigset_t sa_mask;
339};
340
341struct __sanitizer_sem_t {
342  u32 data[4];
343};
344
345extern const uptr sig_ign;
346extern const uptr sig_dfl;
347extern const uptr sig_err;
348extern const uptr sa_siginfo;
349
350extern int af_inet;
351extern int af_inet6;
352uptr __sanitizer_in_addr_sz(int af);
353
354struct __sanitizer_dl_phdr_info {
355  uptr dlpi_addr;
356  const char *dlpi_name;
357  const void *dlpi_phdr;
358  short dlpi_phnum;
359};
360
361extern unsigned struct_ElfW_Phdr_sz;
362
363struct __sanitizer_addrinfo {
364  int ai_flags;
365  int ai_family;
366  int ai_socktype;
367  int ai_protocol;
368  unsigned ai_addrlen;
369  char *ai_canonname;
370  void *ai_addr;
371  struct __sanitizer_addrinfo *ai_next;
372};
373
374struct __sanitizer_hostent {
375  char *h_name;
376  char **h_aliases;
377  int h_addrtype;
378  int h_length;
379  char **h_addr_list;
380};
381
382struct __sanitizer_pollfd {
383  int fd;
384  short events;
385  short revents;
386};
387
388typedef unsigned __sanitizer_nfds_t;
389
390struct __sanitizer_glob_t {
391  uptr gl_pathc;
392  uptr gl_matchc;
393  uptr gl_offs;
394  int gl_flags;
395  char **gl_pathv;
396  int (*gl_errfunc)(const char *, int);
397  void (*gl_closedir)(void *dirp);
398  struct dirent *(*gl_readdir)(void *dirp);
399  void *(*gl_opendir)(const char *);
400  int (*gl_lstat)(const char *, void * /* struct stat* */);
401  int (*gl_stat)(const char *, void * /* struct stat* */);
402};
403
404extern int glob_nomatch;
405extern int glob_altdirfunc;
406extern const int wordexp_wrde_dooffs;
407
408extern unsigned path_max;
409
410extern int struct_ttyent_sz;
411
412struct __sanitizer_wordexp_t {
413  uptr we_wordc;
414  char **we_wordv;
415  uptr we_offs;
416  char *we_strings;
417  uptr we_nbytes;
418};
419
420typedef void __sanitizer_FILE;
421
422extern int shmctl_ipc_stat;
423
424// This simplifies generic code
425#define struct_shminfo_sz -1
426#define struct_shm_info_sz -1
427#define shmctl_shm_stat -1
428#define shmctl_ipc_info -1
429#define shmctl_shm_info -1
430
431extern unsigned struct_utmpx_sz;
432
433extern int map_fixed;
434
435// ioctl arguments
436struct __sanitizer_ifconf {
437  int ifc_len;
438  union {
439    void *ifcu_req;
440  } ifc_ifcu;
441};
442
443struct __sanitizer__ttyent {
444  char *ty_name;
445  char *ty_getty;
446  char *ty_type;
447  int ty_status;
448  char *ty_window;
449  char *ty_comment;
450  char *ty_group;
451};
452
453// procctl reaper data for PROCCTL_REAPER flags
454struct __sanitizer_procctl_reaper_status {
455  unsigned int rs_flags;
456  unsigned int rs_children;
457  unsigned int rs_descendants;
458  pid_t rs_reaper;
459  pid_t rs_pid;
460  unsigned int rs_pad0[15];
461};
462
463struct __sanitizer_procctl_reaper_pidinfo {
464  pid_t pi_pid;
465  pid_t pi_subtree;
466  unsigned int pi_flags;
467  unsigned int pi_pad0[15];
468};
469
470struct __sanitizer_procctl_reaper_pids {
471  unsigned int rp_count;
472  unsigned int rp_pad0[15];
473  struct __sanitize_procctl_reapper_pidinfo *rp_pids;
474};
475
476struct __sanitizer_procctl_reaper_kill {
477  int rk_sig;
478  unsigned int rk_flags;
479  pid_t rk_subtree;
480  unsigned int rk_killed;
481  pid_t rk_fpid;
482  unsigned int rk_pad[15];
483};
484
485#  define IOC_NRBITS 8
486#  define IOC_TYPEBITS 8
487#  if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__)
488#    define IOC_SIZEBITS 13
489#    define IOC_DIRBITS 3
490#    define IOC_NONE 1U
491#    define IOC_WRITE 4U
492#    define IOC_READ 2U
493#  else
494#    define IOC_SIZEBITS 14
495#    define IOC_DIRBITS 2
496#    define IOC_NONE 0U
497#    define IOC_WRITE 1U
498#    define IOC_READ 2U
499#  endif
500#  define IOC_NRMASK ((1 << IOC_NRBITS) - 1)
501#  define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1)
502#  define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1)
503#  if defined(IOC_DIRMASK)
504#    undef IOC_DIRMASK
505#  endif
506#  define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1)
507#  define IOC_NRSHIFT 0
508#  define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS)
509#  define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS)
510#  define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS)
511#  define EVIOC_EV_MAX 0x1f
512#  define EVIOC_ABS_MAX 0x3f
513
514#  define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK)
515#  define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK)
516#  define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK)
517#  define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK)
518
519extern unsigned struct_ifreq_sz;
520extern unsigned struct_termios_sz;
521extern unsigned struct_winsize_sz;
522
523extern unsigned struct_copr_buffer_sz;
524extern unsigned struct_copr_debug_buf_sz;
525extern unsigned struct_copr_msg_sz;
526extern unsigned struct_midi_info_sz;
527extern unsigned struct_mtget_sz;
528extern unsigned struct_mtop_sz;
529extern unsigned struct_rtentry_sz;
530extern unsigned struct_sbi_instrument_sz;
531extern unsigned struct_seq_event_rec_sz;
532extern unsigned struct_synth_info_sz;
533extern unsigned struct_vt_mode_sz;
534
535extern const unsigned long __sanitizer_bufsiz;
536extern unsigned struct_audio_buf_info_sz;
537extern unsigned struct_ppp_stats_sz;
538extern unsigned struct_sioc_sg_req_sz;
539extern unsigned struct_sioc_vif_req_sz;
540
541extern unsigned struct_procctl_reaper_status_sz;
542extern unsigned struct_procctl_reaper_pidinfo_sz;
543extern unsigned struct_procctl_reaper_pids_sz;
544extern unsigned struct_procctl_reaper_kill_sz;
545
546// ioctl request identifiers
547
548// A special value to mark ioctls that are not present on the target platform,
549// when it can not be determined without including any system headers.
550extern const unsigned IOCTL_NOT_PRESENT;
551
552extern unsigned IOCTL_FIOASYNC;
553extern unsigned IOCTL_FIOCLEX;
554extern unsigned IOCTL_FIOGETOWN;
555extern unsigned IOCTL_FIONBIO;
556extern unsigned IOCTL_FIONCLEX;
557extern unsigned IOCTL_FIOSETOWN;
558extern unsigned IOCTL_SIOCADDMULTI;
559extern unsigned IOCTL_SIOCATMARK;
560extern unsigned IOCTL_SIOCDELMULTI;
561extern unsigned IOCTL_SIOCGIFADDR;
562extern unsigned IOCTL_SIOCGIFBRDADDR;
563extern unsigned IOCTL_SIOCGIFCONF;
564extern unsigned IOCTL_SIOCGIFDSTADDR;
565extern unsigned IOCTL_SIOCGIFFLAGS;
566extern unsigned IOCTL_SIOCGIFMETRIC;
567extern unsigned IOCTL_SIOCGIFMTU;
568extern unsigned IOCTL_SIOCGIFNETMASK;
569extern unsigned IOCTL_SIOCGPGRP;
570extern unsigned IOCTL_SIOCSIFADDR;
571extern unsigned IOCTL_SIOCSIFBRDADDR;
572extern unsigned IOCTL_SIOCSIFDSTADDR;
573extern unsigned IOCTL_SIOCSIFFLAGS;
574extern unsigned IOCTL_SIOCSIFMETRIC;
575extern unsigned IOCTL_SIOCSIFMTU;
576extern unsigned IOCTL_SIOCSIFNETMASK;
577extern unsigned IOCTL_SIOCSPGRP;
578extern unsigned IOCTL_TIOCCONS;
579extern unsigned IOCTL_TIOCEXCL;
580extern unsigned IOCTL_TIOCGETD;
581extern unsigned IOCTL_TIOCGPGRP;
582extern unsigned IOCTL_TIOCGWINSZ;
583extern unsigned IOCTL_TIOCMBIC;
584extern unsigned IOCTL_TIOCMBIS;
585extern unsigned IOCTL_TIOCMGET;
586extern unsigned IOCTL_TIOCMSET;
587extern unsigned IOCTL_TIOCNOTTY;
588extern unsigned IOCTL_TIOCNXCL;
589extern unsigned IOCTL_TIOCOUTQ;
590extern unsigned IOCTL_TIOCPKT;
591extern unsigned IOCTL_TIOCSCTTY;
592extern unsigned IOCTL_TIOCSETD;
593extern unsigned IOCTL_TIOCSPGRP;
594extern unsigned IOCTL_TIOCSTI;
595extern unsigned IOCTL_TIOCSWINSZ;
596extern unsigned IOCTL_SIOCGETSGCNT;
597extern unsigned IOCTL_SIOCGETVIFCNT;
598extern unsigned IOCTL_MTIOCGET;
599extern unsigned IOCTL_MTIOCTOP;
600extern unsigned IOCTL_SIOCADDRT;
601extern unsigned IOCTL_SIOCDELRT;
602extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE;
603extern unsigned IOCTL_SNDCTL_DSP_GETFMTS;
604extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK;
605extern unsigned IOCTL_SNDCTL_DSP_POST;
606extern unsigned IOCTL_SNDCTL_DSP_RESET;
607extern unsigned IOCTL_SNDCTL_DSP_SETFMT;
608extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT;
609extern unsigned IOCTL_SNDCTL_DSP_SPEED;
610extern unsigned IOCTL_SNDCTL_DSP_STEREO;
611extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE;
612extern unsigned IOCTL_SNDCTL_DSP_SYNC;
613extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE;
614extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR;
615extern unsigned IOCTL_SNDCTL_MIDI_INFO;
616extern unsigned IOCTL_SNDCTL_MIDI_PRETIME;
617extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE;
618extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT;
619extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT;
620extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS;
621extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS;
622extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND;
623extern unsigned IOCTL_SNDCTL_SEQ_PANIC;
624extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE;
625extern unsigned IOCTL_SNDCTL_SEQ_RESET;
626extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES;
627extern unsigned IOCTL_SNDCTL_SEQ_SYNC;
628extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI;
629extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD;
630extern unsigned IOCTL_SNDCTL_SYNTH_INFO;
631extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL;
632extern unsigned IOCTL_SNDCTL_TMR_CONTINUE;
633extern unsigned IOCTL_SNDCTL_TMR_METRONOME;
634extern unsigned IOCTL_SNDCTL_TMR_SELECT;
635extern unsigned IOCTL_SNDCTL_TMR_SOURCE;
636extern unsigned IOCTL_SNDCTL_TMR_START;
637extern unsigned IOCTL_SNDCTL_TMR_STOP;
638extern unsigned IOCTL_SNDCTL_TMR_TEMPO;
639extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE;
640extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM;
641extern unsigned IOCTL_SOUND_MIXER_READ_BASS;
642extern unsigned IOCTL_SOUND_MIXER_READ_CAPS;
643extern unsigned IOCTL_SOUND_MIXER_READ_CD;
644extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK;
645extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE;
646extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN;
647extern unsigned IOCTL_SOUND_MIXER_READ_IMIX;
648extern unsigned IOCTL_SOUND_MIXER_READ_LINE1;
649extern unsigned IOCTL_SOUND_MIXER_READ_LINE2;
650extern unsigned IOCTL_SOUND_MIXER_READ_LINE3;
651extern unsigned IOCTL_SOUND_MIXER_READ_LINE;
652extern unsigned IOCTL_SOUND_MIXER_READ_LOUD;
653extern unsigned IOCTL_SOUND_MIXER_READ_MIC;
654extern unsigned IOCTL_SOUND_MIXER_READ_MUTE;
655extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN;
656extern unsigned IOCTL_SOUND_MIXER_READ_PCM;
657extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV;
658extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK;
659extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC;
660extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER;
661extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS;
662extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH;
663extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE;
664extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME;
665extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM;
666extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS;
667extern unsigned IOCTL_SOUND_MIXER_WRITE_CD;
668extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE;
669extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN;
670extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX;
671extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1;
672extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2;
673extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3;
674extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE;
675extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD;
676extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC;
677extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE;
678extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN;
679extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM;
680extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV;
681extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC;
682extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER;
683extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH;
684extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE;
685extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME;
686extern unsigned IOCTL_SOUND_PCM_READ_BITS;
687extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS;
688extern unsigned IOCTL_SOUND_PCM_READ_FILTER;
689extern unsigned IOCTL_SOUND_PCM_READ_RATE;
690extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS;
691extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER;
692extern unsigned IOCTL_VT_ACTIVATE;
693extern unsigned IOCTL_VT_GETMODE;
694extern unsigned IOCTL_VT_OPENQRY;
695extern unsigned IOCTL_VT_RELDISP;
696extern unsigned IOCTL_VT_SETMODE;
697extern unsigned IOCTL_VT_WAITACTIVE;
698extern unsigned IOCTL_GIO_SCRNMAP;
699extern unsigned IOCTL_KDDISABIO;
700extern unsigned IOCTL_KDENABIO;
701extern unsigned IOCTL_KDGETLED;
702extern unsigned IOCTL_KDGETMODE;
703extern unsigned IOCTL_KDGKBMODE;
704extern unsigned IOCTL_KDGKBTYPE;
705extern unsigned IOCTL_KDMKTONE;
706extern unsigned IOCTL_KDSETLED;
707extern unsigned IOCTL_KDSETMODE;
708extern unsigned IOCTL_KDSKBMODE;
709
710extern const int si_SEGV_MAPERR;
711extern const int si_SEGV_ACCERR;
712
713struct __sanitizer_cap_rights {
714  u64 cr_rights[2];
715};
716
717typedef struct __sanitizer_cap_rights __sanitizer_cap_rights_t;
718extern unsigned struct_cap_rights_sz;
719
720extern unsigned struct_fstab_sz;
721extern unsigned struct_StringList_sz;
722
723struct __sanitizer_cpuset {
724#if __FreeBSD_version >= 1400090
725  long __bits[(1024 + (sizeof(long) * 8) - 1) / (sizeof(long) * 8)];
726#else
727  long __bits[(256 + (sizeof(long) * 8) - 1) / (sizeof(long) * 8)];
728#endif
729};
730
731typedef struct __sanitizer_cpuset __sanitizer_cpuset_t;
732extern unsigned struct_cpuset_sz;
733
734typedef unsigned long long __sanitizer_eventfd_t;
735}  // namespace __sanitizer
736
737#  define CHECK_TYPE_SIZE(TYPE) \
738    COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))
739
740#  define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER)                      \
741    COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *)NULL)->MEMBER) == \
742                   sizeof(((CLASS *)NULL)->MEMBER));                \
743    COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) ==         \
744                   offsetof(CLASS, MEMBER))
745
746// For sigaction, which is a function and struct at the same time,
747// and thus requires explicit "struct" in sizeof() expression.
748#  define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER)                      \
749    COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *)NULL)->MEMBER) == \
750                   sizeof(((struct CLASS *)NULL)->MEMBER));                \
751    COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) ==         \
752                   offsetof(struct CLASS, MEMBER))
753
754#  define SIGACTION_SYMNAME sigaction
755
756#endif
757
758#endif  // SANITIZER_FREEBSD