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