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