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