blob: c1f9da95163c47a166f81ab179a8c464f604bced [file] [log] [blame]
Evgeniy Stepanov9358c582013-02-19 09:19:16 +00001//===-- sanitizer_platform_limits_posix.h ---------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file is a part of Sanitizer common code.
11//
12// Sizes and layouts of platform-specific POSIX data structures.
13//===----------------------------------------------------------------------===//
14
15#ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H
16#define SANITIZER_PLATFORM_LIMITS_POSIX_H
17
Evgeniy Stepanov24e13722013-03-19 14:33:38 +000018#include "sanitizer_platform.h"
19
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000020namespace __sanitizer {
21 extern unsigned struct_utsname_sz;
22 extern unsigned struct_stat_sz;
23 extern unsigned struct_stat64_sz;
24 extern unsigned struct_rusage_sz;
25 extern unsigned struct_tm_sz;
Evgeniy Stepanove4bdda52013-04-01 14:47:21 +000026 extern unsigned struct_passwd_sz;
Evgeniy Stepanov103a63e2013-04-23 12:01:20 +000027 extern unsigned struct_group_sz;
Evgeniy Stepanove4bdda52013-04-01 14:47:21 +000028 extern unsigned struct_sigaction_sz;
Evgeniy Stepanov897a4ae2013-04-09 14:34:59 +000029 extern unsigned siginfo_t_sz;
Evgeniy Stepanove4bdda52013-04-01 14:47:21 +000030 extern unsigned struct_itimerval_sz;
31 extern unsigned pthread_t_sz;
Evgeniy Stepanov447ef192013-05-22 12:50:26 +000032 extern unsigned struct_sockaddr_sz;
Evgeniy Stepanov4fb04a82013-04-04 09:21:48 +000033
34#if !SANITIZER_ANDROID
Evgeniy Stepanov07277022013-04-04 09:03:56 +000035 extern unsigned ucontext_t_sz;
Evgeniy Stepanov4fb04a82013-04-04 09:21:48 +000036#endif // !SANITIZER_ANDROID
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000037
Evgeniy Stepanov24e13722013-03-19 14:33:38 +000038#if SANITIZER_LINUX
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000039 extern unsigned struct_rlimit_sz;
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000040 extern unsigned struct_dirent_sz;
41 extern unsigned struct_statfs_sz;
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000042 extern unsigned struct_epoll_event_sz;
Evgeniy Stepanove4bdda52013-04-01 14:47:21 +000043 extern unsigned struct_timespec_sz;
Alexey Samsonov46f93952013-04-03 07:24:35 +000044#endif // SANITIZER_LINUX
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000045
Evgeniy Stepanov24e13722013-03-19 14:33:38 +000046#if SANITIZER_LINUX && !SANITIZER_ANDROID
Evgeniy Stepanove4cded92013-03-14 13:24:03 +000047 extern unsigned struct_dirent64_sz;
Evgeniy Stepanovb711ca62013-02-19 11:06:41 +000048 extern unsigned struct_rlimit64_sz;
49 extern unsigned struct_statfs64_sz;
Alexey Samsonov46f93952013-04-03 07:24:35 +000050#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
Evgeniy Stepanovb711ca62013-02-19 11:06:41 +000051
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000052 void* __sanitizer_get_msghdr_iov_iov_base(void* msg, int idx);
53 uptr __sanitizer_get_msghdr_iov_iov_len(void* msg, int idx);
54 uptr __sanitizer_get_msghdr_iovlen(void* msg);
55 uptr __sanitizer_get_socklen_t(void* socklen_ptr);
Evgeniy Stepanov10fd3222013-03-13 09:01:40 +000056
57 // This thing depends on the platform. We are only interested in the upper
58 // limit. Verified with a compiler assert in .cc.
59 const int pthread_attr_t_max_sz = 128;
60 union __sanitizer_pthread_attr_t {
Evgeniy Stepanov0ecc4372013-03-13 10:20:35 +000061 char size[pthread_attr_t_max_sz]; // NOLINT
Evgeniy Stepanov10fd3222013-03-13 09:01:40 +000062 void *align;
63 };
Evgeniy Stepanov06658ea2013-04-04 08:22:52 +000064
65 uptr __sanitizer_get_sigaction_sa_sigaction(void *act);
66 void __sanitizer_set_sigaction_sa_sigaction(void *act, uptr cb);
67 bool __sanitizer_get_sigaction_sa_siginfo(void *act);
68
69 const unsigned struct_sigaction_max_sz = 256;
70 union __sanitizer_sigaction {
71 char size[struct_sigaction_max_sz]; // NOLINT
72 };
73
74 extern uptr sig_ign;
75 extern uptr sig_dfl;
Evgeniy Stepanov9530eb72013-04-23 14:05:15 +000076
77 uptr __sanitizer_in_addr_sz(int af);
Evgeniy Stepanov1aad6b52013-05-17 12:51:13 +000078
79#if SANITIZER_LINUX
80 struct __sanitizer_dl_phdr_info {
81 uptr dlpi_addr;
82 const char *dlpi_name;
83 const void *dlpi_phdr;
84 short dlpi_phnum;
85 };
86#endif
Evgeniy Stepanov447ef192013-05-22 12:50:26 +000087
88 struct __sanitizer_addrinfo {
89 int ai_flags;
90 int ai_family;
91 int ai_socktype;
92 int ai_protocol;
Evgeniy Stepanov761cabb2013-05-22 13:38:02 +000093#if SANITIZER_LINUX && !SANITIZER_ANDROID
Evgeniy Stepanov447ef192013-05-22 12:50:26 +000094 uptr ai_addrlen;
Evgeniy Stepanov761cabb2013-05-22 13:38:02 +000095#else
96 unsigned ai_addrlen;
Evgeniy Stepanove0f18f22013-05-22 13:07:23 +000097#endif
Evgeniy Stepanov447ef192013-05-22 12:50:26 +000098 void *ai_addr;
99 char *ai_canonname;
100 struct __sanitizer_addrinfo *ai_next;
101 };
Evgeniy Stepanov9358c582013-02-19 09:19:16 +0000102} // namespace __sanitizer
103
104#endif