https://github.com/playstation-edd updated https://github.com/llvm/llvm-project/pull/115497
>From 112e3e7ca9e3fd041fb0a1a0b7d97aa26740a908 Mon Sep 17 00:00:00 2001 From: Edd Dawson <edd.daw...@sony.com> Date: Thu, 7 Nov 2024 13:57:45 +0000 Subject: [PATCH 1/5] [PS5][Driver] Supply libraries and CRT objects to the linker Until now, these have been hardcoded as a downstream patches in lld. Add them to the driver so that the private patches can be removed. PS5 only. On PS4, the equivalent hardcoded configuration will remain in the proprietary linker. SIE tracker: TOOLCHAIN-16704 --- clang/lib/Driver/ToolChains/PS4CPU.cpp | 66 +++++++++++++++++++++----- clang/test/Driver/ps5-linker.c | 59 ++++++++++++++++++++++- 2 files changed, 113 insertions(+), 12 deletions(-) diff --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp index df43da93d77555..79cb31d10cdf04 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.cpp +++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp @@ -183,6 +183,7 @@ void tools::PS4cpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back( Args.MakeArgString(Twine("-lto-debug-options=") + LTOArgs)); + // Sanitizer runtimes must be supplied before all other objects and libs. if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) TC.addSanitizerArgs(Args, CmdArgs, "-l", ""); @@ -358,9 +359,6 @@ void tools::PS5cpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (StringRef Jobs = getLTOParallelism(Args, D); !Jobs.empty()) AddLTOFlag(Twine("jobs=") + Jobs); - if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) - TC.addSanitizerArgs(Args, CmdArgs, "-l", ""); - TC.AddFilePathLibArgs(Args, CmdArgs); Args.addAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group, options::OPT_s, options::OPT_t}); @@ -368,17 +366,63 @@ void tools::PS5cpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle)) CmdArgs.push_back("--no-demangle"); - AddLinkerInputs(TC, Inputs, Args, CmdArgs, JA); + // Sanitizer runtimes must be supplied before all other objects and libs. + if (!Args.hasArg(options::OPT_nodefaultlibs, options::OPT_nostdlib)) + TC.addSanitizerArgs(Args, CmdArgs, "-l", ""); - if (Args.hasArg(options::OPT_pthread)) { - CmdArgs.push_back("-lpthread"); + const bool AddStartFiles = + !Relocatable && + !Args.hasArg(options::OPT_nostartfiles, options::OPT_nostdlib); + + auto AddCRTObject = [&](const char *Name) { + CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(Name))); + }; + + if (AddStartFiles) { + if (!Shared) + AddCRTObject("crt1.o"); + AddCRTObject("crti.o"); + AddCRTObject(Shared ? "crtbeginS.o" + : Static ? "crtbeginT.o" + : "crtbegin.o"); } - if (UseJMC) { - CmdArgs.push_back("--push-state"); - CmdArgs.push_back("--whole-archive"); - CmdArgs.push_back("-lSceJmc_nosubmission"); - CmdArgs.push_back("--pop-state"); + AddLinkerInputs(TC, Inputs, Args, CmdArgs, JA); + + if (!Relocatable && + !Args.hasArg(options::OPT_nodefaultlibs, options::OPT_nostdlib)) { + + if (UseJMC) { + CmdArgs.push_back("--push-state"); + CmdArgs.push_back("--whole-archive"); + CmdArgs.push_back("-lSceJmc_nosubmission"); + CmdArgs.push_back("--pop-state"); + } + + if (Args.hasArg(options::OPT_pthread)) + CmdArgs.push_back("-lpthread"); + + if (Static) { + if (!Args.hasArg(options::OPT_nostdlibxx)) + CmdArgs.push_back("-lstdc++"); + if (!Args.hasArg(options::OPT_nolibc)) { + CmdArgs.push_back("-lm"); + CmdArgs.push_back("-lc"); + } + + CmdArgs.push_back("-lcompiler_rt"); + CmdArgs.push_back("-lkernel"); + } else { + // The C and C++ libraries are combined. + if (!Args.hasArg(options::OPT_nolibc, options::OPT_nostdlibxx)) + CmdArgs.push_back("-lc_stub_weak"); + + CmdArgs.push_back("-lkernel_stub_weak"); + } + } + if (AddStartFiles) { + AddCRTObject(Shared ? "crtendS.o" : "crtend.o"); + AddCRTObject("crtn.o"); } if (Args.hasArg(options::OPT_fuse_ld_EQ)) { diff --git a/clang/test/Driver/ps5-linker.c b/clang/test/Driver/ps5-linker.c index 95267942edc172..7a4b2afdf04e9c 100644 --- a/clang/test/Driver/ps5-linker.c +++ b/clang/test/Driver/ps5-linker.c @@ -97,6 +97,60 @@ // Check the default library name. // CHECK-JMC: "--push-state" "--whole-archive" "-lSceJmc_nosubmission" "--pop-state" +// Test that CRT objects and libraries are supplied to the linker and can be +// omitted with -noxxx options. These switches have some interaction with +// sanitizer RT libraries. That's checked in fsanitize.c + +// RUN: %clang --target=x86_64-sie-ps5 %s -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -r -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s + +// RUN: %clang --target=x86_64-sie-ps5 %s -pthread -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-PTHREAD %s + +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-STATIC-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s + +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-NO-LIBS %s + +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s + +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBCPP,CHECK-NO-LIBC,CHECK-STATIC-CORE-LIBS %s + +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBCPP,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBCPP,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-NO-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s + +// CHECK-LD: {{ld(\.exe)?}}" +// CHECK-MAIN-CRT-SAME: "crt1.o" "crti.o" "crtbegin.o" +// CHECK-SHARED-CRT-SAME: "crti.o" "crtbeginS.o" +// CHECK-STATIC-CRT-SAMW: "crt1.o" "crti.o" "crtbeginT.o" + +// CHECK-NO-LIBC-NOT: "-lc{{(_stub_weak)?}}" +// CHECK-NO-LIBCPP-NOT: "-l{{c_stub_weak|stdc\+\+}}" + +// CHECK-DYNAMIC-LIBC-SAME: "-lc_stub_weak" +// CHECK-DYNAMIC-CORE-LIBS-SAME: "-lkernel_stub_weak" +// CHECK-STATIC-LIBCPP-SAME: "-lstdc++" +// CHECK-STATIC-LIBC-SAME: "-lm" "-lc" +// CHECK-STATIC-CORE-LIBS-SAME: "-lcompiler_rt" "-lkernel" + +// CHECK-PTHREAD-SAME: "-lpthread" + +// CHECK-MAIN-CRT-SAME: "crtend.o" "crtn.o" +// CHECK-SHARED-CRT-SAME: "crtendS.o" "crtn.o" +// CHECK-STATIC-CRT-SAME: "crtend.o" "crtn.o" + +// CHECK-NO-CRT-NOT: "crt{{[^"]*}}.o" +// CHECK-NO-LIBS-NOT: "-l{{[^"]*}}" + // Test the driver's control over the -fcrash-diagnostics-dir behavior with linker flags. // RUN: %clang --target=x86_64-sie-ps5 -fcrash-diagnostics-dir=mydumps %s -### 2>&1 | FileCheck --check-prefixes=CHECK-DIAG %s @@ -122,7 +176,8 @@ // CHECK-LDOT-SAME: "-L." // Test that <sdk-root>/target/lib is added to library search paths, if it -// exists and no --sysroot is specified. +// exists and no --sysroot is specified. Also confirm that CRT objects are +// found there. // RUN: rm -rf %t.dir && mkdir %t.dir // RUN: env SCE_PROSPERO_SDK_DIR=%t.dir %clang --target=x64_64-sie-ps5 %s -### 2>&1 | FileCheck --check-prefixes=CHECK-NO-TARGETLIB %s @@ -132,7 +187,9 @@ // CHECK-NO-TARGETLIB-NOT: "-L{{.*[/\\]}}target/lib" // RUN: mkdir -p %t.dir/target/lib +// RUN: touch %t.dir/target/lib/crti.o // RUN: env SCE_PROSPERO_SDK_DIR=%t.dir %clang --target=x64_64-sie-ps5 %s -### 2>&1 | FileCheck --check-prefixes=CHECK-TARGETLIB %s // CHECK-TARGETLIB: {{ld(\.exe)?}}" // CHECK-TARGETLIB-SAME: "-L{{.*[/\\]}}target/lib" +// CHECK-TARGETLIB-SAME: "{{.*[/\\]}}target{{/|\\\\}}lib{{/|\\\\}}crti.o" >From 66a51b5bf5c084f03b1940ebf0f56d67a86b2363 Mon Sep 17 00:00:00 2001 From: Edd Dawson <edd.daw...@sony.com> Date: Mon, 11 Nov 2024 12:31:21 +0000 Subject: [PATCH 2/5] Fix typo in test, causing less FileCheck-ing than intended --- clang/test/Driver/ps5-linker.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Driver/ps5-linker.c b/clang/test/Driver/ps5-linker.c index 7a4b2afdf04e9c..ffbea090e057e2 100644 --- a/clang/test/Driver/ps5-linker.c +++ b/clang/test/Driver/ps5-linker.c @@ -131,7 +131,7 @@ // CHECK-LD: {{ld(\.exe)?}}" // CHECK-MAIN-CRT-SAME: "crt1.o" "crti.o" "crtbegin.o" // CHECK-SHARED-CRT-SAME: "crti.o" "crtbeginS.o" -// CHECK-STATIC-CRT-SAMW: "crt1.o" "crti.o" "crtbeginT.o" +// CHECK-STATIC-CRT-SAME: "crt1.o" "crti.o" "crtbeginT.o" // CHECK-NO-LIBC-NOT: "-lc{{(_stub_weak)?}}" // CHECK-NO-LIBCPP-NOT: "-l{{c_stub_weak|stdc\+\+}}" >From 014e3dd69d3543f0199262b7d6b6079c0842c984 Mon Sep 17 00:00:00 2001 From: Edd Dawson <edd.daw...@sony.com> Date: Mon, 11 Nov 2024 13:07:41 +0000 Subject: [PATCH 3/5] Use --implicit-check-not instead of CHECK-XYZ-NOT --- clang/test/Driver/ps5-linker.c | 38 ++++++++++++++-------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/clang/test/Driver/ps5-linker.c b/clang/test/Driver/ps5-linker.c index ffbea090e057e2..47fcad5c801d4a 100644 --- a/clang/test/Driver/ps5-linker.c +++ b/clang/test/Driver/ps5-linker.c @@ -104,38 +104,35 @@ // RUN: %clang --target=x86_64-sie-ps5 %s -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s // RUN: %clang --target=x86_64-sie-ps5 %s -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s // RUN: %clang --target=x86_64-sie-ps5 %s -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -r -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -r -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD %s // RUN: %clang --target=x86_64-sie-ps5 %s -pthread -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-PTHREAD %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-STATIC-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" --check-prefixes=CHECK-LD,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -shared -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" --check-prefixes=CHECK-LD,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -static -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" --check-prefixes=CHECK-LD,CHECK-STATIC-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -### 2>&1 | FileCheck "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD,CHECK-MAIN-CRT %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -shared -### 2>&1 | FileCheck "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD,CHECK-SHARED-CRT %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -static -### 2>&1 | FileCheck "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD,CHECK-STATIC-CRT %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -shared -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -static -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBC,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBC,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBCPP,CHECK-NO-LIBC,CHECK-STATIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -### 2>&1 | FileCheck "--implicit-check-not=\"-lc_stub_weak\"" --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -shared -### 2>&1 | FileCheck "--implicit-check-not=\"-lc_stub_weak\"" --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -static -### 2>&1 | FileCheck "--implicit-check-not=\"-lc\"" --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBCPP,CHECK-STATIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBCPP,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBCPP,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-NO-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -### 2>&1 | FileCheck "--implicit-check-not=\"-lc_stub_weak\"" --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -shared -### 2>&1 | FileCheck "--implicit-check-not=\"-lc_stub_weak\"" --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -static -### 2>&1 | FileCheck "--implicit-check-not=\"-lstdc++\"" --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s // CHECK-LD: {{ld(\.exe)?}}" // CHECK-MAIN-CRT-SAME: "crt1.o" "crti.o" "crtbegin.o" // CHECK-SHARED-CRT-SAME: "crti.o" "crtbeginS.o" // CHECK-STATIC-CRT-SAME: "crt1.o" "crti.o" "crtbeginT.o" -// CHECK-NO-LIBC-NOT: "-lc{{(_stub_weak)?}}" -// CHECK-NO-LIBCPP-NOT: "-l{{c_stub_weak|stdc\+\+}}" - // CHECK-DYNAMIC-LIBC-SAME: "-lc_stub_weak" // CHECK-DYNAMIC-CORE-LIBS-SAME: "-lkernel_stub_weak" // CHECK-STATIC-LIBCPP-SAME: "-lstdc++" @@ -148,9 +145,6 @@ // CHECK-SHARED-CRT-SAME: "crtendS.o" "crtn.o" // CHECK-STATIC-CRT-SAME: "crtend.o" "crtn.o" -// CHECK-NO-CRT-NOT: "crt{{[^"]*}}.o" -// CHECK-NO-LIBS-NOT: "-l{{[^"]*}}" - // Test the driver's control over the -fcrash-diagnostics-dir behavior with linker flags. // RUN: %clang --target=x86_64-sie-ps5 -fcrash-diagnostics-dir=mydumps %s -### 2>&1 | FileCheck --check-prefixes=CHECK-DIAG %s >From 100c3c271437b3b6181a5a57381363f4b6e9e841 Mon Sep 17 00:00:00 2001 From: Edd Dawson <edd.daw...@sony.com> Date: Mon, 11 Nov 2024 16:24:52 +0000 Subject: [PATCH 4/5] Restore original condition for adding sanitizer libs. Got knocked somewhere along the way. (NFC) --- clang/lib/Driver/ToolChains/PS4CPU.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp index 79cb31d10cdf04..485ce1a64eb834 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.cpp +++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp @@ -367,7 +367,7 @@ void tools::PS5cpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("--no-demangle"); // Sanitizer runtimes must be supplied before all other objects and libs. - if (!Args.hasArg(options::OPT_nodefaultlibs, options::OPT_nostdlib)) + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) TC.addSanitizerArgs(Args, CmdArgs, "-l", ""); const bool AddStartFiles = >From b458e69c91bca0f4b9051f1d99ca8010ceacb511 Mon Sep 17 00:00:00 2001 From: Edd Dawson <edd.daw...@sony.com> Date: Mon, 11 Nov 2024 18:53:15 +0000 Subject: [PATCH 5/5] Revert "Use --implicit-check-not instead of CHECK-XYZ-NOT" This reverts commit 014e3dd69d3543f0199262b7d6b6079c0842c984. Reviewers agree that things were better before. --- clang/test/Driver/ps5-linker.c | 38 ++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/clang/test/Driver/ps5-linker.c b/clang/test/Driver/ps5-linker.c index 47fcad5c801d4a..ffbea090e057e2 100644 --- a/clang/test/Driver/ps5-linker.c +++ b/clang/test/Driver/ps5-linker.c @@ -104,35 +104,38 @@ // RUN: %clang --target=x86_64-sie-ps5 %s -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s // RUN: %clang --target=x86_64-sie-ps5 %s -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s // RUN: %clang --target=x86_64-sie-ps5 %s -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -r -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD %s +// RUN: %clang --target=x86_64-sie-ps5 %s -r -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s // RUN: %clang --target=x86_64-sie-ps5 %s -pthread -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-PTHREAD %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" --check-prefixes=CHECK-LD,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -shared -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" --check-prefixes=CHECK-LD,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -static -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" --check-prefixes=CHECK-LD,CHECK-STATIC-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-DYNAMIC-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostartfiles -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-STATIC-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -### 2>&1 | FileCheck "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD,CHECK-MAIN-CRT %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -shared -### 2>&1 | FileCheck "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD,CHECK-SHARED-CRT %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -static -### 2>&1 | FileCheck "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD,CHECK-STATIC-CRT %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nodefaultlibs -pthread -fjmc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-NO-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -shared -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -static -### 2>&1 | FileCheck "--implicit-check-not=\"crt{{[^\"]*}}.o\"" "--implicit-check-not=\"-l{{[^\"]*}}\"" --check-prefixes=CHECK-LD %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib -pthread -fjmc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-NO-CRT,CHECK-NO-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -### 2>&1 | FileCheck "--implicit-check-not=\"-lc_stub_weak\"" --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -shared -### 2>&1 | FileCheck "--implicit-check-not=\"-lc_stub_weak\"" --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -static -### 2>&1 | FileCheck "--implicit-check-not=\"-lc\"" --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBCPP,CHECK-STATIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBC,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nolibc -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBCPP,CHECK-NO-LIBC,CHECK-STATIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -### 2>&1 | FileCheck "--implicit-check-not=\"-lc_stub_weak\"" --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -shared -### 2>&1 | FileCheck "--implicit-check-not=\"-lc_stub_weak\"" --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-DYNAMIC-CORE-LIBS %s -// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -static -### 2>&1 | FileCheck "--implicit-check-not=\"-lstdc++\"" --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-MAIN-CRT,CHECK-NO-LIBCPP,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -shared -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-SHARED-CRT,CHECK-NO-LIBCPP,CHECK-DYNAMIC-CORE-LIBS %s +// RUN: %clang --target=x86_64-sie-ps5 %s -nostdlib++ -static -### 2>&1 | FileCheck --check-prefixes=CHECK-LD,CHECK-STATIC-CRT,CHECK-NO-LIBCPP,CHECK-STATIC-LIBC,CHECK-STATIC-CORE-LIBS %s // CHECK-LD: {{ld(\.exe)?}}" // CHECK-MAIN-CRT-SAME: "crt1.o" "crti.o" "crtbegin.o" // CHECK-SHARED-CRT-SAME: "crti.o" "crtbeginS.o" // CHECK-STATIC-CRT-SAME: "crt1.o" "crti.o" "crtbeginT.o" +// CHECK-NO-LIBC-NOT: "-lc{{(_stub_weak)?}}" +// CHECK-NO-LIBCPP-NOT: "-l{{c_stub_weak|stdc\+\+}}" + // CHECK-DYNAMIC-LIBC-SAME: "-lc_stub_weak" // CHECK-DYNAMIC-CORE-LIBS-SAME: "-lkernel_stub_weak" // CHECK-STATIC-LIBCPP-SAME: "-lstdc++" @@ -145,6 +148,9 @@ // CHECK-SHARED-CRT-SAME: "crtendS.o" "crtn.o" // CHECK-STATIC-CRT-SAME: "crtend.o" "crtn.o" +// CHECK-NO-CRT-NOT: "crt{{[^"]*}}.o" +// CHECK-NO-LIBS-NOT: "-l{{[^"]*}}" + // Test the driver's control over the -fcrash-diagnostics-dir behavior with linker flags. // RUN: %clang --target=x86_64-sie-ps5 -fcrash-diagnostics-dir=mydumps %s -### 2>&1 | FileCheck --check-prefixes=CHECK-DIAG %s _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits