mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
af44b5b1af
Use a combination of !associated, comdat, @llvm.compiler.used and custom sections to allow dead stripping of globals and their asan metadata. Sometimes. Currently this works on LLD, which supports SHF_LINK_ORDER with sh_link pointing to the associated section. This also works on BFD, which seems to treat comdats as all-or-nothing with respect to linker GC. There is a weird quirk where the "first" global in each link is never GC-ed because of the section symbols. At this moment it does not work on Gold (as in the globals are never stripped). This is a second re-land of r298158. This time, this feature is limited to -fdata-sections builds. llvm-svn: 301587
13 lines
621 B
LLVM
13 lines
621 B
LLVM
; A module with no asan-instrumented globals has no asan destructor, and has an asan constructor in a comdat.
|
|
; RUN: opt -mtriple=x86_64-unknown-linux-gnu < %s -asan -asan-module -asan-with-comdat=1 -asan-globals-live-support=1 -S | FileCheck %s
|
|
|
|
define void @f() {
|
|
ret void
|
|
}
|
|
|
|
; CHECK-NOT: @llvm.global_dtors
|
|
; CHECK: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* @asan.module_ctor, i8* bitcast (void ()* @asan.module_ctor to i8*) }]
|
|
; CHECK-NOT: @llvm.global_dtors
|
|
; CHECK: define internal void @asan.module_ctor() comdat
|
|
; CHECK-NOT: @llvm.global_dtors
|