diff options
Diffstat (limited to 'llvm/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll')
-rw-r--r-- | llvm/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll | 37 |
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 |