Files
clang-p2996/compiler-rt/test/asan/TestCases/Posix/no-fd.cpp
Nemanja Ivanovic f594328853 [PowerPC] Disable sanitizer test due to failures when using LLD
This test case fails due to different handling of weak items between
LLD and LD on PPC. The issue only occurs when the default linker is LLD
and the test case is run on a system where ASLR is enabled.
2020-03-16 12:26:51 -05:00

50 lines
1.2 KiB
C++

// RUN: %clangxx_asan -std=c++11 -O0 %s -o %t
// RUN: %run %t 2>&1 | FileCheck %s
// RUN: %env_asan_opts=debug=1,verbosity=2 %run %t 2>&1 | FileCheck %s
// Test ASan initialization
// This test closes the 0, 1, and 2 file descriptors before an exec() and relies
// on them remaining closed across an execve(). This is not the case on newer
// versions of Android. On PPC with ASLR turned on, this fails when linked with
// lld - see https://bugs.llvm.org/show_bug.cgi?id=45076.
// UNSUPPORTED: android, powerpc
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern "C" const char *__asan_default_options() {
return "test_only_emulate_no_memorymap=1";
}
void parent(int argc, char **argv) {
fprintf(stderr, "hello\n");
// CHECK: hello
close(0);
close(1);
dup2(2, 3);
close(2);
char *const newargv[] = {argv[0], (char *)"x", nullptr};
execv(argv[0], newargv);
perror("execve");
exit(1);
}
void child() {
assert(dup(3) == 0);
assert(dup(3) == 1);
assert(dup(3) == 2);
fprintf(stderr, "world\n");
// CHECK: world
}
int main(int argc, char **argv) {
if (argc == 1) {
parent(argc, argv);
} else {
child();
}
}