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