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; }