[compiler-rt] 6148cca - [compiler-rt] Fix build of Sanitizer-Test_Nolibc after D80648

Alex Richardson via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 6 01:17:31 PDT 2020


Author: Alex Richardson
Date: 2020-08-06T09:16:52+01:00
New Revision: 6148cca70888ead020a808279043fd013ca72a2a

URL: https://github.com/llvm/llvm-project/commit/6148cca70888ead020a808279043fd013ca72a2a
DIFF: https://github.com/llvm/llvm-project/commit/6148cca70888ead020a808279043fd013ca72a2a.diff

LOG: [compiler-rt] Fix build of Sanitizer-Test_Nolibc after D80648

Running ninja check-sanitizer fails for after that patch (commit
058f5f6fd813d1ee1480497394d6fd44e65ec62b) with the following error:

libRTSanitizerCommon.test.nolibc.x86_64.a(sanitizer_posix.cpp.o): In
function `__sanitizer::GetNamedMappingFd(char const*, unsigned long,
int*)':
..../llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp:358:
undefined reference to `fcntl'
clang-12: error: linker command failed with exit code 1 (use -v to see
invocation)

This patch works around the problem by only calling fcntl if O_CLOEXEC
is not defined.

Reviewed By: plopresti

Differential Revision: https://reviews.llvm.org/D85114

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp
index e21661b42f8d..964d7e7ff66a 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp
@@ -354,11 +354,11 @@ int GetNamedMappingFd(const char *name, uptr size, int *flags) {
   int fd = ReserveStandardFds(
       internal_open(shmname, O_RDWR | O_CREAT | O_TRUNC | o_cloexec, S_IRWXU));
   CHECK_GE(fd, 0);
-  if (!o_cloexec) {
-    int res = fcntl(fd, F_SETFD, FD_CLOEXEC);
-    CHECK_EQ(0, res);
-  }
   int res = internal_ftruncate(fd, size);
+#if !defined(O_CLOEXEC)
+  res = fcntl(fd, F_SETFD, FD_CLOEXEC);
+  CHECK_EQ(0, res);
+#endif
   CHECK_EQ(0, res);
   res = internal_unlink(shmname);
   CHECK_EQ(0, res);


        


More information about the llvm-commits mailing list