13cab2bb3Spatrick //===-- sanitizer_platform_limits_freebsd.h -------------------------------===// 23cab2bb3Spatrick // 33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information. 53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63cab2bb3Spatrick // 73cab2bb3Spatrick //===----------------------------------------------------------------------===// 83cab2bb3Spatrick // 93cab2bb3Spatrick // This file is a part of Sanitizer common code. 103cab2bb3Spatrick // 113cab2bb3Spatrick // Sizes and layouts of platform-specific FreeBSD data structures. 123cab2bb3Spatrick //===----------------------------------------------------------------------===// 133cab2bb3Spatrick 143cab2bb3Spatrick #ifndef SANITIZER_PLATFORM_LIMITS_FREEBSD_H 153cab2bb3Spatrick #define SANITIZER_PLATFORM_LIMITS_FREEBSD_H 163cab2bb3Spatrick 173cab2bb3Spatrick #if SANITIZER_FREEBSD 183cab2bb3Spatrick 193cab2bb3Spatrick # include "sanitizer_internal_defs.h" 203cab2bb3Spatrick # include "sanitizer_platform.h" 213cab2bb3Spatrick # include "sanitizer_platform_limits_posix.h" 223cab2bb3Spatrick 233cab2bb3Spatrick // Get sys/_types.h, because that tells us whether 64-bit inodes are 243cab2bb3Spatrick // used in struct dirent below. 253cab2bb3Spatrick # include <sys/_types.h> 263cab2bb3Spatrick 273cab2bb3Spatrick namespace __sanitizer { 281f9cb04fSpatrick void *__sanitizer_get_link_map_by_dlopen_handle(void *handle); 291f9cb04fSpatrick # define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) \ 301f9cb04fSpatrick (link_map *)__sanitizer_get_link_map_by_dlopen_handle(handle) 311f9cb04fSpatrick 323cab2bb3Spatrick extern unsigned struct_utsname_sz; 333cab2bb3Spatrick extern unsigned struct_stat_sz; 343cab2bb3Spatrick # if defined(__powerpc64__) 353cab2bb3Spatrick const unsigned struct___old_kernel_stat_sz = 0; 363cab2bb3Spatrick # else 373cab2bb3Spatrick const unsigned struct___old_kernel_stat_sz = 32; 383cab2bb3Spatrick # endif 393cab2bb3Spatrick extern unsigned struct_rusage_sz; 403cab2bb3Spatrick extern unsigned siginfo_t_sz; 413cab2bb3Spatrick extern unsigned struct_itimerval_sz; 423cab2bb3Spatrick extern unsigned pthread_t_sz; 433cab2bb3Spatrick extern unsigned pthread_mutex_t_sz; 443cab2bb3Spatrick extern unsigned pthread_cond_t_sz; 453cab2bb3Spatrick extern unsigned pid_t_sz; 463cab2bb3Spatrick extern unsigned timeval_sz; 473cab2bb3Spatrick extern unsigned uid_t_sz; 483cab2bb3Spatrick extern unsigned gid_t_sz; 493cab2bb3Spatrick extern unsigned fpos_t_sz; 503cab2bb3Spatrick extern unsigned mbstate_t_sz; 513cab2bb3Spatrick extern unsigned struct_timezone_sz; 523cab2bb3Spatrick extern unsigned struct_tms_sz; 533cab2bb3Spatrick extern unsigned struct_itimerspec_sz; 543cab2bb3Spatrick extern unsigned struct_sigevent_sz; 551f9cb04fSpatrick extern unsigned struct_stack_t_sz; 563cab2bb3Spatrick extern unsigned struct_sched_param_sz; 573cab2bb3Spatrick extern unsigned struct_statfs64_sz; 583cab2bb3Spatrick extern unsigned struct_statfs_sz; 593cab2bb3Spatrick extern unsigned struct_sockaddr_sz; 60*810390e3Srobert unsigned ucontext_t_sz(void *ctx); 613cab2bb3Spatrick extern unsigned struct_rlimit_sz; 623cab2bb3Spatrick extern unsigned struct_utimbuf_sz; 633cab2bb3Spatrick extern unsigned struct_timespec_sz; 643cab2bb3Spatrick extern unsigned struct_regmatch_sz; 653cab2bb3Spatrick extern unsigned struct_regex_sz; 663cab2bb3Spatrick extern unsigned struct_FTS_sz; 673cab2bb3Spatrick extern unsigned struct_FTSENT_sz; 683cab2bb3Spatrick extern const int unvis_valid; 693cab2bb3Spatrick extern const int unvis_validpush; 703cab2bb3Spatrick 713cab2bb3Spatrick struct __sanitizer_iocb { 723cab2bb3Spatrick u64 aio_data; 733cab2bb3Spatrick u32 aio_key_or_aio_reserved1; // Simply crazy. 743cab2bb3Spatrick u32 aio_reserved1_or_aio_key; // Luckily, we don't need these. 753cab2bb3Spatrick u16 aio_lio_opcode; 763cab2bb3Spatrick s16 aio_reqprio; 773cab2bb3Spatrick u32 aio_fildes; 783cab2bb3Spatrick u64 aio_buf; 793cab2bb3Spatrick u64 aio_nbytes; 803cab2bb3Spatrick s64 aio_offset; 813cab2bb3Spatrick u64 aio_reserved2; 823cab2bb3Spatrick u64 aio_reserved3; 833cab2bb3Spatrick }; 843cab2bb3Spatrick 853cab2bb3Spatrick struct __sanitizer_io_event { 863cab2bb3Spatrick u64 data; 873cab2bb3Spatrick u64 obj; 883cab2bb3Spatrick u64 res; 893cab2bb3Spatrick u64 res2; 903cab2bb3Spatrick }; 913cab2bb3Spatrick 923cab2bb3Spatrick const unsigned iocb_cmd_pread = 0; 933cab2bb3Spatrick const unsigned iocb_cmd_pwrite = 1; 943cab2bb3Spatrick const unsigned iocb_cmd_preadv = 7; 953cab2bb3Spatrick const unsigned iocb_cmd_pwritev = 8; 963cab2bb3Spatrick 973cab2bb3Spatrick struct __sanitizer___sysctl_args { 983cab2bb3Spatrick int *name; 993cab2bb3Spatrick int nlen; 1003cab2bb3Spatrick void *oldval; 1013cab2bb3Spatrick uptr *oldlenp; 1023cab2bb3Spatrick void *newval; 1033cab2bb3Spatrick uptr newlen; 1043cab2bb3Spatrick unsigned long ___unused[4]; 1053cab2bb3Spatrick }; 1063cab2bb3Spatrick 1073cab2bb3Spatrick struct __sanitizer_ipc_perm { 1083cab2bb3Spatrick unsigned int cuid; 1093cab2bb3Spatrick unsigned int cgid; 1103cab2bb3Spatrick unsigned int uid; 1113cab2bb3Spatrick unsigned int gid; 1123cab2bb3Spatrick unsigned short mode; 1133cab2bb3Spatrick unsigned short seq; 1143cab2bb3Spatrick long key; 1153cab2bb3Spatrick }; 1163cab2bb3Spatrick 117*810390e3Srobert struct __sanitizer_protoent { 118*810390e3Srobert char *p_name; 119*810390e3Srobert char **p_aliases; 120*810390e3Srobert int p_proto; 121*810390e3Srobert }; 122*810390e3Srobert 123*810390e3Srobert struct __sanitizer_netent { 124*810390e3Srobert char *n_name; 125*810390e3Srobert char **n_aliases; 126*810390e3Srobert int n_addrtype; 127*810390e3Srobert u32 n_net; 128*810390e3Srobert }; 129*810390e3Srobert 1303cab2bb3Spatrick # if !defined(__i386__) 1313cab2bb3Spatrick typedef long long __sanitizer_time_t; 1323cab2bb3Spatrick # else 1333cab2bb3Spatrick typedef long __sanitizer_time_t; 1343cab2bb3Spatrick # endif 1353cab2bb3Spatrick 1363cab2bb3Spatrick struct __sanitizer_shmid_ds { 1373cab2bb3Spatrick __sanitizer_ipc_perm shm_perm; 1383cab2bb3Spatrick unsigned long shm_segsz; 1393cab2bb3Spatrick unsigned int shm_lpid; 1403cab2bb3Spatrick unsigned int shm_cpid; 1413cab2bb3Spatrick int shm_nattch; 1423cab2bb3Spatrick __sanitizer_time_t shm_atime; 1433cab2bb3Spatrick __sanitizer_time_t shm_dtime; 1443cab2bb3Spatrick __sanitizer_time_t shm_ctime; 1453cab2bb3Spatrick }; 1463cab2bb3Spatrick 1473cab2bb3Spatrick extern unsigned struct_msqid_ds_sz; 1483cab2bb3Spatrick extern unsigned struct_mq_attr_sz; 1493cab2bb3Spatrick extern unsigned struct_timeb_sz; 1503cab2bb3Spatrick extern unsigned struct_statvfs_sz; 1513cab2bb3Spatrick 1523cab2bb3Spatrick struct __sanitizer_iovec { 1533cab2bb3Spatrick void *iov_base; 1543cab2bb3Spatrick uptr iov_len; 1553cab2bb3Spatrick }; 1563cab2bb3Spatrick 1573cab2bb3Spatrick struct __sanitizer_ifaddrs { 1583cab2bb3Spatrick struct __sanitizer_ifaddrs *ifa_next; 1593cab2bb3Spatrick char *ifa_name; 1603cab2bb3Spatrick unsigned int ifa_flags; 1613cab2bb3Spatrick void *ifa_addr; // (struct sockaddr *) 1623cab2bb3Spatrick void *ifa_netmask; // (struct sockaddr *) 1633cab2bb3Spatrick # undef ifa_dstaddr 1643cab2bb3Spatrick void *ifa_dstaddr; // (struct sockaddr *) 1653cab2bb3Spatrick void *ifa_data; 1663cab2bb3Spatrick }; 1673cab2bb3Spatrick 1683cab2bb3Spatrick typedef unsigned __sanitizer_pthread_key_t; 1693cab2bb3Spatrick 1703cab2bb3Spatrick struct __sanitizer_passwd { 1713cab2bb3Spatrick char *pw_name; 1723cab2bb3Spatrick char *pw_passwd; 1733cab2bb3Spatrick int pw_uid; 1743cab2bb3Spatrick int pw_gid; 1753cab2bb3Spatrick __sanitizer_time_t pw_change; 1763cab2bb3Spatrick char *pw_class; 1773cab2bb3Spatrick char *pw_gecos; 1783cab2bb3Spatrick char *pw_dir; 1793cab2bb3Spatrick char *pw_shell; 1803cab2bb3Spatrick __sanitizer_time_t pw_expire; 1813cab2bb3Spatrick int pw_fields; 1823cab2bb3Spatrick }; 1833cab2bb3Spatrick 1843cab2bb3Spatrick struct __sanitizer_group { 1853cab2bb3Spatrick char *gr_name; 1863cab2bb3Spatrick char *gr_passwd; 1873cab2bb3Spatrick int gr_gid; 1883cab2bb3Spatrick char **gr_mem; 1893cab2bb3Spatrick }; 1903cab2bb3Spatrick 1913cab2bb3Spatrick typedef long __sanitizer_suseconds_t; 1923cab2bb3Spatrick 1933cab2bb3Spatrick struct __sanitizer_timeval { 1943cab2bb3Spatrick __sanitizer_time_t tv_sec; 1953cab2bb3Spatrick __sanitizer_suseconds_t tv_usec; 1963cab2bb3Spatrick }; 1973cab2bb3Spatrick 1983cab2bb3Spatrick struct __sanitizer_itimerval { 1993cab2bb3Spatrick struct __sanitizer_timeval it_interval; 2003cab2bb3Spatrick struct __sanitizer_timeval it_value; 2013cab2bb3Spatrick }; 2023cab2bb3Spatrick 2033cab2bb3Spatrick struct __sanitizer_timeb { 2043cab2bb3Spatrick __sanitizer_time_t time; 2053cab2bb3Spatrick unsigned short millitm; 2063cab2bb3Spatrick short timezone; 2073cab2bb3Spatrick short dstflag; 2083cab2bb3Spatrick }; 2093cab2bb3Spatrick 2103cab2bb3Spatrick struct __sanitizer_ether_addr { 2113cab2bb3Spatrick u8 octet[6]; 2123cab2bb3Spatrick }; 2133cab2bb3Spatrick 2143cab2bb3Spatrick struct __sanitizer_tm { 2153cab2bb3Spatrick int tm_sec; 2163cab2bb3Spatrick int tm_min; 2173cab2bb3Spatrick int tm_hour; 2183cab2bb3Spatrick int tm_mday; 2193cab2bb3Spatrick int tm_mon; 2203cab2bb3Spatrick int tm_year; 2213cab2bb3Spatrick int tm_wday; 2223cab2bb3Spatrick int tm_yday; 2233cab2bb3Spatrick int tm_isdst; 2243cab2bb3Spatrick long int tm_gmtoff; 2253cab2bb3Spatrick const char *tm_zone; 2263cab2bb3Spatrick }; 2273cab2bb3Spatrick 2283cab2bb3Spatrick struct __sanitizer_msghdr { 2293cab2bb3Spatrick void *msg_name; 2303cab2bb3Spatrick unsigned msg_namelen; 2313cab2bb3Spatrick struct __sanitizer_iovec *msg_iov; 2323cab2bb3Spatrick unsigned msg_iovlen; 2333cab2bb3Spatrick void *msg_control; 2343cab2bb3Spatrick unsigned msg_controllen; 2353cab2bb3Spatrick int msg_flags; 2363cab2bb3Spatrick }; 2373cab2bb3Spatrick 2383cab2bb3Spatrick struct __sanitizer_cmsghdr { 2393cab2bb3Spatrick unsigned cmsg_len; 2403cab2bb3Spatrick int cmsg_level; 2413cab2bb3Spatrick int cmsg_type; 2423cab2bb3Spatrick }; 2433cab2bb3Spatrick 2443cab2bb3Spatrick struct __sanitizer_dirent { 2453cab2bb3Spatrick # if defined(__INO64) 2463cab2bb3Spatrick unsigned long long d_fileno; 2473cab2bb3Spatrick unsigned long long d_off; 2483cab2bb3Spatrick # else 2493cab2bb3Spatrick unsigned int d_fileno; 2503cab2bb3Spatrick # endif 2513cab2bb3Spatrick unsigned short d_reclen; 2523cab2bb3Spatrick // more fields that we don't care about 2533cab2bb3Spatrick }; 2543cab2bb3Spatrick 2553cab2bb3Spatrick // 'clock_t' is 32 bits wide on x64 FreeBSD 2563cab2bb3Spatrick typedef int __sanitizer_clock_t; 2573cab2bb3Spatrick typedef int __sanitizer_clockid_t; 2583cab2bb3Spatrick 2593cab2bb3Spatrick # if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__) || \ 2603cab2bb3Spatrick defined(__mips__) 2613cab2bb3Spatrick typedef unsigned __sanitizer___kernel_uid_t; 2623cab2bb3Spatrick typedef unsigned __sanitizer___kernel_gid_t; 2633cab2bb3Spatrick # else 2643cab2bb3Spatrick typedef unsigned short __sanitizer___kernel_uid_t; 2653cab2bb3Spatrick typedef unsigned short __sanitizer___kernel_gid_t; 2663cab2bb3Spatrick # endif 2673cab2bb3Spatrick typedef long long __sanitizer___kernel_off_t; 2683cab2bb3Spatrick 2693cab2bb3Spatrick # if defined(__powerpc__) || defined(__mips__) 2703cab2bb3Spatrick typedef unsigned int __sanitizer___kernel_old_uid_t; 2713cab2bb3Spatrick typedef unsigned int __sanitizer___kernel_old_gid_t; 2723cab2bb3Spatrick # else 2733cab2bb3Spatrick typedef unsigned short __sanitizer___kernel_old_uid_t; 2743cab2bb3Spatrick typedef unsigned short __sanitizer___kernel_old_gid_t; 2753cab2bb3Spatrick # endif 2763cab2bb3Spatrick 2773cab2bb3Spatrick typedef long long __sanitizer___kernel_loff_t; 2783cab2bb3Spatrick typedef struct { 2793cab2bb3Spatrick unsigned long fds_bits[1024 / (8 * sizeof(long))]; 2803cab2bb3Spatrick } __sanitizer___kernel_fd_set; 2813cab2bb3Spatrick 2823cab2bb3Spatrick // This thing depends on the platform. We are only interested in the upper 2833cab2bb3Spatrick // limit. Verified with a compiler assert in .cpp. 2843cab2bb3Spatrick union __sanitizer_pthread_attr_t { 2853cab2bb3Spatrick char size[128]; 2863cab2bb3Spatrick void *align; 2873cab2bb3Spatrick }; 2883cab2bb3Spatrick 2893cab2bb3Spatrick const unsigned old_sigset_t_sz = sizeof(unsigned long); 2903cab2bb3Spatrick 2913cab2bb3Spatrick struct __sanitizer_sigset_t { 2923cab2bb3Spatrick // uint32_t * 4 2933cab2bb3Spatrick unsigned int __bits[4]; 2943cab2bb3Spatrick }; 2953cab2bb3Spatrick 2963cab2bb3Spatrick typedef __sanitizer_sigset_t __sanitizer_kernel_sigset_t; 2973cab2bb3Spatrick 2983cab2bb3Spatrick struct __sanitizer_siginfo { 2993cab2bb3Spatrick // The size is determined by looking at sizeof of real siginfo_t on linux. 3003cab2bb3Spatrick u64 opaque[128 / sizeof(u64)]; 3013cab2bb3Spatrick }; 3023cab2bb3Spatrick 3033cab2bb3Spatrick using __sanitizer_sighandler_ptr = void (*)(int sig); 3043cab2bb3Spatrick using __sanitizer_sigactionhandler_ptr = void (*)(int sig, 3053cab2bb3Spatrick __sanitizer_siginfo *siginfo, 3063cab2bb3Spatrick void *uctx); 3073cab2bb3Spatrick 3083cab2bb3Spatrick struct __sanitizer_sigaction { 3093cab2bb3Spatrick union { 3103cab2bb3Spatrick __sanitizer_sigactionhandler_ptr sigaction; 3113cab2bb3Spatrick __sanitizer_sighandler_ptr handler; 3123cab2bb3Spatrick }; 3133cab2bb3Spatrick int sa_flags; 3143cab2bb3Spatrick __sanitizer_sigset_t sa_mask; 3153cab2bb3Spatrick }; 3163cab2bb3Spatrick 3173cab2bb3Spatrick struct __sanitizer_sem_t { 3183cab2bb3Spatrick u32 data[4]; 3193cab2bb3Spatrick }; 3203cab2bb3Spatrick 3213cab2bb3Spatrick extern const uptr sig_ign; 3223cab2bb3Spatrick extern const uptr sig_dfl; 3233cab2bb3Spatrick extern const uptr sig_err; 3243cab2bb3Spatrick extern const uptr sa_siginfo; 3253cab2bb3Spatrick 3263cab2bb3Spatrick extern int af_inet; 3273cab2bb3Spatrick extern int af_inet6; 3283cab2bb3Spatrick uptr __sanitizer_in_addr_sz(int af); 3293cab2bb3Spatrick 3303cab2bb3Spatrick struct __sanitizer_dl_phdr_info { 3313cab2bb3Spatrick uptr dlpi_addr; 3323cab2bb3Spatrick const char *dlpi_name; 3333cab2bb3Spatrick const void *dlpi_phdr; 3343cab2bb3Spatrick short dlpi_phnum; 3353cab2bb3Spatrick }; 3363cab2bb3Spatrick 3373cab2bb3Spatrick extern unsigned struct_ElfW_Phdr_sz; 3383cab2bb3Spatrick 3393cab2bb3Spatrick struct __sanitizer_addrinfo { 3403cab2bb3Spatrick int ai_flags; 3413cab2bb3Spatrick int ai_family; 3423cab2bb3Spatrick int ai_socktype; 3433cab2bb3Spatrick int ai_protocol; 3443cab2bb3Spatrick unsigned ai_addrlen; 3453cab2bb3Spatrick char *ai_canonname; 3463cab2bb3Spatrick void *ai_addr; 3473cab2bb3Spatrick struct __sanitizer_addrinfo *ai_next; 3483cab2bb3Spatrick }; 3493cab2bb3Spatrick 3503cab2bb3Spatrick struct __sanitizer_hostent { 3513cab2bb3Spatrick char *h_name; 3523cab2bb3Spatrick char **h_aliases; 3533cab2bb3Spatrick int h_addrtype; 3543cab2bb3Spatrick int h_length; 3553cab2bb3Spatrick char **h_addr_list; 3563cab2bb3Spatrick }; 3573cab2bb3Spatrick 3583cab2bb3Spatrick struct __sanitizer_pollfd { 3593cab2bb3Spatrick int fd; 3603cab2bb3Spatrick short events; 3613cab2bb3Spatrick short revents; 3623cab2bb3Spatrick }; 3633cab2bb3Spatrick 3643cab2bb3Spatrick typedef unsigned __sanitizer_nfds_t; 3653cab2bb3Spatrick 3663cab2bb3Spatrick struct __sanitizer_glob_t { 3673cab2bb3Spatrick uptr gl_pathc; 3683cab2bb3Spatrick uptr gl_matchc; 3693cab2bb3Spatrick uptr gl_offs; 3703cab2bb3Spatrick int gl_flags; 3713cab2bb3Spatrick char **gl_pathv; 3723cab2bb3Spatrick int (*gl_errfunc)(const char *, int); 3733cab2bb3Spatrick void (*gl_closedir)(void *dirp); 3743cab2bb3Spatrick struct dirent *(*gl_readdir)(void *dirp); 3753cab2bb3Spatrick void *(*gl_opendir)(const char *); 3763cab2bb3Spatrick int (*gl_lstat)(const char *, void * /* struct stat* */); 3773cab2bb3Spatrick int (*gl_stat)(const char *, void * /* struct stat* */); 3783cab2bb3Spatrick }; 3793cab2bb3Spatrick 3803cab2bb3Spatrick extern int glob_nomatch; 3813cab2bb3Spatrick extern int glob_altdirfunc; 382*810390e3Srobert extern const int wordexp_wrde_dooffs; 3833cab2bb3Spatrick 3843cab2bb3Spatrick extern unsigned path_max; 3853cab2bb3Spatrick 386*810390e3Srobert extern int struct_ttyent_sz; 387*810390e3Srobert 3883cab2bb3Spatrick struct __sanitizer_wordexp_t { 3893cab2bb3Spatrick uptr we_wordc; 3903cab2bb3Spatrick char **we_wordv; 3913cab2bb3Spatrick uptr we_offs; 3923cab2bb3Spatrick char *we_strings; 3933cab2bb3Spatrick uptr we_nbytes; 3943cab2bb3Spatrick }; 3953cab2bb3Spatrick 3963cab2bb3Spatrick typedef void __sanitizer_FILE; 3973cab2bb3Spatrick 3983cab2bb3Spatrick extern unsigned struct_shminfo_sz; 3993cab2bb3Spatrick extern unsigned struct_shm_info_sz; 4003cab2bb3Spatrick extern int shmctl_ipc_stat; 4013cab2bb3Spatrick extern int shmctl_ipc_info; 4023cab2bb3Spatrick extern int shmctl_shm_info; 4033cab2bb3Spatrick extern int shmctl_shm_stat; 4043cab2bb3Spatrick 4053cab2bb3Spatrick extern unsigned struct_utmpx_sz; 4063cab2bb3Spatrick 4073cab2bb3Spatrick extern int map_fixed; 4083cab2bb3Spatrick 4093cab2bb3Spatrick // ioctl arguments 4103cab2bb3Spatrick struct __sanitizer_ifconf { 4113cab2bb3Spatrick int ifc_len; 4123cab2bb3Spatrick union { 4133cab2bb3Spatrick void *ifcu_req; 4143cab2bb3Spatrick } ifc_ifcu; 4153cab2bb3Spatrick }; 4163cab2bb3Spatrick 417*810390e3Srobert struct __sanitizer__ttyent { 418*810390e3Srobert char *ty_name; 419*810390e3Srobert char *ty_getty; 420*810390e3Srobert char *ty_type; 421*810390e3Srobert int ty_status; 422*810390e3Srobert char *ty_window; 423*810390e3Srobert char *ty_comment; 424*810390e3Srobert char *ty_group; 425*810390e3Srobert }; 426*810390e3Srobert 427*810390e3Srobert // procctl reaper data for PROCCTL_REAPER flags 428*810390e3Srobert struct __sanitizer_procctl_reaper_status { 429*810390e3Srobert unsigned int rs_flags; 430*810390e3Srobert unsigned int rs_children; 431*810390e3Srobert unsigned int rs_descendants; 432*810390e3Srobert pid_t rs_reaper; 433*810390e3Srobert pid_t rs_pid; 434*810390e3Srobert unsigned int rs_pad0[15]; 435*810390e3Srobert }; 436*810390e3Srobert 437*810390e3Srobert struct __sanitizer_procctl_reaper_pidinfo { 438*810390e3Srobert pid_t pi_pid; 439*810390e3Srobert pid_t pi_subtree; 440*810390e3Srobert unsigned int pi_flags; 441*810390e3Srobert unsigned int pi_pad0[15]; 442*810390e3Srobert }; 443*810390e3Srobert 444*810390e3Srobert struct __sanitizer_procctl_reaper_pids { 445*810390e3Srobert unsigned int rp_count; 446*810390e3Srobert unsigned int rp_pad0[15]; 447*810390e3Srobert struct __sanitize_procctl_reapper_pidinfo *rp_pids; 448*810390e3Srobert }; 449*810390e3Srobert 450*810390e3Srobert struct __sanitizer_procctl_reaper_kill { 451*810390e3Srobert int rk_sig; 452*810390e3Srobert unsigned int rk_flags; 453*810390e3Srobert pid_t rk_subtree; 454*810390e3Srobert unsigned int rk_killed; 455*810390e3Srobert pid_t rk_fpid; 456*810390e3Srobert unsigned int rk_pad[15]; 457*810390e3Srobert }; 458*810390e3Srobert 4593cab2bb3Spatrick # define IOC_NRBITS 8 4603cab2bb3Spatrick # define IOC_TYPEBITS 8 4613cab2bb3Spatrick # if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__) 4623cab2bb3Spatrick # define IOC_SIZEBITS 13 4633cab2bb3Spatrick # define IOC_DIRBITS 3 4643cab2bb3Spatrick # define IOC_NONE 1U 4653cab2bb3Spatrick # define IOC_WRITE 4U 4663cab2bb3Spatrick # define IOC_READ 2U 4673cab2bb3Spatrick # else 4683cab2bb3Spatrick # define IOC_SIZEBITS 14 4693cab2bb3Spatrick # define IOC_DIRBITS 2 4703cab2bb3Spatrick # define IOC_NONE 0U 4713cab2bb3Spatrick # define IOC_WRITE 1U 4723cab2bb3Spatrick # define IOC_READ 2U 4733cab2bb3Spatrick # endif 4743cab2bb3Spatrick # define IOC_NRMASK ((1 << IOC_NRBITS) - 1) 4753cab2bb3Spatrick # define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1) 4763cab2bb3Spatrick # define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1) 4773cab2bb3Spatrick # if defined(IOC_DIRMASK) 4783cab2bb3Spatrick # undef IOC_DIRMASK 4793cab2bb3Spatrick # endif 4803cab2bb3Spatrick # define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1) 4813cab2bb3Spatrick # define IOC_NRSHIFT 0 4823cab2bb3Spatrick # define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS) 4833cab2bb3Spatrick # define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS) 4843cab2bb3Spatrick # define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS) 4853cab2bb3Spatrick # define EVIOC_EV_MAX 0x1f 4863cab2bb3Spatrick # define EVIOC_ABS_MAX 0x3f 4873cab2bb3Spatrick 4883cab2bb3Spatrick # define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK) 4893cab2bb3Spatrick # define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK) 4903cab2bb3Spatrick # define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK) 4913cab2bb3Spatrick # define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK) 4923cab2bb3Spatrick 4933cab2bb3Spatrick extern unsigned struct_ifreq_sz; 4943cab2bb3Spatrick extern unsigned struct_termios_sz; 4953cab2bb3Spatrick extern unsigned struct_winsize_sz; 4963cab2bb3Spatrick 4973cab2bb3Spatrick extern unsigned struct_copr_buffer_sz; 4983cab2bb3Spatrick extern unsigned struct_copr_debug_buf_sz; 4993cab2bb3Spatrick extern unsigned struct_copr_msg_sz; 5003cab2bb3Spatrick extern unsigned struct_midi_info_sz; 5013cab2bb3Spatrick extern unsigned struct_mtget_sz; 5023cab2bb3Spatrick extern unsigned struct_mtop_sz; 5033cab2bb3Spatrick extern unsigned struct_rtentry_sz; 5043cab2bb3Spatrick extern unsigned struct_sbi_instrument_sz; 5053cab2bb3Spatrick extern unsigned struct_seq_event_rec_sz; 5063cab2bb3Spatrick extern unsigned struct_synth_info_sz; 5073cab2bb3Spatrick extern unsigned struct_vt_mode_sz; 5083cab2bb3Spatrick 5093cab2bb3Spatrick extern const unsigned long __sanitizer_bufsiz; 5103cab2bb3Spatrick extern unsigned struct_audio_buf_info_sz; 5113cab2bb3Spatrick extern unsigned struct_ppp_stats_sz; 5123cab2bb3Spatrick extern unsigned struct_sioc_sg_req_sz; 5133cab2bb3Spatrick extern unsigned struct_sioc_vif_req_sz; 5143cab2bb3Spatrick 515*810390e3Srobert extern unsigned struct_procctl_reaper_status_sz; 516*810390e3Srobert extern unsigned struct_procctl_reaper_pidinfo_sz; 517*810390e3Srobert extern unsigned struct_procctl_reaper_pids_sz; 518*810390e3Srobert extern unsigned struct_procctl_reaper_kill_sz; 519*810390e3Srobert 5203cab2bb3Spatrick // ioctl request identifiers 5213cab2bb3Spatrick 5223cab2bb3Spatrick // A special value to mark ioctls that are not present on the target platform, 5233cab2bb3Spatrick // when it can not be determined without including any system headers. 5243cab2bb3Spatrick extern const unsigned IOCTL_NOT_PRESENT; 5253cab2bb3Spatrick 5263cab2bb3Spatrick extern unsigned IOCTL_FIOASYNC; 5273cab2bb3Spatrick extern unsigned IOCTL_FIOCLEX; 5283cab2bb3Spatrick extern unsigned IOCTL_FIOGETOWN; 5293cab2bb3Spatrick extern unsigned IOCTL_FIONBIO; 5303cab2bb3Spatrick extern unsigned IOCTL_FIONCLEX; 5313cab2bb3Spatrick extern unsigned IOCTL_FIOSETOWN; 5323cab2bb3Spatrick extern unsigned IOCTL_SIOCADDMULTI; 5333cab2bb3Spatrick extern unsigned IOCTL_SIOCATMARK; 5343cab2bb3Spatrick extern unsigned IOCTL_SIOCDELMULTI; 5353cab2bb3Spatrick extern unsigned IOCTL_SIOCGIFADDR; 5363cab2bb3Spatrick extern unsigned IOCTL_SIOCGIFBRDADDR; 5373cab2bb3Spatrick extern unsigned IOCTL_SIOCGIFCONF; 5383cab2bb3Spatrick extern unsigned IOCTL_SIOCGIFDSTADDR; 5393cab2bb3Spatrick extern unsigned IOCTL_SIOCGIFFLAGS; 5403cab2bb3Spatrick extern unsigned IOCTL_SIOCGIFMETRIC; 5413cab2bb3Spatrick extern unsigned IOCTL_SIOCGIFMTU; 5423cab2bb3Spatrick extern unsigned IOCTL_SIOCGIFNETMASK; 5433cab2bb3Spatrick extern unsigned IOCTL_SIOCGPGRP; 5443cab2bb3Spatrick extern unsigned IOCTL_SIOCSIFADDR; 5453cab2bb3Spatrick extern unsigned IOCTL_SIOCSIFBRDADDR; 5463cab2bb3Spatrick extern unsigned IOCTL_SIOCSIFDSTADDR; 5473cab2bb3Spatrick extern unsigned IOCTL_SIOCSIFFLAGS; 5483cab2bb3Spatrick extern unsigned IOCTL_SIOCSIFMETRIC; 5493cab2bb3Spatrick extern unsigned IOCTL_SIOCSIFMTU; 5503cab2bb3Spatrick extern unsigned IOCTL_SIOCSIFNETMASK; 5513cab2bb3Spatrick extern unsigned IOCTL_SIOCSPGRP; 5523cab2bb3Spatrick extern unsigned IOCTL_TIOCCONS; 5533cab2bb3Spatrick extern unsigned IOCTL_TIOCEXCL; 5543cab2bb3Spatrick extern unsigned IOCTL_TIOCGETD; 5553cab2bb3Spatrick extern unsigned IOCTL_TIOCGPGRP; 5563cab2bb3Spatrick extern unsigned IOCTL_TIOCGWINSZ; 5573cab2bb3Spatrick extern unsigned IOCTL_TIOCMBIC; 5583cab2bb3Spatrick extern unsigned IOCTL_TIOCMBIS; 5593cab2bb3Spatrick extern unsigned IOCTL_TIOCMGET; 5603cab2bb3Spatrick extern unsigned IOCTL_TIOCMSET; 5613cab2bb3Spatrick extern unsigned IOCTL_TIOCNOTTY; 5623cab2bb3Spatrick extern unsigned IOCTL_TIOCNXCL; 5633cab2bb3Spatrick extern unsigned IOCTL_TIOCOUTQ; 5643cab2bb3Spatrick extern unsigned IOCTL_TIOCPKT; 5653cab2bb3Spatrick extern unsigned IOCTL_TIOCSCTTY; 5663cab2bb3Spatrick extern unsigned IOCTL_TIOCSETD; 5673cab2bb3Spatrick extern unsigned IOCTL_TIOCSPGRP; 5683cab2bb3Spatrick extern unsigned IOCTL_TIOCSTI; 5693cab2bb3Spatrick extern unsigned IOCTL_TIOCSWINSZ; 5703cab2bb3Spatrick extern unsigned IOCTL_SIOCGETSGCNT; 5713cab2bb3Spatrick extern unsigned IOCTL_SIOCGETVIFCNT; 5723cab2bb3Spatrick extern unsigned IOCTL_MTIOCGET; 5733cab2bb3Spatrick extern unsigned IOCTL_MTIOCTOP; 5743cab2bb3Spatrick extern unsigned IOCTL_SIOCADDRT; 5753cab2bb3Spatrick extern unsigned IOCTL_SIOCDELRT; 5763cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE; 5773cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_GETFMTS; 5783cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK; 5793cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_POST; 5803cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_RESET; 5813cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_SETFMT; 5823cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT; 5833cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_SPEED; 5843cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_STEREO; 5853cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE; 5863cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_DSP_SYNC; 5873cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE; 5883cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR; 5893cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_MIDI_INFO; 5903cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_MIDI_PRETIME; 5913cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE; 5923cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT; 5933cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT; 5943cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS; 5953cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS; 5963cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND; 5973cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_PANIC; 5983cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE; 5993cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_RESET; 6003cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES; 6013cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_SYNC; 6023cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI; 6033cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD; 6043cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SYNTH_INFO; 6053cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL; 6063cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_TMR_CONTINUE; 6073cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_TMR_METRONOME; 6083cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_TMR_SELECT; 6093cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_TMR_SOURCE; 6103cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_TMR_START; 6113cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_TMR_STOP; 6123cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_TMR_TEMPO; 6133cab2bb3Spatrick extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE; 6143cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM; 6153cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_BASS; 6163cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_CAPS; 6173cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_CD; 6183cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK; 6193cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE; 6203cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN; 6213cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_IMIX; 6223cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_LINE1; 6233cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_LINE2; 6243cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_LINE3; 6253cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_LINE; 6263cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_LOUD; 6273cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_MIC; 6283cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_MUTE; 6293cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN; 6303cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_PCM; 6313cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV; 6323cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK; 6333cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC; 6343cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER; 6353cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS; 6363cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH; 6373cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE; 6383cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME; 6393cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM; 6403cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS; 6413cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_CD; 6423cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE; 6433cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN; 6443cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX; 6453cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1; 6463cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2; 6473cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3; 6483cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE; 6493cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD; 6503cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC; 6513cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE; 6523cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN; 6533cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM; 6543cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV; 6553cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC; 6563cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER; 6573cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH; 6583cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE; 6593cab2bb3Spatrick extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME; 6603cab2bb3Spatrick extern unsigned IOCTL_SOUND_PCM_READ_BITS; 6613cab2bb3Spatrick extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS; 6623cab2bb3Spatrick extern unsigned IOCTL_SOUND_PCM_READ_FILTER; 6633cab2bb3Spatrick extern unsigned IOCTL_SOUND_PCM_READ_RATE; 6643cab2bb3Spatrick extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS; 6653cab2bb3Spatrick extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER; 6663cab2bb3Spatrick extern unsigned IOCTL_VT_ACTIVATE; 6673cab2bb3Spatrick extern unsigned IOCTL_VT_GETMODE; 6683cab2bb3Spatrick extern unsigned IOCTL_VT_OPENQRY; 6693cab2bb3Spatrick extern unsigned IOCTL_VT_RELDISP; 6703cab2bb3Spatrick extern unsigned IOCTL_VT_SETMODE; 6713cab2bb3Spatrick extern unsigned IOCTL_VT_WAITACTIVE; 6723cab2bb3Spatrick extern unsigned IOCTL_GIO_SCRNMAP; 6733cab2bb3Spatrick extern unsigned IOCTL_KDDISABIO; 6743cab2bb3Spatrick extern unsigned IOCTL_KDENABIO; 6753cab2bb3Spatrick extern unsigned IOCTL_KDGETLED; 6763cab2bb3Spatrick extern unsigned IOCTL_KDGETMODE; 6773cab2bb3Spatrick extern unsigned IOCTL_KDGKBMODE; 6783cab2bb3Spatrick extern unsigned IOCTL_KDGKBTYPE; 6793cab2bb3Spatrick extern unsigned IOCTL_KDMKTONE; 6803cab2bb3Spatrick extern unsigned IOCTL_KDSETLED; 6813cab2bb3Spatrick extern unsigned IOCTL_KDSETMODE; 6823cab2bb3Spatrick extern unsigned IOCTL_KDSKBMODE; 6833cab2bb3Spatrick 6843cab2bb3Spatrick extern const int si_SEGV_MAPERR; 6853cab2bb3Spatrick extern const int si_SEGV_ACCERR; 6863cab2bb3Spatrick 687*810390e3Srobert extern const unsigned MD5_CTX_sz; 688*810390e3Srobert extern const unsigned MD5_return_length; 689*810390e3Srobert 690*810390e3Srobert #define SHA2_EXTERN(LEN) \ 691*810390e3Srobert extern const unsigned SHA##LEN##_CTX_sz; \ 692*810390e3Srobert extern const unsigned SHA##LEN##_return_length; \ 693*810390e3Srobert extern const unsigned SHA##LEN##_block_length; \ 694*810390e3Srobert extern const unsigned SHA##LEN##_digest_length 695*810390e3Srobert 696*810390e3Srobert SHA2_EXTERN(224); 697*810390e3Srobert SHA2_EXTERN(256); 698*810390e3Srobert SHA2_EXTERN(384); 699*810390e3Srobert SHA2_EXTERN(512); 700*810390e3Srobert 701*810390e3Srobert #undef SHA2_EXTERN 702*810390e3Srobert 7033cab2bb3Spatrick struct __sanitizer_cap_rights { 7043cab2bb3Spatrick u64 cr_rights[2]; 7053cab2bb3Spatrick }; 7063cab2bb3Spatrick 7073cab2bb3Spatrick typedef struct __sanitizer_cap_rights __sanitizer_cap_rights_t; 7083cab2bb3Spatrick extern unsigned struct_cap_rights_sz; 7093cab2bb3Spatrick 7103cab2bb3Spatrick extern unsigned struct_fstab_sz; 7113cab2bb3Spatrick extern unsigned struct_StringList_sz; 7123cab2bb3Spatrick } // namespace __sanitizer 7133cab2bb3Spatrick 7143cab2bb3Spatrick # define CHECK_TYPE_SIZE(TYPE) \ 7153cab2bb3Spatrick COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE)) 7163cab2bb3Spatrick 7173cab2bb3Spatrick # define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER) \ 7183cab2bb3Spatrick COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *)NULL)->MEMBER) == \ 7193cab2bb3Spatrick sizeof(((CLASS *)NULL)->MEMBER)); \ 7203cab2bb3Spatrick COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) == \ 7213cab2bb3Spatrick offsetof(CLASS, MEMBER)) 7223cab2bb3Spatrick 7233cab2bb3Spatrick // For sigaction, which is a function and struct at the same time, 7243cab2bb3Spatrick // and thus requires explicit "struct" in sizeof() expression. 7253cab2bb3Spatrick # define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER) \ 7263cab2bb3Spatrick COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *)NULL)->MEMBER) == \ 7273cab2bb3Spatrick sizeof(((struct CLASS *)NULL)->MEMBER)); \ 7283cab2bb3Spatrick COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) == \ 7293cab2bb3Spatrick offsetof(struct CLASS, MEMBER)) 7303cab2bb3Spatrick 7313cab2bb3Spatrick # define SIGACTION_SYMNAME sigaction 7323cab2bb3Spatrick 7333cab2bb3Spatrick #endif 7343cab2bb3Spatrick 7353cab2bb3Spatrick #endif // SANITIZER_FREEBSD 736