sanitizer_platform_limits_posix.h revision 46f9395baf65e17f1a3f7a3a1deee72a1560ac53
19358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov//===-- sanitizer_platform_limits_posix.h ---------------------------------===//
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//
129358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov// Sizes and layouts of platform-specific POSIX data structures.
1378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//===----------------------------------------------------------------------===//
1478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
159358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H
169358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#define SANITIZER_PLATFORM_LIMITS_POSIX_H
1778c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
1824e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#include "sanitizer_platform.h"
1924e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov
209358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanovnamespace __sanitizer {
2178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_utsname_sz;
2278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_stat_sz;
2378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_stat64_sz;
249358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  extern unsigned struct_rusage_sz;
259358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  extern unsigned struct_tm_sz;
26e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned struct_passwd_sz;
27e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned struct_sigaction_sz;
28e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned struct_itimerval_sz;
29e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned pthread_t_sz;
309358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov
3124e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX
3278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_rlimit_sz;
3378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_dirent_sz;
3478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_statfs_sz;
3578c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_epoll_event_sz;
36e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned struct_timespec_sz;
3746f9395baf65e17f1a3f7a3a1deee72a1560ac53Alexey Samsonov#endif // SANITIZER_LINUX
3878c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
3924e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
40e4cded90e63cfe6c59d438dec63b6665f774ac16Evgeniy Stepanov  extern unsigned struct_dirent64_sz;
41b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov  extern unsigned struct_rlimit64_sz;
42b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov  extern unsigned struct_statfs64_sz;
4346f9395baf65e17f1a3f7a3a1deee72a1560ac53Alexey Samsonov#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
44b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov
459358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  void* __sanitizer_get_msghdr_iov_iov_base(void* msg, int idx);
469358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  uptr __sanitizer_get_msghdr_iov_iov_len(void* msg, int idx);
479358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  uptr __sanitizer_get_msghdr_iovlen(void* msg);
489358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  uptr __sanitizer_get_socklen_t(void* socklen_ptr);
4910fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov
5010fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  // This thing depends on the platform. We are only interested in the upper
5110fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  // limit. Verified with a compiler assert in .cc.
5210fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  const int pthread_attr_t_max_sz = 128;
5310fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  union __sanitizer_pthread_attr_t {
540ecc4379bbb04f1d03ceb58f6a0751790fb17c75Evgeniy Stepanov    char size[pthread_attr_t_max_sz]; // NOLINT
5510fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov    void *align;
5610fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  };
579358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov}  // namespace __sanitizer
5878c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
5978c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#endif
60