parent
55425e7f78
commit
d47ac23154
|
@ -562,6 +562,7 @@ def private__bundle : Flag<"-private_bundle">;
|
||||||
def pthreads : Flag<"-pthreads">;
|
def pthreads : Flag<"-pthreads">;
|
||||||
def pthread : Flag<"-pthread">;
|
def pthread : Flag<"-pthread">;
|
||||||
def p : Flag<"-p">;
|
def p : Flag<"-p">;
|
||||||
|
def pie : Flag<"-pie">;
|
||||||
def read__only__relocs : Separate<"-read_only_relocs">;
|
def read__only__relocs : Separate<"-read_only_relocs">;
|
||||||
def remap : Flag<"-remap">;
|
def remap : Flag<"-remap">;
|
||||||
def rewrite_objc : Flag<"-rewrite-objc">, Flags<[DriverOption]>,
|
def rewrite_objc : Flag<"-rewrite-objc">, Flags<[DriverOption]>,
|
||||||
|
|
|
@ -3224,6 +3224,9 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
CmdArgs.push_back(A->getValue(Args));
|
CmdArgs.push_back(A->getValue(Args));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Args.hasArg(options::OPT_pie))
|
||||||
|
CmdArgs.push_back("-pie");
|
||||||
|
|
||||||
if (Args.hasArg(options::OPT_rdynamic))
|
if (Args.hasArg(options::OPT_rdynamic))
|
||||||
CmdArgs.push_back("-export-dynamic");
|
CmdArgs.push_back("-export-dynamic");
|
||||||
|
|
||||||
|
@ -3272,15 +3275,22 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
CmdArgs.push_back(Output.getFilename());
|
CmdArgs.push_back(Output.getFilename());
|
||||||
|
|
||||||
if (!Args.hasArg(options::OPT_nostdlib)) {
|
if (!Args.hasArg(options::OPT_nostdlib)) {
|
||||||
if (!Args.hasArg(options::OPT_shared))
|
const char *crt1 = NULL;
|
||||||
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt1.o")));
|
if (!Args.hasArg(options::OPT_shared)){
|
||||||
|
if (Args.hasArg(options::OPT_pie))
|
||||||
|
crt1 = "Scrt1.o";
|
||||||
|
else
|
||||||
|
crt1 = "crt1.o";
|
||||||
|
}
|
||||||
|
if (crt1)
|
||||||
|
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crt1)));
|
||||||
|
|
||||||
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o")));
|
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o")));
|
||||||
|
|
||||||
const char *crtbegin;
|
const char *crtbegin;
|
||||||
if (Args.hasArg(options::OPT_static))
|
if (Args.hasArg(options::OPT_static))
|
||||||
crtbegin = "crtbeginT.o";
|
crtbegin = "crtbeginT.o";
|
||||||
else if (Args.hasArg(options::OPT_shared))
|
else if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))
|
||||||
crtbegin = "crtbeginS.o";
|
crtbegin = "crtbeginS.o";
|
||||||
else
|
else
|
||||||
crtbegin = "crtbegin.o";
|
crtbegin = "crtbegin.o";
|
||||||
|
@ -3350,10 +3360,13 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
CmdArgs.push_back("-lgcc");
|
CmdArgs.push_back("-lgcc");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Args.hasArg(options::OPT_shared))
|
const char *crtend;
|
||||||
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtendS.o")));
|
if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))
|
||||||
|
crtend = "crtendS.o";
|
||||||
else
|
else
|
||||||
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));
|
crtend = "crtend.o";
|
||||||
|
|
||||||
|
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtend)));
|
||||||
|
|
||||||
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")));
|
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue