diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2019-01-05 19:27:12 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2019-01-05 19:27:12 +0000 |
commit | 175890e1ebb0eb72ce81ea3602fcc31eee462039 (patch) | |
tree | daa38ba48ed9230f0e27db4c4e26eb73243558eb /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 35a3a3bd11ac5736fed1a9de052f172c37d989d9 (diff) | |
download | llvm-175890e1ebb0eb72ce81ea3602fcc31eee462039.zip llvm-175890e1ebb0eb72ce81ea3602fcc31eee462039.tar.gz llvm-175890e1ebb0eb72ce81ea3602fcc31eee462039.tar.bz2 |
CodeGen: fix autolink emission on ELF
The autolinking extension for ELF uses a slightly different format for
encoding the autolink information compared to COFF and MachO. Account
for this in the CGM to ensure that we do not assert when emitting
assembly or an object file.
llvm-svn: 350476
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index b9466fe..5419049 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1692,6 +1692,8 @@ static void addLinkOptionsPostorder(CodeGenModule &CGM, Module *Mod, // Add linker options to link against the libraries/frameworks // described by this module. llvm::LLVMContext &Context = CGM.getLLVMContext(); + bool IsELF = CGM.getTarget().getTriple().isOSBinFormatELF(); + bool IsPS4 = CGM.getTarget().getTriple().isPS4(); // For modules that use export_as for linking, use that module // name instead. @@ -1711,11 +1713,19 @@ static void addLinkOptionsPostorder(CodeGenModule &CGM, Module *Mod, } // Link against a library. - llvm::SmallString<24> Opt; - CGM.getTargetCodeGenInfo().getDependentLibraryOption( - Mod->LinkLibraries[I-1].Library, Opt); - auto *OptString = llvm::MDString::get(Context, Opt); - Metadata.push_back(llvm::MDNode::get(Context, OptString)); + if (IsELF && !IsPS4) { + llvm::Metadata *Args[2] = { + llvm::MDString::get(Context, "lib"), + llvm::MDString::get(Context, Mod->LinkLibraries[I - 1].Library), + }; + Metadata.push_back(llvm::MDNode::get(Context, Args)); + } else { + llvm::SmallString<24> Opt; + CGM.getTargetCodeGenInfo().getDependentLibraryOption( + Mod->LinkLibraries[I - 1].Library, Opt); + auto *OptString = llvm::MDString::get(Context, Opt); + Metadata.push_back(llvm::MDNode::get(Context, OptString)); + } } } |