[llvm] r337331 - CodeGen: Add a target option for emitting .addrsig directives for all address-significant symbols.

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 17 15:40:08 PDT 2018


Author: pcc
Date: Tue Jul 17 15:40:08 2018
New Revision: 337331

URL: http://llvm.org/viewvc/llvm-project?rev=337331&view=rev
Log:
CodeGen: Add a target option for emitting .addrsig directives for all address-significant symbols.

Differential Revision: https://reviews.llvm.org/D48143

Added:
    llvm/trunk/test/CodeGen/X86/addrsig.ll
Modified:
    llvm/trunk/include/llvm/CodeGen/CommandFlags.inc
    llvm/trunk/include/llvm/Target/TargetOptions.h
    llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp

Modified: llvm/trunk/include/llvm/CodeGen/CommandFlags.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/CommandFlags.inc?rev=337331&r1=337330&r2=337331&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/CommandFlags.inc (original)
+++ llvm/trunk/include/llvm/CodeGen/CommandFlags.inc Tue Jul 17 15:40:08 2018
@@ -261,6 +261,10 @@ static cl::opt<bool> EnableStackSizeSect
     "stack-size-section",
     cl::desc("Emit a section containing stack size metadata"), cl::init(false));
 
+static cl::opt<bool>
+    EnableAddrsig("addrsig", cl::desc("Emit an address-significance table"),
+                  cl::init(false));
+
 // Common utility function tightly tied to the options listed here. Initializes
 // a TargetOptions object with CodeGen flags and returns it.
 static TargetOptions InitTargetOptionsFromCodeGenFlags() {
@@ -289,6 +293,7 @@ static TargetOptions InitTargetOptionsFr
   Options.ExplicitEmulatedTLS = EmulatedTLS.getNumOccurrences() > 0;
   Options.ExceptionModel = ExceptionModel;
   Options.EmitStackSizeSection = EnableStackSizeSection;
+  Options.EmitAddrsig = EnableAddrsig;
 
   Options.MCOptions = InitMCTargetOptionsFromFlags();
 

Modified: llvm/trunk/include/llvm/Target/TargetOptions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetOptions.h?rev=337331&r1=337330&r2=337331&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetOptions.h (original)
+++ llvm/trunk/include/llvm/Target/TargetOptions.h Tue Jul 17 15:40:08 2018
@@ -108,10 +108,10 @@ namespace llvm {
           DisableIntegratedAS(false), RelaxELFRelocations(false),
           FunctionSections(false), DataSections(false),
           UniqueSectionNames(true), TrapUnreachable(false),
-          NoTrapAfterNoreturn(false),
-          EmulatedTLS(false), ExplicitEmulatedTLS(false),
-          EnableIPRA(false), EmitStackSizeSection(false),
-          EnableMachineOutliner(false), SupportsDefaultOutlining(false) {}
+          NoTrapAfterNoreturn(false), EmulatedTLS(false),
+          ExplicitEmulatedTLS(false), EnableIPRA(false),
+          EmitStackSizeSection(false), EnableMachineOutliner(false),
+          SupportsDefaultOutlining(false), EmitAddrsig(false) {}
 
     /// PrintMachineCode - This flag is enabled when the -print-machineinstrs
     /// option is specified on the command line, and should enable debugging
@@ -238,6 +238,9 @@ namespace llvm {
     /// Set if the target supports default outlining behaviour.
     unsigned SupportsDefaultOutlining : 1;
 
+    /// Emit address-significance table.
+    unsigned EmitAddrsig : 1;
+
     /// FloatABIType - This setting is set by -float-abi=xxx option is specfied
     /// on the command line. This setting may either be Default, Soft, or Hard.
     /// Default selects the target's default behavior. Soft selects the ABI for

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=337331&r1=337330&r2=337331&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Tue Jul 17 15:40:08 2018
@@ -1529,6 +1529,14 @@ bool AsmPrinter::doFinalization(Module &
     }
   }
 
+  if (TM.Options.EmitAddrsig) {
+    // Emit address-significance attributes for all globals.
+    OutStreamer->EmitAddrsig();
+    for (const GlobalValue &GV : M.global_values())
+      if (!GV.getName().startswith("llvm.") && !GV.hasAtLeastLocalUnnamedAddr())
+        OutStreamer->EmitAddrsigSym(getSymbol(&GV));
+  }
+
   // Allow the target to emit any magic that it wants at the end of the file,
   // after everything else has gone out.
   EmitEndOfAsmFile(M);

Added: llvm/trunk/test/CodeGen/X86/addrsig.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/addrsig.ll?rev=337331&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/addrsig.ll (added)
+++ llvm/trunk/test/CodeGen/X86/addrsig.ll Tue Jul 17 15:40:08 2018
@@ -0,0 +1,36 @@
+; RUN: llc < %s -mtriple=x86_64-unknown-linux | FileCheck --check-prefix=NO-ADDRSIG %s
+; RUN: llc < %s -mtriple=x86_64-unknown-linux -addrsig | FileCheck %s
+
+; NO-ADDRSIG-NOT: .addrsig
+
+; CHECK: .addrsig
+
+; CHECK: .addrsig_sym f1
+define void @f1() {
+  unreachable
+}
+
+; CHECK-NOT: .addrsig_sym f2
+define internal void @f2() local_unnamed_addr {
+  unreachable
+}
+
+; CHECK-NOT: .addrsig_sym f3
+declare void @f3() unnamed_addr
+
+; CHECK: .addrsig_sym g1
+ at g1 = global i32 0
+; CHECK-NOT: .addrsig_sym g2
+ at g2 = internal local_unnamed_addr global i32 0
+; CHECK-NOT: .addrsig_sym g3
+ at g3 = external unnamed_addr global i32
+
+; CHECK: .addrsig_sym a1
+ at a1 = alias i32, i32* @g1
+; CHECK-NOT: .addrsig_sym a2
+ at a2 = internal local_unnamed_addr alias i32, i32* @g2
+
+; CHECK: .addrsig_sym i1
+ at i1 = ifunc void(), void()* @f1
+; CHECK-NOT: .addrsig_sym i2
+ at i2 = internal local_unnamed_addr ifunc void(), void()* @f2




More information about the llvm-commits mailing list