Skip to content

Commit c616fdc

Browse files
[PS5][Driver] Pass user search paths to linker before implict ones (#119875)
Responsibility for setting up implicit library search paths was recently transferred to the PS5 driver (#109796). Prior to this, SIE private patches in lld performed this function. During the transition, I failed to maintain the order in which implicit and user-supplied search paths were supplied/considered. This change ensures user-supplied search paths appear before any implicit ones on the link line. SIE tracker: TOOLCHAIN-17490
1 parent 976f877 commit c616fdc

File tree

2 files changed

+15
-16
lines changed

2 files changed

+15
-16
lines changed

clang/lib/Driver/ToolChains/PS4CPU.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,9 +361,10 @@ void tools::PS5cpu::Linker::ConstructJob(Compilation &C, const JobAction &JA,
361361
if (StringRef Jobs = getLTOParallelism(Args, D); !Jobs.empty())
362362
AddLTOFlag(Twine("jobs=") + Jobs);
363363

364+
Args.AddAllArgs(CmdArgs, options::OPT_L);
364365
TC.AddFilePathLibArgs(Args, CmdArgs);
365-
Args.addAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
366-
options::OPT_s, options::OPT_t});
366+
Args.addAllArgs(CmdArgs,
367+
{options::OPT_T_Group, options::OPT_s, options::OPT_t});
367368

368369
if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle))
369370
CmdArgs.push_back("--no-demangle");

clang/test/Driver/ps5-linker.c

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -172,29 +172,27 @@
172172
// CHECK-SYSROOT: {{ld(\.exe)?}}"
173173
// CHECK-SYSROOT-SAME: "--sysroot=mysdk"
174174

175-
// Test that "." is always added to library search paths. This is long-standing
176-
// behavior, unique to PlayStation toolchains.
177-
178-
// RUN: %clang --target=x64_64-sie-ps5 %s -### 2>&1 | FileCheck --check-prefixes=CHECK-LDOT %s
179-
180-
// CHECK-LDOT: {{ld(\.exe)?}}"
181-
// CHECK-LDOT-SAME: "-L."
182-
183-
// Test that <sdk-root>/target/lib is added to library search paths, if it
184-
// exists and no --sysroot is specified. Also confirm that CRT objects are
185-
// found there.
175+
// Test implicit library search paths are supplied to the linker, after any
176+
// search paths specified by the user. <sdk-root>/target/lib is implicitly
177+
// added if it exists and no --sysroot is specified. CRT objects are found
178+
// there. "." is always implicitly added to library search paths. This is
179+
// long-standing behavior, unique to PlayStation toolchains.
186180

187181
// RUN: rm -rf %t.dir && mkdir %t.dir
188-
// RUN: env SCE_PROSPERO_SDK_DIR=%t.dir %clang --target=x64_64-sie-ps5 %s -### 2>&1 | FileCheck --check-prefixes=CHECK-NO-TARGETLIB %s
189-
// RUN: env SCE_PROSPERO_SDK_DIR=%t.dir %clang --target=x64_64-sie-ps5 %s -### --sysroot=%t.dir 2>&1 | FileCheck --check-prefixes=CHECK-NO-TARGETLIB %s
182+
// RUN: env SCE_PROSPERO_SDK_DIR=%t.dir %clang --target=x64_64-sie-ps5 %s -### -Luser 2>&1 | FileCheck --check-prefixes=CHECK-NO-TARGETLIB %s
183+
// RUN: env SCE_PROSPERO_SDK_DIR=%t.dir %clang --target=x64_64-sie-ps5 %s -### -Luser --sysroot=%t.dir 2>&1 | FileCheck --check-prefixes=CHECK-NO-TARGETLIB %s
190184

191185
// CHECK-NO-TARGETLIB: {{ld(\.exe)?}}"
186+
// CHECK-NO-TARGETLIB-SAME: "-Luser"
192187
// CHECK-NO-TARGETLIB-NOT: "-L{{.*[/\\]}}target/lib"
188+
// CHECK-NO-TARGETLIB-SAME: "-L."
193189

194190
// RUN: mkdir -p %t.dir/target/lib
195191
// RUN: touch %t.dir/target/lib/crti.o
196-
// RUN: env SCE_PROSPERO_SDK_DIR=%t.dir %clang --target=x64_64-sie-ps5 %s -### 2>&1 | FileCheck --check-prefixes=CHECK-TARGETLIB %s
192+
// RUN: env SCE_PROSPERO_SDK_DIR=%t.dir %clang --target=x64_64-sie-ps5 %s -### -Luser 2>&1 | FileCheck --check-prefixes=CHECK-TARGETLIB %s
197193

198194
// CHECK-TARGETLIB: {{ld(\.exe)?}}"
195+
// CHECK-TARGETLIB-SAME: "-Luser"
199196
// CHECK-TARGETLIB-SAME: "-L{{.*[/\\]}}target/lib"
197+
// CHECK-TARGETLIB-SAME: "-L."
200198
// CHECK-TARGETLIB-SAME: "{{.*[/\\]}}target{{/|\\\\}}lib{{/|\\\\}}crti.o"

0 commit comments

Comments
 (0)