[compiler-rt] [llvm] [asan] Pre-commit test with global constructor without any global (PR #104620)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 16 11:35:08 PDT 2024


https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/104620

>From 284c6826d4dddd092ef8d13ef4a1efe1b4907b13 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Fri, 16 Aug 2024 10:28:05 -0700
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.4
---
 .../initialization-bug-no-global.cpp          | 26 ++++++++++++++
 .../instrument_initializer_without_global.ll  | 34 +++++++++++++++++++
 2 files changed, 60 insertions(+)
 create mode 100644 compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp
 create mode 100644 llvm/test/Instrumentation/AddressSanitizer/instrument_initializer_without_global.ll

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..8249abf804324a
--- /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 <cstdio>
+
+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
+}

>From 534a89c9c387b06931884b0d622cdb34e0a6d2c2 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Fri, 16 Aug 2024 11:34:58 -0700
Subject: [PATCH 2/2] rebase

Created using spr 1.3.4
---
 .../test/asan/TestCases/initialization-bug-no-global.cpp        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp b/compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp
index 8249abf804324a..adf3713b35f02b 100644
--- a/compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp
+++ b/compiler-rt/test/asan/TestCases/initialization-bug-no-global.cpp
@@ -2,7 +2,7 @@
 // RUN: %env_asan_opts=check_initialization_order=true:strict_init_order=true not %run %t 2>&1 | FileCheck %s
 
 // Not implemented.
-// XFAIL: * 
+// XFAIL: *
 
 // Do not test with optimization -- the error may be optimized away.
 



More information about the llvm-commits mailing list