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