brintos

brintos / llvm-project-archived public Read only

0
0
Text · 45.4 KiB · 2496652 Raw
1597 lines · c
1//===-- sanitizer_platform_limits_posix.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-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of Sanitizer common code.10//11// Sizes and layouts of platform-specific POSIX data structures.12//===----------------------------------------------------------------------===//13 14#ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H15#define SANITIZER_PLATFORM_LIMITS_POSIX_H16 17#if SANITIZER_LINUX || SANITIZER_APPLE || SANITIZER_HAIKU18 19#  include "sanitizer_internal_defs.h"20#  include "sanitizer_mallinfo.h"21#  include "sanitizer_platform.h"22 23#  if SANITIZER_APPLE24#    include <sys/cdefs.h>25#    if !__DARWIN_ONLY_64_BIT_INO_T26#      define SANITIZER_HAS_STAT64 127#      define SANITIZER_HAS_STATFS64 128#    else29#      define SANITIZER_HAS_STAT64 030#      define SANITIZER_HAS_STATFS64 031#    endif32#  elif SANITIZER_GLIBC || SANITIZER_ANDROID33#    define SANITIZER_HAS_STAT64 134#    define SANITIZER_HAS_STATFS64 135#  endif36 37#  if defined(__sparc__)38// FIXME: This can't be included from tsan which does not support sparc yet.39#    include "sanitizer_glibc_version.h"40#  endif41 42#  define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map *)(handle))43 44namespace __sanitizer {45extern unsigned struct_utsname_sz;46extern unsigned struct_stat_sz;47#  if SANITIZER_HAS_STAT6448extern unsigned struct_stat64_sz;49#  endif50extern unsigned struct_rusage_sz;51extern unsigned siginfo_t_sz;52extern unsigned struct_itimerval_sz;53extern unsigned pthread_t_sz;54extern unsigned pthread_mutex_t_sz;55extern unsigned pthread_cond_t_sz;56extern unsigned pid_t_sz;57extern unsigned timeval_sz;58extern unsigned uid_t_sz;59extern unsigned gid_t_sz;60extern unsigned mbstate_t_sz;61extern unsigned struct_timezone_sz;62extern unsigned struct_tms_sz;63extern unsigned struct_itimerspec_sz;64extern unsigned struct_sigevent_sz;65extern unsigned struct_stack_t_sz;66extern unsigned struct_sched_param_sz;67#  if SANITIZER_HAS_STATFS6468extern unsigned struct_statfs64_sz;69#  endif70extern unsigned struct_regex_sz;71extern unsigned struct_regmatch_sz;72 73#  if !SANITIZER_ANDROID74extern unsigned struct_fstab_sz;75extern unsigned struct_statfs_sz;76extern unsigned struct_sockaddr_sz;77unsigned ucontext_t_sz(void *uctx);78#  endif  // !SANITIZER_ANDROID79 80#  if SANITIZER_LINUX81 82#    if defined(__x86_64__)83const unsigned struct_kernel_stat_sz = 144;84const unsigned struct_kernel_stat64_sz = 0;85#    elif defined(__i386__)86const unsigned struct_kernel_stat_sz = 64;87const unsigned struct_kernel_stat64_sz = 96;88#    elif defined(__arm__)89const unsigned struct_kernel_stat_sz = 64;90const unsigned struct_kernel_stat64_sz = 104;91#    elif defined(__aarch64__)92const unsigned struct_kernel_stat_sz = 128;93const unsigned struct_kernel_stat64_sz = 104;94#    elif defined(__powerpc__) && !defined(__powerpc64__)95const unsigned struct_kernel_stat_sz = 72;96const unsigned struct_kernel_stat64_sz = 104;97#    elif defined(__powerpc64__)98const unsigned struct_kernel_stat_sz = 144;99const unsigned struct_kernel_stat64_sz = 104;100#    elif defined(__mips__)101const unsigned struct_kernel_stat_sz = SANITIZER_ANDROID102                                           ? FIRST_32_SECOND_64(104, 128)103#      if defined(_ABIN32) && _MIPS_SIM == _ABIN32104                                           : FIRST_32_SECOND_64(176, 216);105#      elif SANITIZER_MUSL106                                           : FIRST_32_SECOND_64(160, 208);107#      else108                                           : FIRST_32_SECOND_64(160, 216);109#      endif110const unsigned struct_kernel_stat64_sz = 104;111#    elif defined(__s390__) && !defined(__s390x__)112const unsigned struct_kernel_stat_sz = 64;113const unsigned struct_kernel_stat64_sz = 104;114#    elif defined(__s390x__)115const unsigned struct_kernel_stat_sz = 144;116const unsigned struct_kernel_stat64_sz = 0;117#    elif defined(__sparc__) && defined(__arch64__)118const unsigned struct___old_kernel_stat_sz = 0;119const unsigned struct_kernel_stat_sz = 104;120const unsigned struct_kernel_stat64_sz = 144;121#    elif defined(__sparc__) && !defined(__arch64__)122const unsigned struct___old_kernel_stat_sz = 0;123const unsigned struct_kernel_stat_sz = 64;124const unsigned struct_kernel_stat64_sz = 104;125#    elif SANITIZER_RISCV64126const unsigned struct_kernel_stat_sz = 128;127const unsigned struct_kernel_stat64_sz = 0;  // RISCV64 does not use stat64128#    elif defined(__hexagon__)129const unsigned struct_kernel_stat_sz = 128;130const unsigned struct_kernel_stat64_sz = 0;131#    elif defined(__loongarch__)132const unsigned struct_kernel_stat_sz = 128;133const unsigned struct_kernel_stat64_sz = 0;134#    endif135struct __sanitizer_perf_event_attr {136  unsigned type;137  unsigned size;138  // More fields that vary with the kernel version.139};140 141extern unsigned struct_epoll_event_sz;142extern unsigned struct_sysinfo_sz;143extern unsigned __user_cap_header_struct_sz;144extern unsigned __user_cap_data_struct_sz(void *hdrp);145extern unsigned struct_new_utsname_sz;146extern unsigned struct_old_utsname_sz;147extern unsigned struct_oldold_utsname_sz;148 149const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long);150#  endif  // SANITIZER_LINUX151 152#  if SANITIZER_LINUX153 154#    if defined(__powerpc64__) || defined(__s390__) || defined(__loongarch__)155const unsigned struct___old_kernel_stat_sz = 0;156#    elif !defined(__sparc__)157const unsigned struct___old_kernel_stat_sz = 32;158#    endif159 160extern unsigned struct_rlimit_sz;161extern unsigned struct_utimbuf_sz;162extern unsigned struct_timespec_sz;163 164struct __sanitizer_iocb {165  u64 aio_data;166  u32 aio_key_or_aio_reserved1;  // Simply crazy.167  u32 aio_reserved1_or_aio_key;  // Luckily, we don't need these.168  u16 aio_lio_opcode;169  s16 aio_reqprio;170  u32 aio_fildes;171  u64 aio_buf;172  u64 aio_nbytes;173  s64 aio_offset;174  u64 aio_reserved2;175  u64 aio_reserved3;176};177 178struct __sanitizer_io_event {179  u64 data;180  u64 obj;181  u64 res;182  u64 res2;183};184 185const unsigned iocb_cmd_pread = 0;186const unsigned iocb_cmd_pwrite = 1;187const unsigned iocb_cmd_preadv = 7;188const unsigned iocb_cmd_pwritev = 8;189 190struct __sanitizer___sysctl_args {191  int *name;192  int nlen;193  void *oldval;194  uptr *oldlenp;195  void *newval;196  uptr newlen;197  unsigned long ___unused[4];198};199 200const unsigned old_sigset_t_sz = sizeof(unsigned long);201 202struct __sanitizer_sem_t {203#    if SANITIZER_ANDROID && defined(_LP64)204  int data[4];205#    elif SANITIZER_ANDROID && !defined(_LP64)206  int data;207#    elif SANITIZER_LINUX208  uptr data[4];209#    endif210};211#  endif  // SANITIZER_LINUX212 213#  if SANITIZER_LINUX && !SANITIZER_ANDROID214extern unsigned struct_ustat_sz;215extern unsigned struct_rlimit64_sz;216extern unsigned struct_statvfs64_sz;217 218struct __sanitizer_ipc_perm {219  int __key;220  int uid;221  int gid;222  int cuid;223  int cgid;224#    ifdef __powerpc__225  unsigned mode;226  unsigned __seq;227  u64 __unused1;228  u64 __unused2;229#    elif defined(__sparc__)230  unsigned mode;231  unsigned short __pad2;232  unsigned short __seq;233  unsigned long long __unused1;234  unsigned long long __unused2;235#    else236  unsigned int mode;237  unsigned short __seq;238  unsigned short __pad2;239#      if defined(__x86_64__) && !defined(_LP64)240  u64 __unused1;241  u64 __unused2;242#      else243  unsigned long __unused1;244  unsigned long __unused2;245#      endif246#    endif247};248 249struct __sanitizer_shmid_ds {250  __sanitizer_ipc_perm shm_perm;251#    if defined(__sparc__)252#      if !defined(__arch64__)253  u32 __pad1;254#      endif255  long shm_atime;256#      if !defined(__arch64__)257  u32 __pad2;258#      endif259  long shm_dtime;260#      if !defined(__arch64__)261  u32 __pad3;262#      endif263  long shm_ctime;264  uptr shm_segsz;265  int shm_cpid;266  int shm_lpid;267  unsigned long shm_nattch;268  unsigned long __glibc_reserved1;269  unsigned long __glibc_reserved2;270#    else271#      ifndef __powerpc__272  uptr shm_segsz;273#      elif !defined(__powerpc64__)274  uptr __unused0;275#      endif276#      if defined(__x86_64__) && !defined(_LP64)277  u64 shm_atime;278  u64 shm_dtime;279  u64 shm_ctime;280#      else281  uptr shm_atime;282#        if !defined(_LP64) && !defined(__mips__)283  uptr __unused1;284#        endif285  uptr shm_dtime;286#        if !defined(_LP64) && !defined(__mips__)287  uptr __unused2;288#        endif289  uptr shm_ctime;290#        if !defined(_LP64) && !defined(__mips__)291  uptr __unused3;292#        endif293#      endif294#      ifdef __powerpc__295  uptr shm_segsz;296#      endif297  int shm_cpid;298  int shm_lpid;299#      if defined(__x86_64__) && !defined(_LP64)300  u64 shm_nattch;301  u64 __unused4;302  u64 __unused5;303#      else304  uptr shm_nattch;305  uptr __unused4;306  uptr __unused5;307#      endif308#    endif309};310#  endif311 312#  if SANITIZER_LINUX && !SANITIZER_ANDROID313extern unsigned struct_msqid_ds_sz;314extern unsigned struct_mq_attr_sz;315extern unsigned struct_timex_sz;316extern unsigned struct_statvfs_sz;317#  endif  // SANITIZER_LINUX && !SANITIZER_ANDROID318 319struct __sanitizer_iovec {320  void *iov_base;321  usize iov_len;322};323 324#  if !SANITIZER_ANDROID325struct __sanitizer_ifaddrs {326  struct __sanitizer_ifaddrs *ifa_next;327  char *ifa_name;328  unsigned int ifa_flags;329  void *ifa_addr;     // (struct sockaddr *)330  void *ifa_netmask;  // (struct sockaddr *)331  // This is a union on Linux.332#    ifdef ifa_dstaddr333#      undef ifa_dstaddr334#    endif335  void *ifa_dstaddr;  // (struct sockaddr *)336  void *ifa_data;337};338#  endif  // !SANITIZER_ANDROID339 340#  if SANITIZER_APPLE341typedef unsigned long __sanitizer_pthread_key_t;342#  else343typedef unsigned __sanitizer_pthread_key_t;344#  endif345 346#  if SANITIZER_LINUX && !SANITIZER_ANDROID347 348struct __sanitizer_XDR {349  int x_op;350  void *x_ops;351  uptr x_public;352  uptr x_private;353  uptr x_base;354  unsigned x_handy;355};356 357const int __sanitizer_XDR_ENCODE = 0;358const int __sanitizer_XDR_DECODE = 1;359const int __sanitizer_XDR_FREE = 2;360#  endif361 362struct __sanitizer_passwd {363  char *pw_name;364  char *pw_passwd;365  int pw_uid;366  int pw_gid;367#  if SANITIZER_APPLE368  long pw_change;369  char *pw_class;370#  endif371#  if !(SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32)) && !SANITIZER_HAIKU372  char *pw_gecos;373#  endif374  char *pw_dir;375  char *pw_shell;376#  if SANITIZER_APPLE377  long pw_expire;378#  endif379#  if SANITIZER_HAIKU380  char *pw_gecos;381#  endif382};383 384struct __sanitizer_group {385  char *gr_name;386  char *gr_passwd;387  int gr_gid;388  char **gr_mem;389};390 391#  if (SANITIZER_LINUX && !SANITIZER_GLIBC && !SANITIZER_ANDROID) || \392      (defined(__x86_64__) && !defined(_LP64)) || defined(__hexagon__)393typedef long long __sanitizer_time_t;394#  else395typedef long __sanitizer_time_t;396#  endif397 398typedef long __sanitizer_suseconds_t;399 400struct __sanitizer_timespec {401  __sanitizer_time_t tv_sec; /* seconds */402  u64 tv_nsec;               /* nanoseconds */403};404 405struct __sanitizer_itimerspec {406  struct __sanitizer_timespec it_interval; /* timer period */407  struct __sanitizer_timespec it_value;    /* timer expiration */408};409 410struct __sanitizer_timeval {411  __sanitizer_time_t tv_sec;412  __sanitizer_suseconds_t tv_usec;413};414 415struct __sanitizer_itimerval {416  struct __sanitizer_timeval it_interval;417  struct __sanitizer_timeval it_value;418};419 420struct __sanitizer_timeb {421  __sanitizer_time_t time;422  unsigned short millitm;423  short timezone;424  short dstflag;425};426 427struct __sanitizer_ether_addr {428  u8 octet[6];429};430 431struct __sanitizer_tm {432  int tm_sec;433  int tm_min;434  int tm_hour;435  int tm_mday;436  int tm_mon;437  int tm_year;438  int tm_wday;439  int tm_yday;440  int tm_isdst;441#  if SANITIZER_HAIKU442  int tm_gmtoff;443#  else444  long int tm_gmtoff;445#  endif446  const char *tm_zone;447};448 449#  if SANITIZER_LINUX450struct __sanitizer_mntent {451  char *mnt_fsname;452  char *mnt_dir;453  char *mnt_type;454  char *mnt_opts;455  int mnt_freq;456  int mnt_passno;457};458 459struct __sanitizer_file_handle {460  unsigned int handle_bytes;461  int handle_type;462  unsigned char f_handle[1];  // variable sized463};464#  endif465 466#  if SANITIZER_APPLE || SANITIZER_HAIKU467struct __sanitizer_msghdr {468  void *msg_name;469  unsigned msg_namelen;470  struct __sanitizer_iovec *msg_iov;471  unsigned msg_iovlen;472  void *msg_control;473  unsigned msg_controllen;474  int msg_flags;475};476struct __sanitizer_cmsghdr {477  unsigned cmsg_len;478  int cmsg_level;479  int cmsg_type;480};481#  elif SANITIZER_MUSL482struct __sanitizer_msghdr {483  void *msg_name;484  unsigned msg_namelen;485  struct __sanitizer_iovec *msg_iov;486  int msg_iovlen;487#    if SANITIZER_WORDSIZE == 64488  int __pad1;489#    endif490  void *msg_control;491  unsigned msg_controllen;492#    if SANITIZER_WORDSIZE == 64493  int __pad2;494#    endif495  int msg_flags;496};497struct __sanitizer_cmsghdr {498  unsigned cmsg_len;499#    if SANITIZER_WORDSIZE == 64500  int __pad1;501#    endif502  int cmsg_level;503  int cmsg_type;504};505#  else506// In POSIX, int msg_iovlen; socklen_t msg_controllen; socklen_t cmsg_len; but507// many implementations don't conform to the standard.508struct __sanitizer_msghdr {509  void *msg_name;510  unsigned msg_namelen;511  struct __sanitizer_iovec *msg_iov;512  uptr msg_iovlen;513  void *msg_control;514  uptr msg_controllen;515  int msg_flags;516};517struct __sanitizer_cmsghdr {518  uptr cmsg_len;519  int cmsg_level;520  int cmsg_type;521};522#  endif523 524#  if SANITIZER_LINUX525struct __sanitizer_mmsghdr {526  __sanitizer_msghdr msg_hdr;527  unsigned int msg_len;528};529#  endif530 531#  if SANITIZER_APPLE532struct __sanitizer_dirent {533  unsigned long long d_ino;534  unsigned long long d_seekoff;535  unsigned short d_reclen;536  // more fields that we don't care about537};538#  elif SANITIZER_HAIKU539struct __sanitizer_dirent {540  int d_dev;541  int d_pdev;542  unsigned long long d_ino;543  unsigned long long d_pino;544  unsigned short d_reclen;545  // more fields that we don't care about546};547#  elif (SANITIZER_LINUX && !SANITIZER_GLIBC) || defined(__x86_64__) || \548      defined(__hexagon__)549struct __sanitizer_dirent {550  unsigned long long d_ino;551  unsigned long long d_off;552  unsigned short d_reclen;553  // more fields that we don't care about554};555#  else556struct __sanitizer_dirent {557  uptr d_ino;558  uptr d_off;559  unsigned short d_reclen;560  // more fields that we don't care about561};562#  endif563 564#  if SANITIZER_GLIBC565struct __sanitizer_dirent64 {566  unsigned long long d_ino;567  unsigned long long d_off;568  unsigned short d_reclen;569  // more fields that we don't care about570};571extern unsigned struct_sock_fprog_sz;572#  endif573 574#  if SANITIZER_HAIKU575typedef int __sanitizer_clock_t;576#  elif defined(__x86_64__) && !defined(_LP64)577typedef long long __sanitizer_clock_t;578#  else579typedef long __sanitizer_clock_t;580#  endif581 582#  if SANITIZER_LINUX || SANITIZER_HAIKU583typedef int __sanitizer_clockid_t;584typedef unsigned long long __sanitizer_eventfd_t;585#  endif586 587#  if SANITIZER_LINUX588#    if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__) || \589        defined(__mips__) || defined(__hexagon__)590typedef unsigned __sanitizer___kernel_uid_t;591typedef unsigned __sanitizer___kernel_gid_t;592#    else593typedef unsigned short __sanitizer___kernel_uid_t;594typedef unsigned short __sanitizer___kernel_gid_t;595#    endif596#    if defined(__x86_64__) && !defined(_LP64)597typedef long long __sanitizer___kernel_off_t;598#    else599typedef long __sanitizer___kernel_off_t;600#    endif601 602#    if defined(__powerpc__) || defined(__mips__)603typedef unsigned int __sanitizer___kernel_old_uid_t;604typedef unsigned int __sanitizer___kernel_old_gid_t;605#    else606typedef unsigned short __sanitizer___kernel_old_uid_t;607typedef unsigned short __sanitizer___kernel_old_gid_t;608#    endif609 610typedef long long __sanitizer___kernel_loff_t;611typedef struct {612  unsigned long fds_bits[1024 / (8 * sizeof(long))];613} __sanitizer___kernel_fd_set;614#  endif615 616// This thing depends on the platform. We are only interested in the upper617// limit. Verified with a compiler assert in .cpp.618union __sanitizer_pthread_attr_t {619  char size[128];620  void *align;621};622 623#  if SANITIZER_ANDROID624#    if SANITIZER_MIPS625typedef unsigned long __sanitizer_sigset_t[16 / sizeof(unsigned long)];626#    else627typedef unsigned long __sanitizer_sigset_t;628#    endif629#  elif SANITIZER_APPLE630typedef unsigned __sanitizer_sigset_t;631#  elif SANITIZER_HAIKU632typedef unsigned long __sanitizer_sigset_t;633#  elif SANITIZER_LINUX634struct __sanitizer_sigset_t {635  // The size is determined by looking at sizeof of real sigset_t on linux.636  uptr val[128 / sizeof(uptr)];637};638#  endif639 640struct __sanitizer_siginfo_pad {641#  if SANITIZER_X32642  // x32 siginfo_t is aligned to 8 bytes.643  u64 pad[128 / sizeof(u64)];644#  else645  // Require uptr, because siginfo_t is always pointer-size aligned on Linux.646  uptr pad[128 / sizeof(uptr)];647#  endif648};649 650#  if SANITIZER_LINUX651#    define SANITIZER_HAS_SIGINFO 1652union __sanitizer_siginfo {653  __extension__ struct {654    int si_signo;655#    if SANITIZER_MIPS656    int si_code;657    int si_errno;658#    else659    int si_errno;660    int si_code;661#    endif662  };663  __sanitizer_siginfo_pad pad;664};665#  else666#    define SANITIZER_HAS_SIGINFO 0667typedef __sanitizer_siginfo_pad __sanitizer_siginfo;668#  endif669 670using __sanitizer_sighandler_ptr = void (*)(int sig);671using __sanitizer_sigactionhandler_ptr = void (*)(int sig,672                                                  __sanitizer_siginfo *siginfo,673                                                  void *uctx);674 675// Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.676#  if SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 64)677struct __sanitizer_sigaction {678  unsigned sa_flags;679  union {680    __sanitizer_sigactionhandler_ptr sigaction;681    __sanitizer_sighandler_ptr handler;682  };683  __sanitizer_sigset_t sa_mask;684  void (*sa_restorer)();685};686#  elif SANITIZER_ANDROID && \687      SANITIZER_MIPS32  // check this before WORDSIZE == 32688struct __sanitizer_sigaction {689  unsigned sa_flags;690  union {691    __sanitizer_sigactionhandler_ptr sigaction;692    __sanitizer_sighandler_ptr handler;693  };694  __sanitizer_sigset_t sa_mask;695};696#  elif SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32)697struct __sanitizer_sigaction {698  union {699    __sanitizer_sigactionhandler_ptr sigaction;700    __sanitizer_sighandler_ptr handler;701  };702  __sanitizer_sigset_t sa_mask;703  uptr sa_flags;704  void (*sa_restorer)();705};706#  else  // !SANITIZER_ANDROID707struct __sanitizer_sigaction {708#    if defined(__mips__) && !SANITIZER_FREEBSD && !SANITIZER_MUSL709  unsigned int sa_flags;710#    endif711  union {712    __sanitizer_sigactionhandler_ptr sigaction;713    __sanitizer_sighandler_ptr handler;714  };715#    if SANITIZER_FREEBSD716  int sa_flags;717  __sanitizer_sigset_t sa_mask;718#    else719#      if defined(__s390x__)720  int sa_resv;721#      else722  __sanitizer_sigset_t sa_mask;723#      endif724#      if !defined(__mips__) || SANITIZER_MUSL725#        if defined(__sparc__)726#          if __GLIBC_PREREQ(2, 20)727  // On sparc glibc 2.19 and earlier sa_flags was unsigned long.728#            if defined(__arch64__)729  // To maintain ABI compatibility on sparc64 when switching to an int,730  // __glibc_reserved0 was added.731  int __glibc_reserved0;732#            endif733  int sa_flags;734#          else735  unsigned long sa_flags;736#          endif737#        else738  int sa_flags;739#        endif740#      endif741#    endif742#    if SANITIZER_LINUX || SANITIZER_HAIKU743  void (*sa_restorer)();744#    endif745#    if defined(__mips__) && (SANITIZER_WORDSIZE == 32) && !SANITIZER_MUSL746  int sa_resv[1];747#    endif748#    if defined(__s390x__)749  __sanitizer_sigset_t sa_mask;750#    endif751};752#  endif  // !SANITIZER_ANDROID753 754#  if defined(__mips__)755#    define __SANITIZER_KERNEL_NSIG 128756#  else757#    define __SANITIZER_KERNEL_NSIG 64758#  endif759 760struct __sanitizer_kernel_sigset_t {761  uptr sig[__SANITIZER_KERNEL_NSIG / (sizeof(uptr) * 8)];762};763 764// Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.765#  if SANITIZER_MIPS766struct __sanitizer_kernel_sigaction_t {767  unsigned int sa_flags;768  union {769    void (*handler)(int signo);770    void (*sigaction)(int signo, __sanitizer_siginfo *info, void *ctx);771  };772  __sanitizer_kernel_sigset_t sa_mask;773  void (*sa_restorer)(void);774};775#  else776struct __sanitizer_kernel_sigaction_t {777  union {778    void (*handler)(int signo);779    void (*sigaction)(int signo, __sanitizer_siginfo *info, void *ctx);780  };781  unsigned long sa_flags;782  void (*sa_restorer)(void);783  __sanitizer_kernel_sigset_t sa_mask;784};785#  endif786 787extern const uptr sig_ign;788extern const uptr sig_dfl;789extern const uptr sig_err;790extern const uptr sa_siginfo;791 792#  if SANITIZER_LINUX793extern int e_tabsz;794#  endif795 796extern int af_inet;797extern int af_inet6;798uptr __sanitizer_in_addr_sz(int af);799 800#  if SANITIZER_LINUX801struct __sanitizer_dl_phdr_info {802  uptr dlpi_addr;803  const char *dlpi_name;804  const void *dlpi_phdr;805  short dlpi_phnum;806};807 808extern unsigned struct_ElfW_Phdr_sz;809#  endif810 811struct __sanitizer_protoent {812  char *p_name;813  char **p_aliases;814  int p_proto;815};816 817struct __sanitizer_netent {818  char *n_name;819  char **n_aliases;820  int n_addrtype;821  u32 n_net;822};823 824struct __sanitizer_addrinfo {825  int ai_flags;826  int ai_family;827  int ai_socktype;828  int ai_protocol;829#  if SANITIZER_ANDROID || SANITIZER_APPLE || SANITIZER_HAIKU830  unsigned ai_addrlen;831  char *ai_canonname;832  void *ai_addr;833#  else  // LINUX834  unsigned ai_addrlen;835  void *ai_addr;836  char *ai_canonname;837#  endif838  struct __sanitizer_addrinfo *ai_next;839};840 841struct __sanitizer_hostent {842  char *h_name;843  char **h_aliases;844  int h_addrtype;845  int h_length;846  char **h_addr_list;847};848 849struct __sanitizer_pollfd {850  int fd;851  short events;852  short revents;853};854 855#  if SANITIZER_ANDROID || SANITIZER_APPLE856typedef unsigned __sanitizer_nfds_t;857#  else858typedef unsigned long __sanitizer_nfds_t;859#  endif860 861#  if !SANITIZER_ANDROID862#    if SANITIZER_LINUX863struct __sanitizer_glob_t {864  uptr gl_pathc;865  char **gl_pathv;866  uptr gl_offs;867  int gl_flags;868 869  void (*gl_closedir)(void *dirp);870  void *(*gl_readdir)(void *dirp);871  void *(*gl_opendir)(const char *);872  int (*gl_lstat)(const char *, void *);873  int (*gl_stat)(const char *, void *);874};875#    endif  // SANITIZER_LINUX876 877#    if SANITIZER_LINUX878extern int glob_nomatch;879extern int glob_altdirfunc;880#    endif881#  endif  // !SANITIZER_ANDROID882 883extern unsigned path_max;884 885#  if !SANITIZER_ANDROID886extern const int wordexp_wrde_dooffs;887#  endif  // !SANITIZER_ANDROID888 889struct __sanitizer_wordexp_t {890  uptr we_wordc;891  char **we_wordv;892  uptr we_offs;893};894 895#  if SANITIZER_LINUX && !SANITIZER_ANDROID896struct __sanitizer_FILE {897  int _flags;898  char *_IO_read_ptr;899  char *_IO_read_end;900  char *_IO_read_base;901  char *_IO_write_base;902  char *_IO_write_ptr;903  char *_IO_write_end;904  char *_IO_buf_base;905  char *_IO_buf_end;906  char *_IO_save_base;907  char *_IO_backup_base;908  char *_IO_save_end;909  void *_markers;910  __sanitizer_FILE *_chain;911  int _fileno;912};913#    define SANITIZER_HAS_STRUCT_FILE 1914#  else915typedef void __sanitizer_FILE;916#    define SANITIZER_HAS_STRUCT_FILE 0917#  endif918 919#  if SANITIZER_LINUX && !SANITIZER_ANDROID &&                               \920      (defined(__i386) || defined(__x86_64) || defined(__mips64) ||          \921       defined(__powerpc64__) || defined(__aarch64__) || defined(__arm__) || \922       defined(__s390__) || defined(__loongarch__) || SANITIZER_RISCV64 ||   \923       defined(__sparc__))924extern unsigned struct_user_regs_struct_sz;925extern unsigned struct_user_fpregs_struct_sz;926extern unsigned struct_user_fpxregs_struct_sz;927extern unsigned struct_user_vfpregs_struct_sz;928 929extern int ptrace_peektext;930extern int ptrace_peekdata;931extern int ptrace_peekuser;932extern int ptrace_getregs;933extern int ptrace_setregs;934extern int ptrace_getfpregs;935extern int ptrace_setfpregs;936extern int ptrace_getfpxregs;937extern int ptrace_setfpxregs;938extern int ptrace_getvfpregs;939extern int ptrace_setvfpregs;940extern int ptrace_getsiginfo;941extern int ptrace_setsiginfo;942extern int ptrace_getregset;943extern int ptrace_setregset;944extern int ptrace_geteventmsg;945 946// Helper for the ptrace interceptor.947template <class T>948inline T ptrace_data_arg(int request, T addr, T data) {949#    if SANITIZER_LINUX && SANITIZER_SPARC950  // As described in ptrace(2), the meanings of addr and data are reversed951  // for the PTRACE_GETREGS, PTRACE_GETFPREGS, PTRACE_GETREGS, and952  // PTRACE_GETFPREGS requests on Linux/sparc64.953  if (request == ptrace_getregs || request == ptrace_getfpregs ||954      request == ptrace_setregs || request == ptrace_setfpregs)955    return addr;956  else957#    endif958    return data;959}960#  endif961 962#  if SANITIZER_LINUX && !SANITIZER_ANDROID963extern unsigned struct_shminfo_sz;964extern unsigned struct_shm_info_sz;965extern int shmctl_ipc_stat;966extern int shmctl_ipc_info;967extern int shmctl_shm_info;968extern int shmctl_shm_stat;969#  endif970 971#  if !SANITIZER_APPLE && !SANITIZER_FREEBSD972extern unsigned struct_utmp_sz;973#  endif974#  if !SANITIZER_ANDROID975extern unsigned struct_utmpx_sz;976#  endif977 978extern int map_fixed;979 980// ioctl arguments981struct __sanitizer_ifconf {982  int ifc_len;983  union {984    void *ifcu_req;985  } ifc_ifcu;986#  if SANITIZER_APPLE987} __attribute__((packed));988#  else989};990#  endif991 992#  if SANITIZER_LINUX && !SANITIZER_ANDROID993struct __sanitizer__obstack_chunk {994  char *limit;995  struct __sanitizer__obstack_chunk *prev;996};997 998struct __sanitizer_obstack {999  long chunk_size;1000  struct __sanitizer__obstack_chunk *chunk;1001  char *object_base;1002  char *next_free;1003  uptr more_fields[7];1004};1005 1006typedef uptr (*__sanitizer_cookie_io_read)(void *cookie, char *buf, uptr size);1007typedef uptr (*__sanitizer_cookie_io_write)(void *cookie, const char *buf,1008                                            uptr size);1009typedef int (*__sanitizer_cookie_io_seek)(void *cookie, u64 *offset,1010                                          int whence);1011typedef int (*__sanitizer_cookie_io_close)(void *cookie);1012 1013struct __sanitizer_cookie_io_functions_t {1014  __sanitizer_cookie_io_read read;1015  __sanitizer_cookie_io_write write;1016  __sanitizer_cookie_io_seek seek;1017  __sanitizer_cookie_io_close close;1018};1019#  endif1020 1021#  define IOC_NRBITS 81022#  define IOC_TYPEBITS 81023#  if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__) || \1024      defined(__sparc__)1025#    define IOC_SIZEBITS 131026#    define IOC_DIRBITS 31027#    define IOC_NONE 1U1028#    define IOC_WRITE 4U1029#    define IOC_READ 2U1030#  else1031#    define IOC_SIZEBITS 141032#    define IOC_DIRBITS 21033#    define IOC_NONE 0U1034#    define IOC_WRITE 1U1035#    define IOC_READ 2U1036#  endif1037#  define IOC_NRMASK ((1 << IOC_NRBITS) - 1)1038#  define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1)1039#  define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1)1040#  if defined(IOC_DIRMASK)1041#    undef IOC_DIRMASK1042#  endif1043#  define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1)1044#  define IOC_NRSHIFT 01045#  define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS)1046#  define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS)1047#  define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS)1048#  define EVIOC_EV_MAX 0x1f1049#  define EVIOC_ABS_MAX 0x3f1050 1051#  define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK)1052#  define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK)1053#  define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK)1054 1055#  if defined(__sparc__)1056// In sparc the 14 bits SIZE field overlaps with the1057// least significant bit of DIR, so either IOC_READ or1058// IOC_WRITE shall be 1 in order to get a non-zero SIZE.1059#    define IOC_SIZE(nr) \1060      ((((((nr) >> 29) & 0x7) & (4U | 2U)) == 0) ? 0 : (((nr) >> 16) & 0x3fff))1061#  else1062#    define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK)1063#  endif1064 1065extern unsigned struct_ifreq_sz;1066extern unsigned struct_termios_sz;1067extern unsigned struct_winsize_sz;1068 1069#  if SANITIZER_LINUX1070extern unsigned struct_arpreq_sz;1071extern unsigned struct_cdrom_msf_sz;1072extern unsigned struct_cdrom_multisession_sz;1073extern unsigned struct_cdrom_read_audio_sz;1074extern unsigned struct_cdrom_subchnl_sz;1075extern unsigned struct_cdrom_ti_sz;1076extern unsigned struct_cdrom_tocentry_sz;1077extern unsigned struct_cdrom_tochdr_sz;1078extern unsigned struct_cdrom_volctrl_sz;1079extern unsigned struct_ff_effect_sz;1080extern unsigned struct_floppy_drive_params_sz;1081extern unsigned struct_floppy_drive_struct_sz;1082extern unsigned struct_floppy_fdc_state_sz;1083extern unsigned struct_floppy_max_errors_sz;1084extern unsigned struct_floppy_raw_cmd_sz;1085extern unsigned struct_floppy_struct_sz;1086extern unsigned struct_floppy_write_errors_sz;1087extern unsigned struct_format_descr_sz;1088extern unsigned struct_hd_driveid_sz;1089extern unsigned struct_hd_geometry_sz;1090extern unsigned struct_input_absinfo_sz;1091extern unsigned struct_input_id_sz;1092extern unsigned struct_mtpos_sz;1093extern unsigned struct_vt_consize_sz;1094extern unsigned struct_vt_sizes_sz;1095extern unsigned struct_vt_stat_sz;1096#  endif  // SANITIZER_LINUX1097 1098#  if SANITIZER_LINUX1099extern unsigned struct_copr_buffer_sz;1100extern unsigned struct_copr_debug_buf_sz;1101extern unsigned struct_copr_msg_sz;1102extern unsigned struct_midi_info_sz;1103extern unsigned struct_mtget_sz;1104extern unsigned struct_mtop_sz;1105extern unsigned struct_rtentry_sz;1106extern unsigned struct_sbi_instrument_sz;1107extern unsigned struct_seq_event_rec_sz;1108extern unsigned struct_synth_info_sz;1109extern unsigned struct_vt_mode_sz;1110#  endif  // SANITIZER_LINUX1111 1112#  if SANITIZER_LINUX && !SANITIZER_ANDROID1113extern unsigned struct_ax25_parms_struct_sz;1114extern unsigned struct_input_keymap_entry_sz;1115extern unsigned struct_ipx_config_data_sz;1116extern unsigned struct_kbdiacrs_sz;1117extern unsigned struct_kbentry_sz;1118extern unsigned struct_kbkeycode_sz;1119extern unsigned struct_kbsentry_sz;1120extern unsigned struct_mtconfiginfo_sz;1121extern unsigned struct_nr_parms_struct_sz;1122extern unsigned struct_scc_modem_sz;1123extern unsigned struct_scc_stat_sz;1124extern unsigned struct_serial_multiport_struct_sz;1125extern unsigned struct_serial_struct_sz;1126extern unsigned struct_sockaddr_ax25_sz;1127extern unsigned struct_unimapdesc_sz;1128extern unsigned struct_unimapinit_sz;1129#  endif  // SANITIZER_LINUX && !SANITIZER_ANDROID1130 1131extern const unsigned long __sanitizer_bufsiz;1132 1133#  if SANITIZER_LINUX && !SANITIZER_ANDROID1134extern unsigned struct_audio_buf_info_sz;1135extern unsigned struct_ppp_stats_sz;1136#  endif  // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID1137 1138#  if !SANITIZER_ANDROID && !SANITIZER_APPLE1139extern unsigned struct_sioc_sg_req_sz;1140extern unsigned struct_sioc_vif_req_sz;1141#  endif1142 1143extern unsigned fpos_t_sz;1144 1145// ioctl request identifiers1146 1147// A special value to mark ioctls that are not present on the target platform,1148// when it can not be determined without including any system headers.1149extern const unsigned IOCTL_NOT_PRESENT;1150 1151extern unsigned IOCTL_FIOASYNC;1152extern unsigned IOCTL_FIOCLEX;1153extern unsigned IOCTL_FIOGETOWN;1154extern unsigned IOCTL_FIONBIO;1155extern unsigned IOCTL_FIONCLEX;1156extern unsigned IOCTL_FIOSETOWN;1157extern unsigned IOCTL_SIOCADDMULTI;1158extern unsigned IOCTL_SIOCATMARK;1159extern unsigned IOCTL_SIOCDELMULTI;1160extern unsigned IOCTL_SIOCGIFADDR;1161extern unsigned IOCTL_SIOCGIFBRDADDR;1162extern unsigned IOCTL_SIOCGIFCONF;1163extern unsigned IOCTL_SIOCGIFDSTADDR;1164extern unsigned IOCTL_SIOCGIFFLAGS;1165extern unsigned IOCTL_SIOCGIFMETRIC;1166extern unsigned IOCTL_SIOCGIFMTU;1167extern unsigned IOCTL_SIOCGIFNETMASK;1168extern unsigned IOCTL_SIOCGPGRP;1169extern unsigned IOCTL_SIOCSIFADDR;1170extern unsigned IOCTL_SIOCSIFBRDADDR;1171extern unsigned IOCTL_SIOCSIFDSTADDR;1172extern unsigned IOCTL_SIOCSIFFLAGS;1173extern unsigned IOCTL_SIOCSIFMETRIC;1174extern unsigned IOCTL_SIOCSIFMTU;1175extern unsigned IOCTL_SIOCSIFNETMASK;1176extern unsigned IOCTL_SIOCSPGRP;1177#  if !SANITIZER_HAIKU1178extern unsigned IOCTL_TIOCCONS;1179extern unsigned IOCTL_TIOCGETD;1180extern unsigned IOCTL_TIOCNOTTY;1181extern unsigned IOCTL_TIOCPKT;1182extern unsigned IOCTL_TIOCSETD;1183extern unsigned IOCTL_TIOCSTI;1184#  endif1185extern unsigned IOCTL_TIOCEXCL;1186extern unsigned IOCTL_TIOCGPGRP;1187extern unsigned IOCTL_TIOCGWINSZ;1188extern unsigned IOCTL_TIOCMBIC;1189extern unsigned IOCTL_TIOCMBIS;1190extern unsigned IOCTL_TIOCMGET;1191extern unsigned IOCTL_TIOCMSET;1192extern unsigned IOCTL_TIOCNXCL;1193extern unsigned IOCTL_TIOCOUTQ;1194extern unsigned IOCTL_TIOCSCTTY;1195extern unsigned IOCTL_TIOCSPGRP;1196extern unsigned IOCTL_TIOCSWINSZ;1197#  if SANITIZER_LINUX && !SANITIZER_ANDROID1198extern unsigned IOCTL_SIOCGETSGCNT;1199extern unsigned IOCTL_SIOCGETVIFCNT;1200#  endif1201#  if SANITIZER_LINUX1202extern unsigned IOCTL_EVIOCGABS;1203extern unsigned IOCTL_EVIOCGBIT;1204extern unsigned IOCTL_EVIOCGEFFECTS;1205extern unsigned IOCTL_EVIOCGID;1206extern unsigned IOCTL_EVIOCGKEY;1207extern unsigned IOCTL_EVIOCGKEYCODE;1208extern unsigned IOCTL_EVIOCGLED;1209extern unsigned IOCTL_EVIOCGNAME;1210extern unsigned IOCTL_EVIOCGPHYS;1211extern unsigned IOCTL_EVIOCGRAB;1212extern unsigned IOCTL_EVIOCGREP;1213extern unsigned IOCTL_EVIOCGSND;1214extern unsigned IOCTL_EVIOCGSW;1215extern unsigned IOCTL_EVIOCGUNIQ;1216extern unsigned IOCTL_EVIOCGVERSION;1217extern unsigned IOCTL_EVIOCRMFF;1218extern unsigned IOCTL_EVIOCSABS;1219extern unsigned IOCTL_EVIOCSFF;1220extern unsigned IOCTL_EVIOCSKEYCODE;1221extern unsigned IOCTL_EVIOCSREP;1222extern unsigned IOCTL_BLKFLSBUF;1223extern unsigned IOCTL_BLKGETSIZE;1224extern unsigned IOCTL_BLKRAGET;1225extern unsigned IOCTL_BLKRASET;1226extern unsigned IOCTL_BLKROGET;1227extern unsigned IOCTL_BLKROSET;1228extern unsigned IOCTL_BLKRRPART;1229extern unsigned IOCTL_BLKFRASET;1230extern unsigned IOCTL_BLKFRAGET;1231extern unsigned IOCTL_BLKSECTSET;1232extern unsigned IOCTL_BLKSECTGET;1233extern unsigned IOCTL_BLKSSZGET;1234extern unsigned IOCTL_BLKBSZGET;1235extern unsigned IOCTL_BLKBSZSET;1236extern unsigned IOCTL_BLKGETSIZE64;1237extern unsigned IOCTL_CDROMAUDIOBUFSIZ;1238extern unsigned IOCTL_CDROMEJECT;1239extern unsigned IOCTL_CDROMEJECT_SW;1240extern unsigned IOCTL_CDROMMULTISESSION;1241extern unsigned IOCTL_CDROMPAUSE;1242extern unsigned IOCTL_CDROMPLAYMSF;1243extern unsigned IOCTL_CDROMPLAYTRKIND;1244extern unsigned IOCTL_CDROMREADAUDIO;1245extern unsigned IOCTL_CDROMREADCOOKED;1246extern unsigned IOCTL_CDROMREADMODE1;1247extern unsigned IOCTL_CDROMREADMODE2;1248extern unsigned IOCTL_CDROMREADRAW;1249extern unsigned IOCTL_CDROMREADTOCENTRY;1250extern unsigned IOCTL_CDROMREADTOCHDR;1251extern unsigned IOCTL_CDROMRESET;1252extern unsigned IOCTL_CDROMRESUME;1253extern unsigned IOCTL_CDROMSEEK;1254extern unsigned IOCTL_CDROMSTART;1255extern unsigned IOCTL_CDROMSTOP;1256extern unsigned IOCTL_CDROMSUBCHNL;1257extern unsigned IOCTL_CDROMVOLCTRL;1258extern unsigned IOCTL_CDROMVOLREAD;1259extern unsigned IOCTL_CDROM_GET_UPC;1260extern unsigned IOCTL_FDCLRPRM;1261extern unsigned IOCTL_FDDEFPRM;1262extern unsigned IOCTL_FDFLUSH;1263extern unsigned IOCTL_FDFMTBEG;1264extern unsigned IOCTL_FDFMTEND;1265extern unsigned IOCTL_FDFMTTRK;1266extern unsigned IOCTL_FDGETDRVPRM;1267extern unsigned IOCTL_FDGETDRVSTAT;1268extern unsigned IOCTL_FDGETDRVTYP;1269extern unsigned IOCTL_FDGETFDCSTAT;1270extern unsigned IOCTL_FDGETMAXERRS;1271extern unsigned IOCTL_FDGETPRM;1272extern unsigned IOCTL_FDMSGOFF;1273extern unsigned IOCTL_FDMSGON;1274extern unsigned IOCTL_FDPOLLDRVSTAT;1275extern unsigned IOCTL_FDRAWCMD;1276extern unsigned IOCTL_FDRESET;1277extern unsigned IOCTL_FDSETDRVPRM;1278extern unsigned IOCTL_FDSETEMSGTRESH;1279extern unsigned IOCTL_FDSETMAXERRS;1280extern unsigned IOCTL_FDSETPRM;1281extern unsigned IOCTL_FDTWADDLE;1282extern unsigned IOCTL_FDWERRORCLR;1283extern unsigned IOCTL_FDWERRORGET;1284extern unsigned IOCTL_HDIO_DRIVE_CMD;1285extern unsigned IOCTL_HDIO_GETGEO;1286extern unsigned IOCTL_HDIO_GET_32BIT;1287extern unsigned IOCTL_HDIO_GET_DMA;1288extern unsigned IOCTL_HDIO_GET_IDENTITY;1289extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS;1290extern unsigned IOCTL_HDIO_GET_MULTCOUNT;1291extern unsigned IOCTL_HDIO_GET_NOWERR;1292extern unsigned IOCTL_HDIO_GET_UNMASKINTR;1293extern unsigned IOCTL_HDIO_SET_32BIT;1294extern unsigned IOCTL_HDIO_SET_DMA;1295extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS;1296extern unsigned IOCTL_HDIO_SET_MULTCOUNT;1297extern unsigned IOCTL_HDIO_SET_NOWERR;1298extern unsigned IOCTL_HDIO_SET_UNMASKINTR;1299extern unsigned IOCTL_MTIOCPOS;1300extern unsigned IOCTL_PPPIOCGASYNCMAP;1301extern unsigned IOCTL_PPPIOCGDEBUG;1302extern unsigned IOCTL_PPPIOCGFLAGS;1303extern unsigned IOCTL_PPPIOCGUNIT;1304extern unsigned IOCTL_PPPIOCGXASYNCMAP;1305extern unsigned IOCTL_PPPIOCSASYNCMAP;1306extern unsigned IOCTL_PPPIOCSDEBUG;1307extern unsigned IOCTL_PPPIOCSFLAGS;1308extern unsigned IOCTL_PPPIOCSMAXCID;1309extern unsigned IOCTL_PPPIOCSMRU;1310extern unsigned IOCTL_PPPIOCSXASYNCMAP;1311extern unsigned IOCTL_SIOCDARP;1312extern unsigned IOCTL_SIOCDRARP;1313extern unsigned IOCTL_SIOCGARP;1314extern unsigned IOCTL_SIOCGIFENCAP;1315extern unsigned IOCTL_SIOCGIFHWADDR;1316extern unsigned IOCTL_SIOCGIFMAP;1317extern unsigned IOCTL_SIOCGIFMEM;1318extern unsigned IOCTL_SIOCGIFNAME;1319extern unsigned IOCTL_SIOCGIFSLAVE;1320extern unsigned IOCTL_SIOCGRARP;1321extern unsigned IOCTL_SIOCGSTAMP;1322extern unsigned IOCTL_SIOCSARP;1323extern unsigned IOCTL_SIOCSIFENCAP;1324extern unsigned IOCTL_SIOCSIFHWADDR;1325extern unsigned IOCTL_SIOCSIFLINK;1326extern unsigned IOCTL_SIOCSIFMAP;1327extern unsigned IOCTL_SIOCSIFMEM;1328extern unsigned IOCTL_SIOCSIFSLAVE;1329extern unsigned IOCTL_SIOCSRARP;1330extern unsigned IOCTL_SNDCTL_COPR_HALT;1331extern unsigned IOCTL_SNDCTL_COPR_LOAD;1332extern unsigned IOCTL_SNDCTL_COPR_RCODE;1333extern unsigned IOCTL_SNDCTL_COPR_RCVMSG;1334extern unsigned IOCTL_SNDCTL_COPR_RDATA;1335extern unsigned IOCTL_SNDCTL_COPR_RESET;1336extern unsigned IOCTL_SNDCTL_COPR_RUN;1337extern unsigned IOCTL_SNDCTL_COPR_SENDMSG;1338extern unsigned IOCTL_SNDCTL_COPR_WCODE;1339extern unsigned IOCTL_SNDCTL_COPR_WDATA;1340extern unsigned IOCTL_TCFLSH;1341extern unsigned IOCTL_TCSBRK;1342extern unsigned IOCTL_TCSBRKP;1343#    if SANITIZER_TERMIOS_IOCTL_CONSTANTS1344extern unsigned IOCTL_TCGETS;1345extern unsigned IOCTL_TCSETS;1346extern unsigned IOCTL_TCSETSF;1347extern unsigned IOCTL_TCSETSW;1348#    endif1349extern unsigned IOCTL_TCXONC;1350extern unsigned IOCTL_TIOCGLCKTRMIOS;1351extern unsigned IOCTL_TIOCGSOFTCAR;1352extern unsigned IOCTL_TIOCINQ;1353extern unsigned IOCTL_TIOCLINUX;1354extern unsigned IOCTL_TIOCSERCONFIG;1355extern unsigned IOCTL_TIOCSERGETLSR;1356extern unsigned IOCTL_TIOCSERGWILD;1357extern unsigned IOCTL_TIOCSERSWILD;1358extern unsigned IOCTL_TIOCSLCKTRMIOS;1359extern unsigned IOCTL_TIOCSSOFTCAR;1360extern unsigned IOCTL_VT_DISALLOCATE;1361extern unsigned IOCTL_VT_GETSTATE;1362extern unsigned IOCTL_VT_RESIZE;1363extern unsigned IOCTL_VT_RESIZEX;1364extern unsigned IOCTL_VT_SENDSIG;1365extern unsigned IOCTL_MTIOCGET;1366extern unsigned IOCTL_MTIOCTOP;1367extern unsigned IOCTL_SIOCADDRT;1368extern unsigned IOCTL_SIOCDELRT;1369extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE;1370extern unsigned IOCTL_SNDCTL_DSP_GETFMTS;1371extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK;1372extern unsigned IOCTL_SNDCTL_DSP_POST;1373extern unsigned IOCTL_SNDCTL_DSP_RESET;1374extern unsigned IOCTL_SNDCTL_DSP_SETFMT;1375extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT;1376extern unsigned IOCTL_SNDCTL_DSP_SPEED;1377extern unsigned IOCTL_SNDCTL_DSP_STEREO;1378extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE;1379extern unsigned IOCTL_SNDCTL_DSP_SYNC;1380extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE;1381extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR;1382extern unsigned IOCTL_SNDCTL_MIDI_INFO;1383extern unsigned IOCTL_SNDCTL_MIDI_PRETIME;1384extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE;1385extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT;1386extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT;1387extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS;1388extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS;1389extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND;1390extern unsigned IOCTL_SNDCTL_SEQ_PANIC;1391extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE;1392extern unsigned IOCTL_SNDCTL_SEQ_RESET;1393extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES;1394extern unsigned IOCTL_SNDCTL_SEQ_SYNC;1395extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI;1396extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD;1397extern unsigned IOCTL_SNDCTL_SYNTH_INFO;1398extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL;1399extern unsigned IOCTL_SNDCTL_TMR_CONTINUE;1400extern unsigned IOCTL_SNDCTL_TMR_METRONOME;1401extern unsigned IOCTL_SNDCTL_TMR_SELECT;1402extern unsigned IOCTL_SNDCTL_TMR_SOURCE;1403extern unsigned IOCTL_SNDCTL_TMR_START;1404extern unsigned IOCTL_SNDCTL_TMR_STOP;1405extern unsigned IOCTL_SNDCTL_TMR_TEMPO;1406extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE;1407extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM;1408extern unsigned IOCTL_SOUND_MIXER_READ_BASS;1409extern unsigned IOCTL_SOUND_MIXER_READ_CAPS;1410extern unsigned IOCTL_SOUND_MIXER_READ_CD;1411extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK;1412extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE;1413extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN;1414extern unsigned IOCTL_SOUND_MIXER_READ_IMIX;1415extern unsigned IOCTL_SOUND_MIXER_READ_LINE1;1416extern unsigned IOCTL_SOUND_MIXER_READ_LINE2;1417extern unsigned IOCTL_SOUND_MIXER_READ_LINE3;1418extern unsigned IOCTL_SOUND_MIXER_READ_LINE;1419extern unsigned IOCTL_SOUND_MIXER_READ_LOUD;1420extern unsigned IOCTL_SOUND_MIXER_READ_MIC;1421extern unsigned IOCTL_SOUND_MIXER_READ_MUTE;1422extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN;1423extern unsigned IOCTL_SOUND_MIXER_READ_PCM;1424extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV;1425extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK;1426extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC;1427extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER;1428extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS;1429extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH;1430extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE;1431extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME;1432extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM;1433extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS;1434extern unsigned IOCTL_SOUND_MIXER_WRITE_CD;1435extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE;1436extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN;1437extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX;1438extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1;1439extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2;1440extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3;1441extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE;1442extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD;1443extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC;1444extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE;1445extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN;1446extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM;1447extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV;1448extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC;1449extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER;1450extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH;1451extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE;1452extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME;1453extern unsigned IOCTL_SOUND_PCM_READ_BITS;1454extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS;1455extern unsigned IOCTL_SOUND_PCM_READ_FILTER;1456extern unsigned IOCTL_SOUND_PCM_READ_RATE;1457extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS;1458extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER;1459extern unsigned IOCTL_VT_ACTIVATE;1460extern unsigned IOCTL_VT_GETMODE;1461extern unsigned IOCTL_VT_OPENQRY;1462extern unsigned IOCTL_VT_RELDISP;1463extern unsigned IOCTL_VT_SETMODE;1464extern unsigned IOCTL_VT_WAITACTIVE;1465#  endif  // SANITIZER_LINUX1466 1467#  if SANITIZER_LINUX && !SANITIZER_ANDROID1468extern unsigned IOCTL_EQL_EMANCIPATE;1469extern unsigned IOCTL_EQL_ENSLAVE;1470extern unsigned IOCTL_EQL_GETMASTRCFG;1471extern unsigned IOCTL_EQL_GETSLAVECFG;1472extern unsigned IOCTL_EQL_SETMASTRCFG;1473extern unsigned IOCTL_EQL_SETSLAVECFG;1474extern unsigned IOCTL_EVIOCGKEYCODE_V2;1475extern unsigned IOCTL_EVIOCGPROP;1476extern unsigned IOCTL_EVIOCSKEYCODE_V2;1477extern unsigned IOCTL_FS_IOC_GETFLAGS;1478extern unsigned IOCTL_FS_IOC_GETVERSION;1479extern unsigned IOCTL_FS_IOC_SETFLAGS;1480extern unsigned IOCTL_FS_IOC_SETVERSION;1481extern unsigned IOCTL_GIO_CMAP;1482extern unsigned IOCTL_GIO_FONT;1483extern unsigned IOCTL_GIO_UNIMAP;1484extern unsigned IOCTL_GIO_UNISCRNMAP;1485extern unsigned IOCTL_KDADDIO;1486extern unsigned IOCTL_KDDELIO;1487extern unsigned IOCTL_KDGETKEYCODE;1488extern unsigned IOCTL_KDGKBDIACR;1489extern unsigned IOCTL_KDGKBENT;1490extern unsigned IOCTL_KDGKBLED;1491extern unsigned IOCTL_KDGKBMETA;1492extern unsigned IOCTL_KDGKBSENT;1493extern unsigned IOCTL_KDMAPDISP;1494extern unsigned IOCTL_KDSETKEYCODE;1495extern unsigned IOCTL_KDSIGACCEPT;1496extern unsigned IOCTL_KDSKBDIACR;1497extern unsigned IOCTL_KDSKBENT;1498extern unsigned IOCTL_KDSKBLED;1499extern unsigned IOCTL_KDSKBMETA;1500extern unsigned IOCTL_KDSKBSENT;1501extern unsigned IOCTL_KDUNMAPDISP;1502extern unsigned IOCTL_LPABORT;1503extern unsigned IOCTL_LPABORTOPEN;1504extern unsigned IOCTL_LPCAREFUL;1505extern unsigned IOCTL_LPCHAR;1506extern unsigned IOCTL_LPGETIRQ;1507extern unsigned IOCTL_LPGETSTATUS;1508extern unsigned IOCTL_LPRESET;1509extern unsigned IOCTL_LPSETIRQ;1510extern unsigned IOCTL_LPTIME;1511extern unsigned IOCTL_LPWAIT;1512extern unsigned IOCTL_MTIOCGETCONFIG;1513extern unsigned IOCTL_MTIOCSETCONFIG;1514extern unsigned IOCTL_PIO_CMAP;1515extern unsigned IOCTL_PIO_FONT;1516extern unsigned IOCTL_PIO_UNIMAP;1517extern unsigned IOCTL_PIO_UNIMAPCLR;1518extern unsigned IOCTL_PIO_UNISCRNMAP;1519extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN;1520extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST;1521extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE;1522extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE;1523extern unsigned IOCTL_SIOCAIPXITFCRT;1524extern unsigned IOCTL_SIOCAIPXPRISLT;1525extern unsigned IOCTL_SIOCAX25ADDUID;1526extern unsigned IOCTL_SIOCAX25DELUID;1527extern unsigned IOCTL_SIOCAX25GETPARMS;1528extern unsigned IOCTL_SIOCAX25GETUID;1529extern unsigned IOCTL_SIOCAX25NOUID;1530extern unsigned IOCTL_SIOCAX25SETPARMS;1531extern unsigned IOCTL_SIOCDEVPLIP;1532extern unsigned IOCTL_SIOCIPXCFGDATA;1533extern unsigned IOCTL_SIOCNRDECOBS;1534extern unsigned IOCTL_SIOCNRGETPARMS;1535extern unsigned IOCTL_SIOCNRRTCTL;1536extern unsigned IOCTL_SIOCNRSETPARMS;1537extern unsigned IOCTL_SNDCTL_DSP_GETISPACE;1538extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE;1539extern unsigned IOCTL_TIOCGSERIAL;1540extern unsigned IOCTL_TIOCSERGETMULTI;1541extern unsigned IOCTL_TIOCSERSETMULTI;1542extern unsigned IOCTL_TIOCSSERIAL;1543extern unsigned IOCTL_GIO_SCRNMAP;1544extern unsigned IOCTL_KDDISABIO;1545extern unsigned IOCTL_KDENABIO;1546extern unsigned IOCTL_KDGETLED;1547extern unsigned IOCTL_KDGETMODE;1548extern unsigned IOCTL_KDGKBMODE;1549extern unsigned IOCTL_KDGKBTYPE;1550extern unsigned IOCTL_KDMKTONE;1551extern unsigned IOCTL_KDSETLED;1552extern unsigned IOCTL_KDSETMODE;1553extern unsigned IOCTL_KDSKBMODE;1554extern unsigned IOCTL_KIOCSOUND;1555extern unsigned IOCTL_PIO_SCRNMAP;1556#  endif1557 1558#  if SANITIZER_GLIBC1559struct __sanitizer_servent {1560  char *s_name;1561  char **s_aliases;1562  int s_port;1563  char *s_proto;1564};1565#  endif1566 1567extern const int si_SEGV_MAPERR;1568extern const int si_SEGV_ACCERR;1569}  // namespace __sanitizer1570 1571#  define CHECK_TYPE_SIZE(TYPE) \1572    COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))1573 1574#  define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER)                      \1575    COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *)NULL)->MEMBER) == \1576                   sizeof(((CLASS *)NULL)->MEMBER));                \1577    COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) ==         \1578                   offsetof(CLASS, MEMBER))1579 1580// For sigaction, which is a function and struct at the same time,1581// and thus requires explicit "struct" in sizeof() expression.1582#  define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER)                      \1583    COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *)NULL)->MEMBER) == \1584                   sizeof(((struct CLASS *)NULL)->MEMBER));                \1585    COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) ==         \1586                   offsetof(struct CLASS, MEMBER))1587 1588#  define SIGACTION_SYMNAME sigaction1589 1590#  if SANITIZER_LINUX1591typedef void *__sanitizer_timer_t;1592#  endif1593 1594#endif  // SANITIZER_LINUX || SANITIZER_APPLE || SANITIZER_HAIKU1595 1596#endif1597