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"
19 // Make it hard to accidentally use any of functions declared in this file:
20 #error This file should only be included on POSIX
23 namespace __sanitizer
{
26 // Don't use directly, use __sanitizer::OpenFile() instead.
27 uptr
internal_open(const char *filename
, int flags
);
28 uptr
internal_open(const char *filename
, int flags
, u32 mode
);
29 uptr
internal_close(fd_t fd
);
31 uptr
internal_read(fd_t fd
, void *buf
, uptr count
);
32 uptr
internal_write(fd_t fd
, const void *buf
, uptr count
);
35 uptr
internal_mmap(void *addr
, uptr length
, int prot
, int flags
,
36 int fd
, OFF_T offset
);
37 uptr
internal_munmap(void *addr
, uptr length
);
38 int internal_mprotect(void *addr
, uptr length
, int prot
);
41 uptr
internal_filesize(fd_t fd
); // -1 on error.
42 uptr
internal_stat(const char *path
, void *buf
);
43 uptr
internal_lstat(const char *path
, void *buf
);
44 uptr
internal_fstat(fd_t fd
, void *buf
);
45 uptr
internal_dup2(int oldfd
, int newfd
);
46 uptr
internal_readlink(const char *path
, char *buf
, uptr bufsize
);
47 uptr
internal_unlink(const char *path
);
48 uptr
internal_rename(const char *oldpath
, const char *newpath
);
49 uptr
internal_lseek(fd_t fd
, OFF_T offset
, int whence
);
51 uptr
internal_ptrace(int request
, int pid
, void *addr
, void *data
);
52 uptr
internal_waitpid(int pid
, int *status
, int options
);
56 // These functions call appropriate pthread_ functions directly, bypassing
57 // the interceptor. They are weak and may not be present in some tools.
58 SANITIZER_WEAK_ATTRIBUTE
59 int real_pthread_create(void *th
, void *attr
, void *(*callback
)(void *),
61 SANITIZER_WEAK_ATTRIBUTE
62 int real_pthread_join(void *th
, void **ret
);
64 #define DEFINE_REAL_PTHREAD_FUNCTIONS \
65 namespace __sanitizer { \
66 int real_pthread_create(void *th, void *attr, void *(*callback)(void *), \
68 return REAL(pthread_create)(th, attr, callback, param); \
70 int real_pthread_join(void *th, void **ret) { \
71 return REAL(pthread_join(th, ret)); \
73 } // namespace __sanitizer
75 int my_pthread_attr_getstack(void *attr
, void **addr
, uptr
*size
);
77 int internal_sigaction(int signum
, const void *act
, void *oldact
);
79 } // namespace __sanitizer
81 #endif // SANITIZER_POSIX_H