summaryrefslogtreecommitdiff
path: root/test/esan/TestCases/workingset-early-fault.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/esan/TestCases/workingset-early-fault.c')
-rw-r--r--test/esan/TestCases/workingset-early-fault.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/test/esan/TestCases/workingset-early-fault.c b/test/esan/TestCases/workingset-early-fault.c
new file mode 100644
index 000000000..1c420c368
--- /dev/null
+++ b/test/esan/TestCases/workingset-early-fault.c
@@ -0,0 +1,33 @@
+// Test shadow faults during esan initialization as well as
+// faults during dlsym's calloc during interceptor init.
+//
+// RUN: %clang_esan_wset %s -o %t
+// RUN: %run %t 2>&1 | FileCheck %s
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+// Our goal is to emulate an instrumented allocator, whose calloc
+// invoked from dlsym will trigger shadow faults, to test an
+// early shadow fault during esan interceptor init.
+// We do this by replacing calloc:
+void *calloc(size_t size, size_t n) {
+ // Unfortunately we can't print anything to make the test
+ // ensure we got here b/c the sanitizer interceptors can't
+ // handle that during interceptor init.
+
+ // Ensure we trigger a shadow write fault:
+ int x[16];
+ x[0] = size;
+ // Now just emulate calloc.
+ void *res = malloc(size*n);
+ memset(res, 0, size*n);
+ return res;
+}
+
+int main(int argc, char **argv) {
+ printf("all done\n");
+ return 0;
+}
+// CHECK: all done