[lld] r366644 - [ELF] Support explicitly overriding relocation model in LTO

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 20 14:59:47 PDT 2019


Author: phosek
Date: Sat Jul 20 14:59:47 2019
New Revision: 366644

URL: http://llvm.org/viewvc/llvm-project?rev=366644&view=rev
Log:
[ELF] Support explicitly overriding relocation model in LTO

lld currently selects the relocation model automatically depending on
the link flags specified, but in some cases it'd be useful to allow
explicitly overriding the relocation model using a flag.

Modified:
    lld/trunk/Common/TargetOptionsCommandFlags.cpp
    lld/trunk/ELF/LTO.cpp
    lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h
    lld/trunk/test/ELF/lto/relocation-model.ll

Modified: lld/trunk/Common/TargetOptionsCommandFlags.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/Common/TargetOptionsCommandFlags.cpp?rev=366644&r1=366643&r2=366644&view=diff
==============================================================================
--- lld/trunk/Common/TargetOptionsCommandFlags.cpp (original)
+++ lld/trunk/Common/TargetOptionsCommandFlags.cpp Sat Jul 20 14:59:47 2019
@@ -26,6 +26,10 @@ llvm::TargetOptions lld::initTargetOptio
   return ::InitTargetOptionsFromCodeGenFlags();
 }
 
+llvm::Optional<llvm::Reloc::Model> lld::getRelocModelFromCMModel() {
+  return getRelocModel();
+}
+
 llvm::Optional<llvm::CodeModel::Model> lld::getCodeModelFromCMModel() {
   return getCodeModel();
 }

Modified: lld/trunk/ELF/LTO.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=366644&r1=366643&r2=366644&view=diff
==============================================================================
--- lld/trunk/ELF/LTO.cpp (original)
+++ lld/trunk/ELF/LTO.cpp Sat Jul 20 14:59:47 2019
@@ -76,7 +76,9 @@ static lto::Config createConfig() {
   c.Options.FunctionSections = true;
   c.Options.DataSections = true;
 
-  if (config->relocatable)
+  if (auto relocModel = getRelocModelFromCMModel())
+    c.RelocModel = *relocModel;
+  else if (config->relocatable)
     c.RelocModel = None;
   else if (config->isPic)
     c.RelocModel = Reloc::PIC_;

Modified: lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h?rev=366644&r1=366643&r2=366644&view=diff
==============================================================================
--- lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h (original)
+++ lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h Sat Jul 20 14:59:47 2019
@@ -16,6 +16,7 @@
 
 namespace lld {
 llvm::TargetOptions initTargetOptionsFromCodeGenFlags();
+llvm::Optional<llvm::Reloc::Model> getRelocModelFromCMModel();
 llvm::Optional<llvm::CodeModel::Model> getCodeModelFromCMModel();
 std::string getCPUStr();
 std::vector<std::string> getMAttrs();

Modified: lld/trunk/test/ELF/lto/relocation-model.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/relocation-model.ll?rev=366644&r1=366643&r2=366644&view=diff
==============================================================================
--- lld/trunk/test/ELF/lto/relocation-model.ll (original)
+++ lld/trunk/test/ELF/lto/relocation-model.ll Sat Jul 20 14:59:47 2019
@@ -33,6 +33,15 @@
 ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=PIC
 
 
+;; Explicit flag.
+
+; RUN: ld.lld %t.o -o %t-out -save-temps -r -mllvm -relocation-model=pic
+; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=PIC
+
+; RUN: ld.lld %t.o -o %t-out -save-temps -r -mllvm -relocation-model=static
+; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=STATIC
+
+
 ; PIC: R_X86_64_REX_GOTPCRELX foo
 ; STATIC: R_X86_64_PC32 foo
 




More information about the llvm-commits mailing list