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