Index: lld/Common/TargetOptionsCommandFlags.cpp =================================================================== --- lld/Common/TargetOptionsCommandFlags.cpp +++ lld/Common/TargetOptionsCommandFlags.cpp @@ -26,6 +26,10 @@ return ::InitTargetOptionsFromCodeGenFlags(); } +llvm::Optional lld::getRelocModelFromCMModel() { + return getRelocModel(); +} + llvm::Optional lld::getCodeModelFromCMModel() { return getCodeModel(); } Index: lld/ELF/LTO.cpp =================================================================== --- lld/ELF/LTO.cpp +++ lld/ELF/LTO.cpp @@ -76,13 +76,7 @@ c.Options.FunctionSections = true; c.Options.DataSections = true; - if (config->relocatable) - c.RelocModel = None; - else if (config->isPic) - c.RelocModel = Reloc::PIC_; - else - c.RelocModel = Reloc::Static; - + c.RelocModel = getRelocModelFromCMModel(); c.CodeModel = getCodeModelFromCMModel(); c.DisableVerify = config->disableVerify; c.DiagHandler = diagnosticHandler; Index: lld/include/lld/Common/TargetOptionsCommandFlags.h =================================================================== --- lld/include/lld/Common/TargetOptionsCommandFlags.h +++ lld/include/lld/Common/TargetOptionsCommandFlags.h @@ -16,6 +16,7 @@ namespace lld { llvm::TargetOptions initTargetOptionsFromCodeGenFlags(); +llvm::Optional getRelocModelFromCMModel(); llvm::Optional getCodeModelFromCMModel(); std::string getCPUStr(); std::vector getMAttrs(); Index: lld/test/ELF/lto/discard-value-names.ll =================================================================== --- lld/test/ELF/lto/discard-value-names.ll +++ lld/test/ELF/lto/discard-value-names.ll @@ -22,3 +22,6 @@ %add = add i32 %in, %GV ret i32 %add } + +!llvm.module.flags = !{!0} +!0 = !{i32 1, !"PIC Level", i32 2} Index: lld/test/ELF/lto/relax-relocs.ll =================================================================== --- lld/test/ELF/lto/relax-relocs.ll +++ lld/test/ELF/lto/relax-relocs.ll @@ -14,3 +14,6 @@ %t = load i32, i32* @foo ret i32 %t } + +!llvm.module.flags = !{!0} +!0 = !{i32 1, !"PIC Level", i32 2} Index: lld/test/ELF/lto/relocation-model.ll =================================================================== --- lld/test/ELF/lto/relocation-model.ll +++ lld/test/ELF/lto/relocation-model.ll @@ -5,13 +5,13 @@ ;; Non-PIC source. -; RUN: ld.lld %t.o -o %t-out -save-temps -shared +; RUN: ld.lld %t.o -o %t-out -save-temps -shared -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 --export-dynamic --noinhibit-exec -pie +; RUN: ld.lld %t.o -o %t-out -save-temps --export-dynamic --noinhibit-exec -pie -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 --export-dynamic --noinhibit-exec +; RUN: ld.lld %t.o -o %t-out -save-temps --export-dynamic --noinhibit-exec -mllvm -relocation-model=static ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=STATIC ; RUN: ld.lld %t.o -o %t-out -save-temps -r --export-dynamic @@ -20,13 +20,13 @@ ;; PIC source. -; RUN: ld.lld %t.pic.o -o %t-out -save-temps -shared +; RUN: ld.lld %t.pic.o -o %t-out -save-temps -shared -mllvm -relocation-model=pic ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=PIC -; RUN: ld.lld %t.pic.o -o %t-out -save-temps --export-dynamic --noinhibit-exec -pie +; RUN: ld.lld %t.pic.o -o %t-out -save-temps --export-dynamic --noinhibit-exec -pie -mllvm -relocation-model=pic ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=PIC -; RUN: ld.lld %t.pic.o -o %t-out -save-temps --export-dynamic --noinhibit-exec +; RUN: ld.lld %t.pic.o -o %t-out -save-temps --export-dynamic --noinhibit-exec -mllvm -relocation-model=static ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=STATIC ; RUN: ld.lld %t.pic.o -o %t-out -save-temps -r --export-dynamic Index: lld/test/ELF/lto/section-name.ll =================================================================== --- lld/test/ELF/lto/section-name.ll +++ lld/test/ELF/lto/section-name.ll @@ -23,6 +23,10 @@ ret i32* @__stop_bar_section } +!llvm.module.flags = !{!0, !1} +!0 = !{i32 1, !"PIC Level", i32 2} +!1 = !{i32 1, !"PIE Level", i32 2} + ; CHECK-NOT: zed_section ; CHECK: foo_section PROGBITS ; CHECK-NEXT: bar_section PROGBITS Index: lld/test/ELF/lto/unnamed-addr.ll =================================================================== --- lld/test/ELF/lto/unnamed-addr.ll +++ lld/test/ELF/lto/unnamed-addr.ll @@ -12,4 +12,7 @@ ret i8* @a } +!llvm.module.flags = !{!0} +!0 = !{i32 1, !"PIC Level", i32 2} + ; CHECK: @a = internal unnamed_addr constant i8 42 Index: llvm/include/llvm/LTO/Config.h =================================================================== --- llvm/include/llvm/LTO/Config.h +++ llvm/include/llvm/LTO/Config.h @@ -38,7 +38,7 @@ std::string CPU; TargetOptions Options; std::vector MAttrs; - Optional RelocModel = Reloc::PIC_; + Optional RelocModel = None; Optional CodeModel = None; CodeGenOpt::Level CGOptLevel = CodeGenOpt::Default; TargetMachine::CodeGenFileType CGFileType = TargetMachine::CGFT_ObjectFile; Index: llvm/test/LTO/Resolution/X86/not-prevailing-alias.ll =================================================================== --- llvm/test/LTO/Resolution/X86/not-prevailing-alias.ll +++ llvm/test/LTO/Resolution/X86/not-prevailing-alias.ll @@ -1,6 +1,7 @@ ; Test to ensure that dead alias are dropped by converting to a declaration ; RUN: opt -module-summary %s -o %t1.bc -; RUN: llvm-lto2 run %t1.bc -r %t1.bc,barAlias,x \ +; RUN: llvm-lto2 run -relocation-model=pic \ +; RUN: %t1.bc -r %t1.bc,barAlias,x \ ; RUN: -r %t1.bc,bar,x -r %t1.bc,zed,px \ ; RUN: -r %t1.bc,var,x -r %t1.bc,varAlias,x \ ; RUN: -o %t2.o -save-temps Index: llvm/test/LTO/X86/codemodel-1.ll =================================================================== --- llvm/test/LTO/X86/codemodel-1.ll +++ llvm/test/LTO/X86/codemodel-1.ll @@ -1,5 +1,5 @@ ; RUN: llvm-as %s -o %t.o -; RUN: llvm-lto2 run -r %t.o,_start,px %t.o -o %t.s +; RUN: llvm-lto2 run -relocation-model=pic %t.o -r %t.o,_start,px -o %t.s ; RUN: llvm-objdump -d %t.s.0 | FileCheck %s --check-prefix=CHECK-SMALL target triple = "x86_64-unknown-linux-gnu"