[compiler-rt] r273464 - [asan] Add a test case for global registration

Ryan Govostes via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 22 12:59:10 PDT 2016


Author: rgov
Date: Wed Jun 22 14:59:10 2016
New Revision: 273464

URL: http://llvm.org/viewvc/llvm-project?rev=273464&view=rev
Log:
[asan] Add a test case for global registration

This test case checks that globals from all object files are being registered
after they've been linked together. It also checks that globals from libraries
loaded at runtime are registered.


Added:
    compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c

Added: compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c?rev=273464&view=auto
==============================================================================
--- compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c (added)
+++ compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c Wed Jun 22 14:59:10 2016
@@ -0,0 +1,56 @@
+// Test that globals from different shared objects all get registered.
+
+// This source file is compiled into three different source object files. Each
+// object file declares a global buffer. The first two are linked together, and
+// the third is loaded at runtime. We make sure that out-of-bounds accesses
+// are caught for all three buffers.
+
+// RUN: %clang_asan -c -o %t-one.o -DDYNAMICLIB=\"%t-dynamic.so\" -DMAIN_FILE %s
+// RUN: %clang_asan -c -o %t-two.o -DSECONDARY_FILE %s
+// RUN: %clang_asan -o %t %t-one.o %t-two.o
+// RUN: %clang_asan -shared -o %t-dynamic.so -DSHARED_LIBRARY_FILE %s
+// RUN: not %run %t 1 2>&1 | FileCheck --check-prefix ASAN-CHECK-1 %s
+// RUN: not %run %t 2 2>&1 | FileCheck --check-prefix ASAN-CHECK-2 %s
+// RUN: not %run %t 3 2>&1 | FileCheck --check-prefix ASAN-CHECK-3 %s
+
+#if MAIN_FILE
+
+#include <dlfcn.h>
+#include <stdlib.h>
+
+extern char buffer2[1];
+char buffer1[1] = { };
+
+int main(int argc, char *argv[]) {
+  int n = atoi(argv[1]);
+  if (n == 1) {
+    buffer1[argc] = 0;
+    // ASAN-CHECK-1: {{0x.* is located 1 bytes .* 'buffer1'}}
+  } else if (n == 2) {
+    buffer2[argc] = 0;
+    // ASAN-CHECK-2: {{0x.* is located 1 bytes .* 'buffer2'}}
+  } else if (n == 3) {
+    void *handle = dlopen(DYNAMICLIB, RTLD_NOW);
+    if (!handle)
+      return 1;
+    
+    char *buffer = (char *)dlsym(handle, "buffer3");
+    if (!buffer)
+      return 1;
+    
+    buffer[argc] = 0;
+    // ASAN-CHECK-3: {{0x.* is located 1 bytes .* 'buffer3'}}
+  }
+  
+  return 0;
+}
+
+#elif SECONDARY_FILE
+
+char buffer2[1] = { };
+
+#elif SHARED_LIBRARY_FILE
+
+char buffer3[1] = { };
+
+#endif




More information about the llvm-commits mailing list