]> git.ipfire.org Git - thirdparty/gcc.git/blame - libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.h
Libsanitizer merge from trunk r368656.
[thirdparty/gcc.git] / libsanitizer / sanitizer_common / sanitizer_platform_limits_openbsd.h
CommitLineData
eac97531
ML
1//===-- sanitizer_platform_limits_openbsd.h -------------------------------===//
2//
b667dd70
ML
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
eac97531
ML
6//
7//===----------------------------------------------------------------------===//
8//
9// This file is a part of Sanitizer common code.
10//
11// Sizes and layouts of platform-specific OpenBSD data structures.
12//===----------------------------------------------------------------------===//
13
14#ifndef SANITIZER_PLATFORM_LIMITS_OPENBSD_H
15#define SANITIZER_PLATFORM_LIMITS_OPENBSD_H
16
17#if SANITIZER_OPENBSD
18
19#include "sanitizer_internal_defs.h"
20#include "sanitizer_platform.h"
21
22#define _GET_LINK_MAP_BY_DLOPEN_HANDLE(handle, shift) \
23 ((link_map *)((handle) == nullptr ? nullptr : ((char *)(handle) + (shift))))
24
25#if defined(__x86_64__)
26#define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) \
27 _GET_LINK_MAP_BY_DLOPEN_HANDLE(handle, 312)
28#elif defined(__i386__)
29#define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) \
30 _GET_LINK_MAP_BY_DLOPEN_HANDLE(handle, 164)
31#endif
32
33#define RLIMIT_AS RLIMIT_DATA
34
35namespace __sanitizer {
36extern unsigned struct_utsname_sz;
37extern unsigned struct_stat_sz;
38extern unsigned struct_rusage_sz;
39extern unsigned siginfo_t_sz;
40extern unsigned struct_itimerval_sz;
41extern unsigned pthread_t_sz;
42extern unsigned pthread_mutex_t_sz;
43extern unsigned pthread_cond_t_sz;
44extern unsigned pid_t_sz;
45extern unsigned timeval_sz;
46extern unsigned uid_t_sz;
47extern unsigned gid_t_sz;
48extern unsigned mbstate_t_sz;
49extern unsigned struct_timezone_sz;
50extern unsigned struct_tms_sz;
51extern unsigned struct_itimerspec_sz;
52extern unsigned struct_sigevent_sz;
53extern unsigned struct_statfs_sz;
54extern unsigned struct_sockaddr_sz;
55
56extern unsigned struct_rlimit_sz;
57extern unsigned struct_utimbuf_sz;
58extern unsigned struct_timespec_sz;
59
60struct __sanitizer_iocb {
61 u64 aio_offset;
62 uptr aio_buf;
63 long aio_nbytes;
64 u32 aio_fildes;
65 u32 aio_lio_opcode;
66 long aio_reqprio;
67#if SANITIZER_WORDSIZE == 64
68 u8 aio_sigevent[32];
69#else
70 u8 aio_sigevent[20];
71#endif
72 u32 _state;
73 u32 _errno;
74 long _retval;
75};
76
77struct __sanitizer___sysctl_args {
78 int *name;
79 int nlen;
80 void *oldval;
81 uptr *oldlenp;
82 void *newval;
83 uptr newlen;
84};
85
86struct __sanitizer_sem_t {
87 uptr data[5];
88};
89
90struct __sanitizer_ipc_perm {
91 u32 cuid;
92 u32 cgid;
93 u32 uid;
94 u32 gid;
95 u32 mode;
96 unsigned short seq;
97 long key;
98};
99
100struct __sanitizer_shmid_ds {
101 __sanitizer_ipc_perm shm_perm;
102 int shm_segsz;
103 u32 shm_lpid;
104 u32 shm_cpid;
105 short shm_nattch;
106 u64 shm_atime;
107 long __shm_atimensec;
108 u64 shm_dtime;
109 long __shm_dtimensec;
110 u64 shm_ctime;
111 long __shm_ctimensec;
112 void *_shm_internal;
113};
114
115extern unsigned struct_msqid_ds_sz;
116extern unsigned struct_mq_attr_sz;
117extern unsigned struct_timex_sz;
118extern unsigned struct_statvfs_sz;
119
120struct __sanitizer_iovec {
121 void *iov_base;
122 uptr iov_len;
123};
124
125struct __sanitizer_ifaddrs {
126 struct __sanitizer_ifaddrs *ifa_next;
127 char *ifa_name;
128 unsigned int ifa_flags;
129 struct __sanitizer_sockaddr *ifa_addr; // (struct sockaddr *)
130 struct __sanitizer_sockaddr *ifa_netmask; // (struct sockaddr *)
131 struct __sanitizer_sockaddr *ifa_dstaddr; // (struct sockaddr *)
132 void *ifa_data;
133};
134
135typedef unsigned __sanitizer_pthread_key_t;
136
137typedef long long __sanitizer_time_t;
138typedef int __sanitizer_suseconds_t;
139
140struct __sanitizer_timeval {
141 __sanitizer_time_t tv_sec;
142 __sanitizer_suseconds_t tv_usec;
143};
144
145struct __sanitizer_itimerval {
146 struct __sanitizer_timeval it_interval;
147 struct __sanitizer_timeval it_value;
148};
149
150struct __sanitizer_passwd {
151 char *pw_name;
152 char *pw_passwd;
153 int pw_uid;
154 int pw_gid;
155 __sanitizer_time_t pw_change;
156 char *pw_class;
157 char *pw_gecos;
158 char *pw_dir;
159 char *pw_shell;
160 __sanitizer_time_t pw_expire;
161};
162
163struct __sanitizer_group {
164 char *gr_name;
165 char *gr_passwd;
166 int gr_gid;
167 char **gr_mem;
168};
169
170struct __sanitizer_ether_addr {
171 u8 octet[6];
172};
173
174struct __sanitizer_tm {
175 int tm_sec;
176 int tm_min;
177 int tm_hour;
178 int tm_mday;
179 int tm_mon;
180 int tm_year;
181 int tm_wday;
182 int tm_yday;
183 int tm_isdst;
184 long int tm_gmtoff;
185 const char *tm_zone;
186};
187
188struct __sanitizer_msghdr {
189 void *msg_name;
190 unsigned msg_namelen;
191 struct __sanitizer_iovec *msg_iov;
192 unsigned msg_iovlen;
193 void *msg_control;
194 unsigned msg_controllen;
195 int msg_flags;
196};
197struct __sanitizer_cmsghdr {
198 unsigned cmsg_len;
199 int cmsg_level;
200 int cmsg_type;
201};
202
203struct __sanitizer_dirent {
204 u64 d_fileno;
205 u64 d_off;
206 u16 d_reclen;
207};
208
209typedef u64 __sanitizer_clock_t;
210typedef u32 __sanitizer_clockid_t;
211
212typedef u32 __sanitizer___kernel_uid_t;
213typedef u32 __sanitizer___kernel_gid_t;
214typedef u64 __sanitizer___kernel_off_t;
215typedef struct {
216 u32 fds_bits[8];
217} __sanitizer___kernel_fd_set;
218
219typedef struct {
220 unsigned int pta_magic;
221 int pta_flags;
222 void *pta_private;
223} __sanitizer_pthread_attr_t;
224
225typedef unsigned int __sanitizer_sigset_t;
226
227struct __sanitizer_siginfo {
228 // The size is determined by looking at sizeof of real siginfo_t on linux.
229 u64 opaque[128 / sizeof(u64)];
230};
231
232using __sanitizer_sighandler_ptr = void (*)(int sig);
233using __sanitizer_sigactionhandler_ptr = void (*)(int sig,
234 __sanitizer_siginfo *siginfo,
235 void *uctx);
236
237struct __sanitizer_sigaction {
238 union {
239 __sanitizer_sighandler_ptr handler;
240 __sanitizer_sigactionhandler_ptr sigaction;
241 };
242 __sanitizer_sigset_t sa_mask;
243 int sa_flags;
244};
245
246typedef __sanitizer_sigset_t __sanitizer_kernel_sigset_t;
247
248struct __sanitizer_kernel_sigaction_t {
249 union {
250 void (*handler)(int signo);
251 void (*sigaction)(int signo, void *info, void *ctx);
252 };
253 unsigned long sa_flags;
254 void (*sa_restorer)(void);
255 __sanitizer_kernel_sigset_t sa_mask;
256};
257
258extern const uptr sig_ign;
259extern const uptr sig_dfl;
260extern const uptr sig_err;
261extern const uptr sa_siginfo;
262
263extern int af_inet;
264extern int af_inet6;
265uptr __sanitizer_in_addr_sz(int af);
266
267struct __sanitizer_dl_phdr_info {
268#if SANITIZER_WORDSIZE == 64
269 u64 dlpi_addr;
270#else
271 u32 dlpi_addr;
272#endif
273 const char *dlpi_name;
274 const void *dlpi_phdr;
275#if SANITIZER_WORDSIZE == 64
276 u32 dlpi_phnum;
277#else
278 u16 dlpi_phnum;
279#endif
280};
281
282extern unsigned struct_ElfW_Phdr_sz;
283
284struct __sanitizer_addrinfo {
285 int ai_flags;
286 int ai_family;
287 int ai_socktype;
288 int ai_protocol;
289 unsigned ai_addrlen;
290 struct __sanitizer_sockaddr *ai_addr;
291 char *ai_canonname;
292 struct __sanitizer_addrinfo *ai_next;
293};
294
295struct __sanitizer_hostent {
296 char *h_name;
297 char **h_aliases;
298 int h_addrtype;
299 int h_length;
300 char **h_addr_list;
301};
302
303struct __sanitizer_pollfd {
304 int fd;
305 short events;
306 short revents;
307};
308
309typedef unsigned __sanitizer_nfds_t;
310
311struct __sanitizer_glob_t {
312 int gl_pathc;
313 int gl_matchc;
314 int gl_offs;
315 int gl_flags;
316 char **gl_pathv;
317 void **gl_statv;
318 int (*gl_errfunc)(const char *, int);
319 void (*gl_closedir)(void *dirp);
320 struct dirent *(*gl_readdir)(void *dirp);
321 void *(*gl_opendir)(const char *);
322 int (*gl_lstat)(const char *, void * /* struct stat* */);
323 int (*gl_stat)(const char *, void * /* struct stat* */);
324};
325
326extern int glob_nomatch;
327extern int glob_altdirfunc;
328
329extern unsigned path_max;
330
331typedef char __sanitizer_FILE;
332#define SANITIZER_HAS_STRUCT_FILE 0
333
334extern int shmctl_ipc_stat;
335
336// This simplifies generic code
337#define struct_shminfo_sz -1
338#define struct_shm_info_sz -1
339#define shmctl_shm_stat -1
340#define shmctl_ipc_info -1
341#define shmctl_shm_info -1
342
343extern unsigned struct_utmp_sz;
344extern unsigned struct_utmpx_sz;
345
346extern int map_fixed;
347
348// ioctl arguments
349struct __sanitizer_ifconf {
350 int ifc_len;
351 union {
352 void *ifcu_req;
353 } ifc_ifcu;
354};
355
356extern const int si_SEGV_MAPERR;
357extern const int si_SEGV_ACCERR;
358} // namespace __sanitizer
359
360#define CHECK_TYPE_SIZE(TYPE) \
361 COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))
362
363#define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER) \
364 COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *)NULL)->MEMBER) == \
365 sizeof(((CLASS *)NULL)->MEMBER)); \
366 COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) == \
367 offsetof(CLASS, MEMBER))
368
369// For sigaction, which is a function and struct at the same time,
370// and thus requires explicit "struct" in sizeof() expression.
371#define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER) \
372 COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *)NULL)->MEMBER) == \
373 sizeof(((struct CLASS *)NULL)->MEMBER)); \
374 COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) == \
375 offsetof(struct CLASS, MEMBER))
376
377#define SIGACTION_SYMNAME __sigaction14
378
379#endif // SANITIZER_OPENBSD
380
381#endif