[PATCH] D97432: [SanitizerCoverage] Don't use llvm.used if comdat

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 24 18:02:19 PST 2021


MaskRay created this revision.
MaskRay added reviewers: morehouse, rnk, vitalybuka.
Herald added a subscriber: hiraditya.
MaskRay requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

When a comdat is used, the linker does GC properly to ensure
the associated elements in the parallel arrays are retained or discarded
together (see rL311955 <https://reviews.llvm.org/rL311955>/rL311959 <https://reviews.llvm.org/rL311959>).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D97432

Files:
  llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
  llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll
  llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll


Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll
===================================================================
--- llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll
@@ -3,6 +3,7 @@
 
 ; CHECK:      @__sancov_gen_ = private global [1 x i1] zeroinitializer, section "__DATA,__sancov_bools", align 1, !associated !0
 ; CHECK-NEXT: @__sancov_gen_.1 = private global [1 x i1] zeroinitializer, section "__DATA,__sancov_bools", align 1, !associated !1
+; CHECK:      @llvm.used = appending global [2 x i8*] [i8* bitcast ([1 x i1]* @__sancov_gen_ to i8*), i8* bitcast ([1 x i1]* @__sancov_gen_.1 to i8*)]
 
 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-apple-darwin10.0.0"
Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll
===================================================================
--- llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll
@@ -3,6 +3,7 @@
 
 ; CHECK:      @__sancov_gen_ = private global [1 x i32] zeroinitializer, section "__sancov_guards", comdat($foo), align 4{{$}}
 ; CHECK-NEXT: @__sancov_gen_.1 = private global [1 x i32] zeroinitializer, section "__sancov_guards", comdat($CallViaVptr), align 4{{$}}
+; CHECK-NOT:  @llvm.{{.*}}used =
 
 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"
Index: llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
===================================================================
--- llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
+++ llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
@@ -683,8 +683,10 @@
       Array->setComdat(Comdat);
   Array->setSection(getSectionName(Section));
   Array->setAlignment(Align(DL->getTypeStoreSize(Ty).getFixedSize()));
-  GlobalsToAppendToUsed.push_back(Array);
-  GlobalsToAppendToCompilerUsed.push_back(Array);
+  if (!Array->hasComdat()) {
+    GlobalsToAppendToUsed.push_back(Array);
+    GlobalsToAppendToCompilerUsed.push_back(Array);
+  }
 
   return Array;
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97432.326257.patch
Type: text/x-patch
Size: 2436 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210225/05393306/attachment.bin>


More information about the llvm-commits mailing list