Skip to content

Commit 3709f17

Browse files
committed
Merge remote-tracking branch 'origin/main' into vplan-runtime-checks
2 parents 7f08758 + 01d8e0f commit 3709f17

File tree

11 files changed

+203
-72
lines changed

11 files changed

+203
-72
lines changed

clang/lib/Driver/ToolChains/BareMetal.cpp

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -393,38 +393,6 @@ void BareMetal::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
393393
}
394394
}
395395

396-
void BareMetal::AddCXXStdlibLibArgs(const ArgList &Args,
397-
ArgStringList &CmdArgs) const {
398-
switch (GetCXXStdlibType(Args)) {
399-
case ToolChain::CST_Libcxx:
400-
CmdArgs.push_back("-lc++");
401-
if (Args.hasArg(options::OPT_fexperimental_library))
402-
CmdArgs.push_back("-lc++experimental");
403-
CmdArgs.push_back("-lc++abi");
404-
break;
405-
case ToolChain::CST_Libstdcxx:
406-
CmdArgs.push_back("-lstdc++");
407-
CmdArgs.push_back("-lsupc++");
408-
break;
409-
}
410-
CmdArgs.push_back("-lunwind");
411-
}
412-
413-
void BareMetal::AddLinkRuntimeLib(const ArgList &Args,
414-
ArgStringList &CmdArgs) const {
415-
ToolChain::RuntimeLibType RLT = GetRuntimeLibType(Args);
416-
switch (RLT) {
417-
case ToolChain::RLT_CompilerRT: {
418-
CmdArgs.push_back(getCompilerRTArgString(Args, "builtins"));
419-
return;
420-
}
421-
case ToolChain::RLT_Libgcc:
422-
CmdArgs.push_back("-lgcc");
423-
return;
424-
}
425-
llvm_unreachable("Unhandled RuntimeLibType.");
426-
}
427-
428396
void baremetal::StaticLibTool::ConstructJob(Compilation &C, const JobAction &JA,
429397
const InputInfo &Output,
430398
const InputInfoList &Inputs,
@@ -511,14 +479,21 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,
511479
for (const auto &LibPath : TC.getLibraryPaths())
512480
CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-L", LibPath)));
513481

514-
if (TC.ShouldLinkCXXStdlib(Args))
482+
if (TC.ShouldLinkCXXStdlib(Args)) {
483+
bool OnlyLibstdcxxStatic = Args.hasArg(options::OPT_static_libstdcxx) &&
484+
!Args.hasArg(options::OPT_static);
485+
if (OnlyLibstdcxxStatic)
486+
CmdArgs.push_back("-Bstatic");
515487
TC.AddCXXStdlibLibArgs(Args, CmdArgs);
488+
if (OnlyLibstdcxxStatic)
489+
CmdArgs.push_back("-Bdynamic");
490+
CmdArgs.push_back("-lm");
491+
}
516492

517493
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
518-
CmdArgs.push_back("-lc");
519-
CmdArgs.push_back("-lm");
494+
AddRunTimeLibs(TC, D, CmdArgs, Args);
520495

521-
TC.AddLinkRuntimeLib(Args, CmdArgs);
496+
CmdArgs.push_back("-lc");
522497
}
523498

