libsanitizer: Restore internal_readlink for x32
authorH.J. Lu <hongjiu.lu@intel.com>
Wed, 20 Feb 2019 16:20:50 +0000 (16:20 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Wed, 20 Feb 2019 16:20:50 +0000 (08:20 -0800)
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
libsanitizer/sanitizer_common/sanitizer_linux.cc

index 28c645b5850787eeacac1838e8f96ec0d11243f7..c7cc662af15a45481fd9208c62d6a6975dcede75 100644 (file)
@@ -1,3 +1,9 @@
+2019-02-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR sanitizer/89409
+       * sanitizer_common/sanitizer_linux.cc (internal_readlink):
+       Cherry-pick compiler-rt r354451.
+
 2019-01-23  Jonny Grant  <jg@jguk.org>
 
        PR sanitizer/89010
index 244b5c3ff833a9b4059c645296cb403fde691dae..14e732fe110c328a64315a8f7b3b1e840c91fb17 100644 (file)
@@ -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
 }