summaryrefslogtreecommitdiff
path: root/libsanitizer/sanitizer_common
diff options
context:
space:
mode:
authorKonstantin Serebryany <konstantin.s.serebryany@gmail.com>2012-11-20 20:54:49 +0000
committerDavid S. Miller <davem@gcc.gnu.org>2012-11-20 12:54:49 -0800
commitb014e124e46edd418d02316ce4c65563d0568ad8 (patch)
tree2ab90885e8bb4f79a14bf5c0a8e796699c93c6ad /libsanitizer/sanitizer_common
parent26da79f5d102404edfbbdf4b8fe5ebcdc33c38f1 (diff)
downloadgcc-b014e124e46edd418d02316ce4c65563d0568ad8.tar.gz
Fix sanitizer build on sparc64.
* sanitizer_common/sanitizer_linux.cc (SANITIZER_LINUX_USES_64BIT_SYSCALLS): Define. (internal_mmap): Use it. (internal_filesize): Likewise. From-SVN: r193676
Diffstat (limited to 'libsanitizer/sanitizer_common')
-rw-r--r--libsanitizer/sanitizer_common/sanitizer_linux.cc13
1 files changed, 11 insertions, 2 deletions
diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
index e90a68ca1c4..f2a0d39ca99 100644
--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
+++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
@@ -29,12 +29,21 @@
#include <unistd.h>
#include <errno.h>
+// Are we using 32-bit or 64-bit syscalls?
+// x32 (which defines __x86_64__) has __WORDSIZE == 32
+// but it still needs to use 64-bit syscalls.
+#if defined(__x86_64__) || __WORDSIZE == 64
+# define SANITIZER_LINUX_USES_64BIT_SYSCALLS 1
+#else
+# define SANITIZER_LINUX_USES_64BIT_SYSCALLS 0
+#endif
+
namespace __sanitizer {
// --------------- sanitizer_libc.h
void *internal_mmap(void *addr, uptr length, int prot, int flags,
int fd, u64 offset) {
-#if defined __x86_64__
+#if SANITIZER_LINUX_USES_64BIT_SYSCALLS
return (void *)syscall(__NR_mmap, addr, length, prot, flags, fd, offset);
#else
return (void *)syscall(__NR_mmap2, addr, length, prot, flags, fd, offset);
@@ -67,7 +76,7 @@ uptr internal_write(fd_t fd, const void *buf, uptr count) {
}
uptr internal_filesize(fd_t fd) {
-#if defined __x86_64__
+#if SANITIZER_LINUX_USES_64BIT_SYSCALLS
struct stat st;
if (syscall(__NR_fstat, fd, &st))
return -1;