sanitizer_platform_limits_posix.h revision 4f0fd8e131b6c2f13244a0fd808abe0da7a50983
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_platform.h" 19 20namespace __sanitizer { 21 extern unsigned struct_utsname_sz; 22 extern unsigned struct_stat_sz; 23 extern unsigned struct_stat64_sz; 24 extern unsigned struct_rusage_sz; 25 extern unsigned struct_tm_sz; 26 extern unsigned struct_passwd_sz; 27 extern unsigned struct_group_sz; 28 extern unsigned struct_sigaction_sz; 29 extern unsigned siginfo_t_sz; 30 extern unsigned struct_itimerval_sz; 31 extern unsigned pthread_t_sz; 32 extern unsigned pid_t_sz; 33 extern unsigned timeval_sz; 34 extern unsigned uid_t_sz; 35 36#if !SANITIZER_ANDROID 37 extern unsigned ucontext_t_sz; 38#endif // !SANITIZER_ANDROID 39 40#if SANITIZER_LINUX 41 extern unsigned struct_rlimit_sz; 42 extern unsigned struct_dirent_sz; 43 extern unsigned struct_statfs_sz; 44 extern unsigned struct_epoll_event_sz; 45 extern unsigned struct_timespec_sz; 46#endif // SANITIZER_LINUX 47 48#if SANITIZER_LINUX && !SANITIZER_ANDROID 49 extern unsigned struct_dirent64_sz; 50 extern unsigned struct_rlimit64_sz; 51 extern unsigned struct_statfs64_sz; 52#endif // SANITIZER_LINUX && !SANITIZER_ANDROID 53 54 struct __sanitizer_iovec { 55 void *iov_base; 56 uptr iov_len; 57 }; 58 59#if SANITIZER_ANDROID || SANITIZER_MAC 60 struct __sanitizer_msghdr { 61 void *msg_name; 62 unsigned msg_namelen; 63 struct __sanitizer_iovec *msg_iov; 64 unsigned msg_iovlen; 65 void *msg_control; 66 unsigned msg_controllen; 67 int msg_flags; 68 }; 69 struct __sanitizer_cmsghdr { 70 unsigned cmsg_len; 71 int cmsg_level; 72 int cmsg_type; 73 }; 74#else 75 struct __sanitizer_msghdr { 76 void *msg_name; 77 unsigned msg_namelen; 78 struct __sanitizer_iovec *msg_iov; 79 uptr msg_iovlen; 80 void *msg_control; 81 uptr msg_controllen; 82 int msg_flags; 83 }; 84 struct __sanitizer_cmsghdr { 85 uptr cmsg_len; 86 int cmsg_level; 87 int cmsg_type; 88 }; 89#endif 90 91 // This thing depends on the platform. We are only interested in the upper 92 // limit. Verified with a compiler assert in .cc. 93 const int pthread_attr_t_max_sz = 128; 94 union __sanitizer_pthread_attr_t { 95 char size[pthread_attr_t_max_sz]; // NOLINT 96 void *align; 97 }; 98 99 uptr __sanitizer_get_sigaction_sa_sigaction(void *act); 100 void __sanitizer_set_sigaction_sa_sigaction(void *act, uptr cb); 101 bool __sanitizer_get_sigaction_sa_siginfo(void *act); 102 103 const unsigned struct_sigaction_max_sz = 256; 104 union __sanitizer_sigaction { 105 char size[struct_sigaction_max_sz]; // NOLINT 106 }; 107 108 extern uptr sig_ign; 109 extern uptr sig_dfl; 110 111#if SANITIZER_LINUX 112 extern int e_tabsz; 113#endif 114 115 uptr __sanitizer_in_addr_sz(int af); 116 117#if SANITIZER_LINUX 118 struct __sanitizer_dl_phdr_info { 119 uptr dlpi_addr; 120 const char *dlpi_name; 121 const void *dlpi_phdr; 122 short dlpi_phnum; 123 }; 124#endif 125 126 struct __sanitizer_addrinfo { 127 int ai_flags; 128 int ai_family; 129 int ai_socktype; 130 int ai_protocol; 131#if SANITIZER_ANDROID || SANITIZER_MAC 132 unsigned ai_addrlen; 133 char *ai_canonname; 134 void *ai_addr; 135#else // LINUX 136 unsigned ai_addrlen; 137 void *ai_addr; 138 char *ai_canonname; 139#endif 140 struct __sanitizer_addrinfo *ai_next; 141 }; 142 143 struct __sanitizer_hostent { 144 char *h_name; 145 char **h_aliases; 146 int h_addrtype; 147 int h_length; 148 char **h_addr_list; 149 }; 150 151 // ioctl arguments 152 struct __sanitizer_ifconf { 153 int ifc_len; 154 union { 155 void *ifcu_req; 156 } ifc_ifcu; 157 }; 158 159 extern unsigned struct_arpreq_sz; 160 extern unsigned struct_ifreq_sz; 161 extern unsigned struct_termios_sz; 162 extern unsigned struct_winsize_sz; 163 164#if SANITIZER_LINUX 165 extern unsigned struct_cdrom_msf_sz; 166 extern unsigned struct_cdrom_multisession_sz; 167 extern unsigned struct_cdrom_read_audio_sz; 168 extern unsigned struct_cdrom_subchnl_sz; 169 extern unsigned struct_cdrom_ti_sz; 170 extern unsigned struct_cdrom_tocentry_sz; 171 extern unsigned struct_cdrom_tochdr_sz; 172 extern unsigned struct_cdrom_volctrl_sz; 173 extern unsigned struct_copr_buffer_sz; 174 extern unsigned struct_copr_debug_buf_sz; 175 extern unsigned struct_copr_msg_sz; 176 extern unsigned struct_floppy_drive_params_sz; 177 extern unsigned struct_floppy_drive_struct_sz; 178 extern unsigned struct_floppy_fdc_state_sz; 179 extern unsigned struct_floppy_max_errors_sz; 180 extern unsigned struct_floppy_raw_cmd_sz; 181 extern unsigned struct_floppy_struct_sz; 182 extern unsigned struct_floppy_write_errors_sz; 183 extern unsigned struct_format_descr_sz; 184 extern unsigned struct_hd_driveid_sz; 185 extern unsigned struct_hd_geometry_sz; 186 extern unsigned struct_midi_info_sz; 187 extern unsigned struct_mtget_sz; 188 extern unsigned struct_mtop_sz; 189 extern unsigned struct_mtpos_sz; 190 extern unsigned struct_rtentry_sz; 191 extern unsigned struct_sbi_instrument_sz; 192 extern unsigned struct_seq_event_rec_sz; 193 extern unsigned struct_synth_info_sz; 194 extern unsigned struct_termio_sz; 195 extern unsigned struct_vt_consize_sz; 196 extern unsigned struct_vt_mode_sz; 197 extern unsigned struct_vt_sizes_sz; 198 extern unsigned struct_vt_stat_sz; 199#endif 200 201#if SANITIZER_LINUX && !SANITIZER_ANDROID 202 extern unsigned struct_audio_buf_info_sz; 203 extern unsigned struct_ax25_parms_struct_sz; 204 extern unsigned struct_cyclades_monitor_sz; 205 extern unsigned struct_ipx_config_data_sz; 206 extern unsigned struct_kbdiacrs_sz; 207 extern unsigned struct_kbentry_sz; 208 extern unsigned struct_kbkeycode_sz; 209 extern unsigned struct_kbsentry_sz; 210 extern unsigned mpu_command_rec_sz; 211 extern unsigned struct_mtconfiginfo_sz; 212 extern unsigned struct_nr_parms_struct_sz; 213 extern unsigned struct_ppp_stats_sz; 214 extern unsigned struct_scc_modem_sz; 215 extern unsigned struct_scc_stat_sz; 216 extern unsigned struct_serial_multiport_struct_sz; 217 extern unsigned struct_serial_struct_sz; 218 extern unsigned struct_sockaddr_ax25_sz; 219 extern unsigned struct_unimapdesc_sz; 220 extern unsigned struct_unimapinit_sz; 221#endif 222 223#if !SANITIZER_ANDROID 224 extern unsigned struct_sioc_sg_req_sz; 225 extern unsigned struct_sioc_vif_req_sz; 226#endif 227} // namespace __sanitizer 228 229#endif 230 231