From 4dfc5b351f70e6c9a393a6a2a53eda22a5cf422b Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 20 Feb 2019 16:20:50 +0000 Subject: [PATCH] libsanitizer: Restore internal_readlink for x32 Cherry-pick compiler-rt revision 354451: r316591 has @@ -389,13 +383,11 @@ uptr internal_dup2(int oldfd, int newfd) { } uptr internal_readlink(const char *path, char *buf, uptr bufsize) { -#if SANITIZER_NETBSD - return internal_syscall_ptr(SYSCALL(readlink), path, buf, bufsize); -#elif SANITIZER_USES_CANONICAL_LINUX_SYSCALLS +#if SANITIZER_USES_CANONICAL_LINUX_SYSCALLS return internal_syscall(SYSCALL(readlinkat), AT_FDCWD, (uptr)path, (uptr)buf, bufsize); #else - return internal_syscall(SYSCALL(readlink), (uptr)path, (uptr)buf, bufsize); + return internal_syscall_ptr(SYSCALL(readlink), path, buf, bufsize); #endif } which dropped the (uptr) cast and broke x32. This patch puts back the (uptr) cast to restore x32 and fixes: https://bugs.llvm.org/show_bug.cgi?id=40783 Differential Revision: https://reviews.llvm.org/D58413 PR sanitizer/89409 * sanitizer_common/sanitizer_linux.cc (internal_readlink): Cherry-pick compiler-rt r354451. From-SVN: r269042 --- libsanitizer/ChangeLog | 6 ++++++ libsanitizer/sanitizer_common/sanitizer_linux.cc | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index 28c645b5850..c7cc662af15 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,9 @@ +2019-02-20 H.J. Lu + + PR sanitizer/89409 + * sanitizer_common/sanitizer_linux.cc (internal_readlink): + Cherry-pick compiler-rt r354451. + 2019-01-23 Jonny Grant PR sanitizer/89010 diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc index 244b5c3ff83..14e732fe110 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux.cc +++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc @@ -395,7 +395,7 @@ uptr internal_readlink(const char *path, char *buf, uptr bufsize) { return internal_syscall(SYSCALL(readlinkat), AT_FDCWD, (uptr)path, (uptr)buf, bufsize); #else - return internal_syscall(SYSCALL(readlink), path, buf, bufsize); + return internal_syscall(SYSCALL(readlink), (uptr)path, (uptr)buf, bufsize); #endif } -- 2.30.2