forked from OSchip/llvm-project
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
This commit is contained in:
parent
35a3a3bd11
commit
175890e1eb
|
@ -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,6 +1713,13 @@ static void addLinkOptionsPostorder(CodeGenModule &CGM, Module *Mod,
|
|||
}
|
||||
|
||||
// Link against a library.
|
||||
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);
|
||||
|
@ -1718,6 +1727,7 @@ static void addLinkOptionsPostorder(CodeGenModule &CGM, Module *Mod,
|
|||
Metadata.push_back(llvm::MDNode::get(Context, OptString));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CodeGenModule::EmitModuleLinkOptions() {
|
||||
// Collect the set of all of the modules we want to visit to emit link
|
||||
|
|
|
@ -37,9 +37,9 @@ int use_autolink_sub3() {
|
|||
// NOTE: "autolink_sub" is intentionally not linked.
|
||||
|
||||
// CHECK: !llvm.linker.options = !{![[AUTOLINK_PCH:[0-9]+]], ![[AUTOLINK_FRAMEWORK:[0-9]+]], ![[AUTOLINK:[0-9]+]], ![[DEPENDSONMODULE:[0-9]+]], ![[MODULE:[0-9]+]], ![[NOUMBRELLA:[0-9]+]]}
|
||||
// CHECK: ![[AUTOLINK_PCH]] = !{!"{{(\\01|-l|/DEFAULTLIB:)}}autolink_from_pch{{(\.lib)?}}"}
|
||||
// CHECK: ![[AUTOLINK_PCH]] = !{!"{{(\\01|-l|/DEFAULTLIB:|lib", !")}}autolink_from_pch{{(\.lib)?}}"}
|
||||
// CHECK: ![[AUTOLINK_FRAMEWORK]] = !{!"-framework", !"autolink_framework"}
|
||||
// CHECK: ![[AUTOLINK]] = !{!"{{(\\01|-l|/DEFAULTLIB:)}}autolink{{(\.lib)?}}"}
|
||||
// CHECK: ![[AUTOLINK]] = !{!"{{(\\01|-l|/DEFAULTLIB:|lib", !")}}autolink{{(\.lib)?}}"}
|
||||
// CHECK: ![[DEPENDSONMODULE]] = !{!"-framework", !"DependsOnModule"}
|
||||
// CHECK: ![[MODULE]] = !{!"-framework", !"Module"}
|
||||
// CHECK: ![[NOUMBRELLA]] = !{!"-framework", !"NoUmbrella"}
|
||||
|
|
Loading…
Reference in New Issue