summaryrefslogtreecommitdiffstats
path: root/llvm/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll')
-rw-r--r--llvm/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll37
1 files changed, 37 insertions, 0 deletions
diff --git a/llvm/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll b/llvm/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll
new file mode 100644
index 00000000000..2fcbe7851bf
--- /dev/null
+++ b/llvm/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll
@@ -0,0 +1,37 @@
+; Test that global metadata is placed in a separate section on Mach-O platforms,
+; allowing dead stripping to be performed, and that the appropriate runtime
+; routines are invoked.
+
+; RUN: opt < %s -asan -asan-module -S | FileCheck %s
+
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.11.0"
+
+@global = global [1 x i32] zeroinitializer, align 4
+
+!llvm.asan.globals = !{!0}
+
+!0 = !{[1 x i32]* @global, !1, !"global", i1 false, i1 false}
+!1 = !{!"test-globals.c", i32 1, i32 5}
+
+
+; Test that there is a Needle global variable:
+; CHECK: @__asan_needle = internal global i64 0
+
+; Find the metadata for @global:
+; CHECK: [[METADATA:@[0-9]+]] = internal global {{.*}} @global {{.*}} section "__DATA,__asan_globals,regular", align 1
+
+; Find the liveness binder for @global and its metadata:
+; CHECK: @{{[0-9]+}} = internal global {{.*}} @global {{.*}} [[METADATA]] {{.*}} section "__DATA,__asan_liveness,regular,live_support"
+
+; Test that __asan_apply_to_globals is invoked from the constructor:
+; CHECK-LABEL: define internal void @asan.module_ctor
+; CHECK-NOT: ret
+; CHECK: call void @__asan_apply_to_globals(i64 ptrtoint (void (i64, i64)* @__asan_register_globals to i64), i64 ptrtoint (i64* @__asan_needle to i64))
+; CHECK: ret
+
+; Test that __asan_apply_to_globals is invoked from the destructor:
+; CHECK-LABEL: define internal void @asan.module_dtor
+; CHECK-NOT: ret
+; CHECK: call void @__asan_apply_to_globals(i64 ptrtoint (void (i64, i64)* @__asan_unregister_globals to i64), i64 ptrtoint (i64* @__asan_needle to i64))
+; CHECK: ret
OpenPOWER on IntegriCloud