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