sanitizer_platform_limits_posix.h revision 0d2a93500c4b071977a9ee89dbc24586fe54bca5
1//===-- sanitizer_platform_limits_posix.h ---------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file is a part of Sanitizer common code. 11// 12// Sizes and layouts of platform-specific POSIX data structures. 13//===----------------------------------------------------------------------===// 14 15#ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H 16#define SANITIZER_PLATFORM_LIMITS_POSIX_H 17 18#include "sanitizer_internal_defs.h" 19#include "sanitizer_platform.h" 20 21namespace __sanitizer { 22 extern unsigned struct_utsname_sz; 23 extern unsigned struct_stat_sz; 24#if !SANITIZER_IOS 25 extern unsigned struct_stat64_sz; 26#endif 27 extern unsigned struct_rusage_sz; 28 extern unsigned struct_passwd_sz; 29 extern unsigned struct_group_sz; 30 extern unsigned siginfo_t_sz; 31 extern unsigned struct_itimerval_sz; 32 extern unsigned pthread_t_sz; 33 extern unsigned pthread_cond_t_sz; 34 extern unsigned pid_t_sz; 35 extern unsigned timeval_sz; 36 extern unsigned uid_t_sz; 37 extern unsigned mbstate_t_sz; 38 extern unsigned struct_timezone_sz; 39 extern unsigned struct_tms_sz; 40 extern unsigned struct_itimerspec_sz; 41 extern unsigned struct_sigevent_sz; 42 extern unsigned struct_sched_param_sz; 43 extern unsigned struct_statfs_sz; 44 extern unsigned struct_statfs64_sz; 45 46#if !SANITIZER_ANDROID 47 extern unsigned ucontext_t_sz; 48#endif // !SANITIZER_ANDROID 49 50#if SANITIZER_LINUX 51 52#if defined(__x86_64__) 53 const unsigned struct___old_kernel_stat_sz = 32; 54 const unsigned struct_kernel_stat_sz = 144; 55 const unsigned struct_kernel_stat64_sz = 0; 56#elif defined(__i386__) 57 const unsigned struct___old_kernel_stat_sz = 32; 58 const unsigned struct_kernel_stat_sz = 64; 59 const unsigned struct_kernel_stat64_sz = 96; 60#elif defined(__arm__) 61 const unsigned struct___old_kernel_stat_sz = 32; 62 const unsigned struct_kernel_stat_sz = 64; 63 const unsigned struct_kernel_stat64_sz = 104; 64#elif defined(__powerpc__) && !defined(__powerpc64__) 65 const unsigned struct___old_kernel_stat_sz = 32; 66 const unsigned struct_kernel_stat_sz = 72; 67 const unsigned struct_kernel_stat64_sz = 104; 68#elif defined(__powerpc64__) 69 const unsigned struct___old_kernel_stat_sz = 0; 70 const unsigned struct_kernel_stat_sz = 144; 71 const unsigned struct_kernel_stat64_sz = 104; 72#endif 73 const unsigned struct_io_event_sz = 32; 74 struct __sanitizer_perf_event_attr { 75 unsigned type; 76 unsigned size; 77 // More fields that vary with the kernel version. 78 }; 79 80 extern unsigned struct_utimbuf_sz; 81 extern unsigned struct_new_utsname_sz; 82 extern unsigned struct_old_utsname_sz; 83 extern unsigned struct_oldold_utsname_sz; 84 extern unsigned struct_msqid_ds_sz; 85 extern unsigned struct_mq_attr_sz; 86 extern unsigned struct_timex_sz; 87 extern unsigned struct_ustat_sz; 88 89 extern unsigned struct_rlimit_sz; 90 extern unsigned struct_epoll_event_sz; 91 extern unsigned struct_sysinfo_sz; 92 extern unsigned struct_timespec_sz; 93 extern unsigned __user_cap_header_struct_sz; 94 extern unsigned __user_cap_data_struct_sz; 95 const unsigned old_sigset_t_sz = sizeof(unsigned long); 96 const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long); 97 98 struct __sanitizer_iocb { 99 u64 aio_data; 100 u32 aio_key_or_aio_reserved1; // Simply crazy. 101 u32 aio_reserved1_or_aio_key; // Luckily, we don't need these. 102 u16 aio_lio_opcode; 103 s16 aio_reqprio; 104 u32 aio_fildes; 105 u64 aio_buf; 106 u64 aio_nbytes; 107 s64 aio_offset; 108 u64 aio_reserved2; 109 u64 aio_reserved3; 110 }; 111 112 const unsigned iocb_cmd_pread = 0; 113 const unsigned iocb_cmd_pwrite = 1; 114 115 struct __sanitizer___sysctl_args { 116 int *name; 117 int nlen; 118 void *oldval; 119 uptr *oldlenp; 120 void *newval; 121 uptr newlen; 122 unsigned long ___unused[4]; 123 }; 124#endif // SANITIZER_LINUX 125 126#if SANITIZER_LINUX && !SANITIZER_ANDROID 127 extern unsigned struct_rlimit64_sz; 128 extern unsigned struct_statvfs_sz; 129 extern unsigned struct_statvfs64_sz; 130 131 struct __sanitizer_ipc_perm { 132 int __key; 133 int uid; 134 int gid; 135 int cuid; 136 int cgid; 137#ifdef __powerpc64__ 138 unsigned mode; 139 unsigned __seq; 140#else 141 unsigned short mode; 142 unsigned short __pad1; 143 unsigned short __seq; 144 unsigned short __pad2; 145#endif 146 uptr __unused1; 147 uptr __unused2; 148 }; 149 150 struct __sanitizer_shmid_ds { 151 __sanitizer_ipc_perm shm_perm; 152 #ifndef __powerpc__ 153 uptr shm_segsz; 154 #endif 155 uptr shm_atime; 156 #ifndef _LP64 157 uptr __unused1; 158 #endif 159 uptr shm_dtime; 160 #ifndef _LP64 161 uptr __unused2; 162 #endif 163 uptr shm_ctime; 164 #ifndef _LP64 165 uptr __unused3; 166 #endif 167 #ifdef __powerpc__ 168 uptr shm_segsz; 169 #endif 170 int shm_cpid; 171 int shm_lpid; 172 uptr shm_nattch; 173 uptr __unused4; 174 uptr __unused5; 175 }; 176 #endif // SANITIZER_LINUX && !SANITIZER_ANDROID 177 178 struct __sanitizer_iovec { 179 void *iov_base; 180 uptr iov_len; 181 }; 182 183#if SANITIZER_MAC 184 typedef unsigned long __sanitizer_pthread_key_t; 185#else 186 typedef unsigned __sanitizer_pthread_key_t; 187#endif 188 189 struct __sanitizer_ether_addr { 190 u8 octet[6]; 191 }; 192 193 struct __sanitizer_tm { 194 int tm_sec; 195 int tm_min; 196 int tm_hour; 197 int tm_mday; 198 int tm_mon; 199 int tm_year; 200 int tm_wday; 201 int tm_yday; 202 int tm_isdst; 203 long int tm_gmtoff; 204 const char *tm_zone; 205 }; 206 207#if SANITIZER_LINUX 208 struct __sanitizer_mntent { 209 char *mnt_fsname; 210 char *mnt_dir; 211 char *mnt_type; 212 char *mnt_opts; 213 int mnt_freq; 214 int mnt_passno; 215 }; 216#endif 217 218#if SANITIZER_ANDROID || SANITIZER_MAC 219 struct __sanitizer_msghdr { 220 void *msg_name; 221 unsigned msg_namelen; 222 struct __sanitizer_iovec *msg_iov; 223 unsigned msg_iovlen; 224 void *msg_control; 225 unsigned msg_controllen; 226 int msg_flags; 227 }; 228 struct __sanitizer_cmsghdr { 229 unsigned cmsg_len; 230 int cmsg_level; 231 int cmsg_type; 232 }; 233#else 234 struct __sanitizer_msghdr { 235 void *msg_name; 236 unsigned msg_namelen; 237 struct __sanitizer_iovec *msg_iov; 238 uptr msg_iovlen; 239 void *msg_control; 240 uptr msg_controllen; 241 int msg_flags; 242 }; 243 struct __sanitizer_cmsghdr { 244 uptr cmsg_len; 245 int cmsg_level; 246 int cmsg_type; 247 }; 248#endif 249 250#if SANITIZER_MAC 251 struct __sanitizer_dirent { 252 unsigned long long d_ino; 253 unsigned long long d_seekoff; 254 unsigned short d_reclen; 255 // more fields that we don't care about 256 }; 257#elif SANITIZER_ANDROID || defined(__x86_64__) 258 struct __sanitizer_dirent { 259 unsigned long long d_ino; 260 unsigned long long d_off; 261 unsigned short d_reclen; 262 // more fields that we don't care about 263 }; 264#else 265 struct __sanitizer_dirent { 266 uptr d_ino; 267 uptr d_off; 268 unsigned short d_reclen; 269 // more fields that we don't care about 270 }; 271#endif 272 273#if SANITIZER_LINUX && !SANITIZER_ANDROID 274 struct __sanitizer_dirent64 { 275 unsigned long long d_ino; 276 unsigned long long d_off; 277 unsigned short d_reclen; 278 // more fields that we don't care about 279 }; 280#endif 281 282#if SANITIZER_LINUX 283#if defined(_LP64) || defined(__x86_64__) 284 typedef unsigned __sanitizer___kernel_uid_t; 285 typedef unsigned __sanitizer___kernel_gid_t; 286 typedef long long __sanitizer___kernel_off_t; 287#else 288 typedef unsigned short __sanitizer___kernel_uid_t; 289 typedef unsigned short __sanitizer___kernel_gid_t; 290 typedef long __sanitizer___kernel_off_t; 291#endif 292 293#if defined(__powerpc64__) 294 typedef unsigned int __sanitizer___kernel_old_uid_t; 295 typedef unsigned int __sanitizer___kernel_old_gid_t; 296#else 297 typedef unsigned short __sanitizer___kernel_old_uid_t; 298 typedef unsigned short __sanitizer___kernel_old_gid_t; 299#endif 300 301 typedef long long __sanitizer___kernel_loff_t; 302 typedef struct { 303 unsigned long fds_bits[1024 / (8 * sizeof(long))]; 304 } __sanitizer___kernel_fd_set; 305#endif 306 307 // This thing depends on the platform. We are only interested in the upper 308 // limit. Verified with a compiler assert in .cc. 309 const int pthread_attr_t_max_sz = 128; 310 union __sanitizer_pthread_attr_t { 311 char size[pthread_attr_t_max_sz]; // NOLINT 312 void *align; 313 }; 314 315#if SANITIZER_ANDROID 316 typedef unsigned long __sanitizer_sigset_t; 317#elif SANITIZER_MAC 318 typedef unsigned __sanitizer_sigset_t; 319#elif SANITIZER_LINUX 320 struct __sanitizer_sigset_t { 321 // The size is determined by looking at sizeof of real sigset_t on linux. 322 uptr val[128 / sizeof(uptr)]; 323 }; 324#endif 325 326 struct __sanitizer_sigaction { 327 union { 328 void (*sa_handler)(int sig); 329 void (*sa_sigaction)(int sig, void *siginfo, void *uctx); 330 }; 331 __sanitizer_sigset_t sa_mask; 332 int sa_flags; 333#if SANITIZER_LINUX 334 void (*sa_restorer)(); 335#endif 336 }; 337 338 struct __sanitizer_kernel_sigset_t { 339 u8 sig[8]; 340 }; 341 342 struct __sanitizer_kernel_sigaction_t { 343 union { 344 void (*sigaction)(int signo, void *info, void *ctx); 345 void (*handler)(int signo); 346 }; 347 unsigned long sa_flags; 348 void (*sa_restorer)(void); 349 __sanitizer_kernel_sigset_t sa_mask; 350 }; 351 352 extern uptr sig_ign; 353 extern uptr sig_dfl; 354 extern uptr sa_siginfo; 355 356#if SANITIZER_LINUX 357 extern int e_tabsz; 358#endif 359 360 extern int af_inet; 361 extern int af_inet6; 362 uptr __sanitizer_in_addr_sz(int af); 363 364#if SANITIZER_LINUX 365 struct __sanitizer_dl_phdr_info { 366 uptr dlpi_addr; 367 const char *dlpi_name; 368 const void *dlpi_phdr; 369 short dlpi_phnum; 370 }; 371#endif 372 373 struct __sanitizer_addrinfo { 374 int ai_flags; 375 int ai_family; 376 int ai_socktype; 377 int ai_protocol; 378#if SANITIZER_ANDROID || SANITIZER_MAC 379 unsigned ai_addrlen; 380 char *ai_canonname; 381 void *ai_addr; 382#else // LINUX 383 unsigned ai_addrlen; 384 void *ai_addr; 385 char *ai_canonname; 386#endif 387 struct __sanitizer_addrinfo *ai_next; 388 }; 389 390 struct __sanitizer_hostent { 391 char *h_name; 392 char **h_aliases; 393 int h_addrtype; 394 int h_length; 395 char **h_addr_list; 396 }; 397 398 struct __sanitizer_pollfd { 399 int fd; 400 short events; 401 short revents; 402 }; 403 404#if SANITIZER_ANDROID || SANITIZER_MAC 405 typedef unsigned __sanitizer_nfds_t; 406#else 407 typedef unsigned long __sanitizer_nfds_t; 408#endif 409 410#if SANITIZER_LINUX && !SANITIZER_ANDROID 411 struct __sanitizer_glob_t { 412 uptr gl_pathc; 413 char **gl_pathv; 414 uptr gl_offs; 415 int gl_flags; 416 417 void (*gl_closedir)(void *dirp); 418 void *(*gl_readdir)(void *dirp); 419 void *(*gl_opendir)(const char *); 420 int (*gl_lstat)(const char *, void *); 421 int (*gl_stat)(const char *, void *); 422 }; 423 424 extern int glob_nomatch; 425 extern int glob_altdirfunc; 426#endif 427 428 extern unsigned path_max; 429 430 struct __sanitizer_wordexp_t { 431 uptr we_wordc; 432 char **we_wordv; 433 uptr we_offs; 434 }; 435 436#if SANITIZER_LINUX && !SANITIZER_ANDROID && \ 437 (defined(__i386) || defined (__x86_64)) // NOLINT 438 extern unsigned struct_user_regs_struct_sz; 439 extern unsigned struct_user_fpregs_struct_sz; 440 extern unsigned struct_user_fpxregs_struct_sz; 441 442 extern int ptrace_peektext; 443 extern int ptrace_peekdata; 444 extern int ptrace_peekuser; 445 extern int ptrace_getregs; 446 extern int ptrace_setregs; 447 extern int ptrace_getfpregs; 448 extern int ptrace_setfpregs; 449 extern int ptrace_getfpxregs; 450 extern int ptrace_setfpxregs; 451 extern int ptrace_getsiginfo; 452 extern int ptrace_setsiginfo; 453 extern int ptrace_getregset; 454 extern int ptrace_setregset; 455#endif 456 457#if SANITIZER_LINUX && !SANITIZER_ANDROID 458 extern unsigned struct_shminfo_sz; 459 extern unsigned struct_shm_info_sz; 460 extern int shmctl_ipc_stat; 461 extern int shmctl_ipc_info; 462 extern int shmctl_shm_info; 463 extern int shmctl_shm_stat; 464#endif 465 466 // ioctl arguments 467 struct __sanitizer_ifconf { 468 int ifc_len; 469 union { 470 void *ifcu_req; 471 } ifc_ifcu; 472#if SANITIZER_MAC 473 } __attribute__((packed)); 474#else 475 }; 476#endif 477 478#define IOC_SIZE(nr) (((nr) >> 16) & 0x3fff) 479 480 extern unsigned struct_arpreq_sz; 481 extern unsigned struct_ifreq_sz; 482 extern unsigned struct_termios_sz; 483 extern unsigned struct_winsize_sz; 484 485#if SANITIZER_LINUX 486 extern unsigned struct_cdrom_msf_sz; 487 extern unsigned struct_cdrom_multisession_sz; 488 extern unsigned struct_cdrom_read_audio_sz; 489 extern unsigned struct_cdrom_subchnl_sz; 490 extern unsigned struct_cdrom_ti_sz; 491 extern unsigned struct_cdrom_tocentry_sz; 492 extern unsigned struct_cdrom_tochdr_sz; 493 extern unsigned struct_cdrom_volctrl_sz; 494 extern unsigned struct_copr_buffer_sz; 495 extern unsigned struct_copr_debug_buf_sz; 496 extern unsigned struct_copr_msg_sz; 497 extern unsigned struct_ff_effect_sz; 498 extern unsigned struct_floppy_drive_params_sz; 499 extern unsigned struct_floppy_drive_struct_sz; 500 extern unsigned struct_floppy_fdc_state_sz; 501 extern unsigned struct_floppy_max_errors_sz; 502 extern unsigned struct_floppy_raw_cmd_sz; 503 extern unsigned struct_floppy_struct_sz; 504 extern unsigned struct_floppy_write_errors_sz; 505 extern unsigned struct_format_descr_sz; 506 extern unsigned struct_hd_driveid_sz; 507 extern unsigned struct_hd_geometry_sz; 508 extern unsigned struct_input_absinfo_sz; 509 extern unsigned struct_input_id_sz; 510 extern unsigned struct_midi_info_sz; 511 extern unsigned struct_mtget_sz; 512 extern unsigned struct_mtop_sz; 513 extern unsigned struct_mtpos_sz; 514 extern unsigned struct_rtentry_sz; 515 extern unsigned struct_sbi_instrument_sz; 516 extern unsigned struct_seq_event_rec_sz; 517 extern unsigned struct_synth_info_sz; 518 extern unsigned struct_termio_sz; 519 extern unsigned struct_vt_consize_sz; 520 extern unsigned struct_vt_mode_sz; 521 extern unsigned struct_vt_sizes_sz; 522 extern unsigned struct_vt_stat_sz; 523#endif 524 525#if SANITIZER_LINUX && !SANITIZER_ANDROID 526 extern unsigned struct_audio_buf_info_sz; 527 extern unsigned struct_ax25_parms_struct_sz; 528 extern unsigned struct_cyclades_monitor_sz; 529 extern unsigned struct_input_keymap_entry_sz; 530 extern unsigned struct_ipx_config_data_sz; 531 extern unsigned struct_kbdiacrs_sz; 532 extern unsigned struct_kbentry_sz; 533 extern unsigned struct_kbkeycode_sz; 534 extern unsigned struct_kbsentry_sz; 535 extern unsigned struct_mtconfiginfo_sz; 536 extern unsigned struct_nr_parms_struct_sz; 537 extern unsigned struct_ppp_stats_sz; 538 extern unsigned struct_scc_modem_sz; 539 extern unsigned struct_scc_stat_sz; 540 extern unsigned struct_serial_multiport_struct_sz; 541 extern unsigned struct_serial_struct_sz; 542 extern unsigned struct_sockaddr_ax25_sz; 543 extern unsigned struct_unimapdesc_sz; 544 extern unsigned struct_unimapinit_sz; 545#endif 546 547#if !SANITIZER_ANDROID && !SANITIZER_MAC 548 extern unsigned struct_sioc_sg_req_sz; 549 extern unsigned struct_sioc_vif_req_sz; 550#endif 551 552 // ioctl request identifiers 553 554 // A special value to mark ioctls that are not present on the target platform, 555 // when it can not be determined without including any system headers. 556 extern unsigned IOCTL_NOT_PRESENT; 557 558 extern unsigned IOCTL_FIOASYNC; 559 extern unsigned IOCTL_FIOCLEX; 560 extern unsigned IOCTL_FIOGETOWN; 561 extern unsigned IOCTL_FIONBIO; 562 extern unsigned IOCTL_FIONCLEX; 563 extern unsigned IOCTL_FIOSETOWN; 564 extern unsigned IOCTL_SIOCADDMULTI; 565 extern unsigned IOCTL_SIOCATMARK; 566 extern unsigned IOCTL_SIOCDELMULTI; 567 extern unsigned IOCTL_SIOCGIFADDR; 568 extern unsigned IOCTL_SIOCGIFBRDADDR; 569 extern unsigned IOCTL_SIOCGIFCONF; 570 extern unsigned IOCTL_SIOCGIFDSTADDR; 571 extern unsigned IOCTL_SIOCGIFFLAGS; 572 extern unsigned IOCTL_SIOCGIFMETRIC; 573 extern unsigned IOCTL_SIOCGIFMTU; 574 extern unsigned IOCTL_SIOCGIFNETMASK; 575 extern unsigned IOCTL_SIOCGPGRP; 576 extern unsigned IOCTL_SIOCSIFADDR; 577 extern unsigned IOCTL_SIOCSIFBRDADDR; 578 extern unsigned IOCTL_SIOCSIFDSTADDR; 579 extern unsigned IOCTL_SIOCSIFFLAGS; 580 extern unsigned IOCTL_SIOCSIFMETRIC; 581 extern unsigned IOCTL_SIOCSIFMTU; 582 extern unsigned IOCTL_SIOCSIFNETMASK; 583 extern unsigned IOCTL_SIOCSPGRP; 584 extern unsigned IOCTL_TIOCCONS; 585 extern unsigned IOCTL_TIOCEXCL; 586 extern unsigned IOCTL_TIOCGETD; 587 extern unsigned IOCTL_TIOCGPGRP; 588 extern unsigned IOCTL_TIOCGWINSZ; 589 extern unsigned IOCTL_TIOCMBIC; 590 extern unsigned IOCTL_TIOCMBIS; 591 extern unsigned IOCTL_TIOCMGET; 592 extern unsigned IOCTL_TIOCMSET; 593 extern unsigned IOCTL_TIOCNOTTY; 594 extern unsigned IOCTL_TIOCNXCL; 595 extern unsigned IOCTL_TIOCOUTQ; 596 extern unsigned IOCTL_TIOCPKT; 597 extern unsigned IOCTL_TIOCSCTTY; 598 extern unsigned IOCTL_TIOCSETD; 599 extern unsigned IOCTL_TIOCSPGRP; 600 extern unsigned IOCTL_TIOCSTI; 601 extern unsigned IOCTL_TIOCSWINSZ; 602#if (SANITIZER_LINUX && !SANITIZER_ANDROID) 603 extern unsigned IOCTL_SIOCGETSGCNT; 604 extern unsigned IOCTL_SIOCGETVIFCNT; 605#endif 606#if SANITIZER_LINUX 607 extern unsigned IOCTL_EVIOCGABS; 608 extern unsigned IOCTL_EVIOCGBIT; 609 extern unsigned IOCTL_EVIOCGEFFECTS; 610 extern unsigned IOCTL_EVIOCGID; 611 extern unsigned IOCTL_EVIOCGKEY; 612 extern unsigned IOCTL_EVIOCGKEYCODE; 613 extern unsigned IOCTL_EVIOCGLED; 614 extern unsigned IOCTL_EVIOCGNAME; 615 extern unsigned IOCTL_EVIOCGPHYS; 616 extern unsigned IOCTL_EVIOCGRAB; 617 extern unsigned IOCTL_EVIOCGREP; 618 extern unsigned IOCTL_EVIOCGSND; 619 extern unsigned IOCTL_EVIOCGSW; 620 extern unsigned IOCTL_EVIOCGUNIQ; 621 extern unsigned IOCTL_EVIOCGVERSION; 622 extern unsigned IOCTL_EVIOCRMFF; 623 extern unsigned IOCTL_EVIOCSABS; 624 extern unsigned IOCTL_EVIOCSFF; 625 extern unsigned IOCTL_EVIOCSKEYCODE; 626 extern unsigned IOCTL_EVIOCSREP; 627 extern unsigned IOCTL_BLKFLSBUF; 628 extern unsigned IOCTL_BLKGETSIZE; 629 extern unsigned IOCTL_BLKRAGET; 630 extern unsigned IOCTL_BLKRASET; 631 extern unsigned IOCTL_BLKROGET; 632 extern unsigned IOCTL_BLKROSET; 633 extern unsigned IOCTL_BLKRRPART; 634 extern unsigned IOCTL_CDROMAUDIOBUFSIZ; 635 extern unsigned IOCTL_CDROMEJECT; 636 extern unsigned IOCTL_CDROMEJECT_SW; 637 extern unsigned IOCTL_CDROMMULTISESSION; 638 extern unsigned IOCTL_CDROMPAUSE; 639 extern unsigned IOCTL_CDROMPLAYMSF; 640 extern unsigned IOCTL_CDROMPLAYTRKIND; 641 extern unsigned IOCTL_CDROMREADAUDIO; 642 extern unsigned IOCTL_CDROMREADCOOKED; 643 extern unsigned IOCTL_CDROMREADMODE1; 644 extern unsigned IOCTL_CDROMREADMODE2; 645 extern unsigned IOCTL_CDROMREADRAW; 646 extern unsigned IOCTL_CDROMREADTOCENTRY; 647 extern unsigned IOCTL_CDROMREADTOCHDR; 648 extern unsigned IOCTL_CDROMRESET; 649 extern unsigned IOCTL_CDROMRESUME; 650 extern unsigned IOCTL_CDROMSEEK; 651 extern unsigned IOCTL_CDROMSTART; 652 extern unsigned IOCTL_CDROMSTOP; 653 extern unsigned IOCTL_CDROMSUBCHNL; 654 extern unsigned IOCTL_CDROMVOLCTRL; 655 extern unsigned IOCTL_CDROMVOLREAD; 656 extern unsigned IOCTL_CDROM_GET_UPC; 657 extern unsigned IOCTL_FDCLRPRM; 658 extern unsigned IOCTL_FDDEFPRM; 659 extern unsigned IOCTL_FDFLUSH; 660 extern unsigned IOCTL_FDFMTBEG; 661 extern unsigned IOCTL_FDFMTEND; 662 extern unsigned IOCTL_FDFMTTRK; 663 extern unsigned IOCTL_FDGETDRVPRM; 664 extern unsigned IOCTL_FDGETDRVSTAT; 665 extern unsigned IOCTL_FDGETDRVTYP; 666 extern unsigned IOCTL_FDGETFDCSTAT; 667 extern unsigned IOCTL_FDGETMAXERRS; 668 extern unsigned IOCTL_FDGETPRM; 669 extern unsigned IOCTL_FDMSGOFF; 670 extern unsigned IOCTL_FDMSGON; 671 extern unsigned IOCTL_FDPOLLDRVSTAT; 672 extern unsigned IOCTL_FDRAWCMD; 673 extern unsigned IOCTL_FDRESET; 674 extern unsigned IOCTL_FDSETDRVPRM; 675 extern unsigned IOCTL_FDSETEMSGTRESH; 676 extern unsigned IOCTL_FDSETMAXERRS; 677 extern unsigned IOCTL_FDSETPRM; 678 extern unsigned IOCTL_FDTWADDLE; 679 extern unsigned IOCTL_FDWERRORCLR; 680 extern unsigned IOCTL_FDWERRORGET; 681 extern unsigned IOCTL_HDIO_DRIVE_CMD; 682 extern unsigned IOCTL_HDIO_GETGEO; 683 extern unsigned IOCTL_HDIO_GET_32BIT; 684 extern unsigned IOCTL_HDIO_GET_DMA; 685 extern unsigned IOCTL_HDIO_GET_IDENTITY; 686 extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS; 687 extern unsigned IOCTL_HDIO_GET_MULTCOUNT; 688 extern unsigned IOCTL_HDIO_GET_NOWERR; 689 extern unsigned IOCTL_HDIO_GET_UNMASKINTR; 690 extern unsigned IOCTL_HDIO_SET_32BIT; 691 extern unsigned IOCTL_HDIO_SET_DMA; 692 extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS; 693 extern unsigned IOCTL_HDIO_SET_MULTCOUNT; 694 extern unsigned IOCTL_HDIO_SET_NOWERR; 695 extern unsigned IOCTL_HDIO_SET_UNMASKINTR; 696 extern unsigned IOCTL_MTIOCGET; 697 extern unsigned IOCTL_MTIOCPOS; 698 extern unsigned IOCTL_MTIOCTOP; 699 extern unsigned IOCTL_PPPIOCGASYNCMAP; 700 extern unsigned IOCTL_PPPIOCGDEBUG; 701 extern unsigned IOCTL_PPPIOCGFLAGS; 702 extern unsigned IOCTL_PPPIOCGUNIT; 703 extern unsigned IOCTL_PPPIOCGXASYNCMAP; 704 extern unsigned IOCTL_PPPIOCSASYNCMAP; 705 extern unsigned IOCTL_PPPIOCSDEBUG; 706 extern unsigned IOCTL_PPPIOCSFLAGS; 707 extern unsigned IOCTL_PPPIOCSMAXCID; 708 extern unsigned IOCTL_PPPIOCSMRU; 709 extern unsigned IOCTL_PPPIOCSXASYNCMAP; 710 extern unsigned IOCTL_SIOCADDRT; 711 extern unsigned IOCTL_SIOCDARP; 712 extern unsigned IOCTL_SIOCDELRT; 713 extern unsigned IOCTL_SIOCDRARP; 714 extern unsigned IOCTL_SIOCGARP; 715 extern unsigned IOCTL_SIOCGIFENCAP; 716 extern unsigned IOCTL_SIOCGIFHWADDR; 717 extern unsigned IOCTL_SIOCGIFMAP; 718 extern unsigned IOCTL_SIOCGIFMEM; 719 extern unsigned IOCTL_SIOCGIFNAME; 720 extern unsigned IOCTL_SIOCGIFSLAVE; 721 extern unsigned IOCTL_SIOCGRARP; 722 extern unsigned IOCTL_SIOCGSTAMP; 723 extern unsigned IOCTL_SIOCSARP; 724 extern unsigned IOCTL_SIOCSIFENCAP; 725 extern unsigned IOCTL_SIOCSIFHWADDR; 726 extern unsigned IOCTL_SIOCSIFLINK; 727 extern unsigned IOCTL_SIOCSIFMAP; 728 extern unsigned IOCTL_SIOCSIFMEM; 729 extern unsigned IOCTL_SIOCSIFSLAVE; 730 extern unsigned IOCTL_SIOCSRARP; 731 extern unsigned IOCTL_SNDCTL_COPR_HALT; 732 extern unsigned IOCTL_SNDCTL_COPR_LOAD; 733 extern unsigned IOCTL_SNDCTL_COPR_RCODE; 734 extern unsigned IOCTL_SNDCTL_COPR_RCVMSG; 735 extern unsigned IOCTL_SNDCTL_COPR_RDATA; 736 extern unsigned IOCTL_SNDCTL_COPR_RESET; 737 extern unsigned IOCTL_SNDCTL_COPR_RUN; 738 extern unsigned IOCTL_SNDCTL_COPR_SENDMSG; 739 extern unsigned IOCTL_SNDCTL_COPR_WCODE; 740 extern unsigned IOCTL_SNDCTL_COPR_WDATA; 741 extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE; 742 extern unsigned IOCTL_SNDCTL_DSP_GETFMTS; 743 extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK; 744 extern unsigned IOCTL_SNDCTL_DSP_POST; 745 extern unsigned IOCTL_SNDCTL_DSP_RESET; 746 extern unsigned IOCTL_SNDCTL_DSP_SETFMT; 747 extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT; 748 extern unsigned IOCTL_SNDCTL_DSP_SPEED; 749 extern unsigned IOCTL_SNDCTL_DSP_STEREO; 750 extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE; 751 extern unsigned IOCTL_SNDCTL_DSP_SYNC; 752 extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE; 753 extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR; 754 extern unsigned IOCTL_SNDCTL_MIDI_INFO; 755 extern unsigned IOCTL_SNDCTL_MIDI_PRETIME; 756 extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE; 757 extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT; 758 extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT; 759 extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS; 760 extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS; 761 extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND; 762 extern unsigned IOCTL_SNDCTL_SEQ_PANIC; 763 extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE; 764 extern unsigned IOCTL_SNDCTL_SEQ_RESET; 765 extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES; 766 extern unsigned IOCTL_SNDCTL_SEQ_SYNC; 767 extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI; 768 extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD; 769 extern unsigned IOCTL_SNDCTL_SYNTH_INFO; 770 extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL; 771 extern unsigned IOCTL_SNDCTL_TMR_CONTINUE; 772 extern unsigned IOCTL_SNDCTL_TMR_METRONOME; 773 extern unsigned IOCTL_SNDCTL_TMR_SELECT; 774 extern unsigned IOCTL_SNDCTL_TMR_SOURCE; 775 extern unsigned IOCTL_SNDCTL_TMR_START; 776 extern unsigned IOCTL_SNDCTL_TMR_STOP; 777 extern unsigned IOCTL_SNDCTL_TMR_TEMPO; 778 extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE; 779 extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM; 780 extern unsigned IOCTL_SOUND_MIXER_READ_BASS; 781 extern unsigned IOCTL_SOUND_MIXER_READ_CAPS; 782 extern unsigned IOCTL_SOUND_MIXER_READ_CD; 783 extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK; 784 extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE; 785 extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN; 786 extern unsigned IOCTL_SOUND_MIXER_READ_IMIX; 787 extern unsigned IOCTL_SOUND_MIXER_READ_LINE1; 788 extern unsigned IOCTL_SOUND_MIXER_READ_LINE2; 789 extern unsigned IOCTL_SOUND_MIXER_READ_LINE3; 790 extern unsigned IOCTL_SOUND_MIXER_READ_LINE; 791 extern unsigned IOCTL_SOUND_MIXER_READ_LOUD; 792 extern unsigned IOCTL_SOUND_MIXER_READ_MIC; 793 extern unsigned IOCTL_SOUND_MIXER_READ_MUTE; 794 extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN; 795 extern unsigned IOCTL_SOUND_MIXER_READ_PCM; 796 extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV; 797 extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK; 798 extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC; 799 extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER; 800 extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS; 801 extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH; 802 extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE; 803 extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME; 804 extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM; 805 extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS; 806 extern unsigned IOCTL_SOUND_MIXER_WRITE_CD; 807 extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE; 808 extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN; 809 extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX; 810 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1; 811 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2; 812 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3; 813 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE; 814 extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD; 815 extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC; 816 extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE; 817 extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN; 818 extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM; 819 extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV; 820 extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC; 821 extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER; 822 extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH; 823 extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE; 824 extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME; 825 extern unsigned IOCTL_SOUND_PCM_READ_BITS; 826 extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS; 827 extern unsigned IOCTL_SOUND_PCM_READ_FILTER; 828 extern unsigned IOCTL_SOUND_PCM_READ_RATE; 829 extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS; 830 extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER; 831 extern unsigned IOCTL_TCFLSH; 832 extern unsigned IOCTL_TCGETA; 833 extern unsigned IOCTL_TCGETS; 834 extern unsigned IOCTL_TCSBRK; 835 extern unsigned IOCTL_TCSBRKP; 836 extern unsigned IOCTL_TCSETA; 837 extern unsigned IOCTL_TCSETAF; 838 extern unsigned IOCTL_TCSETAW; 839 extern unsigned IOCTL_TCSETS; 840 extern unsigned IOCTL_TCSETSF; 841 extern unsigned IOCTL_TCSETSW; 842 extern unsigned IOCTL_TCXONC; 843 extern unsigned IOCTL_TIOCGLCKTRMIOS; 844 extern unsigned IOCTL_TIOCGSOFTCAR; 845 extern unsigned IOCTL_TIOCINQ; 846 extern unsigned IOCTL_TIOCLINUX; 847 extern unsigned IOCTL_TIOCSERCONFIG; 848 extern unsigned IOCTL_TIOCSERGETLSR; 849 extern unsigned IOCTL_TIOCSERGWILD; 850 extern unsigned IOCTL_TIOCSERSWILD; 851 extern unsigned IOCTL_TIOCSLCKTRMIOS; 852 extern unsigned IOCTL_TIOCSSOFTCAR; 853 extern unsigned IOCTL_VT_ACTIVATE; 854 extern unsigned IOCTL_VT_DISALLOCATE; 855 extern unsigned IOCTL_VT_GETMODE; 856 extern unsigned IOCTL_VT_GETSTATE; 857 extern unsigned IOCTL_VT_OPENQRY; 858 extern unsigned IOCTL_VT_RELDISP; 859 extern unsigned IOCTL_VT_RESIZE; 860 extern unsigned IOCTL_VT_RESIZEX; 861 extern unsigned IOCTL_VT_SENDSIG; 862 extern unsigned IOCTL_VT_SETMODE; 863 extern unsigned IOCTL_VT_WAITACTIVE; 864#endif 865#if SANITIZER_LINUX && !SANITIZER_ANDROID 866 extern unsigned IOCTL_CYGETDEFTHRESH; 867 extern unsigned IOCTL_CYGETDEFTIMEOUT; 868 extern unsigned IOCTL_CYGETMON; 869 extern unsigned IOCTL_CYGETTHRESH; 870 extern unsigned IOCTL_CYGETTIMEOUT; 871 extern unsigned IOCTL_CYSETDEFTHRESH; 872 extern unsigned IOCTL_CYSETDEFTIMEOUT; 873 extern unsigned IOCTL_CYSETTHRESH; 874 extern unsigned IOCTL_CYSETTIMEOUT; 875 extern unsigned IOCTL_EQL_EMANCIPATE; 876 extern unsigned IOCTL_EQL_ENSLAVE; 877 extern unsigned IOCTL_EQL_GETMASTRCFG; 878 extern unsigned IOCTL_EQL_GETSLAVECFG; 879 extern unsigned IOCTL_EQL_SETMASTRCFG; 880 extern unsigned IOCTL_EQL_SETSLAVECFG; 881 extern unsigned IOCTL_EVIOCGKEYCODE_V2; 882 extern unsigned IOCTL_EVIOCGPROP; 883 extern unsigned IOCTL_EVIOCSKEYCODE_V2; 884 extern unsigned IOCTL_FS_IOC_GETFLAGS; 885 extern unsigned IOCTL_FS_IOC_GETVERSION; 886 extern unsigned IOCTL_FS_IOC_SETFLAGS; 887 extern unsigned IOCTL_FS_IOC_SETVERSION; 888 extern unsigned IOCTL_GIO_CMAP; 889 extern unsigned IOCTL_GIO_FONT; 890 extern unsigned IOCTL_GIO_SCRNMAP; 891 extern unsigned IOCTL_GIO_UNIMAP; 892 extern unsigned IOCTL_GIO_UNISCRNMAP; 893 extern unsigned IOCTL_KDADDIO; 894 extern unsigned IOCTL_KDDELIO; 895 extern unsigned IOCTL_KDDISABIO; 896 extern unsigned IOCTL_KDENABIO; 897 extern unsigned IOCTL_KDGETKEYCODE; 898 extern unsigned IOCTL_KDGETLED; 899 extern unsigned IOCTL_KDGETMODE; 900 extern unsigned IOCTL_KDGKBDIACR; 901 extern unsigned IOCTL_KDGKBENT; 902 extern unsigned IOCTL_KDGKBLED; 903 extern unsigned IOCTL_KDGKBMETA; 904 extern unsigned IOCTL_KDGKBMODE; 905 extern unsigned IOCTL_KDGKBSENT; 906 extern unsigned IOCTL_KDGKBTYPE; 907 extern unsigned IOCTL_KDMAPDISP; 908 extern unsigned IOCTL_KDMKTONE; 909 extern unsigned IOCTL_KDSETKEYCODE; 910 extern unsigned IOCTL_KDSETLED; 911 extern unsigned IOCTL_KDSETMODE; 912 extern unsigned IOCTL_KDSIGACCEPT; 913 extern unsigned IOCTL_KDSKBDIACR; 914 extern unsigned IOCTL_KDSKBENT; 915 extern unsigned IOCTL_KDSKBLED; 916 extern unsigned IOCTL_KDSKBMETA; 917 extern unsigned IOCTL_KDSKBMODE; 918 extern unsigned IOCTL_KDSKBSENT; 919 extern unsigned IOCTL_KDUNMAPDISP; 920 extern unsigned IOCTL_KIOCSOUND; 921 extern unsigned IOCTL_LPABORT; 922 extern unsigned IOCTL_LPABORTOPEN; 923 extern unsigned IOCTL_LPCAREFUL; 924 extern unsigned IOCTL_LPCHAR; 925 extern unsigned IOCTL_LPGETIRQ; 926 extern unsigned IOCTL_LPGETSTATUS; 927 extern unsigned IOCTL_LPRESET; 928 extern unsigned IOCTL_LPSETIRQ; 929 extern unsigned IOCTL_LPTIME; 930 extern unsigned IOCTL_LPWAIT; 931 extern unsigned IOCTL_MTIOCGETCONFIG; 932 extern unsigned IOCTL_MTIOCSETCONFIG; 933 extern unsigned IOCTL_PIO_CMAP; 934 extern unsigned IOCTL_PIO_FONT; 935 extern unsigned IOCTL_PIO_SCRNMAP; 936 extern unsigned IOCTL_PIO_UNIMAP; 937 extern unsigned IOCTL_PIO_UNIMAPCLR; 938 extern unsigned IOCTL_PIO_UNISCRNMAP; 939 extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN; 940 extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST; 941 extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE; 942 extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE; 943 extern unsigned IOCTL_SIOCAIPXITFCRT; 944 extern unsigned IOCTL_SIOCAIPXPRISLT; 945 extern unsigned IOCTL_SIOCAX25ADDUID; 946 extern unsigned IOCTL_SIOCAX25DELUID; 947 extern unsigned IOCTL_SIOCAX25GETPARMS; 948 extern unsigned IOCTL_SIOCAX25GETUID; 949 extern unsigned IOCTL_SIOCAX25NOUID; 950 extern unsigned IOCTL_SIOCAX25SETPARMS; 951 extern unsigned IOCTL_SIOCDEVPLIP; 952 extern unsigned IOCTL_SIOCIPXCFGDATA; 953 extern unsigned IOCTL_SIOCNRDECOBS; 954 extern unsigned IOCTL_SIOCNRGETPARMS; 955 extern unsigned IOCTL_SIOCNRRTCTL; 956 extern unsigned IOCTL_SIOCNRSETPARMS; 957 extern unsigned IOCTL_SNDCTL_DSP_GETISPACE; 958 extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE; 959 extern unsigned IOCTL_TIOCGSERIAL; 960 extern unsigned IOCTL_TIOCSERGETMULTI; 961 extern unsigned IOCTL_TIOCSERSETMULTI; 962 extern unsigned IOCTL_TIOCSSERIAL; 963#endif 964 965 extern const int errno_EOWNERDEAD; 966} // namespace __sanitizer 967 968#define CHECK_TYPE_SIZE(TYPE) \ 969 COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE)) 970 971#define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER) \ 972 COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *) NULL)->MEMBER) == \ 973 sizeof(((CLASS *) NULL)->MEMBER)); \ 974 COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) == \ 975 offsetof(CLASS, MEMBER)) 976 977// For sigaction, which is a function and struct at the same time, 978// and thus requires explicit "struct" in sizeof() expression. 979#define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER) \ 980 COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *) NULL)->MEMBER) == \ 981 sizeof(((struct CLASS *) NULL)->MEMBER)); \ 982 COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) == \ 983 offsetof(struct CLASS, MEMBER)) 984 985#endif 986