alnyan/yggdrasil: fix PIE options
This commit is contained in:
parent
a0361f3b08
commit
cb0aaa45f9
@ -47,6 +47,22 @@ void yggdrasil::Linker::ConstructJob(
|
||||
|
||||
const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
|
||||
|
||||
CmdArgs.push_back("-z");
|
||||
CmdArgs.push_back("max-page-size=4096");
|
||||
|
||||
if (!Args.hasArg(options::OPT_shared) &&
|
||||
!Args.hasArg(options::OPT_static) &&
|
||||
!Args.hasArg(options::OPT_r)) {
|
||||
CmdArgs.push_back("-pie");
|
||||
}
|
||||
|
||||
if (Args.hasArg(options::OPT_r)) {
|
||||
CmdArgs.push_back("-r");
|
||||
} else {
|
||||
CmdArgs.push_back("--build-id");
|
||||
CmdArgs.push_back("--hash-style=gnu");
|
||||
}
|
||||
|
||||
if (!D.SysRoot.empty()) {
|
||||
CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));
|
||||
}
|
||||
@ -56,19 +72,23 @@ void yggdrasil::Linker::ConstructJob(
|
||||
}
|
||||
|
||||
if (Args.hasArg(options::OPT_static)) {
|
||||
CmdArgs.push_back("-Bstatic");
|
||||
} else if (Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back("-shared");
|
||||
CmdArgs.push_back("-Bstatic");
|
||||
} else {
|
||||
if (Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back("-shared");
|
||||
}
|
||||
|
||||
CmdArgs.push_back("--dynamic-linker=/libexec/dyn-loader");
|
||||
}
|
||||
|
||||
CmdArgs.push_back("-o");
|
||||
CmdArgs.push_back(Output.getFilename());
|
||||
|
||||
// if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
|
||||
// if (!Args.hasArg(options::OPT_shared)) {
|
||||
// CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o")));
|
||||
// }
|
||||
// }
|
||||
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles, options::OPT_r)) {
|
||||
if (!Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o")));
|
||||
}
|
||||
}
|
||||
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_L);
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_u);
|
||||
@ -81,8 +101,6 @@ void yggdrasil::Linker::ConstructJob(
|
||||
// D.getLTOMode() == LTOK_Thin);
|
||||
// }
|
||||
|
||||
AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
|
||||
|
||||
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
|
||||
// if (D.CCCIsCXX()) {
|
||||
// if (ToolChain.ShouldLinkCXXStdlib(Args)) {
|
||||
@ -92,13 +110,15 @@ void yggdrasil::Linker::ConstructJob(
|
||||
// }
|
||||
// }
|
||||
|
||||
// AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
|
||||
AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
|
||||
|
||||
if (!Args.hasArg(options::OPT_nolibc)) {
|
||||
CmdArgs.push_back("-lygglibc");
|
||||
}
|
||||
}
|
||||
|
||||
AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
|
||||
|
||||
C.addCommand(std::make_unique<Command>(JA, *this, ResponseFileSupport::None(),
|
||||
Exec, CmdArgs, Inputs, Output));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user