summaryrefslogtreecommitdiff
path: root/user/llvm6/more-secure-plt.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/llvm6/more-secure-plt.patch')
-rw-r--r--user/llvm6/more-secure-plt.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/user/llvm6/more-secure-plt.patch b/user/llvm6/more-secure-plt.patch
new file mode 100644
index 000000000..1cc08a9a8
--- /dev/null
+++ b/user/llvm6/more-secure-plt.patch
@@ -0,0 +1,38 @@
+diff --git a/lib/Target/PowerPC/PPCSubtarget.cpp b/lib/Target/PowerPC/PPCSubtarget.cpp
+index c0cbfd779cb..5d7a021c3e2 100644
+--- a/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -106,6 +106,7 @@
+ HasFloat128 = false;
+ IsISA3_0 = false;
+ UseLongCalls = false;
++ SecurePlt = false;
+
+ HasPOPCNTD = POPCNTD_Unavailable;
+ }
+@@ -136,6 +137,10 @@
+ if (isDarwin())
+ HasLazyResolverStubs = true;
+
++ // Set up musl-specific properties.
++ if (TargetTriple.getEnvironment() == Triple::Musl)
++ SecurePlt = true;
++
+ // QPX requires a 32-byte aligned stack. Note that we need to do this if
+ // we're compiling for a BG/Q system regardless of whether or not QPX
+ // is enabled because external functions will assume this alignment.
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index c583fba8cab..6a9eedf89c5 100644
+--- a/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,6 +222,10 @@ static Reloc::Model getEffectiveRelocModel(const Triple &TT,
+ if (TT.getArch() == Triple::ppc64 || TT.getArch() == Triple::ppc64le)
+ return Reloc::PIC_;
+
++ // musl needs SecurePlt, which depends on PIC.
++ if (TT.getEnvironment() == Triple::Musl)
++ return Reloc::PIC_;
++
+ // 32-bit is static by default.
+ return Reloc::Static;
+ }