524499
if (D.isUsingLTO()) {

clang/lib/Driver/ToolChains/BareMetal.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,6 @@ class LLVM_LIBRARY_VISIBILITY BareMetal : public ToolChain {
6767
void AddClangCXXStdlibIncludeArgs(
6868
const llvm::opt::ArgList &DriverArgs,
6969
llvm::opt::ArgStringList &CC1Args) const override;
70-
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
71-
llvm::opt::ArgStringList &CmdArgs) const override;
72-
void AddLinkRuntimeLib(const llvm::opt::ArgList &Args,
73-
llvm::opt::ArgStringList &CmdArgs) const;
7470
std::string computeSysRoot() const override;
7571
SanitizerMask getSupportedSanitizers() const override;
7672

clang/test/Driver/baremetal-multilib.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
# CHECK-SAME: "-x" "c++" "{{.*}}baremetal-multilib.yaml"
1111
# CHECK-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
1212
# CHECK-SAME: "-L[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/lib"
13-
# CHECK-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
13+
# CHECK-SAME: "{{[^"]*}}libclang_rt.builtins.a"
14+
# CHECK-SAME: "-lc"
1415
# CHECK-SAME: "-o" "{{.*}}.tmp.out"
1516

1617
# RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x c++ %s -### -o %t.out 2>&1 \

clang/test/Driver/baremetal-sysroot.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@
1818
// CHECK-V6M-C-SAME: "-x" "c++" "{{.*}}baremetal-sysroot.cpp"
1919
// CHECK-V6M-C-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
2020
// CHECK-V6M-C-SAME: "-L{{.*}}/baremetal_default_sysroot{{[/\\]+}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}armv6m-none-eabi{{[/\\]+}}lib"
21-
// CHECK-V6M-C-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
21+
// CHECK-V6M-C-SAME: "{{[^"]*}}libclang_rt.builtins.a"
22+
// CHECK-V6M-C-SAME: "-lc"
2223
// CHECK-V6M-C-SAME: "-o" "{{.*}}.o"

clang/test/Driver/baremetal.cpp

Lines changed: 66 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
// CHECK-V6M-C-SAME: "[[SYSROOT:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}crt0.o"
2020
// CHECK-V6M-C-SAME: "-T" "semihosted.lds" "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
2121
// CHECK-V6M-C-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
22-
// CHECK-V6M-C-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "{{.*}}.tmp.out"
22+
// CHECK-V6M-C-SAME: "{{[^"]*}}libclang_rt.builtins.a"
23+
// CHECK-V6M-C-SAME: "-lc"
24+
// CHECK-V6M-C-SAME: "--target2=rel" "-o" "{{.*}}.tmp.out"
2325

2426
// RUN: %clang %s -### --target=armv6m-none-eabi -nostdlibinc -nobuiltininc 2>&1 \
2527
// RUN: --sysroot=%S/Inputs/baremetal_arm | FileCheck --check-prefix=CHECK-V6M-LIBINC %s
@@ -40,7 +42,9 @@
4042
// CHECK-V6M-TREE-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
4143
// CHECK-V6M-TREE-SAME: "[[INSTALLED_DIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}armv6m-unknown-none-eabi{{[/\\]+}}crt0.o"
4244
// CHECK-V6M-TREE-SAME: "-L[[INSTALLED_DIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}armv6m-unknown-none-eabi"
43-
// CHECK-V6M-TREE-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "{{.*}}.tmp.out"
45+
// CHECK-V6M-TREE-SAME: "{{[^"]*}}libclang_rt.builtins.a"
46+
// CHECK-V6M-TREE-SAME: "-lc"
47+
// CHECK-V6M-TREE-SAME: "--target2=rel" "-o" "{{.*}}.tmp.out"
4448

4549
// RUN: %clang %s -### --target=armv7m-vendor-none-eabi -rtlib=compiler-rt 2>&1 \
4650
// RUN: --sysroot=%S/Inputs/baremetal_arm \
@@ -53,16 +57,20 @@
5357
// CHECK-ARMV7M-PER_TARGET: "[[SYSROOT:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}crt0.o"
5458
// CHECK-ARMV7M-PER-TARGET: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
5559
// CHECK-ARMV7M-PER-TARGET: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}armv7m-vendor-none-eabi
56-
// CHECK-ARMV7M-PER-TARGET: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
60+
// CHECK-ARMV7M-PER-TARGET: "{{[^"]*}}libclang_rt.builtins.a"
61+
// CHECK-ARMV7M-PER-TARGET: "-lc"
5762

5863
// RUN: %clangxx %s -### --target=armv6m-none-eabi 2>&1 \
5964
// RUN: --sysroot=%S/Inputs/baremetal_arm | FileCheck --check-prefix=CHECK-V6M-DEFAULTCXX %s
6065
// CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
6166
// CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
6267
// CHECK-V6M-DEFAULTCXX-SAME: "[[SYSROOT:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}crt0.o"
6368
// CHECK-V6M-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
64-
// CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
65-
// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "a.out"
69+
// CHECK-V6M-DEFAULTCXX-SAME: "-lc++"
70+
// CHECK-V6M-DEFAULTCXX-SAME: "-lm"
71+
// CHECK-V6M-DEFAULTCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
72+
// CHECK-V6M-DEFAULTCXX-SAME: "-lc"
73+
// CHECK-V6M-DEFAULTCXX-SAME: "--target2=rel" "-o" "a.out"
6674

6775
// RUN: %clangxx %s -### --target=armv6m-none-eabi -stdlib=libc++ 2>&1 \
6876
// RUN: --sysroot=%S/Inputs/baremetal_arm | FileCheck --check-prefix=CHECK-V6M-LIBCXX %s
@@ -71,8 +79,11 @@
7179
// CHECK-V6M-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
7280
// CHECK-V6M-LIBCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
7381
// CHECK-V6M-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
74-
// CHECK-V6M-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
75-
// CHECK-V6M-LIBCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "a.out"
82+
// CHECK-V6M-LIBCXX-SAME: "-lc++"
83+
// CHECK-V6M-LIBCXX-SAME: "-lm"
84+
// CHECK-V6M-LIBCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
85+
// CHECK-V6M-LIBCXX-SAME: "-lc"
86+
// CHECK-V6M-LIBCXX-SAME: "--target2=rel" "-o" "a.out"
7687

7788
// RUN: %clangxx %s -### --target=armv6m-none-eabi 2>&1 \
7889
// RUN: --sysroot=%S/Inputs/baremetal_arm \
@@ -83,8 +94,10 @@
8394
// CHECK-V6M-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}6.0.0"
8495
// CHECK-V6M-LIBSTDCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
8596
// CHECK-V6M-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
86-
// CHECK-V6M-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
87-
// CHECK-V6M-LIBSTDCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "a.out"
97+
// CHECK-V6M-LIBSTDCXX-SAME: "-lstdc++" "-lm"
98+
// CHECK-V6M-LIBSTDCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
99+
// CHECK-V6M-LIBSTDCXX-SAME: "-lc"
100+
// CHECK-V6M-LIBSTDCXX-SAME: "--target2=rel" "-o" "a.out"
88101

89102
// RUN: %clangxx %s -### --target=armv6m-none-eabi 2>&1 \
90103
// RUN: --sysroot=%S/Inputs/baremetal_arm \
@@ -106,8 +119,9 @@
106119
// CHECK-V6M-LIBCXX-USR-SAME: "-internal-isystem" "{{[^"]+}}baremetal_cxx_sysroot{{[/\\]+}}usr{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
107120
// CHECK-V6M-LIBCXX-USR: "{{[^"]*}}-Bstatic"
108121
// CHECK-V6M-LIBCXX-USR-SAME: "-L{{[^"]*}}{{[/\\]+}}baremetal_cxx_sysroot{{[/\\]+}}lib"
109-
// CHECK-V6M-LIBCXX-USR-SAME: "-lc++" "-lc++abi" "-lunwind"
110-
// CHECK-V6M-LIBCXX-USR-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
122+
// CHECK-V6M-LIBCXX-USR-SAME: "-lc++" "-lm"
123+
// CHECK-V6M-LIBCXX-USR-SAME: "{{[^"]*}}libclang_rt.builtins.a"
124+
// CHECK-V6M-LIBCXX-USR-SAME: "-lc"
111125

112126
// RUN: %clangxx --target=arm-none-eabi -v 2>&1 \
113127
// RUN: | FileCheck %s --check-prefix=CHECK-THREAD-MODEL
@@ -125,7 +139,7 @@
125139
// RUN: | FileCheck %s --check-prefix=CHECK-NOSTARTFILES
126140
// CHECK-NOSTARTFILES-NOT: "crt0.o"
127141

128-
// RUN: %clang -### --target=arm-none-eabi -rtlib=libgcc -v %s 2>&1 \
142+
// RUN: %clang -### --target=arm-none-eabi -rtlib=libgcc --unwindlib=libgcc -v %s 2>&1 \
129143
// RUN: | FileCheck %s --check-prefix=CHECK-RTLIB-GCC
130144
// CHECK-RTLIB-GCC: -lgcc
131145

@@ -194,16 +208,20 @@
194208
// CHECK-RV64-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
195209
// CHECK-RV64-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
196210
// CHECK-RV64-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
197-
// CHECK-RV64-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "{{.*}}.tmp.out"
211+
// CHECK-RV64-SAME: "{{[^"]*}}libclang_rt.builtins.a"
212+
// CHECK-RV64-SAME: "-lc"
213+
// CHECK-RV64-SAME: "-X" "-o" "{{.*}}.tmp.out"
198214

199215
// RUN: %clangxx %s -### --target=riscv64-unknown-elf 2>&1 \
200216
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
201217
// RUN: | FileCheck --check-prefix=CHECK-RV64-DEFAULTCXX %s
202218
// CHECK-RV64-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
203219
// CHECK-RV64-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
204220
// CHECK-RV64-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
205-
// CHECK-RV64-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
206-
// CHECK-RV64-DEFAULTCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
221+
// CHECK-RV64-DEFAULTCXX-SAME: "-lc++" "-lm"
222+
// CHECK-RV64-DEFAULTCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
223+
// CHECK-RV64-DEFAULTCXX-SAME: "-lc"
224+
// CHECK-RV64-DEFAULTCXX-SAME: "-X" "-o" "a.out"
207225

208226
// RUN: %clangxx %s -### --target=riscv64-unknown-elf 2>&1 \
209227
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
@@ -214,8 +232,10 @@
214232
// CHECK-RV64-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
215233
// CHECK-RV64-LIBCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
216234
// CHECK-RV64-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
217-
// CHECK-RV64-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
218-
// CHECK-RV64-LIBCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
235+
// CHECK-RV64-LIBCXX-SAME: "-lc++" "-lm"
236+
// CHECK-RV64-LIBCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
237+
// CHECK-RV64-LIBCXX-SAME: "-lc"
238+
// CHECK-RV64-LIBCXX-SAME: "-X" "-o" "a.out"
219239

220240
// RUN: %clangxx %s -### 2>&1 --target=riscv64-unknown-elf \
221241
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
@@ -226,8 +246,10 @@
226246
// CHECK-RV64-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}8.0.1"
227247
// CHECK-RV64-LIBSTDCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
228248
// CHECK-RV64-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
229-
// CHECK-RV64-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
230-
// CHECK-RV64-LIBSTDCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
249+
// CHECK-RV64-LIBSTDCXX-SAME: "-lstdc++" "-lm"
250+
// CHECK-RV64-LIBSTDCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
251+
// CHECK-RV64-LIBSTDCXX-SAME: "-lc"
252+
// CHECK-RV64-LIBSTDCXX-SAME: "-X" "-o" "a.out"
231253

232254
// RUN: %clang %s -### 2>&1 --target=riscv32-unknown-elf \
233255
// RUN: -L some/directory/user/asked/for \
@@ -242,16 +264,20 @@
242264
// CHECK-RV32-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
243265
// CHECK-RV32-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
244266
// CHECK-RV32-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
245-
// CHECK-RV32-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
267+
// CHECK-RV32-SAME: "{{[^"]*}}libclang_rt.builtins.a"
268+
// CHECK-RV32-SAME: "-lc"
269+
// CHECK-RV32-SAME: "-X" "-o" "a.out"
246270

247271
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
248272
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
249273
// RUN: | FileCheck --check-prefix=CHECK-RV32-DEFAULTCXX %s
250274
// CHECK-RV32-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
251275
// CHECK-RV32-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
252276
// CHECK-RV32-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
253-
// CHECK-RV32-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
254-
// CHECK-RV32-DEFAULTCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
277+
// CHECK-RV32-DEFAULTCXX-SAME: "-lc++" "-lm"
278+
// CHECK-RV32-DEFAULTCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
279+
// CHECK-RV32-DEFAULTCXX-SAME: "-lc"
280+
// CHECK-RV32-DEFAULTCXX-SAME: "-X" "-o" "a.out"
255281

256282
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
257283
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
@@ -262,8 +288,9 @@
262288
// CHECK-RV32-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
263289
// CHECK-RV32-LIBCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
264290
// CHECK-RV32-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
265-
// CHECK-RV32-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
266-
// CHECK-RV32-LIBCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
291+
// CHECK-RV32-LIBCXX-SAME: "-lc++" "-lm"
292+
// CHECK-RV32-LIBCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
293+
// CHECK-RV32-LIBCXX-SAME: "-X" "-o" "a.out"
267294

268295
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
269296
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
@@ -274,8 +301,9 @@
274301
// CHECK-RV32-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}8.0.1"
275302
// CHECK-RV32-LIBSTDCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
276303
// CHECK-RV32-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
277-
// CHECK-RV32-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
278-
// CHECK-RV32-LIBSTDCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
304+
// CHECK-RV32-LIBSTDCXX-SAME: "-lstdc++" "-lm"
305+
// CHECK-RV32-LIBSTDCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
306+
// CHECK-RV32-LIBSTDCXX-SAME: "-lc" "-X" "-o" "a.out"
279307

280308
// RUN: %clang %s -### 2>&1 --target=riscv64-unknown-elf \
281309
// RUN: -nostdlibinc -nobuiltininc \
@@ -397,7 +425,9 @@
397425
// CHECK-PPCEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
398426
// CHECK-PPCEABI-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
399427
// CHECK-PPCEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
400-
// CHECK-PPCEABI-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-o" "a.out"
428+
// CHECK-PPCEABI-SAME: "{{[^"]*}}libclang_rt.builtins.a"
429+
// CHECK-PPCEABI-SAME: "-lc"
430+
// CHECK-PPCEABI-SAME: "-o" "a.out"
401431

402432
// RUN: %clang -no-canonical-prefixes %s -### --target=powerpc64-unknown-eabi 2>&1 \
403433
// RUN: | FileCheck --check-prefix=CHECK-PPC64EABI %s
@@ -409,7 +439,9 @@
409439
// CHECK-PPC64EABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
410440
// CHECK-PPC64EABI-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
411441
// CHECK-PPC64EABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
412-
// CHECK-PPC64EABI-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-o" "a.out"
442+
// CHECK-PPC64EABI-SAME: "{{[^"]*}}libclang_rt.builtins.a"
443+
// CHECK-PPC64EABI-SAME: "-lc"
444+
// CHECK-PPC64EABI-SAME: "-o" "a.out"
413445

414446
// RUN: %clang -no-canonical-prefixes %s -### --target=powerpcle-unknown-eabi 2>&1 \
415447
// RUN: | FileCheck --check-prefix=CHECK-PPCLEEABI %s
@@ -421,7 +453,9 @@
421453
// CHECK-PPCLEEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
422454
// CHECK-PPCLEEABI-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
423455
// CHECK-PPCLEEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
424-
// CHECK-PPCLEEABI-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-o" "a.out"
456+
// CHECK-PPCLEEABI-SAME: "{{[^"]*}}libclang_rt.builtins.a"
457+
// CHECK-PPCLEEABI-SAME: "-lc"
458+
// CHECK-PPCLEEABI-SAME: "-o" "a.out"
425459

426460
// RUN: %clang -no-canonical-prefixes %s -### --target=powerpc64le-unknown-eabi 2>&1 \
427461
// RUN: | FileCheck --check-prefix=CHECK-PPC64LEEABI %s
@@ -433,7 +467,9 @@
433467
// CHECK-PPC64LEEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
434468
// CHECK-PPC64LEEABI-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
435469
// CHECK-PPC64LEEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
436-
// CHECK-PPC64LEEABI-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-o" "a.out"
470+
// CHECK-PPC64LEEABI-SAME: "{{[^"]*}}libclang_rt.builtins.a"
471+
// CHECK-PPC64LEEABI-SAME: "-lc"
472+
// CHECK-PPC64LEEABI-SAME: "-o" "a.out"
437473

438474
// Check that compiler-rt library without the arch filename suffix will
439475
// be used if present.

lldb/include/lldb/Target/Platform.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,32 @@ class Platform : public PluginInterface {
473473
LLVM_PRETTY_FUNCTION, GetName()));
474474
}
475475

