1 //===-- sanitizer_platform_limits_posix.cc --------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is a part of Sanitizer common code.
12 // Sizes and layouts of platform-specific POSIX data structures.
13 //===----------------------------------------------------------------------===//
16 #include "sanitizer_platform.h"
17 #if SANITIZER_LINUX || SANITIZER_MAC
19 #include "sanitizer_internal_defs.h"
20 #include "sanitizer_platform_limits_posix.h"
26 #include <sys/utsname.h>
27 #include <sys/types.h>
30 #include <sys/resource.h>
31 #include <sys/socket.h>
36 #include <sys/epoll.h>
37 #endif // SANITIZER_LINUX
39 namespace __sanitizer
{
40 unsigned struct_utsname_sz
= sizeof(struct utsname
);
41 unsigned struct_stat_sz
= sizeof(struct stat
);
42 unsigned struct_stat64_sz
= sizeof(struct stat64
);
43 unsigned struct_rusage_sz
= sizeof(struct rusage
);
44 unsigned struct_tm_sz
= sizeof(struct tm
);
45 unsigned struct_passwd_sz
= sizeof(struct passwd
);
46 unsigned struct_sigaction_sz
= sizeof(struct sigaction
);
47 unsigned struct_itimerval_sz
= sizeof(struct itimerval
);
48 unsigned pthread_t_sz
= sizeof(pthread_t
);
51 unsigned struct_rlimit_sz
= sizeof(struct rlimit
);
52 unsigned struct_dirent_sz
= sizeof(struct dirent
);
53 unsigned struct_statfs_sz
= sizeof(struct statfs
);
54 unsigned struct_epoll_event_sz
= sizeof(struct epoll_event
);
55 unsigned struct_timespec_sz
= sizeof(struct timespec
);
56 #endif // SANITIZER_LINUX
58 #if SANITIZER_LINUX && !SANITIZER_ANDROID
59 unsigned struct_dirent64_sz
= sizeof(struct dirent64
);
60 unsigned struct_rlimit64_sz
= sizeof(struct rlimit64
);
61 unsigned struct_statfs64_sz
= sizeof(struct statfs64
);
62 #endif // SANITIZER_LINUX && !SANITIZER_ANDROID
64 void* __sanitizer_get_msghdr_iov_iov_base(void* msg
, int idx
) {
65 return ((struct msghdr
*)msg
)->msg_iov
[idx
].iov_base
;
68 uptr
__sanitizer_get_msghdr_iov_iov_len(void* msg
, int idx
) {
69 return ((struct msghdr
*)msg
)->msg_iov
[idx
].iov_len
;
72 uptr
__sanitizer_get_msghdr_iovlen(void* msg
) {
73 return ((struct msghdr
*)msg
)->msg_iovlen
;
76 uptr
__sanitizer_get_socklen_t(void* socklen_ptr
) {
77 return *(socklen_t
*)socklen_ptr
;
79 } // namespace __sanitizer
81 COMPILER_CHECK(sizeof(__sanitizer_pthread_attr_t
) >= sizeof(pthread_attr_t
));
83 #endif // SANITIZER_LINUX || SANITIZER_MAC