[PATCH] D40849: CodeGen: support an extension to pass linker options on ELF

Saleem Abdulrasool via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 5 14:06:58 PST 2017


compnerd updated this revision to Diff 125609.
compnerd added a comment.

Tweak test


Repository:
  rL LLVM

https://reviews.llvm.org/D40849

Files:
  lib/CodeGen/TargetLoweringObjectFileImpl.cpp
  test/Feature/elf-linker-options.ll


Index: test/Feature/elf-linker-options.ll
===================================================================
--- /dev/null
+++ test/Feature/elf-linker-options.ll
@@ -0,0 +1,12 @@
+; RUN: llc -mtriple i686-unknown-linux-gnu -filetype asm -o - %s | FileCheck %s
+
+!llvm.linker.options = !{!0, !1}
+
+!0 = !{!"spaced", !"option"}
+!1 = !{!"nospace"}
+
+; CHECK: .section ".note.linker-options","", at note
+; CHECK: .long 1
+; CHECK: .ascii " spaced option"
+; CHECK: .ascii " nospace"
+; CHECK: .byte 0
Index: lib/CodeGen/TargetLoweringObjectFileImpl.cpp
===================================================================
--- lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -93,6 +93,21 @@

 void TargetLoweringObjectFileELF::emitModuleMetadata(
     MCStreamer &Streamer, Module &M, const TargetMachine &TM) const {
+  if (NamedMDNode *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) {
+    Streamer.SwitchSection(getContext().getELFSection(".note.linker-options",
+                                                      ELF::SHT_NOTE, 0));
+    Streamer.EmitIntValue(1, 4);
+    for (const auto &Operand : LinkerOptions->operands()) {
+      std::string Directive;
+      for (const auto &Option : cast<MDNode>(Operand)->operands()) {
+        Directive.push_back(' ');
+        Directive.append(cast<MDString>(Option)->getString());
+      }
+      Streamer.EmitBytes(Directive);
+    }
+    Streamer.EmitIntValue(0, 1);
+  }
+
   unsigned Version = 0;
   unsigned Flags = 0;
   StringRef Section;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D40849.125609.patch
Type: text/x-patch
Size: 1558 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171205/e5e77c2c/attachment.bin>


More information about the llvm-commits mailing list