476+
/// Search CU for the SDK path the CUs was compiled against.
477+
///
478+
/// \param[in] unit The CU
479+
///
480+
/// \returns A parsed XcodeSDK object if successful, an Error otherwise.
481+
virtual llvm::Expected<XcodeSDK> GetSDKPathFromDebugInfo(CompileUnit &unit) {
482+
return llvm::createStringError(
483+
llvm::formatv("{0} not implemented for '{1}' platform.",
484+
LLVM_PRETTY_FUNCTION, GetName()));
485+
}
486+
487+
/// Returns the full path of the most appropriate SDK for the
488+
/// specified compile unit. This function gets this path by parsing
489+
/// debug-info (see \ref `GetSDKPathFromDebugInfo`).
490+
///
491+
/// \param[in] unit The CU to scan.
492+
///
493+
/// \returns If successful, returns the full path to an
494+
/// Xcode SDK.
495+
virtual llvm::Expected<std::string>
496+
ResolveSDKPathFromDebugInfo(CompileUnit &unit) {
497+
return llvm::createStringError(
498+
llvm::formatv("{0} not implemented for '{1}' platform.",
499+
LLVM_PRETTY_FUNCTION, GetName()));
500+
}
501+
476502
bool IsHost() const {
477503
return m_is_host; // Is this the default host platform?
478504
}

0 commit comments

Comments
 (0)