diff options
-rw-r--r-- | user/clang/APKBUILD | 4 | ||||
-rw-r--r-- | user/clang/secure-plt.patch | 70 |
2 files changed, 73 insertions, 1 deletions
diff --git a/user/clang/APKBUILD b/user/clang/APKBUILD index 826ca3373..a95693351 100644 --- a/user/clang/APKBUILD +++ b/user/clang/APKBUILD @@ -19,6 +19,7 @@ source="https://llvm.org/releases/$pkgver/cfe-$pkgver.src.tar.xz 0001-Add-support-for-Ad-lie-Linux.patch 0008-Fix-ClangConfig-cmake-LLVM-path.patch use-llvm-lit.patch + secure-plt.patch " builddir="$srcdir/cfe-$pkgver.src" @@ -86,4 +87,5 @@ analyzer() { sha512sums="f64ba9290059f6e36fee41c8f32bf483609d31c291fcd2f77d41fecfdf3c8233a5e23b93a1c73fed03683823bd6e72757ed993dd32527de3d5f2b7a64bb031b9 cfe-6.0.1.src.tar.xz 44aa152d50822a9e1a223b9e07e150ffa830c55deb4c4ca29e6218a0103eb263a00b41fd1ca84390e65fa08005901a0a0f88cf529bff8764220e99d06adef5fc 0001-Add-support-for-Ad-lie-Linux.patch 9485fe4fd6182df543735ed8f4ce618693d0faeafa86d3f9574a6c7abf50978e2d56e0a94be3ed94d515cc937c388d66ceff1bbc9bb120d371b6d3e95340da00 0008-Fix-ClangConfig-cmake-LLVM-path.patch -8a596e7369b5791e7e9c3278320aa5bac30d91f27d9a0df335ea862c359623869353d12145c3b64730f721600522f3acc5abe706428091482e0209e4ff308175 use-llvm-lit.patch" +8a596e7369b5791e7e9c3278320aa5bac30d91f27d9a0df335ea862c359623869353d12145c3b64730f721600522f3acc5abe706428091482e0209e4ff308175 use-llvm-lit.patch +23c3de4f8cbfa115b337ee115b4f95eb1ce3b8c6451de590b0ecf196a4b3bc96ab1d88029edf7f0c51299dffb7b2a05cade9c64c72dba18d858686466bb82bad secure-plt.patch" diff --git a/user/clang/secure-plt.patch b/user/clang/secure-plt.patch new file mode 100644 index 000000000..c1b4cb1de --- /dev/null +++ b/user/clang/secure-plt.patch @@ -0,0 +1,70 @@ +Index: cfe/include/clang/Driver/Options.td +=================================================================== +--- cfe/include/clang/Driver/Options.td ++++ cfe/include/clang/Driver/Options.td +@@ -1957,6 +1957,7 @@ + def mno_altivec : Flag<["-"], "mno-altivec">, Group<m_ppc_Features_Group>; + def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>; + def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>; ++def msecure_plt : Flag<["-"], "msecure-plt">, Group<m_ppc_Features_Group>; + def mpower8_vector : Flag<["-"], "mpower8-vector">, + Group<m_ppc_Features_Group>; + def mno_power8_vector : Flag<["-"], "mno-power8-vector">, +Index: cfe/lib/Driver/ToolChains/Arch/PPC.h +=================================================================== +--- cfe/lib/Driver/ToolChains/Arch/PPC.h ++++ cfe/lib/Driver/ToolChains/Arch/PPC.h +@@ -29,10 +29,17 @@ + Hard, + }; + ++enum class ReadGOTPtrMode { ++ Bss, ++ SecurePlt, ++}; ++ + FloatABI getPPCFloatABI(const Driver &D, const llvm::opt::ArgList &Args); + + std::string getPPCTargetCPU(const llvm::opt::ArgList &Args); + const char *getPPCAsmModeForCPU(StringRef Name); ++ReadGOTPtrMode getPPCReadGOTPtrMode(const Driver &D, ++ const llvm::opt::ArgList &Args); + + void getPPCTargetFeatures(const Driver &D, const llvm::Triple &Triple, + const llvm::opt::ArgList &Args, +Index: cfe/lib/Driver/ToolChains/Arch/PPC.cpp +=================================================================== +--- cfe/lib/Driver/ToolChains/Arch/PPC.cpp ++++ cfe/lib/Driver/ToolChains/Arch/PPC.cpp +@@ -106,6 +106,16 @@ + ppc::FloatABI FloatABI = ppc::getPPCFloatABI(D, Args); + if (FloatABI == ppc::FloatABI::Soft) + Features.push_back("-hard-float"); ++ ++ ppc::ReadGOTPtrMode ReadGOT = ppc::getPPCReadGOTPtrMode(D, Args); ++ if (ReadGOT == ppc::ReadGOTPtrMode::SecurePlt) ++ Features.push_back("+secure-plt"); ++} ++ ++ppc::ReadGOTPtrMode ppc::getPPCReadGOTPtrMode(const Driver &D, const ArgList &Args) { ++ if (Args.getLastArg(options::OPT_msecure_plt)) ++ return ppc::ReadGOTPtrMode::SecurePlt; ++ return ppc::ReadGOTPtrMode::Bss; + } + + ppc::FloatABI ppc::getPPCFloatABI(const Driver &D, const ArgList &Args) { +Index: cfe/test/Driver/ppc-features.cpp +=================================================================== +--- cfe/test/Driver/ppc-features.cpp ++++ cfe/test/Driver/ppc-features.cpp +@@ -22,6 +22,10 @@ + // RUN: %clang -target powerpc-unknown-linux-gnu %s -msoft-float -mhard-float -### -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-SOFTHARD %s + // CHECK-SOFTHARD-NOT: "-target-feature" "-hard-float" + ++// check -msecure-plt option for ppc32 ++// RUN: %clang -target powerpc-unknown-linux-gnu -msecure-plt %s -### -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-SECUREPLT %s ++// CHECK-SECUREPLT: "-target-feature" "+secure-plt" ++ + // check -mfloat-abi=x option + // RUN: %clang -target powerpc-unknown-linux-gnu %s -mfloat-abi=x -### -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-ERRMSG %s + // CHECK-ERRMSG: error: invalid float ABI '-mfloat-abi=x' |