sanitizer_platform_limits_posix.cc revision e4bdda51b3469aa0f6ef6f6c4656419effa48038
19358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov//===-- sanitizer_platform_limits_posix.cc --------------------------------===//
278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//                     The LLVM Compiler Infrastructure
478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
578c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov// This file is distributed under the University of Illinois Open Source
678c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov// License. See LICENSE.TXT for details.
778c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
878c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//===----------------------------------------------------------------------===//
978c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
109358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov// This file is a part of Sanitizer common code.
1178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
1278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov// Sizes and layouts of platform-specific POSIX data structures.
1378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//===----------------------------------------------------------------------===//
1478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
1524e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov
1624e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#include "sanitizer_platform.h"
1724e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX || SANITIZER_MAC
1878c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
199358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#include "sanitizer_internal_defs.h"
209358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#include "sanitizer_platform_limits_posix.h"
2178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
229358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#include <dirent.h>
2310fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov#include <pthread.h>
24e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov#include <pwd.h>
25e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov#include <signal.h>
2678c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#include <sys/utsname.h>
2778c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#include <sys/types.h>
2878c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#include <sys/stat.h>
29e03345ba3da0450f7ff1410de6a2a00fd304089dEvgeniy Stepanov#include <sys/time.h>
3078c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#include <sys/resource.h>
319358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#include <sys/socket.h>
329358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#include <time.h>
339358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov
3424e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX
3578c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#include <sys/vfs.h>
3678c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#include <sys/epoll.h>
379358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#endif // __linux__
3878c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
399358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanovnamespace __sanitizer {
4078c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  unsigned struct_utsname_sz = sizeof(struct utsname);
4178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  unsigned struct_stat_sz = sizeof(struct stat);
4278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  unsigned struct_stat64_sz = sizeof(struct stat64);
439358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  unsigned struct_rusage_sz = sizeof(struct rusage);
449358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  unsigned struct_tm_sz = sizeof(struct tm);
45e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  unsigned struct_passwd_sz = sizeof(struct passwd);
46e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  unsigned struct_sigaction_sz = sizeof(struct sigaction);
47e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  unsigned struct_itimerval_sz = sizeof(struct itimerval);
48e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  unsigned pthread_t_sz = sizeof(pthread_t);
499358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov
5024e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX
5178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  unsigned struct_rlimit_sz = sizeof(struct rlimit);
5278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  unsigned struct_dirent_sz = sizeof(struct dirent);
5378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  unsigned struct_statfs_sz = sizeof(struct statfs);
5478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  unsigned struct_epoll_event_sz = sizeof(struct epoll_event);
55e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  unsigned struct_timespec_sz = sizeof(struct timespec);
569358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#endif // __linux__
5778c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
5824e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
59e4cded90e63cfe6c59d438dec63b6665f774ac16Evgeniy Stepanov  unsigned struct_dirent64_sz = sizeof(struct dirent64);
60b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov  unsigned struct_rlimit64_sz = sizeof(struct rlimit64);
61b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov  unsigned struct_statfs64_sz = sizeof(struct statfs64);
62b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov#endif // __linux__ && !__ANDROID__
63b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov
649358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  void* __sanitizer_get_msghdr_iov_iov_base(void* msg, int idx) {
6578c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov    return ((struct msghdr *)msg)->msg_iov[idx].iov_base;
6678c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  }
6778c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
689358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  uptr __sanitizer_get_msghdr_iov_iov_len(void* msg, int idx) {
6978c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov    return ((struct msghdr *)msg)->msg_iov[idx].iov_len;
7078c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  }
7178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
729358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  uptr __sanitizer_get_msghdr_iovlen(void* msg) {
7378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov    return ((struct msghdr *)msg)->msg_iovlen;
7478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  }
757b719dfce8178bdfbcd8a24893153ef82ab70be5Evgeniy Stepanov
769358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  uptr __sanitizer_get_socklen_t(void* socklen_ptr) {
777b719dfce8178bdfbcd8a24893153ef82ab70be5Evgeniy Stepanov    return *(socklen_t*)socklen_ptr;
787b719dfce8178bdfbcd8a24893153ef82ab70be5Evgeniy Stepanov  }
799358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov}  // namespace __sanitizer
8078c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
8110fd3227546d17c7411241a45ebc143b2031c78dEvgeniy StepanovCOMPILER_CHECK(sizeof(__sanitizer_pthread_attr_t) >= sizeof(pthread_attr_t));
8210fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov
839358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#endif  // __linux__ || __APPLE__
84