@@ -30,13 +30,16 @@ void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
30
30
const InputInfoList &Inputs,
31
31
const ArgList &Args,
32
32
const char *LinkingOutput) const {
33
- claimNoWarnArgs (Args);
34
- ArgStringList CmdArgs;
33
+ const auto &ToolChain = static_cast <const FreeBSD &>(getToolChain ());
35
34
const auto &D = getToolChain ().getDriver ();
35
+ const llvm::Triple &Triple = ToolChain.getTriple ();
36
+ ArgStringList CmdArgs;
37
+
38
+ claimNoWarnArgs (Args);
36
39
37
40
// When building 32-bit code on FreeBSD/amd64, we have to explicitly
38
41
// instruct as in the base system to assemble 32-bit code.
39
- switch (getToolChain () .getArch ()) {
42
+ switch (ToolChain .getArch ()) {
40
43
default :
41
44
break ;
42
45
case llvm::Triple::x86:
@@ -52,15 +55,15 @@ void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
52
55
case llvm::Triple::mips64el: {
53
56
StringRef CPUName;
54
57
StringRef ABIName;
55
- mips::getMipsCPUAndABI (Args, getToolChain (). getTriple () , CPUName, ABIName);
58
+ mips::getMipsCPUAndABI (Args, Triple , CPUName, ABIName);
56
59
57
60
CmdArgs.push_back (" -march" );
58
61
CmdArgs.push_back (CPUName.data ());
59
62
60
63
CmdArgs.push_back (" -mabi" );
61
64
CmdArgs.push_back (mips::getGnuCompatibleMipsABIName (ABIName).data ());
62
65
63
- if (getToolChain (). getTriple () .isLittleEndian ())
66
+ if (Triple .isLittleEndian ())
64
67
CmdArgs.push_back (" -EL" );
65
68
else
66
69
CmdArgs.push_back (" -EB" );
@@ -71,14 +74,14 @@ void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
71
74
A->claim ();
72
75
}
73
76
74
- AddAssemblerKPIC (getToolChain () , Args, CmdArgs);
77
+ AddAssemblerKPIC (ToolChain , Args, CmdArgs);
75
78
break ;
76
79
}
77
80
case llvm::Triple::arm:
78
81
case llvm::Triple::armeb:
79
82
case llvm::Triple::thumb:
80
83
case llvm::Triple::thumbeb: {
81
- arm::FloatABI ABI = arm::getARMFloatABI (getToolChain () , Args);
84
+ arm::FloatABI ABI = arm::getARMFloatABI (ToolChain , Args);
82
85
83
86
if (ABI == arm::FloatABI::Hard)
84
87
CmdArgs.push_back (" -mfpu=vfp" );
@@ -89,10 +92,9 @@ void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
89
92
break ;
90
93
}
91
94
case llvm::Triple::sparcv9: {
92
- std::string CPU = getCPUName (D, Args, getToolChain ().getTriple ());
93
- CmdArgs.push_back (
94
- sparc::getSparcAsmModeForCPU (CPU, getToolChain ().getTriple ()));
95
- AddAssemblerKPIC (getToolChain (), Args, CmdArgs);
95
+ std::string CPU = getCPUName (D, Args, Triple);
96
+ CmdArgs.push_back (sparc::getSparcAsmModeForCPU (CPU, Triple));
97
+ AddAssemblerKPIC (ToolChain, Args, CmdArgs);
96
98
break ;
97
99
}
98
100
}
@@ -118,7 +120,7 @@ void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
118
120
for (const auto &II : Inputs)
119
121
CmdArgs.push_back (II.getFilename ());
120
122
121
- const char *Exec = Args.MakeArgString (getToolChain () .GetProgramPath (" as" ));
123
+ const char *Exec = Args.MakeArgString (ToolChain .GetProgramPath (" as" ));
122
124
C.addCommand (std::make_unique<Command>(JA, *this ,
123
125
ResponseFileSupport::AtFileCurCP (),
124
126
Exec, CmdArgs, Inputs, Output));
@@ -366,10 +368,12 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
366
368
367
369
if (!Args.hasArg (options::OPT_nostdlib, options::OPT_nostartfiles,
368
370
options::OPT_r)) {
371
+ const char *crtend = nullptr ;
369
372
if (Args.hasArg (options::OPT_shared) || IsPIE)
370
- CmdArgs. push_back (Args. MakeArgString (ToolChain. GetFilePath ( " crtendS.o" ))) ;
373
+ crtend = " crtendS.o" ;
371
374
else
372
- CmdArgs.push_back (Args.MakeArgString (ToolChain.GetFilePath (" crtend.o" )));
375
+ crtend = " crtend.o" ;
376
+ CmdArgs.push_back (Args.MakeArgString (ToolChain.GetFilePath (crtend)));
373
377
CmdArgs.push_back (Args.MakeArgString (ToolChain.GetFilePath (" crtn.o" )));
374
378
}
375
379
0 commit comments