From 6148cca70888ead020a808279043fd013ca72a2a Mon Sep 17 00:00:00 2001 From: Alex Richardson Date: Thu, 6 Aug 2020 08:56:46 +0100 Subject: [PATCH] [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 --- compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp index e21661b..964d7e7 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); -- 2.7.4