alnyan/yggdrasil: fix PIE options

This commit is contained in:
Mark Poliakov 2024-11-14 16:54:19 +02:00
parent a0361f3b08
commit cb0aaa45f9

View File

@ -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));
}