[compiler-rt] 085b04b - [asan] Pre-commit test with global constructor without any global (#104620)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 16 15:41:11 PDT 2024
Author: Vitaly Buka
Date: 2024-08-16T15:41:08-07:00
New Revision: 085b04b3a2e941a25cbf713cc3969c1254469289
URL: https://github.com/llvm/llvm-project/commit/085b04b3a2e941a25cbf713cc3969c1254469289
DIFF: https://github.com/llvm/llvm-project/commit/085b04b3a2e941a25cbf713cc3969c1254469289.diff
LOG: [asan] Pre-commit test with global constructor without any global (#104620)
In this test `@initializer()` can access globals
outside of the module, but Asan does nothing to
detect that.
Added:
compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp
llvm/test/Instrumentation/AddressSanitizer/instrument_initializer_without_global.ll
Modified:
Removed:
################################################################################
diff --git a/compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp b/compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp
new file mode 100644
index 00000000000000..50698b2a7d06fc
--- /dev/null
+++ b/compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp
@@ -0,0 +1,26 @@
+// RUN: %clangxx_asan %min_macos_deployment_target=10.11 -O0 %s %p/Helpers/initialization-bug-extra.cpp -o %t
+// RUN: %env_asan_opts=check_initialization_order=true:strict_init_order=true not %run %t 2>&1 | FileCheck %s
+
+// Not implemented.
+// XFAIL: *
+
+// Do not test with optimization -- the error may be optimized away.
+
+// FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=186
+// XFAIL: target={{.*windows-msvc.*}}
+
+#include <stdio.h>
+
+extern int y;
+
+void __attribute__((constructor)) ctor() {
+ printf("%d\n", y);
+ // CHECK: AddressSanitizer: initialization-order-fiasco
+}
+
+int main() {
+ // ASan should have caused an exit before main runs.
+ printf("PASS\n");
+ // CHECK-NOT: PASS
+ return 0;
+}
diff --git a/llvm/test/Instrumentation/AddressSanitizer/instrument_initializer_without_global.ll b/llvm/test/Instrumentation/AddressSanitizer/instrument_initializer_without_global.ll
new file mode 100644
index 00000000000000..c8a6541bacfdfa
--- /dev/null
+++ b/llvm/test/Instrumentation/AddressSanitizer/instrument_initializer_without_global.ll
@@ -0,0 +1,34 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --global-value-regex ".*global_ctors.*" --version 5
+; RUN: opt < %s -passes=asan -S | FileCheck %s
+; RUN: opt < %s -passes=asan -S -asan-initialization-order=0 | FileCheck %s --check-prefixes=NOINIT
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-unknown-linux-gnu"
+
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__late_ctor, ptr null }]
+
+declare void @initializer() uwtable;
+
+;.
+; CHECK: @llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__late_ctor, ptr null }, { i32, ptr, ptr } { i32 1, ptr @asan.module_ctor, ptr @asan.module_ctor }]
+;.
+; NOINIT: @llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__late_ctor, ptr null }, { i32, ptr, ptr } { i32 1, ptr @asan.module_ctor, ptr @asan.module_ctor }]
+;.
+define internal void @__late_ctor() sanitize_address section ".text.startup" {
+; CHECK-LABEL: define internal void @__late_ctor(
+; CHECK-SAME: ) #[[ATTR1:[0-9]+]] section ".text.startup" {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: call void @initializer()
+; CHECK-NEXT: ret void
+;
+; NOINIT-LABEL: define internal void @__late_ctor(
+; NOINIT-SAME: ) #[[ATTR1:[0-9]+]] section ".text.startup" {
+; NOINIT-NEXT: [[ENTRY:.*:]]
+; NOINIT-NEXT: call void @initializer()
+; NOINIT-NEXT: ret void
+;
+entry:
+
+ call void @initializer()
+ ret void
+}
More information about the llvm-commits
mailing list