Skip to content

Commit 1459a1e

Browse files
committed
[RISCV][Driver] Add riscv emulation mode to linker job of BareMetal toolchain
Change-Id: Ifce8a3a7f1df9c12561d35ca3c923595e3619428
1 parent d5a0807 commit 1459a1e

File tree

5 files changed

+106
-97
lines changed

5 files changed

+106
-97
lines changed

clang/lib/Driver/ToolChains/BareMetal.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -551,8 +551,18 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,
551551

552552
CmdArgs.push_back("-Bstatic");
553553

554-
if (TC.getTriple().isRISCV() && Args.hasArg(options::OPT_mno_relax))
555-
CmdArgs.push_back("--no-relax");
554+
if (Triple.isRISCV()) {
555+
CmdArgs.push_back("-X");
556+
if (Args.hasArg(options::OPT_mno_relax))
557+
CmdArgs.push_back("--no-relax");
558+
if (const char *LDMOption = getLDMOption(TC.getTriple(), Args)) {
559+
CmdArgs.push_back("-m");
560+
CmdArgs.push_back(LDMOption);
561+
} else {
562+
D.Diag(diag::err_target_unknown_triple) << Triple.str();
563+
return;
564+
}
565+
}
556566

557567
if (Triple.isARM() || Triple.isThumb()) {
558568
bool IsBigEndian = arm::isARMBigEndian(Triple, Args);
@@ -639,9 +649,6 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,
639649
NeedCRTs)
640650
CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(CRTEnd)));
641651

642-
if (TC.getTriple().isRISCV())
643-
CmdArgs.push_back("-X");
644-
645652
// The R_ARM_TARGET2 relocation must be treated as R_ARM_REL32 on arm*-*-elf
646653
// and arm*-*-eabi (the default is R_ARM_GOT_PREL, used on arm*-*-linux and
647654
// arm*-*-*bsd).

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,76 @@ void tools::AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs,
535535
}
536536
}
537537

538+
const char *tools::getLDMOption(const llvm::Triple &T, const ArgList &Args) {
539+
switch (T.getArch()) {
540+
case llvm::Triple::x86:
541+
if (T.isOSIAMCU())
542+
return "elf_iamcu";
543+
return "elf_i386";
544+
case llvm::Triple::aarch64:
545+
return "aarch64linux";
546+
case llvm::Triple::aarch64_be:
547+
return "aarch64linuxb";
548+
case llvm::Triple::arm:
549+
case llvm::Triple::thumb:
550+
case llvm::Triple::armeb:
551+
case llvm::Triple::thumbeb:
552+
return tools::arm::isARMBigEndian(T, Args) ? "armelfb_linux_eabi"
553+
: "armelf_linux_eabi";
554+
case llvm::Triple::m68k:
555+
return "m68kelf";
556+
case llvm::Triple::ppc:
557+
if (T.isOSLinux())
558+
return "elf32ppclinux";
559+
return "elf32ppc";
560+
case llvm::Triple::ppcle:
561+
if (T.isOSLinux())
562+
return "elf32lppclinux";
563+
return "elf32lppc";
564+
case llvm::Triple::ppc64:
565+
return "elf64ppc";
566+
case llvm::Triple::ppc64le:
567+
return "elf64lppc";
568+
case llvm::Triple::riscv32:
569+
return "elf32lriscv";
570+
case llvm::Triple::riscv64:
571+
return "elf64lriscv";
572+
case llvm::Triple::sparc:
573+
case llvm::Triple::sparcel:
574+
return "elf32_sparc";
575+
case llvm::Triple::sparcv9:
576+
return "elf64_sparc";
577+
case llvm::Triple::loongarch32:
578+
return "elf32loongarch";
579+
case llvm::Triple::loongarch64:
580+
return "elf64loongarch";
581+
case llvm::Triple::mips:
582+
return "elf32btsmip";
583+
case llvm::Triple::mipsel:
584+
return "elf32ltsmip";
585+
case llvm::Triple::mips64:
586+
if (tools::mips::hasMipsAbiArg(Args, "n32") || T.isABIN32())
587+
return "elf32btsmipn32";
588+
return "elf64btsmip";
589+
case llvm::Triple::mips64el:
590+
if (tools::mips::hasMipsAbiArg(Args, "n32") || T.isABIN32())
591+
return "elf32ltsmipn32";
592+
return "elf64ltsmip";
593+
case llvm::Triple::systemz:
594+
return "elf64_s390";
595+
case llvm::Triple::x86_64:
596+
if (T.isX32())
597+
return "elf32_x86_64";
598+
return "elf_x86_64";
599+
case llvm::Triple::ve:
600+
return "elf64ve";
601+
case llvm::Triple::csky:
602+
return "cskyelf_linux";
603+
default:
604+
return nullptr;
605+
}
606+
}
607+
538608
void tools::addLinkerCompressDebugSectionsOption(
539609
const ToolChain &TC, const llvm::opt::ArgList &Args,
540610
llvm::opt::ArgStringList &CmdArgs) {

clang/lib/Driver/ToolChains/CommonArgs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ void AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs,
3131
const llvm::opt::ArgList &Args,
3232
llvm::opt::ArgStringList &CmdArgs, const JobAction &JA);
3333

