forked from OSchip/llvm-project
[compiler-rt] Fix build of Sanitizer-Test_Nolibc after D80648
Running ninja check-sanitizer fails for after that patch (commit
058f5f6fd8
) 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
This commit is contained in:
parent
3b3cdcc7a5
commit
6148cca708
|
@ -354,11 +354,11 @@ int GetNamedMappingFd(const char *name, uptr size, int *flags) {
|
||||||
int fd = ReserveStandardFds(
|
int fd = ReserveStandardFds(
|
||||||
internal_open(shmname, O_RDWR | O_CREAT | O_TRUNC | o_cloexec, S_IRWXU));
|
internal_open(shmname, O_RDWR | O_CREAT | O_TRUNC | o_cloexec, S_IRWXU));
|
||||||
CHECK_GE(fd, 0);
|
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);
|
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);
|
CHECK_EQ(0, res);
|
||||||
res = internal_unlink(shmname);
|
res = internal_unlink(shmname);
|
||||||
CHECK_EQ(0, res);
|
CHECK_EQ(0, res);
|
||||||
|
|
Loading…
Reference in New Issue