diff options
| -rw-r--r-- | lld/Common/TargetOptionsCommandFlags.cpp | 4 | ||||
| -rw-r--r-- | lld/ELF/LTO.cpp | 4 | ||||
| -rw-r--r-- | lld/include/lld/Common/TargetOptionsCommandFlags.h | 1 | ||||
| -rw-r--r-- | lld/test/ELF/lto/relocation-model.ll | 9 |
4 files changed, 17 insertions, 1 deletions
diff --git a/lld/Common/TargetOptionsCommandFlags.cpp b/lld/Common/TargetOptionsCommandFlags.cpp index d4c29d7f88b..0137feb63f3 100644 --- a/lld/Common/TargetOptionsCommandFlags.cpp +++ b/lld/Common/TargetOptionsCommandFlags.cpp @@ -26,6 +26,10 @@ llvm::TargetOptions lld::initTargetOptionsFromCodeGenFlags() { return ::InitTargetOptionsFromCodeGenFlags(); } +llvm::Optional<llvm::Reloc::Model> lld::getRelocModelFromCMModel() { + return getRelocModel(); +} + llvm::Optional<llvm::CodeModel::Model> lld::getCodeModelFromCMModel() { return getCodeModel(); } diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index 28d4bfe77c5..36880b1b6be 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -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_; diff --git a/lld/include/lld/Common/TargetOptionsCommandFlags.h b/lld/include/lld/Common/TargetOptionsCommandFlags.h index 9345e616f9a..422bb630f9f 100644 --- a/lld/include/lld/Common/TargetOptionsCommandFlags.h +++ b/lld/include/lld/Common/TargetOptionsCommandFlags.h @@ -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(); diff --git a/lld/test/ELF/lto/relocation-model.ll b/lld/test/ELF/lto/relocation-model.ll index 78334dd5cd2..825e9fe40a7 100644 --- a/lld/test/ELF/lto/relocation-model.ll +++ b/lld/test/ELF/lto/relocation-model.ll @@ -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 |

