1 //===-- sanitizer_posix.h -------------------------------------------------===//
3 // This file is distributed under the University of Illinois Open Source
4 // License. See LICENSE.TXT for details.
6 //===----------------------------------------------------------------------===//
8 // This file is shared between AddressSanitizer and ThreadSanitizer
9 // run-time libraries and declares some useful POSIX-specific functions.
10 //===----------------------------------------------------------------------===//
11 #ifndef SANITIZER_POSIX_H
12 #define SANITIZER_POSIX_H
14 // ----------- ATTENTION -------------
15 // This header should NOT include any other headers from sanitizer runtime.
16 #include "sanitizer_internal_defs.h"
17 #include "sanitizer_platform_limits_netbsd.h"
18 #include "sanitizer_platform_limits_openbsd.h"
19 #include "sanitizer_platform_limits_posix.h"
20 #include "sanitizer_platform_limits_solaris.h"
23 // Make it hard to accidentally use any of functions declared in this file:
24 #error This file should only be included on POSIX
27 namespace __sanitizer
{
30 // Don't use directly, use __sanitizer::OpenFile() instead.
31 uptr
internal_open(const char *filename
, int flags
);
32 uptr
internal_open(const char *filename
, int flags
, u32 mode
);
33 uptr
internal_close(fd_t fd
);
35 uptr
internal_read(fd_t fd
, void *buf
, uptr count
);
36 uptr
internal_write(fd_t fd
, const void *buf
, uptr count
);
39 uptr
internal_mmap(void *addr
, uptr length
, int prot
, int flags
,
40 int fd
, OFF_T offset
);
41 uptr
internal_munmap(void *addr
, uptr length
);
42 int internal_mprotect(void *addr
, uptr length
, int prot
);
45 uptr
internal_filesize(fd_t fd
); // -1 on error.
46 uptr
internal_stat(const char *path
, void *buf
);
47 uptr
internal_lstat(const char *path
, void *buf
);
48 uptr
internal_fstat(fd_t fd
, void *buf
);
49 uptr
internal_dup2(int oldfd
, int newfd
);
50 uptr
internal_readlink(const char *path
, char *buf
, uptr bufsize
);
51 uptr
internal_unlink(const char *path
);
52 uptr
internal_rename(const char *oldpath
, const char *newpath
);
53 uptr
internal_lseek(fd_t fd
, OFF_T offset
, int whence
);
55 uptr
internal_ptrace(int request
, int pid
, void *addr
, void *data
);
56 uptr
internal_waitpid(int pid
, int *status
, int options
);
59 int internal_forkpty(int *amaster
);
61 int internal_sysctl(const int *name
, unsigned int namelen
, void *oldp
,
62 uptr
*oldlenp
, const void *newp
, uptr newlen
);
63 int internal_sysctlbyname(const char *sname
, void *oldp
, uptr
*oldlenp
,
64 const void *newp
, uptr newlen
);
66 // These functions call appropriate pthread_ functions directly, bypassing
67 // the interceptor. They are weak and may not be present in some tools.
68 SANITIZER_WEAK_ATTRIBUTE
69 int real_pthread_create(void *th
, void *attr
, void *(*callback
)(void *),
71 SANITIZER_WEAK_ATTRIBUTE
72 int real_pthread_join(void *th
, void **ret
);
74 #define DEFINE_REAL_PTHREAD_FUNCTIONS \
75 namespace __sanitizer { \
76 int real_pthread_create(void *th, void *attr, void *(*callback)(void *), \
78 return REAL(pthread_create)(th, attr, callback, param); \
80 int real_pthread_join(void *th, void **ret) { \
81 return REAL(pthread_join(th, ret)); \
83 } // namespace __sanitizer
85 int my_pthread_attr_getstack(void *attr
, void **addr
, uptr
*size
);
87 // A routine named real_sigaction() must be implemented by each sanitizer in
88 // order for internal_sigaction() to bypass interceptors.
89 int internal_sigaction(int signum
, const void *act
, void *oldact
);
90 void internal_sigfillset(__sanitizer_sigset_t
*set
);
91 void internal_sigemptyset(__sanitizer_sigset_t
*set
);
92 bool internal_sigismember(__sanitizer_sigset_t
*set
, int signum
);
94 uptr
internal_execve(const char *filename
, char *const argv
[],
97 bool IsStateDetached(int state
);
99 } // namespace __sanitizer
101 #endif // SANITIZER_POSIX_H