Author: Paul Robinson Date: 2022-05-23T12:50:22-07:00 New Revision: 217531f12b4b97dadb80c66ab97c71e57ae0adcf
URL: https://github.com/llvm/llvm-project/commit/217531f12b4b97dadb80c66ab97c71e57ae0adcf DIFF: https://github.com/llvm/llvm-project/commit/217531f12b4b97dadb80c66ab97c71e57ae0adcf.diff LOG: [PS5] Make driver's PIC behavior match PS4 The new test is a copy of the corresponding PS4 test, with the triple etc updated, because there's currently no good way to make one lit test "iterate" with multiple targets. Added: clang/test/Driver/ps5-pic.c Modified: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/lib/Driver/ToolChains/CommonArgs.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 7961b006a9a00..3cc9565e6e8b2 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -546,8 +546,8 @@ def warn_drv_unable_to_find_directory_expected : Warning< "unable to find %0 directory, expected to be in '%1'">, InGroup<InvalidOrNonExistentDirectory>, DefaultIgnore; -def warn_drv_ps4_force_pic : Warning< - "option '%0' was ignored by the PS4 toolchain, using '-fPIC'">, +def warn_drv_ps_force_pic : Warning< + "option '%0' was ignored by the %1 toolchain, using '-fPIC'">, InGroup<OptionIgnored>; def warn_drv_ps_sdk_dir : Warning< diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 33f3df80a2a2e..45add8ad94a5f 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1286,23 +1286,24 @@ tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) { O.matches(options::OPT_fPIE) || O.matches(options::OPT_fPIC); } else { PIE = PIC = false; - if (EffectiveTriple.isPS4()) { + if (EffectiveTriple.isPS()) { Arg *ModelArg = Args.getLastArg(options::OPT_mcmodel_EQ); StringRef Model = ModelArg ? ModelArg->getValue() : ""; if (Model != "kernel") { PIC = true; - ToolChain.getDriver().Diag(diag::warn_drv_ps4_force_pic) - << LastPICArg->getSpelling(); + ToolChain.getDriver().Diag(diag::warn_drv_ps_force_pic) + << LastPICArg->getSpelling() + << (EffectiveTriple.isPS4() ? "PS4" : "PS5"); } } } } } - // Introduce a Darwin and PS4-specific hack. If the default is PIC, but the - // PIC level would've been set to level 1, force it back to level 2 PIC + // Introduce a Darwin and PS4/PS5-specific hack. If the default is PIC, but + // the PIC level would've been set to level 1, force it back to level 2 PIC // instead. - if (PIC && (Triple.isOSDarwin() || EffectiveTriple.isPS4())) + if (PIC && (Triple.isOSDarwin() || EffectiveTriple.isPS())) IsPICLevelTwo |= ToolChain.isPICDefault(); // This kernel flags are a trump-card: they will disable PIC/PIE diff --git a/clang/test/Driver/ps5-pic.c b/clang/test/Driver/ps5-pic.c new file mode 100644 index 0000000000000..0396122accf40 --- /dev/null +++ b/clang/test/Driver/ps5-pic.c @@ -0,0 +1,106 @@ +// REQUIRES: x86-registered-target + +// Test the driver's control over the PIC behavior for PS5 compiler. +// These consist of tests of the relocation model flags and the +// pic level flags passed to CC1. +// +// CHECK-NO-PIC: "-mrelocation-model" "static" +// CHECK-NO-PIC-NOT: "-pic-level" +// CHECK-NO-PIC-NOT: "-pic-is-pie" +// +// CHECK-DYNAMIC-NO-PIC2: unsupported option '-mdynamic-no-pic' +// CHECK-DYNAMIC-NO-PIC2: "-mrelocation-model" "dynamic-no-pic" +// +// CHECK-PIC2: "-mrelocation-model" "pic" +// CHECK-PIC2: "-pic-level" "2" +// +// CHECK-PIE2: "-mrelocation-model" "pic" +// CHECK-PIE2: "-pic-is-pie" +// +// CHECK-NOPIC-IGNORED: using '-fPIC' +// CHECK-NOPIC-IGNORED: "-mrelocation-model" "pic" +// CHECK-NOPIC-IGNORED: "-pic-level" "2" +// +// CHECK-DIAG-PIC: option '-fno-PIC' was ignored by the PS5 toolchain, using '-fPIC' +// CHECK-DIAG-PIE: option '-fno-PIE' was ignored by the PS5 toolchain, using '-fPIC' +// CHECK-DIAG-pic: option '-fno-pic' was ignored by the PS5 toolchain, using '-fPIC' +// CHECK-DIAG-pie: option '-fno-pie' was ignored by the PS5 toolchain, using '-fPIC' +// +// CHECK-STATIC-ERR: unsupported option '-static' for target 'PS5' + +// RUN: %clang -c %s -target x86_64-sie-ps5 -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpic -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fPIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fPIE -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpic -fno-pic -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fPIC -fno-PIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpic -fno-PIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fPIC -fno-pic -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpie -fno-pie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fPIE -fno-PIE -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpie -fno-PIE -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fPIE -fno-pie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpie -fno-pic -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpic -fno-pie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpic -fPIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fPIC -fpic -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpic -fPIE -fpie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fpie -fPIC -fPIE -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 +// +// Defaults change for PS5. +// RUN: %clang -c %s -target x86_64-sie-ps5 -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 +// RUN: %clang -c %s -target x86_64-sie-ps5 -fno-pic -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// RUN: %clang -c %s -target x86_64-sie-ps5 -fno-PIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED +// +// Disregard any of the PIC-specific flags if we have a trump-card flag. +// RUN: %clang -c %s -target x86_64-sie-ps5 -mkernel -fPIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC +// RUN: %clang -c %s -target x86_64-sie-ps5 -mdynamic-no-pic -fPIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC2 +// +// -static not supported at all. +// RUN: %clang -c %s -target x86_64-sie-ps5 -static -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-STATIC-ERR +// +// -fno-PIC etc. is obeyed if -mcmodel=kernel is also present. +// RUN: %clang -c %s -target x86_64-sie-ps5 -mcmodel=kernel -fno-PIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC +// RUN: %clang -c %s -target x86_64-sie-ps5 -mcmodel=kernel -fno-PIE -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC +// RUN: %clang -c %s -target x86_64-sie-ps5 -mcmodel=kernel -fno-pic -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC +// RUN: %clang -c %s -target x86_64-sie-ps5 -mcmodel=kernel -fno-pie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC +// +// Verify that we reflect the option the user specified, when we ignore it. +// RUN: %clang -c %s -target x86_64-sie-ps5 -fno-PIC -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-DIAG-PIC +// RUN: %clang -c %s -target x86_64-sie-ps5 -fno-PIE -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-DIAG-PIE +// RUN: %clang -c %s -target x86_64-sie-ps5 -fno-pic -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-DIAG-pic +// RUN: %clang -c %s -target x86_64-sie-ps5 -fno-pie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-DIAG-pie _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits