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