@@ -235,17 +235,20 @@ void Xtensa::Linker::ConstructJob(Compilation &C, const JobAction &JA,
235235 const char *LinkingOutput) const {
236236 const auto &TC =
237237 static_cast <const toolchains::XtensaToolChain &>(getToolChain ());
238-
239- if (!TC.XtensaGCCToolchain .IsValid ())
240- llvm_unreachable (" Unable to find Xtensa GCC linker" );
241-
238+ std::string Slash = TC.XtensaGCCToolchain .Slash ;
242239 std::string LibDir = " " ;
240+
243241 if ((Args.getLastArg (options::OPT_mfix_esp32_psram_cache_issue) != nullptr ) ||
244- (Args.getLastArg (options::OPT_malways_memw) != nullptr )) {
245- LibDir = " esp32-psram" ;
242+ (Args.getLastArg (options::OPT_malways_memw) != nullptr )) {
243+ LibDir = " esp32-psram" + Slash ;
246244 }
247245
248- std::string Slash = TC.XtensaGCCToolchain .Slash ;
246+ if ((Args.getLastArg (options::OPT_fno_rtti) != nullptr )) {
247+ LibDir += " no-rtti" + Slash;
248+ }
249+
250+ if (!TC.XtensaGCCToolchain .IsValid ())
251+ llvm_unreachable (" Unable to find Xtensa GCC linker" );
249252
250253 std::string Linker = getToolChain ().getDriver ().Dir + Slash +
251254 TC.XtensaGCCToolchain .GCCToolchainName + " -ld" ;
@@ -257,26 +260,25 @@ void Xtensa::Linker::ConstructJob(Compilation &C, const JobAction &JA,
257260
258261 AddLinkerInputs (getToolChain (), Inputs, Args, CmdArgs, JA);
259262
260- std::string Libs =
261- TC. XtensaGCCToolchain . GCCToolchainDir + Slash + " lib " + Slash + " gcc" +
262- Slash + TC.XtensaGCCToolchain .GCCToolchainName + Slash +
263- TC.XtensaGCCToolchain .GCCLibAndIncVersion + Slash + LibDir + Slash ;
263+ std::string Libs = TC. XtensaGCCToolchain . GCCToolchainDir + Slash + " lib " +
264+ Slash + " gcc" + Slash +
265+ TC.XtensaGCCToolchain .GCCToolchainName + Slash +
266+ TC.XtensaGCCToolchain .GCCLibAndIncVersion + Slash + LibDir;
264267 CmdArgs.push_back (" -L" );
265268 CmdArgs.push_back (Args.MakeArgString (Libs));
266269
267270 Libs = TC.XtensaGCCToolchain .GCCToolchainDir + Slash +
268271 TC.XtensaGCCToolchain .GCCToolchainName + Slash + " lib" + Slash +
269- LibDir + Slash ;
272+ LibDir;
270273 CmdArgs.push_back (" -L" );
271274 CmdArgs.push_back (Args.MakeArgString (Libs));
272275
273- CmdArgs.push_back (" -v " );
276+ CmdArgs.push_back (" -lgcc " );
274277
275278 CmdArgs.push_back (" -o" );
276279 CmdArgs.push_back (Output.getFilename ());
277280 C.addCommand (
278281 std::make_unique<Command>(JA, *this , ResponseFileSupport::AtFileCurCP (),
279- Args.MakeArgString (Linker),
280- CmdArgs, Inputs));
282+ Args.MakeArgString (Linker), CmdArgs, Inputs));
281283}
282284
0 commit comments