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

Reply via email to