summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-10-30 00:58:17 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-10-30 00:58:17 +0000
commit1bb2229028dd78280d24c26b9efbe8476d966e05 (patch)
tree763fcb55437bb3e68bc2cae2e4dc43cf490eb770
parent1d1cd7a9becac1b7a4e4e00853af44ad52c6465a (diff)
downloadcompiler-rt-1bb2229028dd78280d24c26b9efbe8476d966e05.tar.gz
compiler-rt-1bb2229028dd78280d24c26b9efbe8476d966e05.tar.bz2
compiler-rt-1bb2229028dd78280d24c26b9efbe8476d966e05.tar.xz
[asan] Fix syscall hooks build on Android.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@193670 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/sanitizer_common/sanitizer_common_syscalls.inc18
-rw-r--r--lib/sanitizer_common/sanitizer_platform_limits_linux.cc7
-rw-r--r--lib/sanitizer_common/sanitizer_platform_limits_posix.cc5
-rw-r--r--lib/sanitizer_common/sanitizer_platform_limits_posix.h2
4 files changed, 23 insertions, 9 deletions
diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc
index baa1d5be..00321555 100644
--- a/lib/sanitizer_common/sanitizer_common_syscalls.inc
+++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc
@@ -2063,6 +2063,13 @@ POST_SYSCALL(shmdt)(long res, void *shmaddr) {
}
}
+PRE_SYSCALL(ipc)(long call, long first, long second, long third, void *ptr,
+ long fifth) {}
+
+POST_SYSCALL(ipc)(long res, long call, long first, long second, long third,
+ void *ptr, long fifth) {}
+
+#if !SANITIZER_ANDROID
PRE_SYSCALL(shmctl)(long shmid, long cmd, void *buf) {}
POST_SYSCALL(shmctl)(long res, long shmid, long cmd, void *buf) {
@@ -2071,13 +2078,6 @@ POST_SYSCALL(shmctl)(long res, long shmid, long cmd, void *buf) {
}
}
-PRE_SYSCALL(ipc)(long call, long first, long second, long third, void *ptr,
- long fifth) {}
-
-POST_SYSCALL(ipc)(long res, long call, long first, long second, long third,
- void *ptr, long fifth) {}
-
-#if !SANITIZER_ANDROID
PRE_SYSCALL(mq_open)(const void *name, long oflag, long mode, void *attr) {
if (name)
PRE_READ(name, __sanitizer::internal_strlen((const char *)name) + 1);
@@ -2219,6 +2219,7 @@ PRE_SYSCALL(ni_syscall)() {}
POST_SYSCALL(ni_syscall)(long res) {}
PRE_SYSCALL(ptrace)(long request, long pid, long addr, long data) {
+#if defined(__i386) || defined (__x86_64)
if (data) {
if (request == ptrace_setregs) {
PRE_READ((void *)data, struct_user_regs_struct_sz);
@@ -2233,9 +2234,11 @@ PRE_SYSCALL(ptrace)(long request, long pid, long addr, long data) {
PRE_READ(iov->iov_base, iov->iov_len);
}
}
+#endif
}
POST_SYSCALL(ptrace)(long res, long request, long pid, long addr, long data) {
+#if defined(__i386) || defined (__x86_64)
if (res >= 0 && data) {
// Note that this is different from the interceptor in
// sanitizer_common_interceptors.inc.
@@ -2256,6 +2259,7 @@ POST_SYSCALL(ptrace)(long res, long request, long pid, long addr, long data) {
POST_WRITE((void *)data, sizeof(void *));
}
}
+#endif
}
PRE_SYSCALL(add_key)(const void *_type, const void *_description,
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_linux.cc b/lib/sanitizer_common/sanitizer_platform_limits_linux.cc
index a957cbe3..9d4eb349 100644
--- a/lib/sanitizer_common/sanitizer_platform_limits_linux.cc
+++ b/lib/sanitizer_common/sanitizer_platform_limits_linux.cc
@@ -23,6 +23,12 @@
#include <asm/stat.h>
#include <linux/aio_abi.h>
+#if SANITIZER_ANDROID
+#include <asm/statfs.h>
+#else
+#include <sys/statfs.h>
+#endif
+
#if !SANITIZER_ANDROID
#include <linux/perf_event.h>
#endif
@@ -32,6 +38,7 @@ namespace __sanitizer {
unsigned struct_kernel_stat_sz = sizeof(struct stat);
unsigned struct_io_event_sz = sizeof(struct io_event);
unsigned struct_iocb_sz = sizeof(struct iocb);
+ unsigned struct_statfs64_sz = sizeof(struct statfs64);
#ifndef _LP64
unsigned struct_kernel_stat64_sz = sizeof(struct stat64);
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
index 8276a969..133ddcf2 100644
--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
@@ -143,9 +143,12 @@ namespace __sanitizer {
unsigned struct_sched_param_sz = sizeof(struct sched_param);
unsigned struct_statfs_sz = sizeof(struct statfs);
+#if SANITIZER_MAC
+ unsigned struct_statfs64_sz = sizeof(struct statfs64);
+#endif
+
#if !SANITIZER_ANDROID
unsigned ucontext_t_sz = sizeof(ucontext_t);
- unsigned struct_statfs64_sz = sizeof(struct statfs64);
#endif // !SANITIZER_ANDROID
#if SANITIZER_LINUX
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/lib/sanitizer_common/sanitizer_platform_limits_posix.h
index 6f27ba44..864162d2 100644
--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.h
+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.h
@@ -39,10 +39,10 @@ namespace __sanitizer {
extern unsigned struct_sigevent_sz;
extern unsigned struct_sched_param_sz;
extern unsigned struct_statfs_sz;
+ extern unsigned struct_statfs64_sz;
#if !SANITIZER_ANDROID
extern unsigned ucontext_t_sz;
- extern unsigned struct_statfs64_sz;
#endif // !SANITIZER_ANDROID
#if SANITIZER_LINUX