summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohit K. Bhakkad <mohit.bhakkad@gmail.com>2016-05-23 08:30:41 +0000
committerMohit K. Bhakkad <mohit.bhakkad@gmail.com>2016-05-23 08:30:41 +0000
commite3b4ef3bf10251dc643ef8a55935111fb89dff7f (patch)
treeeb0a3b026d48e4b2beadc8f02640c4a1aa9f943a
parentc39d665e9f565b9f43f70c02d94f5787e9482dcb (diff)
downloadcompiler-rt-e3b4ef3bf10251dc643ef8a55935111fb89dff7f.tar.gz
Merging r263218:
------------------------------------------------------------------------ r263218 | mohit.bhakkad | 2016-03-11 16:21:03 +0530 (Fri, 11 Mar 2016) | 7 lines [Sanitizer][MIPS] internal lstat and fstat for mips64 Reviewers: dvyukov Subscribers: jaydeep, sagar, llvm-commits Differential Revision: http://reviews.llvm.org/D18078 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/branches/release_38@270407 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/sanitizer_common/sanitizer_linux.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc
index cba38c8c3..cd6a2899e 100644
--- a/lib/sanitizer_common/sanitizer_linux.cc
+++ b/lib/sanitizer_common/sanitizer_linux.cc
@@ -241,7 +241,15 @@ uptr internal_lstat(const char *path, void *buf) {
return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path,
(uptr)buf, AT_SYMLINK_NOFOLLOW);
#elif SANITIZER_LINUX_USES_64BIT_SYSCALLS
+# if SANITIZER_MIPS64
+ // For mips64, lstat syscall fills buffer in the format of kernel_stat
+ struct kernel_stat kbuf;
+ int res = internal_syscall(SYSCALL(lstat), path, &kbuf);
+ kernel_stat_to_stat(&kbuf, (struct stat *)buf);
+ return res;
+# else
return internal_syscall(SYSCALL(lstat), (uptr)path, (uptr)buf);
+# endif
#else
struct stat64 buf64;
int res = internal_syscall(SYSCALL(lstat64), path, &buf64);
@@ -252,7 +260,15 @@ uptr internal_lstat(const char *path, void *buf) {
uptr internal_fstat(fd_t fd, void *buf) {
#if SANITIZER_FREEBSD || SANITIZER_LINUX_USES_64BIT_SYSCALLS
+# if SANITIZER_MIPS64
+ // For mips64, fstat syscall fills buffer in the format of kernel_stat
+ struct kernel_stat kbuf;
+ int res = internal_syscall(SYSCALL(fstat), fd, &kbuf);
+ kernel_stat_to_stat(&kbuf, (struct stat *)buf);
+ return res;
+# else
return internal_syscall(SYSCALL(fstat), fd, (uptr)buf);
+# endif
#else
struct stat64 buf64;
int res = internal_syscall(SYSCALL(fstat64), fd, &buf64);