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_posix.h"
21 // Make it hard to accidentally use any of functions declared in this file:
22 #error This file should only be included on POSIX
25 namespace __sanitizer
{
28 // Don't use directly, use __sanitizer::OpenFile() instead.
29 uptr
internal_open(const char *filename
, int flags
);
30 uptr
internal_open(const char *filename
, int flags
, u32 mode
);
31 uptr
internal_close(fd_t fd
);
33 uptr
internal_read(fd_t fd
, void *buf
, uptr count
);
34 uptr
internal_write(fd_t fd
, const void *buf
, uptr count
);
37 uptr
internal_mmap(void *addr
, uptr length
, int prot
, int flags
,
38 int fd
, OFF_T offset
);
39 uptr
internal_munmap(void *addr
, uptr length
);
40 int internal_mprotect(void *addr
, uptr length
, int prot
);
43 uptr
internal_filesize(fd_t fd
); // -1 on error.
44 uptr
internal_stat(const char *path
, void *buf
);
45 uptr
internal_lstat(const char *path
, void *buf
);
46 uptr
internal_fstat(fd_t fd
, void *buf
);
47 uptr
internal_dup2(int oldfd
, int newfd
);
48 uptr
internal_readlink(const char *path
, char *buf
, uptr bufsize
);
49 uptr
internal_unlink(const char *path
);
50 uptr
internal_rename(const char *oldpath
, const char *newpath
);
51 uptr
internal_lseek(fd_t fd
, OFF_T offset
, int whence
);
53 uptr
internal_ptrace(int request
, int pid
, void *addr
, void *data
);
54 uptr
internal_waitpid(int pid
, int *status
, int options
);
57 int internal_forkpty(int *amaster
);
59 // These functions call appropriate pthread_ functions directly, bypassing
60 // the interceptor. They are weak and may not be present in some tools.
61 SANITIZER_WEAK_ATTRIBUTE
62 int real_pthread_create(void *th
, void *attr
, void *(*callback
)(void *),
64 SANITIZER_WEAK_ATTRIBUTE
65 int real_pthread_join(void *th
, void **ret
);
67 #define DEFINE_REAL_PTHREAD_FUNCTIONS \
68 namespace __sanitizer { \
69 int real_pthread_create(void *th, void *attr, void *(*callback)(void *), \
71 return REAL(pthread_create)(th, attr, callback, param); \
73 int real_pthread_join(void *th, void **ret) { \
74 return REAL(pthread_join(th, ret)); \
76 } // namespace __sanitizer
78 int my_pthread_attr_getstack(void *attr
, void **addr
, uptr
*size
);
80 // A routine named real_sigaction() must be implemented by each sanitizer in
81 // order for internal_sigaction() to bypass interceptors.
82 int internal_sigaction(int signum
, const void *act
, void *oldact
);
83 void internal_sigfillset(__sanitizer_sigset_t
*set
);
84 void internal_sigemptyset(__sanitizer_sigset_t
*set
);
85 bool internal_sigismember(__sanitizer_sigset_t
*set
, int signum
);
87 uptr
internal_execve(const char *filename
, char *const argv
[],
90 bool IsStateDetached(int state
);
92 } // namespace __sanitizer
94 #endif // SANITIZER_POSIX_H