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-exception 6// 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_H 15#define SANITIZER_PLATFORM_LIMITS_POSIX_H 16 17#if SANITIZER_LINUX || SANITIZER_MAC 18 19#include "sanitizer_internal_defs.h" 20#include "sanitizer_platform.h" 21 22#if defined(__sparc__) 23// FIXME: This can't be included from tsan which does not support sparc yet. 24#include "sanitizer_glibc_version.h" 25#endif 26 27# define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map*)(handle)) 28 29namespace __sanitizer { 30extern unsigned struct_utsname_sz; 31extern unsigned struct_stat_sz; 32#if !SANITIZER_IOS 33extern unsigned struct_stat64_sz; 34#endif 35extern unsigned struct_rusage_sz; 36extern unsigned siginfo_t_sz; 37extern unsigned struct_itimerval_sz; 38extern unsigned pthread_t_sz; 39extern unsigned pthread_mutex_t_sz; 40extern unsigned pthread_cond_t_sz; 41extern unsigned pid_t_sz; 42extern unsigned timeval_sz; 43extern unsigned uid_t_sz; 44extern unsigned gid_t_sz; 45extern unsigned mbstate_t_sz; 46extern unsigned struct_timezone_sz; 47extern unsigned struct_tms_sz; 48extern unsigned struct_itimerspec_sz; 49extern unsigned struct_sigevent_sz; 50extern unsigned struct_stack_t_sz; 51extern unsigned struct_sched_param_sz; 52extern unsigned struct_statfs64_sz; 53extern unsigned struct_regex_sz; 54extern unsigned struct_regmatch_sz; 55 56#if !SANITIZER_ANDROID 57extern unsigned struct_fstab_sz; 58extern unsigned struct_statfs_sz; 59extern unsigned struct_sockaddr_sz; 60extern unsigned ucontext_t_sz; 61#endif // !SANITIZER_ANDROID 62 63#if SANITIZER_LINUX 64 65#if defined(__x86_64__) 66const unsigned struct_kernel_stat_sz = 144; 67const unsigned struct_kernel_stat64_sz = 0; 68#elif defined(__i386__) 69const unsigned struct_kernel_stat_sz = 64; 70const unsigned struct_kernel_stat64_sz = 96; 71#elif defined(__arm__) 72const unsigned struct_kernel_stat_sz = 64; 73const unsigned struct_kernel_stat64_sz = 104; 74#elif defined(__aarch64__) 75const unsigned struct_kernel_stat_sz = 128; 76const unsigned struct_kernel_stat64_sz = 104; 77#elif defined(__powerpc__) && !defined(__powerpc64__) 78const unsigned struct_kernel_stat_sz = 72; 79const unsigned struct_kernel_stat64_sz = 104; 80#elif defined(__powerpc64__) 81const unsigned struct_kernel_stat_sz = 144; 82const unsigned struct_kernel_stat64_sz = 104; 83#elif defined(__mips__) 84const unsigned struct_kernel_stat_sz = SANITIZER_ANDROID 85 ? FIRST_32_SECOND_64(104, 128) 86 : FIRST_32_SECOND_64(144, 216); 87const unsigned struct_kernel_stat64_sz = 104; 88#elif defined(__s390__) && !defined(__s390x__) 89const unsigned struct_kernel_stat_sz = 64; 90const unsigned struct_kernel_stat64_sz = 104; 91#elif defined(__s390x__) 92const unsigned struct_kernel_stat_sz = 144; 93const unsigned struct_kernel_stat64_sz = 0; 94#elif defined(__sparc__) && defined(__arch64__) 95const unsigned struct___old_kernel_stat_sz = 0; 96const unsigned struct_kernel_stat_sz = 104; 97const unsigned struct_kernel_stat64_sz = 144; 98#elif defined(__sparc__) && !defined(__arch64__) 99const unsigned struct___old_kernel_stat_sz = 0; 100const unsigned struct_kernel_stat_sz = 64; 101const unsigned struct_kernel_stat64_sz = 104; 102#elif SANITIZER_RISCV64 103const unsigned struct_kernel_stat_sz = 128; 104const unsigned struct_kernel_stat64_sz = 0; // RISCV64 does not use stat64 105# elif defined(__hexagon__) 106const unsigned struct_kernel_stat_sz = 128; 107const unsigned struct_kernel_stat64_sz = 0; 108# endif 109struct __sanitizer_perf_event_attr { 110 unsigned type; 111 unsigned size; 112 // More fields that vary with the kernel version. 113}; 114 115extern unsigned struct_epoll_event_sz; 116extern unsigned struct_sysinfo_sz; 117extern unsigned __user_cap_header_struct_sz; 118extern unsigned __user_cap_data_struct_sz; 119extern unsigned struct_new_utsname_sz; 120extern unsigned struct_old_utsname_sz; 121extern unsigned struct_oldold_utsname_sz; 122 123const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long); 124#endif // SANITIZER_LINUX 125 126#if SANITIZER_LINUX 127 128#if defined(__powerpc64__) || defined(__s390__) 129const unsigned struct___old_kernel_stat_sz = 0; 130#elif !defined(__sparc__) 131const unsigned struct___old_kernel_stat_sz = 32; 132#endif 133 134extern unsigned struct_rlimit_sz; 135extern unsigned struct_utimbuf_sz; 136extern unsigned struct_timespec_sz; 137 138struct __sanitizer_iocb { 139 u64 aio_data; 140 u32 aio_key_or_aio_reserved1; // Simply crazy. 141 u32 aio_reserved1_or_aio_key; // Luckily, we don't need these. 142 u16 aio_lio_opcode; 143 s16 aio_reqprio; 144 u32 aio_fildes; 145 u64 aio_buf; 146 u64 aio_nbytes; 147 s64 aio_offset; 148 u64 aio_reserved2; 149 u64 aio_reserved3; 150}; 151 152struct __sanitizer_io_event { 153 u64 data; 154 u64 obj; 155 u64 res; 156 u64 res2; 157}; 158 159const unsigned iocb_cmd_pread = 0; 160const unsigned iocb_cmd_pwrite = 1; 161const unsigned iocb_cmd_preadv = 7; 162const unsigned iocb_cmd_pwritev = 8; 163 164struct __sanitizer___sysctl_args { 165 int *name; 166 int nlen; 167 void *oldval; 168 uptr *oldlenp; 169 void *newval; 170 uptr newlen; 171 unsigned long ___unused[4]; 172}; 173 174const unsigned old_sigset_t_sz = sizeof(unsigned long); 175 176struct __sanitizer_sem_t { 177#if SANITIZER_ANDROID && defined(_LP64) 178 int data[4]; 179#elif SANITIZER_ANDROID && !defined(_LP64) 180 int data; 181#elif SANITIZER_LINUX 182 uptr data[4]; 183#endif 184}; 185#endif // SANITIZER_LINUX 186 187#if SANITIZER_ANDROID 188struct __sanitizer_struct_mallinfo { 189 uptr v[10]; 190}; 191#endif 192 193#if SANITIZER_LINUX && !SANITIZER_ANDROID 194struct __sanitizer_struct_mallinfo { 195 int v[10]; 196}; 197 198extern unsigned struct_ustat_sz; 199extern unsigned struct_rlimit64_sz; 200extern unsigned struct_statvfs64_sz; 201 202struct __sanitizer_ipc_perm { 203 int __key; 204 int uid; 205 int gid; 206 int cuid; 207 int cgid; 208#ifdef __powerpc__ 209 unsigned mode; 210 unsigned __seq; 211 u64 __unused1; 212 u64 __unused2; 213#elif defined(__sparc__) 214 unsigned mode; 215 unsigned short __pad2; 216 unsigned short __seq; 217 unsigned long long __unused1; 218 unsigned long long __unused2; 219#else 220 unsigned int mode; 221 unsigned short __seq; 222 unsigned short __pad2; 223#if defined(__x86_64__) && !defined(_LP64) 224 u64 __unused1; 225 u64 __unused2; 226#else 227 unsigned long __unused1; 228 unsigned long __unused2; 229#endif 230#endif 231}; 232 233struct __sanitizer_shmid_ds { 234 __sanitizer_ipc_perm shm_perm; 235#if defined(__sparc__) 236#if !defined(__arch64__) 237 u32 __pad1; 238#endif 239 long shm_atime; 240#if !defined(__arch64__) 241 u32 __pad2; 242#endif 243 long shm_dtime; 244#if !defined(__arch64__) 245 u32 __pad3; 246#endif 247 long shm_ctime; 248 uptr shm_segsz; 249 int shm_cpid; 250 int shm_lpid; 251 unsigned long shm_nattch; 252 unsigned long __glibc_reserved1; 253 unsigned long __glibc_reserved2; 254#else 255#ifndef __powerpc__ 256 uptr shm_segsz; 257#elif !defined(__powerpc64__) 258 uptr __unused0; 259#endif 260#if defined(__x86_64__) && !defined(_LP64) 261 u64 shm_atime; 262 u64 shm_dtime; 263 u64 shm_ctime; 264#else 265 uptr shm_atime; 266#if !defined(_LP64) && !defined(__mips__) 267 uptr __unused1; 268#endif 269 uptr shm_dtime; 270#if !defined(_LP64) && !defined(__mips__) 271 uptr __unused2; 272#endif 273 uptr shm_ctime; 274#if !defined(_LP64) && !defined(__mips__) 275 uptr __unused3; 276#endif 277#endif 278#ifdef __powerpc__ 279 uptr shm_segsz; 280#endif 281 int shm_cpid; 282 int shm_lpid; 283#if defined(__x86_64__) && !defined(_LP64) 284 u64 shm_nattch; 285 u64 __unused4; 286 u64 __unused5; 287#else 288 uptr shm_nattch; 289 uptr __unused4; 290 uptr __unused5; 291#endif 292#endif 293}; 294#endif 295 296#if SANITIZER_LINUX && !SANITIZER_ANDROID 297extern unsigned struct_msqid_ds_sz; 298extern unsigned struct_mq_attr_sz; 299extern unsigned struct_timex_sz; 300extern unsigned struct_statvfs_sz; 301extern unsigned struct_crypt_data_sz; 302#endif // SANITIZER_LINUX && !SANITIZER_ANDROID 303 304struct __sanitizer_iovec { 305 void *iov_base; 306 uptr iov_len; 307}; 308 309#if !SANITIZER_ANDROID 310struct __sanitizer_ifaddrs { 311 struct __sanitizer_ifaddrs *ifa_next; 312 char *ifa_name; 313 unsigned int ifa_flags; 314 void *ifa_addr; // (struct sockaddr *) 315 void *ifa_netmask; // (struct sockaddr *) 316 // This is a union on Linux. 317# ifdef ifa_dstaddr 318# undef ifa_dstaddr 319# endif 320 void *ifa_dstaddr; // (struct sockaddr *) 321 void *ifa_data; 322}; 323#endif // !SANITIZER_ANDROID 324 325#if SANITIZER_MAC 326typedef unsigned long __sanitizer_pthread_key_t; 327#else 328typedef unsigned __sanitizer_pthread_key_t; 329#endif 330 331#if SANITIZER_LINUX && !SANITIZER_ANDROID 332 333struct __sanitizer_XDR { 334 int x_op; 335 void *x_ops; 336 uptr x_public; 337 uptr x_private; 338 uptr x_base; 339 unsigned x_handy; 340}; 341 342const int __sanitizer_XDR_ENCODE = 0; 343const int __sanitizer_XDR_DECODE = 1; 344const int __sanitizer_XDR_FREE = 2; 345#endif 346 347struct __sanitizer_passwd { 348 char *pw_name; 349 char *pw_passwd; 350 int pw_uid; 351 int pw_gid; 352#if SANITIZER_MAC 353 long pw_change; 354 char *pw_class; 355#endif 356#if !(SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32)) 357 char *pw_gecos; 358#endif 359 char *pw_dir; 360 char *pw_shell; 361#if SANITIZER_MAC 362 long pw_expire; 363#endif 364}; 365 366struct __sanitizer_group { 367 char *gr_name; 368 char *gr_passwd; 369 int gr_gid; 370 char **gr_mem; 371}; 372 373# if (defined(__x86_64__) && !defined(_LP64)) || defined(__hexagon__) 374typedef long long __sanitizer_time_t; 375#else 376typedef long __sanitizer_time_t; 377#endif 378 379typedef long __sanitizer_suseconds_t; 380 381struct __sanitizer_timeval { 382 __sanitizer_time_t tv_sec; 383 __sanitizer_suseconds_t tv_usec; 384}; 385 386struct __sanitizer_itimerval { 387 struct __sanitizer_timeval it_interval; 388 struct __sanitizer_timeval it_value; 389}; 390 391struct __sanitizer_timeb { 392 __sanitizer_time_t time; 393 unsigned short millitm; 394 short timezone; 395 short dstflag; 396}; 397 398struct __sanitizer_ether_addr { 399 u8 octet[6]; 400}; 401 402struct __sanitizer_tm { 403 int tm_sec; 404 int tm_min; 405 int tm_hour; 406 int tm_mday; 407 int tm_mon; 408 int tm_year; 409 int tm_wday; 410 int tm_yday; 411 int tm_isdst; 412 long int tm_gmtoff; 413 const char *tm_zone; 414}; 415 416#if SANITIZER_LINUX 417struct __sanitizer_mntent { 418 char *mnt_fsname; 419 char *mnt_dir; 420 char *mnt_type; 421 char *mnt_opts; 422 int mnt_freq; 423 int mnt_passno; 424}; 425 426struct __sanitizer_file_handle { 427 unsigned int handle_bytes; 428 int handle_type; 429 unsigned char f_handle[1]; // variable sized 430}; 431#endif 432 433#if SANITIZER_MAC 434struct __sanitizer_msghdr { 435 void *msg_name; 436 unsigned msg_namelen; 437 struct __sanitizer_iovec *msg_iov; 438 unsigned msg_iovlen; 439 void *msg_control; 440 unsigned msg_controllen; 441 int msg_flags; 442}; 443struct __sanitizer_cmsghdr { 444 unsigned cmsg_len; 445 int cmsg_level; 446 int cmsg_type; 447}; 448#else 449// In POSIX, int msg_iovlen; socklen_t msg_controllen; socklen_t cmsg_len; but 450// many implementations don't conform to the standard. 451struct __sanitizer_msghdr { 452 void *msg_name; 453 unsigned msg_namelen; 454 struct __sanitizer_iovec *msg_iov; 455 uptr msg_iovlen; 456 void *msg_control; 457 uptr msg_controllen; 458 int msg_flags; 459}; 460struct __sanitizer_cmsghdr { 461 uptr cmsg_len; 462 int cmsg_level; 463 int cmsg_type; 464}; 465#endif 466 467#if SANITIZER_LINUX 468struct __sanitizer_mmsghdr { 469 __sanitizer_msghdr msg_hdr; 470 unsigned int msg_len; 471}; 472#endif 473 474#if SANITIZER_MAC 475struct __sanitizer_dirent { 476 unsigned long long d_ino; 477 unsigned long long d_seekoff; 478 unsigned short d_reclen; 479 // more fields that we don't care about 480}; 481# elif SANITIZER_ANDROID || defined(__x86_64__) || defined(__hexagon__) 482struct __sanitizer_dirent { 483 unsigned long long d_ino; 484 unsigned long long d_off; 485 unsigned short d_reclen; 486 // more fields that we don't care about 487}; 488# else 489struct __sanitizer_dirent { 490 uptr d_ino; 491 uptr d_off; 492 unsigned short d_reclen; 493 // more fields that we don't care about 494}; 495# endif 496 497# if SANITIZER_LINUX && !SANITIZER_ANDROID 498struct __sanitizer_dirent64 { 499 unsigned long long d_ino; 500 unsigned long long d_off; 501 unsigned short d_reclen; 502 // more fields that we don't care about 503}; 504#endif 505 506#if defined(__x86_64__) && !defined(_LP64) 507typedef long long __sanitizer_clock_t; 508#else 509typedef long __sanitizer_clock_t; 510#endif 511 512#if SANITIZER_LINUX 513typedef int __sanitizer_clockid_t; 514#endif 515 516#if SANITIZER_LINUX 517# if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__) || \ 518 defined(__mips__) || defined(__hexagon__) 519typedef unsigned __sanitizer___kernel_uid_t; 520typedef unsigned __sanitizer___kernel_gid_t; 521#else 522typedef unsigned short __sanitizer___kernel_uid_t; 523typedef unsigned short __sanitizer___kernel_gid_t; 524#endif 525#if defined(__x86_64__) && !defined(_LP64) 526typedef long long __sanitizer___kernel_off_t; 527#else 528typedef long __sanitizer___kernel_off_t; 529#endif 530 531#if defined(__powerpc__) || defined(__mips__) 532typedef unsigned int __sanitizer___kernel_old_uid_t; 533typedef unsigned int __sanitizer___kernel_old_gid_t; 534#else 535typedef unsigned short __sanitizer___kernel_old_uid_t; 536typedef unsigned short __sanitizer___kernel_old_gid_t; 537#endif 538 539typedef long long __sanitizer___kernel_loff_t; 540typedef struct { 541 unsigned long fds_bits[1024 / (8 * sizeof(long))]; 542} __sanitizer___kernel_fd_set; 543#endif 544 545// This thing depends on the platform. We are only interested in the upper 546// limit. Verified with a compiler assert in .cpp. 547union __sanitizer_pthread_attr_t { 548 char size[128]; 549 void *align; 550}; 551 552#if SANITIZER_ANDROID 553# if SANITIZER_MIPS 554typedef unsigned long __sanitizer_sigset_t[16 / sizeof(unsigned long)]; 555# else 556typedef unsigned long __sanitizer_sigset_t; 557# endif 558#elif SANITIZER_MAC 559typedef unsigned __sanitizer_sigset_t; 560#elif SANITIZER_LINUX 561struct __sanitizer_sigset_t { 562 // The size is determined by looking at sizeof of real sigset_t on linux. 563 uptr val[128 / sizeof(uptr)]; 564}; 565#endif 566 567struct __sanitizer_siginfo { 568 // The size is determined by looking at sizeof of real siginfo_t on linux. 569 u64 opaque[128 / sizeof(u64)]; 570}; 571 572using __sanitizer_sighandler_ptr = void (*)(int sig); 573using __sanitizer_sigactionhandler_ptr = void (*)(int sig, 574 __sanitizer_siginfo *siginfo, 575 void *uctx); 576 577// Linux system headers define the 'sa_handler' and 'sa_sigaction' macros. 578#if SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 64) 579struct __sanitizer_sigaction { 580 unsigned sa_flags; 581 union { 582 __sanitizer_sigactionhandler_ptr sigaction; 583 __sanitizer_sighandler_ptr handler; 584 }; 585 __sanitizer_sigset_t sa_mask; 586 void (*sa_restorer)(); 587}; 588#elif SANITIZER_ANDROID && SANITIZER_MIPS32 // check this before WORDSIZE == 32 589struct __sanitizer_sigaction { 590 unsigned sa_flags; 591 union { 592 __sanitizer_sigactionhandler_ptr sigaction; 593 __sanitizer_sighandler_ptr handler; 594 }; 595 __sanitizer_sigset_t sa_mask; 596}; 597#elif SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32) 598struct __sanitizer_sigaction { 599 union { 600 __sanitizer_sigactionhandler_ptr sigaction; 601 __sanitizer_sighandler_ptr handler; 602 }; 603 __sanitizer_sigset_t sa_mask; 604 uptr sa_flags; 605 void (*sa_restorer)(); 606}; 607#else // !SANITIZER_ANDROID 608struct __sanitizer_sigaction { 609#if defined(__mips__) && !SANITIZER_FREEBSD 610 unsigned int sa_flags; 611#endif 612 union { 613 __sanitizer_sigactionhandler_ptr sigaction; 614 __sanitizer_sighandler_ptr handler; 615 }; 616#if SANITIZER_FREEBSD 617 int sa_flags; 618 __sanitizer_sigset_t sa_mask; 619#else 620#if defined(__s390x__) 621 int sa_resv; 622#else 623 __sanitizer_sigset_t sa_mask; 624#endif 625#ifndef __mips__ 626#if defined(__sparc__) 627#if __GLIBC_PREREQ (2, 20) 628 // On sparc glibc 2.19 and earlier sa_flags was unsigned long. 629#if defined(__arch64__) 630 // To maintain ABI compatibility on sparc64 when switching to an int, 631 // __glibc_reserved0 was added. 632 int __glibc_reserved0; 633#endif 634 int sa_flags; 635#else 636 unsigned long sa_flags; 637#endif 638#else 639 int sa_flags; 640#endif 641#endif 642#endif 643#if SANITIZER_LINUX 644 void (*sa_restorer)(); 645#endif 646#if defined(__mips__) && (SANITIZER_WORDSIZE == 32) 647 int sa_resv[1]; 648#endif 649#if defined(__s390x__) 650 __sanitizer_sigset_t sa_mask; 651#endif 652}; 653#endif // !SANITIZER_ANDROID 654 655#if defined(__mips__) 656#define __SANITIZER_KERNEL_NSIG 128 657#else 658#define __SANITIZER_KERNEL_NSIG 64 659#endif 660 661struct __sanitizer_kernel_sigset_t { 662 uptr sig[__SANITIZER_KERNEL_NSIG / (sizeof(uptr) * 8)]; 663}; 664 665// Linux system headers define the 'sa_handler' and 'sa_sigaction' macros. 666#if SANITIZER_MIPS 667struct __sanitizer_kernel_sigaction_t { 668 unsigned int sa_flags; 669 union { 670 void (*handler)(int signo); 671 void (*sigaction)(int signo, __sanitizer_siginfo *info, void *ctx); 672 }; 673 __sanitizer_kernel_sigset_t sa_mask; 674 void (*sa_restorer)(void); 675}; 676#else 677struct __sanitizer_kernel_sigaction_t { 678 union { 679 void (*handler)(int signo); 680 void (*sigaction)(int signo, __sanitizer_siginfo *info, void *ctx); 681 }; 682 unsigned long sa_flags; 683 void (*sa_restorer)(void); 684 __sanitizer_kernel_sigset_t sa_mask; 685}; 686#endif 687 688extern const uptr sig_ign; 689extern const uptr sig_dfl; 690extern const uptr sig_err; 691extern const uptr sa_siginfo; 692 693#if SANITIZER_LINUX 694extern int e_tabsz; 695#endif 696 697extern int af_inet; 698extern int af_inet6; 699uptr __sanitizer_in_addr_sz(int af); 700 701#if SANITIZER_LINUX 702struct __sanitizer_dl_phdr_info { 703 uptr dlpi_addr; 704 const char *dlpi_name; 705 const void *dlpi_phdr; 706 short dlpi_phnum; 707}; 708 709extern unsigned struct_ElfW_Phdr_sz; 710#endif 711 712struct __sanitizer_protoent { 713 char *p_name; 714 char **p_aliases; 715 int p_proto; 716}; 717 718struct __sanitizer_netent { 719 char *n_name; 720 char **n_aliases; 721 int n_addrtype; 722 u32 n_net; 723}; 724 725struct __sanitizer_addrinfo { 726 int ai_flags; 727 int ai_family; 728 int ai_socktype; 729 int ai_protocol; 730#if SANITIZER_ANDROID || SANITIZER_MAC 731 unsigned ai_addrlen; 732 char *ai_canonname; 733 void *ai_addr; 734#else // LINUX 735 unsigned ai_addrlen; 736 void *ai_addr; 737 char *ai_canonname; 738#endif 739 struct __sanitizer_addrinfo *ai_next; 740}; 741 742struct __sanitizer_hostent { 743 char *h_name; 744 char **h_aliases; 745 int h_addrtype; 746 int h_length; 747 char **h_addr_list; 748}; 749 750struct __sanitizer_pollfd { 751 int fd; 752 short events; 753 short revents; 754}; 755 756#if SANITIZER_ANDROID || SANITIZER_MAC 757typedef unsigned __sanitizer_nfds_t; 758#else 759typedef unsigned long __sanitizer_nfds_t; 760#endif 761 762#if !SANITIZER_ANDROID 763# if SANITIZER_LINUX 764struct __sanitizer_glob_t { 765 uptr gl_pathc; 766 char **gl_pathv; 767 uptr gl_offs; 768 int gl_flags; 769 770 void (*gl_closedir)(void *dirp); 771 void *(*gl_readdir)(void *dirp); 772 void *(*gl_opendir)(const char *); 773 int (*gl_lstat)(const char *, void *); 774 int (*gl_stat)(const char *, void *); 775}; 776# endif // SANITIZER_LINUX 777 778# if SANITIZER_LINUX 779extern int glob_nomatch; 780extern int glob_altdirfunc; 781# endif 782#endif // !SANITIZER_ANDROID 783 784extern unsigned path_max; 785 786# if !SANITIZER_ANDROID 787extern const int wordexp_wrde_dooffs; 788# endif // !SANITIZER_ANDROID 789 790struct __sanitizer_wordexp_t { 791 uptr we_wordc; 792 char **we_wordv; 793 uptr we_offs; 794}; 795 796#if SANITIZER_LINUX && !SANITIZER_ANDROID 797struct __sanitizer_FILE { 798 int _flags; 799 char *_IO_read_ptr; 800 char *_IO_read_end; 801 char *_IO_read_base; 802 char *_IO_write_base; 803 char *_IO_write_ptr; 804 char *_IO_write_end; 805 char *_IO_buf_base; 806 char *_IO_buf_end; 807 char *_IO_save_base; 808 char *_IO_backup_base; 809 char *_IO_save_end; 810 void *_markers; 811 __sanitizer_FILE *_chain; 812 int _fileno; 813}; 814# define SANITIZER_HAS_STRUCT_FILE 1 815#else 816typedef void __sanitizer_FILE; 817# define SANITIZER_HAS_STRUCT_FILE 0 818#endif 819 820#if SANITIZER_LINUX && !SANITIZER_ANDROID && \ 821 (defined(__i386) || defined(__x86_64) || defined(__mips64) || \ 822 defined(__powerpc64__) || defined(__aarch64__) || defined(__arm__) || \ 823 defined(__s390__) || SANITIZER_RISCV64) 824extern unsigned struct_user_regs_struct_sz; 825extern unsigned struct_user_fpregs_struct_sz; 826extern unsigned struct_user_fpxregs_struct_sz; 827extern unsigned struct_user_vfpregs_struct_sz; 828 829extern int ptrace_peektext; 830extern int ptrace_peekdata; 831extern int ptrace_peekuser; 832extern int ptrace_getregs; 833extern int ptrace_setregs; 834extern int ptrace_getfpregs; 835extern int ptrace_setfpregs; 836extern int ptrace_getfpxregs; 837extern int ptrace_setfpxregs; 838extern int ptrace_getvfpregs; 839extern int ptrace_setvfpregs; 840extern int ptrace_getsiginfo; 841extern int ptrace_setsiginfo; 842extern int ptrace_getregset; 843extern int ptrace_setregset; 844extern int ptrace_geteventmsg; 845#endif 846 847#if SANITIZER_LINUX && !SANITIZER_ANDROID 848extern unsigned struct_shminfo_sz; 849extern unsigned struct_shm_info_sz; 850extern int shmctl_ipc_stat; 851extern int shmctl_ipc_info; 852extern int shmctl_shm_info; 853extern int shmctl_shm_stat; 854#endif 855 856#if !SANITIZER_MAC && !SANITIZER_FREEBSD 857extern unsigned struct_utmp_sz; 858#endif 859#if !SANITIZER_ANDROID 860extern unsigned struct_utmpx_sz; 861#endif 862 863extern int map_fixed; 864 865// ioctl arguments 866struct __sanitizer_ifconf { 867 int ifc_len; 868 union { 869 void *ifcu_req; 870 } ifc_ifcu; 871#if SANITIZER_MAC 872} __attribute__((packed)); 873#else 874}; 875#endif 876 877#if SANITIZER_LINUX && !SANITIZER_ANDROID 878struct __sanitizer__obstack_chunk { 879 char *limit; 880 struct __sanitizer__obstack_chunk *prev; 881}; 882 883struct __sanitizer_obstack { 884 long chunk_size; 885 struct __sanitizer__obstack_chunk *chunk; 886 char *object_base; 887 char *next_free; 888 uptr more_fields[7]; 889}; 890 891typedef uptr (*__sanitizer_cookie_io_read)(void *cookie, char *buf, uptr size); 892typedef uptr (*__sanitizer_cookie_io_write)(void *cookie, const char *buf, 893 uptr size); 894typedef int (*__sanitizer_cookie_io_seek)(void *cookie, u64 *offset, 895 int whence); 896typedef int (*__sanitizer_cookie_io_close)(void *cookie); 897 898struct __sanitizer_cookie_io_functions_t { 899 __sanitizer_cookie_io_read read; 900 __sanitizer_cookie_io_write write; 901 __sanitizer_cookie_io_seek seek; 902 __sanitizer_cookie_io_close close; 903}; 904#endif 905 906#define IOC_NRBITS 8 907#define IOC_TYPEBITS 8 908#if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__) || \ 909 defined(__sparc__) 910#define IOC_SIZEBITS 13 911#define IOC_DIRBITS 3 912#define IOC_NONE 1U 913#define IOC_WRITE 4U 914#define IOC_READ 2U 915#else 916#define IOC_SIZEBITS 14 917#define IOC_DIRBITS 2 918#define IOC_NONE 0U 919#define IOC_WRITE 1U 920#define IOC_READ 2U 921#endif 922#define IOC_NRMASK ((1 << IOC_NRBITS) - 1) 923#define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1) 924#define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1) 925#if defined(IOC_DIRMASK) 926#undef IOC_DIRMASK 927#endif 928#define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1) 929#define IOC_NRSHIFT 0 930#define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS) 931#define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS) 932#define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS) 933#define EVIOC_EV_MAX 0x1f 934#define EVIOC_ABS_MAX 0x3f 935 936#define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK) 937#define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK) 938#define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK) 939 940#if defined(__sparc__) 941// In sparc the 14 bits SIZE field overlaps with the 942// least significant bit of DIR, so either IOC_READ or 943// IOC_WRITE shall be 1 in order to get a non-zero SIZE. 944#define IOC_SIZE(nr) \ 945 ((((((nr) >> 29) & 0x7) & (4U | 2U)) == 0) ? 0 : (((nr) >> 16) & 0x3fff)) 946#else 947#define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK) 948#endif 949 950extern unsigned struct_ifreq_sz; 951extern unsigned struct_termios_sz; 952extern unsigned struct_winsize_sz; 953 954#if SANITIZER_LINUX 955extern unsigned struct_arpreq_sz; 956extern unsigned struct_cdrom_msf_sz; 957extern unsigned struct_cdrom_multisession_sz; 958extern unsigned struct_cdrom_read_audio_sz; 959extern unsigned struct_cdrom_subchnl_sz; 960extern unsigned struct_cdrom_ti_sz; 961extern unsigned struct_cdrom_tocentry_sz; 962extern unsigned struct_cdrom_tochdr_sz; 963extern unsigned struct_cdrom_volctrl_sz; 964extern unsigned struct_ff_effect_sz; 965extern unsigned struct_floppy_drive_params_sz; 966extern unsigned struct_floppy_drive_struct_sz; 967extern unsigned struct_floppy_fdc_state_sz; 968extern unsigned struct_floppy_max_errors_sz; 969extern unsigned struct_floppy_raw_cmd_sz; 970extern unsigned struct_floppy_struct_sz; 971extern unsigned struct_floppy_write_errors_sz; 972extern unsigned struct_format_descr_sz; 973extern unsigned struct_hd_driveid_sz; 974extern unsigned struct_hd_geometry_sz; 975extern unsigned struct_input_absinfo_sz; 976extern unsigned struct_input_id_sz; 977extern unsigned struct_mtpos_sz; 978extern unsigned struct_termio_sz; 979extern unsigned struct_vt_consize_sz; 980extern unsigned struct_vt_sizes_sz; 981extern unsigned struct_vt_stat_sz; 982#endif // SANITIZER_LINUX 983 984#if SANITIZER_LINUX 985extern unsigned struct_copr_buffer_sz; 986extern unsigned struct_copr_debug_buf_sz; 987extern unsigned struct_copr_msg_sz; 988extern unsigned struct_midi_info_sz; 989extern unsigned struct_mtget_sz; 990extern unsigned struct_mtop_sz; 991extern unsigned struct_rtentry_sz; 992extern unsigned struct_sbi_instrument_sz; 993extern unsigned struct_seq_event_rec_sz; 994extern unsigned struct_synth_info_sz; 995extern unsigned struct_vt_mode_sz; 996#endif // SANITIZER_LINUX 997 998#if SANITIZER_LINUX && !SANITIZER_ANDROID 999extern unsigned struct_ax25_parms_struct_sz; 1000extern unsigned struct_input_keymap_entry_sz; 1001extern unsigned struct_ipx_config_data_sz; 1002extern unsigned struct_kbdiacrs_sz; 1003extern unsigned struct_kbentry_sz; 1004extern unsigned struct_kbkeycode_sz; 1005extern unsigned struct_kbsentry_sz; 1006extern unsigned struct_mtconfiginfo_sz; 1007extern unsigned struct_nr_parms_struct_sz; 1008extern unsigned struct_scc_modem_sz; 1009extern unsigned struct_scc_stat_sz; 1010extern unsigned struct_serial_multiport_struct_sz; 1011extern unsigned struct_serial_struct_sz; 1012extern unsigned struct_sockaddr_ax25_sz; 1013extern unsigned struct_unimapdesc_sz; 1014extern unsigned struct_unimapinit_sz; 1015#endif // SANITIZER_LINUX && !SANITIZER_ANDROID 1016 1017extern const unsigned long __sanitizer_bufsiz; 1018 1019#if SANITIZER_LINUX && !SANITIZER_ANDROID 1020extern unsigned struct_audio_buf_info_sz; 1021extern unsigned struct_ppp_stats_sz; 1022#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID 1023 1024#if !SANITIZER_ANDROID && !SANITIZER_MAC 1025extern unsigned struct_sioc_sg_req_sz; 1026extern unsigned struct_sioc_vif_req_sz; 1027#endif 1028 1029// ioctl request identifiers 1030 1031// A special value to mark ioctls that are not present on the target platform, 1032// when it can not be determined without including any system headers. 1033extern const unsigned IOCTL_NOT_PRESENT; 1034 1035extern unsigned IOCTL_FIOASYNC; 1036extern unsigned IOCTL_FIOCLEX; 1037extern unsigned IOCTL_FIOGETOWN; 1038extern unsigned IOCTL_FIONBIO; 1039extern unsigned IOCTL_FIONCLEX; 1040extern unsigned IOCTL_FIOSETOWN; 1041extern unsigned IOCTL_SIOCADDMULTI; 1042extern unsigned IOCTL_SIOCATMARK; 1043extern unsigned IOCTL_SIOCDELMULTI; 1044extern unsigned IOCTL_SIOCGIFADDR; 1045extern unsigned IOCTL_SIOCGIFBRDADDR; 1046extern unsigned IOCTL_SIOCGIFCONF; 1047extern unsigned IOCTL_SIOCGIFDSTADDR; 1048extern unsigned IOCTL_SIOCGIFFLAGS; 1049extern unsigned IOCTL_SIOCGIFMETRIC; 1050extern unsigned IOCTL_SIOCGIFMTU; 1051extern unsigned IOCTL_SIOCGIFNETMASK; 1052extern unsigned IOCTL_SIOCGPGRP; 1053extern unsigned IOCTL_SIOCSIFADDR; 1054extern unsigned IOCTL_SIOCSIFBRDADDR; 1055extern unsigned IOCTL_SIOCSIFDSTADDR; 1056extern unsigned IOCTL_SIOCSIFFLAGS; 1057extern unsigned IOCTL_SIOCSIFMETRIC; 1058extern unsigned IOCTL_SIOCSIFMTU; 1059extern unsigned IOCTL_SIOCSIFNETMASK; 1060extern unsigned IOCTL_SIOCSPGRP; 1061extern unsigned IOCTL_TIOCCONS; 1062extern unsigned IOCTL_TIOCEXCL; 1063extern unsigned IOCTL_TIOCGETD; 1064extern unsigned IOCTL_TIOCGPGRP; 1065extern unsigned IOCTL_TIOCGWINSZ; 1066extern unsigned IOCTL_TIOCMBIC; 1067extern unsigned IOCTL_TIOCMBIS; 1068extern unsigned IOCTL_TIOCMGET; 1069extern unsigned IOCTL_TIOCMSET; 1070extern unsigned IOCTL_TIOCNOTTY; 1071extern unsigned IOCTL_TIOCNXCL; 1072extern unsigned IOCTL_TIOCOUTQ; 1073extern unsigned IOCTL_TIOCPKT; 1074extern unsigned IOCTL_TIOCSCTTY; 1075extern unsigned IOCTL_TIOCSETD; 1076extern unsigned IOCTL_TIOCSPGRP; 1077extern unsigned IOCTL_TIOCSTI; 1078extern unsigned IOCTL_TIOCSWINSZ; 1079#if SANITIZER_LINUX && !SANITIZER_ANDROID 1080extern unsigned IOCTL_SIOCGETSGCNT; 1081extern unsigned IOCTL_SIOCGETVIFCNT; 1082#endif 1083#if SANITIZER_LINUX 1084extern unsigned IOCTL_EVIOCGABS; 1085extern unsigned IOCTL_EVIOCGBIT; 1086extern unsigned IOCTL_EVIOCGEFFECTS; 1087extern unsigned IOCTL_EVIOCGID; 1088extern unsigned IOCTL_EVIOCGKEY; 1089extern unsigned IOCTL_EVIOCGKEYCODE; 1090extern unsigned IOCTL_EVIOCGLED; 1091extern unsigned IOCTL_EVIOCGNAME; 1092extern unsigned IOCTL_EVIOCGPHYS; 1093extern unsigned IOCTL_EVIOCGRAB; 1094extern unsigned IOCTL_EVIOCGREP; 1095extern unsigned IOCTL_EVIOCGSND; 1096extern unsigned IOCTL_EVIOCGSW; 1097extern unsigned IOCTL_EVIOCGUNIQ; 1098extern unsigned IOCTL_EVIOCGVERSION; 1099extern unsigned IOCTL_EVIOCRMFF; 1100extern unsigned IOCTL_EVIOCSABS; 1101extern unsigned IOCTL_EVIOCSFF; 1102extern unsigned IOCTL_EVIOCSKEYCODE; 1103extern unsigned IOCTL_EVIOCSREP; 1104extern unsigned IOCTL_BLKFLSBUF; 1105extern unsigned IOCTL_BLKGETSIZE; 1106extern unsigned IOCTL_BLKRAGET; 1107extern unsigned IOCTL_BLKRASET; 1108extern unsigned IOCTL_BLKROGET; 1109extern unsigned IOCTL_BLKROSET; 1110extern unsigned IOCTL_BLKRRPART; 1111extern unsigned IOCTL_CDROMAUDIOBUFSIZ; 1112extern unsigned IOCTL_CDROMEJECT; 1113extern unsigned IOCTL_CDROMEJECT_SW; 1114extern unsigned IOCTL_CDROMMULTISESSION; 1115extern unsigned IOCTL_CDROMPAUSE; 1116extern unsigned IOCTL_CDROMPLAYMSF; 1117extern unsigned IOCTL_CDROMPLAYTRKIND; 1118extern unsigned IOCTL_CDROMREADAUDIO; 1119extern unsigned IOCTL_CDROMREADCOOKED; 1120extern unsigned IOCTL_CDROMREADMODE1; 1121extern unsigned IOCTL_CDROMREADMODE2; 1122extern unsigned IOCTL_CDROMREADRAW; 1123extern unsigned IOCTL_CDROMREADTOCENTRY; 1124extern unsigned IOCTL_CDROMREADTOCHDR; 1125extern unsigned IOCTL_CDROMRESET; 1126extern unsigned IOCTL_CDROMRESUME; 1127extern unsigned IOCTL_CDROMSEEK; 1128extern unsigned IOCTL_CDROMSTART; 1129extern unsigned IOCTL_CDROMSTOP; 1130extern unsigned IOCTL_CDROMSUBCHNL; 1131extern unsigned IOCTL_CDROMVOLCTRL; 1132extern unsigned IOCTL_CDROMVOLREAD; 1133extern unsigned IOCTL_CDROM_GET_UPC; 1134extern unsigned IOCTL_FDCLRPRM; 1135extern unsigned IOCTL_FDDEFPRM; 1136extern unsigned IOCTL_FDFLUSH; 1137extern unsigned IOCTL_FDFMTBEG; 1138extern unsigned IOCTL_FDFMTEND; 1139extern unsigned IOCTL_FDFMTTRK; 1140extern unsigned IOCTL_FDGETDRVPRM; 1141extern unsigned IOCTL_FDGETDRVSTAT; 1142extern unsigned IOCTL_FDGETDRVTYP; 1143extern unsigned IOCTL_FDGETFDCSTAT; 1144extern unsigned IOCTL_FDGETMAXERRS; 1145extern unsigned IOCTL_FDGETPRM; 1146extern unsigned IOCTL_FDMSGOFF; 1147extern unsigned IOCTL_FDMSGON; 1148extern unsigned IOCTL_FDPOLLDRVSTAT; 1149extern unsigned IOCTL_FDRAWCMD; 1150extern unsigned IOCTL_FDRESET; 1151extern unsigned IOCTL_FDSETDRVPRM; 1152extern unsigned IOCTL_FDSETEMSGTRESH; 1153extern unsigned IOCTL_FDSETMAXERRS; 1154extern unsigned IOCTL_FDSETPRM; 1155extern unsigned IOCTL_FDTWADDLE; 1156extern unsigned IOCTL_FDWERRORCLR; 1157extern unsigned IOCTL_FDWERRORGET; 1158extern unsigned IOCTL_HDIO_DRIVE_CMD; 1159extern unsigned IOCTL_HDIO_GETGEO; 1160extern unsigned IOCTL_HDIO_GET_32BIT; 1161extern unsigned IOCTL_HDIO_GET_DMA; 1162extern unsigned IOCTL_HDIO_GET_IDENTITY; 1163extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS; 1164extern unsigned IOCTL_HDIO_GET_MULTCOUNT; 1165extern unsigned IOCTL_HDIO_GET_NOWERR; 1166extern unsigned IOCTL_HDIO_GET_UNMASKINTR; 1167extern unsigned IOCTL_HDIO_SET_32BIT; 1168extern unsigned IOCTL_HDIO_SET_DMA; 1169extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS; 1170extern unsigned IOCTL_HDIO_SET_MULTCOUNT; 1171extern unsigned IOCTL_HDIO_SET_NOWERR; 1172extern unsigned IOCTL_HDIO_SET_UNMASKINTR; 1173extern unsigned IOCTL_MTIOCPOS; 1174extern unsigned IOCTL_PPPIOCGASYNCMAP; 1175extern unsigned IOCTL_PPPIOCGDEBUG; 1176extern unsigned IOCTL_PPPIOCGFLAGS; 1177extern unsigned IOCTL_PPPIOCGUNIT; 1178extern unsigned IOCTL_PPPIOCGXASYNCMAP; 1179extern unsigned IOCTL_PPPIOCSASYNCMAP; 1180extern unsigned IOCTL_PPPIOCSDEBUG; 1181extern unsigned IOCTL_PPPIOCSFLAGS; 1182extern unsigned IOCTL_PPPIOCSMAXCID; 1183extern unsigned IOCTL_PPPIOCSMRU; 1184extern unsigned IOCTL_PPPIOCSXASYNCMAP; 1185extern unsigned IOCTL_SIOCDARP; 1186extern unsigned IOCTL_SIOCDRARP; 1187extern unsigned IOCTL_SIOCGARP; 1188extern unsigned IOCTL_SIOCGIFENCAP; 1189extern unsigned IOCTL_SIOCGIFHWADDR; 1190extern unsigned IOCTL_SIOCGIFMAP; 1191extern unsigned IOCTL_SIOCGIFMEM; 1192extern unsigned IOCTL_SIOCGIFNAME; 1193extern unsigned IOCTL_SIOCGIFSLAVE; 1194extern unsigned IOCTL_SIOCGRARP; 1195extern unsigned IOCTL_SIOCGSTAMP; 1196extern unsigned IOCTL_SIOCSARP; 1197extern unsigned IOCTL_SIOCSIFENCAP; 1198extern unsigned IOCTL_SIOCSIFHWADDR; 1199extern unsigned IOCTL_SIOCSIFLINK; 1200extern unsigned IOCTL_SIOCSIFMAP; 1201extern unsigned IOCTL_SIOCSIFMEM; 1202extern unsigned IOCTL_SIOCSIFSLAVE; 1203extern unsigned IOCTL_SIOCSRARP; 1204extern unsigned IOCTL_SNDCTL_COPR_HALT; 1205extern unsigned IOCTL_SNDCTL_COPR_LOAD; 1206extern unsigned IOCTL_SNDCTL_COPR_RCODE; 1207extern unsigned IOCTL_SNDCTL_COPR_RCVMSG; 1208extern unsigned IOCTL_SNDCTL_COPR_RDATA; 1209extern unsigned IOCTL_SNDCTL_COPR_RESET; 1210extern unsigned IOCTL_SNDCTL_COPR_RUN; 1211extern unsigned IOCTL_SNDCTL_COPR_SENDMSG; 1212extern unsigned IOCTL_SNDCTL_COPR_WCODE; 1213extern unsigned IOCTL_SNDCTL_COPR_WDATA; 1214extern unsigned IOCTL_TCFLSH; 1215extern unsigned IOCTL_TCGETA; 1216extern unsigned IOCTL_TCGETS; 1217extern unsigned IOCTL_TCSBRK; 1218extern unsigned IOCTL_TCSBRKP; 1219extern unsigned IOCTL_TCSETA; 1220extern unsigned IOCTL_TCSETAF; 1221extern unsigned IOCTL_TCSETAW; 1222extern unsigned IOCTL_TCSETS; 1223extern unsigned IOCTL_TCSETSF; 1224extern unsigned IOCTL_TCSETSW; 1225extern unsigned IOCTL_TCXONC; 1226extern unsigned IOCTL_TIOCGLCKTRMIOS; 1227extern unsigned IOCTL_TIOCGSOFTCAR; 1228extern unsigned IOCTL_TIOCINQ; 1229extern unsigned IOCTL_TIOCLINUX; 1230extern unsigned IOCTL_TIOCSERCONFIG; 1231extern unsigned IOCTL_TIOCSERGETLSR; 1232extern unsigned IOCTL_TIOCSERGWILD; 1233extern unsigned IOCTL_TIOCSERSWILD; 1234extern unsigned IOCTL_TIOCSLCKTRMIOS; 1235extern unsigned IOCTL_TIOCSSOFTCAR; 1236extern unsigned IOCTL_VT_DISALLOCATE; 1237extern unsigned IOCTL_VT_GETSTATE; 1238extern unsigned IOCTL_VT_RESIZE; 1239extern unsigned IOCTL_VT_RESIZEX; 1240extern unsigned IOCTL_VT_SENDSIG; 1241extern unsigned IOCTL_MTIOCGET; 1242extern unsigned IOCTL_MTIOCTOP; 1243extern unsigned IOCTL_SIOCADDRT; 1244extern unsigned IOCTL_SIOCDELRT; 1245extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE; 1246extern unsigned IOCTL_SNDCTL_DSP_GETFMTS; 1247extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK; 1248extern unsigned IOCTL_SNDCTL_DSP_POST; 1249extern unsigned IOCTL_SNDCTL_DSP_RESET; 1250extern unsigned IOCTL_SNDCTL_DSP_SETFMT; 1251extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT; 1252extern unsigned IOCTL_SNDCTL_DSP_SPEED; 1253extern unsigned IOCTL_SNDCTL_DSP_STEREO; 1254extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE; 1255extern unsigned IOCTL_SNDCTL_DSP_SYNC; 1256extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE; 1257extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR; 1258extern unsigned IOCTL_SNDCTL_MIDI_INFO; 1259extern unsigned IOCTL_SNDCTL_MIDI_PRETIME; 1260extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE; 1261extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT; 1262extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT; 1263extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS; 1264extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS; 1265extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND; 1266extern unsigned IOCTL_SNDCTL_SEQ_PANIC; 1267extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE; 1268extern unsigned IOCTL_SNDCTL_SEQ_RESET; 1269extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES; 1270extern unsigned IOCTL_SNDCTL_SEQ_SYNC; 1271extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI; 1272extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD; 1273extern unsigned IOCTL_SNDCTL_SYNTH_INFO; 1274extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL; 1275extern unsigned IOCTL_SNDCTL_TMR_CONTINUE; 1276extern unsigned IOCTL_SNDCTL_TMR_METRONOME; 1277extern unsigned IOCTL_SNDCTL_TMR_SELECT; 1278extern unsigned IOCTL_SNDCTL_TMR_SOURCE; 1279extern unsigned IOCTL_SNDCTL_TMR_START; 1280extern unsigned IOCTL_SNDCTL_TMR_STOP; 1281extern unsigned IOCTL_SNDCTL_TMR_TEMPO; 1282extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE; 1283extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM; 1284extern unsigned IOCTL_SOUND_MIXER_READ_BASS; 1285extern unsigned IOCTL_SOUND_MIXER_READ_CAPS; 1286extern unsigned IOCTL_SOUND_MIXER_READ_CD; 1287extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK; 1288extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE; 1289extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN; 1290extern unsigned IOCTL_SOUND_MIXER_READ_IMIX; 1291extern unsigned IOCTL_SOUND_MIXER_READ_LINE1; 1292extern unsigned IOCTL_SOUND_MIXER_READ_LINE2; 1293extern unsigned IOCTL_SOUND_MIXER_READ_LINE3; 1294extern unsigned IOCTL_SOUND_MIXER_READ_LINE; 1295extern unsigned IOCTL_SOUND_MIXER_READ_LOUD; 1296extern unsigned IOCTL_SOUND_MIXER_READ_MIC; 1297extern unsigned IOCTL_SOUND_MIXER_READ_MUTE; 1298extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN; 1299extern unsigned IOCTL_SOUND_MIXER_READ_PCM; 1300extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV; 1301extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK; 1302extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC; 1303extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER; 1304extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS; 1305extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH; 1306extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE; 1307extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME; 1308extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM; 1309extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS; 1310extern unsigned IOCTL_SOUND_MIXER_WRITE_CD; 1311extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE; 1312extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN; 1313extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX; 1314extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1; 1315extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2; 1316extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3; 1317extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE; 1318extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD; 1319extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC; 1320extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE; 1321extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN; 1322extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM; 1323extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV; 1324extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC; 1325extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER; 1326extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH; 1327extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE; 1328extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME; 1329extern unsigned IOCTL_SOUND_PCM_READ_BITS; 1330extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS; 1331extern unsigned IOCTL_SOUND_PCM_READ_FILTER; 1332extern unsigned IOCTL_SOUND_PCM_READ_RATE; 1333extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS; 1334extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER; 1335extern unsigned IOCTL_VT_ACTIVATE; 1336extern unsigned IOCTL_VT_GETMODE; 1337extern unsigned IOCTL_VT_OPENQRY; 1338extern unsigned IOCTL_VT_RELDISP; 1339extern unsigned IOCTL_VT_SETMODE; 1340extern unsigned IOCTL_VT_WAITACTIVE; 1341#endif // SANITIZER_LINUX 1342 1343#if SANITIZER_LINUX && !SANITIZER_ANDROID 1344extern unsigned IOCTL_EQL_EMANCIPATE; 1345extern unsigned IOCTL_EQL_ENSLAVE; 1346extern unsigned IOCTL_EQL_GETMASTRCFG; 1347extern unsigned IOCTL_EQL_GETSLAVECFG; 1348extern unsigned IOCTL_EQL_SETMASTRCFG; 1349extern unsigned IOCTL_EQL_SETSLAVECFG; 1350extern unsigned IOCTL_EVIOCGKEYCODE_V2; 1351extern unsigned IOCTL_EVIOCGPROP; 1352extern unsigned IOCTL_EVIOCSKEYCODE_V2; 1353extern unsigned IOCTL_FS_IOC_GETFLAGS; 1354extern unsigned IOCTL_FS_IOC_GETVERSION; 1355extern unsigned IOCTL_FS_IOC_SETFLAGS; 1356extern unsigned IOCTL_FS_IOC_SETVERSION; 1357extern unsigned IOCTL_GIO_CMAP; 1358extern unsigned IOCTL_GIO_FONT; 1359extern unsigned IOCTL_GIO_UNIMAP; 1360extern unsigned IOCTL_GIO_UNISCRNMAP; 1361extern unsigned IOCTL_KDADDIO; 1362extern unsigned IOCTL_KDDELIO; 1363extern unsigned IOCTL_KDGETKEYCODE; 1364extern unsigned IOCTL_KDGKBDIACR; 1365extern unsigned IOCTL_KDGKBENT; 1366extern unsigned IOCTL_KDGKBLED; 1367extern unsigned IOCTL_KDGKBMETA; 1368extern unsigned IOCTL_KDGKBSENT; 1369extern unsigned IOCTL_KDMAPDISP; 1370extern unsigned IOCTL_KDSETKEYCODE; 1371extern unsigned IOCTL_KDSIGACCEPT; 1372extern unsigned IOCTL_KDSKBDIACR; 1373extern unsigned IOCTL_KDSKBENT; 1374extern unsigned IOCTL_KDSKBLED; 1375extern unsigned IOCTL_KDSKBMETA; 1376extern unsigned IOCTL_KDSKBSENT; 1377extern unsigned IOCTL_KDUNMAPDISP; 1378extern unsigned IOCTL_LPABORT; 1379extern unsigned IOCTL_LPABORTOPEN; 1380extern unsigned IOCTL_LPCAREFUL; 1381extern unsigned IOCTL_LPCHAR; 1382extern unsigned IOCTL_LPGETIRQ; 1383extern unsigned IOCTL_LPGETSTATUS; 1384extern unsigned IOCTL_LPRESET; 1385extern unsigned IOCTL_LPSETIRQ; 1386extern unsigned IOCTL_LPTIME; 1387extern unsigned IOCTL_LPWAIT; 1388extern unsigned IOCTL_MTIOCGETCONFIG; 1389extern unsigned IOCTL_MTIOCSETCONFIG; 1390extern unsigned IOCTL_PIO_CMAP; 1391extern unsigned IOCTL_PIO_FONT; 1392extern unsigned IOCTL_PIO_UNIMAP; 1393extern unsigned IOCTL_PIO_UNIMAPCLR; 1394extern unsigned IOCTL_PIO_UNISCRNMAP; 1395extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN; 1396extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST; 1397extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE; 1398extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE; 1399extern unsigned IOCTL_SIOCAIPXITFCRT; 1400extern unsigned IOCTL_SIOCAIPXPRISLT; 1401extern unsigned IOCTL_SIOCAX25ADDUID; 1402extern unsigned IOCTL_SIOCAX25DELUID; 1403extern unsigned IOCTL_SIOCAX25GETPARMS; 1404extern unsigned IOCTL_SIOCAX25GETUID; 1405extern unsigned IOCTL_SIOCAX25NOUID; 1406extern unsigned IOCTL_SIOCAX25SETPARMS; 1407extern unsigned IOCTL_SIOCDEVPLIP; 1408extern unsigned IOCTL_SIOCIPXCFGDATA; 1409extern unsigned IOCTL_SIOCNRDECOBS; 1410extern unsigned IOCTL_SIOCNRGETPARMS; 1411extern unsigned IOCTL_SIOCNRRTCTL; 1412extern unsigned IOCTL_SIOCNRSETPARMS; 1413extern unsigned IOCTL_SNDCTL_DSP_GETISPACE; 1414extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE; 1415extern unsigned IOCTL_TIOCGSERIAL; 1416extern unsigned IOCTL_TIOCSERGETMULTI; 1417extern unsigned IOCTL_TIOCSERSETMULTI; 1418extern unsigned IOCTL_TIOCSSERIAL; 1419extern unsigned IOCTL_GIO_SCRNMAP; 1420extern unsigned IOCTL_KDDISABIO; 1421extern unsigned IOCTL_KDENABIO; 1422extern unsigned IOCTL_KDGETLED; 1423extern unsigned IOCTL_KDGETMODE; 1424extern unsigned IOCTL_KDGKBMODE; 1425extern unsigned IOCTL_KDGKBTYPE; 1426extern unsigned IOCTL_KDMKTONE; 1427extern unsigned IOCTL_KDSETLED; 1428extern unsigned IOCTL_KDSETMODE; 1429extern unsigned IOCTL_KDSKBMODE; 1430extern unsigned IOCTL_KIOCSOUND; 1431extern unsigned IOCTL_PIO_SCRNMAP; 1432#endif 1433 1434extern const int si_SEGV_MAPERR; 1435extern const int si_SEGV_ACCERR; 1436} // namespace __sanitizer 1437 1438#define CHECK_TYPE_SIZE(TYPE) \ 1439 COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE)) 1440 1441#define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER) \ 1442 COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *)NULL)->MEMBER) == \ 1443 sizeof(((CLASS *)NULL)->MEMBER)); \ 1444 COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) == \ 1445 offsetof(CLASS, MEMBER)) 1446 1447// For sigaction, which is a function and struct at the same time, 1448// and thus requires explicit "struct" in sizeof() expression. 1449#define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER) \ 1450 COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *)NULL)->MEMBER) == \ 1451 sizeof(((struct CLASS *)NULL)->MEMBER)); \ 1452 COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) == \ 1453 offsetof(struct CLASS, MEMBER)) 1454 1455#define SIGACTION_SYMNAME sigaction 1456 1457#endif // SANITIZER_LINUX || SANITIZER_MAC 1458 1459#endif 1460