34+
const char *getLDMOption(const llvm::Triple &T, const llvm::opt::ArgList &Args);
35+
3436
void addLinkerCompressDebugSectionsOption(const ToolChain &TC,
3537
const llvm::opt::ArgList &Args,
3638
llvm::opt::ArgStringList &CmdArgs);

clang/lib/Driver/ToolChains/Gnu.cpp

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -221,76 +221,6 @@ void tools::gcc::Linker::RenderExtraToolArgs(const JobAction &JA,
221221
// The types are (hopefully) good enough.
222222
}
223223

224-
static const char *getLDMOption(const llvm::Triple &T, const ArgList &Args) {
225-
switch (T.getArch()) {
226-
case llvm::Triple::x86:
227-
if (T.isOSIAMCU())
228-
return "elf_iamcu";
229-
return "elf_i386";
230-
case llvm::Triple::aarch64:
231-
return "aarch64linux";
232-
case llvm::Triple::aarch64_be:
233-
return "aarch64linuxb";
234-
case llvm::Triple::arm:
235-
case llvm::Triple::thumb:
236-
case llvm::Triple::armeb:
237-
case llvm::Triple::thumbeb:
238-
return tools::arm::isARMBigEndian(T, Args) ? "armelfb_linux_eabi"
239-
: "armelf_linux_eabi";
240-
case llvm::Triple::m68k:
241-
return "m68kelf";
242-
case llvm::Triple::ppc:
243-
if (T.isOSLinux())
244-
return "elf32ppclinux";
245-
return "elf32ppc";
246-
case llvm::Triple::ppcle:
247-
if (T.isOSLinux())
248-
return "elf32lppclinux";
249-
return "elf32lppc";
250-
case llvm::Triple::ppc64:
251-
return "elf64ppc";
252-
case llvm::Triple::ppc64le:
253-
return "elf64lppc";
254-
case llvm::Triple::riscv32:
255-
return "elf32lriscv";
256-
case llvm::Triple::riscv64:
257-
return "elf64lriscv";
258-
case llvm::Triple::sparc:
259-
case llvm::Triple::sparcel:
260-
return "elf32_sparc";
261-
case llvm::Triple::sparcv9:
262-
return "elf64_sparc";
263-
case llvm::Triple::loongarch32:
264-
return "elf32loongarch";
265-
case llvm::Triple::loongarch64:
266-
return "elf64loongarch";
267-
case llvm::Triple::mips:
268-
return "elf32btsmip";
269-
case llvm::Triple::mipsel:
270-
return "elf32ltsmip";
271-
case llvm::Triple::mips64:
272-
if (tools::mips::hasMipsAbiArg(Args, "n32") || T.isABIN32())
273-
return "elf32btsmipn32";
274-
return "elf64btsmip";
275-
case llvm::Triple::mips64el:
276-
if (tools::mips::hasMipsAbiArg(Args, "n32") || T.isABIN32())
277-
return "elf32ltsmipn32";
278-
return "elf64ltsmip";
279-
case llvm::Triple::systemz:
280-
return "elf64_s390";
281-
case llvm::Triple::x86_64:
282-
if (T.isX32())
283-
return "elf32_x86_64";
284-
return "elf_x86_64";
285-
case llvm::Triple::ve:
286-
return "elf64ve";
287-
case llvm::Triple::csky:
288-
return "cskyelf_linux";
289-
default:
290-
return nullptr;
291-
}
292-
}
293-
294224
static bool getStaticPIE(const ArgList &Args, const ToolChain &TC) {
295225
bool HasStaticPIE = Args.hasArg(options::OPT_static_pie);
296226
if (HasStaticPIE && Args.hasArg(options::OPT_no_pie)) {

clang/test/Driver/baremetal.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -250,27 +250,27 @@
250250
// CHECK-RV64-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
251251
// CHECK-RV64-NEXT: ld{{(.exe)?}}"
252252
// CHECK-RV64-SAME: "--sysroot={{.*}}/Inputs/basic_riscv64_tree/riscv64-unknown-elf"
253-
// CHECK-RV64-SAME: "-Bstatic"
253+
// CHECK-RV64-SAME: "-Bstatic" "-X" "-m" "elf64lriscv"
254254
// CHECK-RV64-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
255255
// CHECK-RV64-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
256256
// CHECK-RV64-SAME:"{{.*}}.o"
257257
// CHECK-RV64-SAME: "{{[^"]*}}libclang_rt.builtins.a"
258258
// CHECK-RV64-SAME: "-lc"
259-
// CHECK-RV64-SAME: "-X" "-o" "{{.*}}.tmp.out"
259+
// CHECK-RV64-SAME: "-o" "{{.*}}.tmp.out"
260260

261261
// RUN: %clangxx %s -### --target=riscv64-unknown-elf 2>&1 \
262262
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
263263
// RUN: | FileCheck --check-prefix=CHECK-RV64-DEFAULTCXX %s
264264
// CHECK-RV64-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
265265
// CHECK-RV64-DEFAULTCXX: ld{{(.exe)?}}"
266266
// CHECK-RV64-DEFAULTCXX-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf"
267-
// CHECK-RV64-DEFAULTCXX-SAME: -Bstatic"
267+
// CHECK-RV64-DEFAULTCXX-SAME: "-Bstatic" "-X" "-m" "elf64lriscv"
268268
// CHECK-RV64-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
269269
// CHECK-RV64-DEFAULTCXX-SAME:"{{.*}}.o"
270270
// CHECK-RV64-DEFAULTCXX-SAME: "-lc++" "-lm"
271271
// CHECK-RV64-DEFAULTCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
272272
// CHECK-RV64-DEFAULTCXX-SAME: "-lc"
273-
// CHECK-RV64-DEFAULTCXX-SAME: "-X" "-o" "a.out"
273+
// CHECK-RV64-DEFAULTCXX-SAME: "-o" "a.out"
274274

275275
// RUN: %clangxx %s -### --target=riscv64-unknown-elf 2>&1 \
276276
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
@@ -281,13 +281,13 @@
281281
// CHECK-RV64-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
282282
// CHECK-RV64-LIBCXX: ld{{(.exe)?}}"
283283
// CHECK-RV64-LIBCXX-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf"
284-
// CHECK-RV64-LIBCXX-SAME: "-Bstatic"
284+
// CHECK-RV64-LIBCXX-SAME: "-Bstatic" "-X" "-m" "elf64lriscv"
285285
// CHECK-RV64-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
286286
// CHECK-RV64-LIBCXX-SAME:"{{.*}}.o"
287287
// CHECK-RV64-LIBCXX-SAME: "-lc++" "-lm"
288288
// CHECK-RV64-LIBCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
289289
// CHECK-RV64-LIBCXX-SAME: "-lc"
290-
// CHECK-RV64-LIBCXX-SAME: "-X" "-o" "a.out"
290+
// CHECK-RV64-LIBCXX-SAME: "-o" "a.out"
291291

292292
// RUN: %clangxx %s -### 2>&1 --target=riscv64-unknown-elf \
293293
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
@@ -298,13 +298,13 @@
298298
// CHECK-RV64-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}8.0.1"
299299
// CHECK-RV64-LIBSTDCXX: ld{{(.exe)?}}"
300300
// CHECK-RV64-LIBSTDCXX-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf"
301-
// CHECK-RV64-LIBSTDCXX-SAME: "-Bstatic"
301+
// CHECK-RV64-LIBSTDCXX-SAME: "-Bstatic" "-X" "-m" "elf64lriscv"
302302
// CHECK-RV64-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
303303
// CHECK-RV64-LIBSTDCXX-SAME: "{{.*}}.o"
304304
// CHECK-RV64-LIBSTDCXX-SAME: "-lstdc++" "-lm"
305305
// CHECK-RV64-LIBSTDCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
306306
// CHECK-RV64-LIBSTDCXX-SAME: "-lc"
307-
// CHECK-RV64-LIBSTDCXX-SAME: "-X" "-o" "a.out"
307+
// CHECK-RV64-LIBSTDCXX-SAME: "-o" "a.out"
308308

309309
// RUN: %clang %s -### 2>&1 --target=riscv32-unknown-elf \
310310
// RUN: -L some/directory/user/asked/for \
@@ -318,27 +318,27 @@
318318
// CHECK-RV32-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
319319
// CHECK-RV32-NEXT: ld{{(.exe)?}}"
320320
// CHECK-RV32-SAME: "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf"
321-
// CHECK-RV32-SAME: "-Bstatic"
321+
// CHECK-RV32-SAME: "-Bstatic" "-X" "-m" "elf32lriscv"
322322
// CHECK-RV32-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
323323
// CHECK-RV32-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
324324
// CHECK-RV32-SAME: "{{.*}}.o"
325325
// CHECK-RV32-SAME: "{{[^"]*}}libclang_rt.builtins.a"
326326
// CHECK-RV32-SAME: "-lc"
327-
// CHECK-RV32-SAME: "-X" "-o" "a.out"
327+
// CHECK-RV32-SAME: "-o" "a.out"
328328

329329
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
330330
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
331331
// RUN: | FileCheck --check-prefix=CHECK-RV32-DEFAULTCXX %s
332332
// CHECK-RV32-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
333333
// CHECK-RV32-DEFAULTCXX: ld{{(.exe)?}}"
334334
// CHECK-RV32-DEFAULTCXX-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf"
335-
// CHECK-RV32-DEFAULTCXX-SAME: "-Bstatic"
335+
// CHECK-RV32-DEFAULTCXX-SAME: "-Bstatic" "-X" "-m" "elf32lriscv"
336336
// CHECK-RV32-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
337337
// CHECK-RV32-DEFAULTCXX-SAME: "{{.*}}.o"
338338
// CHECK-RV32-DEFAULTCXX-SAME: "-lc++" "-lm"
339339
// CHECK-RV32-DEFAULTCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
340340
// CHECK-RV32-DEFAULTCXX-SAME: "-lc"
341-
// CHECK-RV32-DEFAULTCXX-SAME: "-X" "-o" "a.out"
341+
// CHECK-RV32-DEFAULTCXX-SAME: "-o" "a.out"
342342

343343
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
344344
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
@@ -349,12 +349,12 @@
349349
// CHECK-RV32-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
350350
// CHECK-RV32-LIBCXX: ld{{(.exe)?}}"
351351
// CHECK-RV32-LIBCXX-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf"
352-
// CHECK-RV32-LIBCXX-SAME: "-Bstatic"
352+
// CHECK-RV32-LIBCXX-SAME: "-Bstatic" "-X" "-m" "elf32lriscv"
353353
// CHECK-RV32-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
354354
// CHECK-RV32-LIBCXX-SAME: "{{.*}}.o"
355355
// CHECK-RV32-LIBCXX-SAME: "-lc++" "-lm"
356356
// CHECK-RV32-LIBCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
357-
// CHECK-RV32-LIBCXX-SAME: "-X" "-o" "a.out"
357+
// CHECK-RV32-LIBCXX-SAME: "-o" "a.out"
358358

359359
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
360360
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
@@ -365,13 +365,13 @@
365365
// CHECK-RV32-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}8.0.1"
366366
// CHECK-RV32-LIBSTDCXX: ld{{(.exe)?}}"
367367
// CHECK-RV32-LIBSTDCXX-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf"
368-
// CHECK-RV32-LIBSTDCXX-SAME: "-Bstatic"
368+
// CHECK-RV32-LIBSTDCXX-SAME: "-Bstatic" "-X" "-m" "elf32lriscv"
369369
// CHECK-RV32-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
370370
// CHECK-RV32-LIBSTDCXX-SAME: "{{.*}}.o"
371371
// CHECK-RV32-LIBSTDCXX-SAME: "-lstdc++" "-lm"
372372
// CHECK-RV32-LIBSTDCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
373373
// CHECK-RV32-LIBSTDCXX-SAME: "-lc"
374-
// CHECK-RV32-LIBSTDCXX-SAME: "-X" "-o" "a.out"
374+
// CHECK-RV32-LIBSTDCXX-SAME: "-o" "a.out"
375375

376376
// RUN: %clang %s -### 2>&1 --target=riscv64-unknown-elf \
377377
// RUN: -nostdlibinc -nobuiltininc \
@@ -390,7 +390,7 @@
390390
// CHECK-RV64-NDL: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
391391
// CHECK-RV64-NDL: ld{{(.exe)?}}"
392392
// CHECK-RV64-NDL-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf"
393-
// CHECK-RV64-NDL-SAME: "-Bstatic"
393+
// CHECK-RV64-NDL-SAME: "-Bstatic" "-X" "-m" "elf64lriscv"
394394
// CHECK-RV64-NDL-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
395395

396396
// RUN: %clang %s -### 2>&1 --target=riscv64-unknown-elf \
@@ -411,7 +411,7 @@
411411
// CHECK-RV64FD-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
412412
// CHECK-RV64FD-NEXT: ld{{(.exe)?}}"
413413
// CHECK-RV64FD-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf"
414-
// CHECK-RV64FD-SAME: "-Bstatic"
414+
// CHECK-RV64FD-SAME: "-Bstatic" "-X" "-m" "elf64lriscv"
415415
// CHECK-RV64FD-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}lib"
416416

417417
// RUN: %clang %s -### 2>&1 --target=riscv32-unknown-elf \
@@ -432,7 +432,7 @@
432432
// CHECK-RV32I-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
433433
// CHECK-RV32I-NEXT: ld{{(.exe)?}}"
434434
// CHECK-RV32I-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf"
435-
// CHECK-RV32I-SAME: "-Bstatic"
435+
// CHECK-RV32I-SAME: "-Bstatic" "-X" "-m" "elf32lriscv"
436436
// CHECK-RV32I-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv32i{{[/\\]+}}ilp32{{[/\\]+}}lib"
437437

438438
// RUN: %clang %s -### 2>&1 --target=riscv32-unknown-elf \
@@ -453,7 +453,7 @@
453453
// CHECK-RV32IM-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
454454
// CHECK-RV32IM-NEXT: ld{{(.exe)?}}"
455455
// CHECK-RV32IM-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf"
456-
// CHECK-RV32IM-SAME: "-Bstatic"
456+
// CHECK-RV32IM-SAME: "-Bstatic" "-X" "-m" "elf32lriscv"
457457
// CHECK-RV32IM-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv32im{{[/\\]+}}ilp32{{[/\\]+}}lib"
458458

459459
// RUN: %clang %s -### 2>&1 --target=riscv32-unknown-elf \
@@ -469,7 +469,7 @@
469469
// CHECK-RV32IAC-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
470470
// CHECK-RV32IAC-NEXT: ld{{(.exe)?}}"
471471
// CHECK-RV32IAC-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf"
472-
// CHECK-RV32IAC-SAME: "-Bstatic"
472+
// CHECK-RV32IAC-SAME: "-Bstatic" "-X" "-m" "elf32lriscv"
473473
// CHECK-RV32IAC-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv32iac{{[/\\]+}}ilp32{{[/\\]+}}lib"
474474

475475
// RUN: %clang %s -### 2>&1 --target=riscv32-unknown-elf -march=rv32imafc -mabi=ilp32f \
@@ -492,7 +492,7 @@
492492
// CHECK-RV32IMAFC-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
493493
// CHECK-RV32IMAFC-NEXT: ld{{(.exe)?}}"
494494
// CHECK-RV32IMAFC-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf"
495-
// CHECK-RV32IMAFC-SAME: "-Bstatic"
495+
// CHECK-RV32IMAFC-SAME: "-Bstatic" "-X" "-m" "elf32lriscv"
496496
// CHECK-RV32IMAFC-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv32imafc{{[/\\]+}}ilp32f{{[/\\]+}}lib"
497497

498498
// RUN: %clang -no-canonical-prefixes %s -### --target=powerpc-unknown-eabi 2>&1 \

0 commit comments

Comments
 (0)