summaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
Diffstat (limited to 'user')
-rw-r--r--user/llvm6/cmake-fix-libLLVM-name.patch26
-rw-r--r--user/llvm6/more-secure-plt.patch38
-rw-r--r--user/llvm6/secure-plt.patch208
-rw-r--r--user/llvm7/APKBUILD (renamed from user/llvm6/APKBUILD)19
-rw-r--r--user/llvm7/disable-FileSystemTest.CreateDir-perms-assert.patch (renamed from user/llvm6/disable-FileSystemTest.CreateDir-perms-assert.patch)0
-rw-r--r--user/llvm7/disable-dlclose-test.patch (renamed from user/llvm6/disable-dlclose-test.patch)0
-rw-r--r--user/llvm7/even-more-secure-plt.patch (renamed from user/llvm6/even-more-secure-plt.patch)0
-rw-r--r--user/llvm7/llvm-fix-build-with-musl-libc.patch (renamed from user/llvm6/llvm-fix-build-with-musl-libc.patch)0
-rw-r--r--user/llvm7/more-secure-plt.patch15
-rw-r--r--user/llvm7/musl-ppc64-elfv2.patch (renamed from user/llvm6/musl-ppc64-elfv2.patch)0
-rw-r--r--user/llvm7/ppc32-calling-convention.patch (renamed from user/llvm6/ppc32-calling-convention.patch)0
-rw-r--r--user/llvm7/python3-test.patch8
12 files changed, 31 insertions, 283 deletions
diff --git a/user/llvm6/cmake-fix-libLLVM-name.patch b/user/llvm6/cmake-fix-libLLVM-name.patch
deleted file mode 100644
index cb29fe2ef..000000000
--- a/user/llvm6/cmake-fix-libLLVM-name.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Include version in name of shared libs
-
-libLLVM.so -> libLLVM-$MAJOR.$MINOR.so
-
-Source: http://pkgs.fedoraproject.org/cgit/rpms/llvm3.9.git/tree/llvm-soversion.patch?id=3dac83eaa5b88f550ae50125b14b8f644e10617b
---- a/cmake/modules/AddLLVM.cmake
-+++ b/cmake/modules/AddLLVM.cmake
-@@ -450,6 +450,18 @@
- PREFIX ""
- )
- endif()
-+
-+ # Set SOVERSION on shared libraries that lack explicit SONAME
-+ # specifier, on *nix systems that are not Darwin.
-+ if(UNIX AND NOT APPLE AND NOT ARG_SONAME)
-+ set_target_properties(${name}
-+ PROPERTIES
-+ # Concatenate the version numbers since ldconfig expects exactly
-+ # one component indicating the ABI version, while LLVM uses
-+ # major+minor for that.
-+ SOVERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}
-+ VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX})
-+ endif()
- endif()
-
- if(ARG_MODULE OR ARG_SHARED)
diff --git a/user/llvm6/more-secure-plt.patch b/user/llvm6/more-secure-plt.patch
deleted file mode 100644
index 1cc08a9a8..000000000
--- a/user/llvm6/more-secure-plt.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-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;
- }
diff --git a/user/llvm6/secure-plt.patch b/user/llvm6/secure-plt.patch
deleted file mode 100644
index e8af33d87..000000000
--- a/user/llvm6/secure-plt.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-Index: llvm/lib/Target/PowerPC/PPC.td
-===================================================================
---- llvm/lib/Target/PowerPC/PPC.td
-+++ llvm/lib/Target/PowerPC/PPC.td
-@@ -119,6 +119,8 @@
- [FeatureBookE]>;
- def FeatureE500 : SubtargetFeature<"e500", "IsE500", "true",
- "Enable E500/E500mc instructions">;
-+def FeatureSecurePlt : SubtargetFeature<"secure-plt","SecurePlt", "true",
-+ "Enable secure plt mode">;
- def FeaturePPC4xx : SubtargetFeature<"ppc4xx", "IsPPC4xx", "true",
- "Enable PPC 4xx instructions">;
- def FeaturePPC6xx : SubtargetFeature<"ppc6xx", "IsPPC6xx", "true",
-Index: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
-===================================================================
---- llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
-+++ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
-@@ -563,33 +563,63 @@
- // Transform %rd = UpdateGBR(%rt, %ri)
- // Into: lwz %rt, .L0$poff - .L0$pb(%ri)
- // add %rd, %rt, %ri
-+ // or into (if secure plt mode is on):
-+ // addis r30, r30, .LTOC - .L0$pb@ha
-+ // addi r30, r30, .LTOC - .L0$pb@l
- // Get the offset from the GOT Base Register to the GOT
- LowerPPCMachineInstrToMCInst(MI, TmpInst, *this, isDarwin);
-- MCSymbol *PICOffset =
-- MF->getInfo<PPCFunctionInfo>()->getPICOffsetSymbol();
-- TmpInst.setOpcode(PPC::LWZ);
-- const MCExpr *Exp =
-- MCSymbolRefExpr::create(PICOffset, MCSymbolRefExpr::VK_None, OutContext);
-- const MCExpr *PB =
-- MCSymbolRefExpr::create(MF->getPICBaseSymbol(),
-- MCSymbolRefExpr::VK_None,
-- OutContext);
-- const MCOperand TR = TmpInst.getOperand(1);
-- const MCOperand PICR = TmpInst.getOperand(0);
-+ if (Subtarget->isSecurePlt() && isPositionIndependent() ) {
-+ unsigned PICR = TmpInst.getOperand(0).getReg();
-+ MCSymbol *LTOCSymbol = OutContext.getOrCreateSymbol(StringRef(".LTOC"));
-+ const MCExpr *PB =
-+ MCSymbolRefExpr::create(MF->getPICBaseSymbol(),
-+ OutContext);
-
-- // Step 1: lwz %rt, .L$poff - .L$pb(%ri)
-- TmpInst.getOperand(1) =
-- MCOperand::createExpr(MCBinaryExpr::createSub(Exp, PB, OutContext));
-- TmpInst.getOperand(0) = TR;
-- TmpInst.getOperand(2) = PICR;
-- EmitToStreamer(*OutStreamer, TmpInst);
-+ const MCExpr *LTOCDeltaExpr =
-+ MCBinaryExpr::createSub(MCSymbolRefExpr::create(LTOCSymbol, OutContext),
-+ PB, OutContext);
-
-- TmpInst.setOpcode(PPC::ADD4);
-- TmpInst.getOperand(0) = PICR;
-- TmpInst.getOperand(1) = TR;
-- TmpInst.getOperand(2) = PICR;
-- EmitToStreamer(*OutStreamer, TmpInst);
-- return;
-+ const MCExpr *LTOCDeltaHi =
-+ PPCMCExpr::createHa(LTOCDeltaExpr, false, OutContext);
-+ EmitToStreamer(*OutStreamer, MCInstBuilder(PPC::ADDIS)
-+ .addReg(PICR)
-+ .addReg(PICR)
-+ .addExpr(LTOCDeltaHi));
-+
-+ const MCExpr *LTOCDeltaLo =
-+ PPCMCExpr::createLo(LTOCDeltaExpr, false, OutContext);
-+ EmitToStreamer(*OutStreamer, MCInstBuilder(PPC::ADDI)
-+ .addReg(PICR)
-+ .addReg(PICR)
-+ .addExpr(LTOCDeltaLo));
-+ return;
-+ } else {
-+ MCSymbol *PICOffset =
-+ MF->getInfo<PPCFunctionInfo>()->getPICOffsetSymbol();
-+ TmpInst.setOpcode(PPC::LWZ);
-+ const MCExpr *Exp =
-+ MCSymbolRefExpr::create(PICOffset, MCSymbolRefExpr::VK_None, OutContext);
-+ const MCExpr *PB =
-+ MCSymbolRefExpr::create(MF->getPICBaseSymbol(),
-+ MCSymbolRefExpr::VK_None,
-+ OutContext);
-+ const MCOperand TR = TmpInst.getOperand(1);
-+ const MCOperand PICR = TmpInst.getOperand(0);
-+
-+ // Step 1: lwz %rt, .L$poff - .L$pb(%ri)
-+ TmpInst.getOperand(1) =
-+ MCOperand::createExpr(MCBinaryExpr::createSub(Exp, PB, OutContext));
-+ TmpInst.getOperand(0) = TR;
-+ TmpInst.getOperand(2) = PICR;
-+ EmitToStreamer(*OutStreamer, TmpInst);
-+
-+ TmpInst.setOpcode(PPC::ADD4);
-+ TmpInst.getOperand(0) = PICR;
-+ TmpInst.getOperand(1) = TR;
-+ TmpInst.getOperand(2) = PICR;
-+ EmitToStreamer(*OutStreamer, TmpInst);
-+ return;
-+ }
- }
- case PPC::LWZtoc: {
- // Transform %r3 = LWZtoc @min1, %r2
-@@ -1233,7 +1263,7 @@
-
- if (!Subtarget->isPPC64()) {
- const PPCFunctionInfo *PPCFI = MF->getInfo<PPCFunctionInfo>();
-- if (PPCFI->usesPICBase()) {
-+ if (PPCFI->usesPICBase() && !Subtarget->isSecurePlt()) {
- MCSymbol *RelocSymbol = PPCFI->getPICOffsetSymbol();
- MCSymbol *PICBase = MF->getPICBaseSymbol();
- OutStreamer->EmitLabel(RelocSymbol);
-Index: llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
-===================================================================
---- llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
-+++ llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
-@@ -4001,6 +4001,27 @@
- return;
- break;
-
-+ case PPCISD::CALL: {
-+ const Module *M = MF->getFunction().getParent();
-+
-+ if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) != MVT::i32 ||
-+ !PPCSubTarget->isSecurePlt() || !PPCSubTarget->isTargetELF() ||
-+ M->getPICLevel() == PICLevel::SmallPIC)
-+ break;
-+
-+ SDValue Op = N->getOperand(1);
-+
-+ if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Op)) {
-+ if (GA->getTargetFlags() == PPCII::MO_PLT)
-+ getGlobalBaseReg();
-+ }
-+ else if (ExternalSymbolSDNode *ES = dyn_cast<ExternalSymbolSDNode>(Op)) {
-+ if (ES->getTargetFlags() == PPCII::MO_PLT)
-+ getGlobalBaseReg();
-+ }
-+ }
-+ break;
-+
- case PPCISD::GlobalBaseReg:
- ReplaceNode(N, getGlobalBaseReg());
- return;
-Index: llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
-===================================================================
---- llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
-+++ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
-@@ -107,10 +107,20 @@
- break;
- }
-
-- if (MO.getTargetFlags() == PPCII::MO_PLT)
-+ if (MO.getTargetFlags() == PPCII::MO_PLT)
- RefKind = MCSymbolRefExpr::VK_PLT;
-
-+ const MachineFunction *MF = MO.getParent()->getParent()->getParent();
-+ const PPCSubtarget *Subtarget = &(MF->getSubtarget<PPCSubtarget>());
-+ const TargetMachine &TM = Printer.TM;
- const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
-+ // -msecure-plt option works only in PIC mode. If secure plt mode
-+ // is on add 32768 to symbol.
-+ if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
-+ MO.getTargetFlags() == PPCII::MO_PLT)
-+ Expr = MCBinaryExpr::createAdd(Expr,
-+ MCConstantExpr::create(32768, Ctx),
-+ Ctx);
-
- if (!MO.isJTI() && MO.getOffset())
- Expr = MCBinaryExpr::createAdd(Expr,
-Index: llvm/lib/Target/PowerPC/PPCSubtarget.h
-===================================================================
---- llvm/lib/Target/PowerPC/PPCSubtarget.h
-+++ llvm/lib/Target/PowerPC/PPCSubtarget.h
-@@ -133,6 +133,7 @@
- bool HasFloat128;
- bool IsISA3_0;
- bool UseLongCalls;
-+ bool SecurePlt;
-
- POPCNTDKind HasPOPCNTD;
-
-@@ -255,6 +256,7 @@
- bool hasOnlyMSYNC() const { return HasOnlyMSYNC; }
- bool isPPC4xx() const { return IsPPC4xx; }
- bool isPPC6xx() const { return IsPPC6xx; }
-+ bool isSecurePlt() const {return SecurePlt; }
- bool isE500() const { return IsE500; }
- bool isFeatureMFTB() const { return FeatureMFTB; }
- bool isDeprecatedDST() const { return DeprecatedDST; }
-Index: llvm/test/CodeGen/PowerPC/ppc32-pic-large.ll
-===================================================================
---- llvm/test/CodeGen/PowerPC/ppc32-pic-large.ll
-+++ llvm/test/CodeGen/PowerPC/ppc32-pic-large.ll
-@@ -1,4 +1,5 @@
- ; RUN: llc < %s -mtriple=powerpc-unknown-linux-gnu -relocation-model=pic | FileCheck -check-prefix=LARGE-BSS %s
-+; RUN: llc < %s -mtriple=powerpc-unknown-linux-gnu -mattr=+secure-plt -relocation-model=pic | FileCheck -check-prefix=LARGE-SECUREPLT %s
- @bar = common global i32 0, align 4
-
- declare i32 @call_foo(i32, ...)
-@@ -29,3 +30,6 @@
- ; LARGE-BSS: [[VREF]]:
- ; LARGE-BSS-NEXT: .p2align 2
- ; LARGE-BSS-NEXT: .long bar
-+; LARGE-SECUREPLT: addis 30, 30, .LTOC-.L0$pb@ha
-+; LARGE-SECUREPLT: addi 30, 30, .LTOC-.L0$pb@l
-+; LARGE-SECUREPLT: bl call_foo@PLT+32768
diff --git a/user/llvm6/APKBUILD b/user/llvm7/APKBUILD
index 5f7b04fad..53cf78e63 100644
--- a/user/llvm6/APKBUILD
+++ b/user/llvm7/APKBUILD
@@ -3,7 +3,7 @@
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
_pkgname=llvm
-pkgver=6.0.1
+pkgver=7.0.1
_majorver=${pkgver%%.*}
pkgname=$_pkgname$_majorver
pkgrel=0
@@ -17,16 +17,15 @@ makedepends="binutils-dev chrpath cmake file libexecinfo-dev libffi-dev
libxml2-dev python3 zlib-dev"
subpackages="$pkgname-static $pkgname-libs $pkgname-dev
$pkgname-test-utils:_test_utils"
-source="http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz
+source="https://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz
llvm-fix-build-with-musl-libc.patch
- cmake-fix-libLLVM-name.patch
disable-FileSystemTest.CreateDir-perms-assert.patch
disable-dlclose-test.patch
musl-ppc64-elfv2.patch
- secure-plt.patch
more-secure-plt.patch
even-more-secure-plt.patch
ppc32-calling-convention.patch
+ python3-test.patch
"
builddir="$srcdir/$_pkgname-$pkgver.src"
@@ -66,7 +65,6 @@ _prefix="usr/lib/llvm$_majorver"
prepare() {
default_prepare
- cd "$builddir"
# https://bugs.llvm.org//show_bug.cgi?id=31870
rm test/tools/llvm-symbolizer/print_context.c
@@ -180,7 +178,7 @@ static() {
libs() {
pkgdesc="LLVM $_majorver runtime library"
- local soname="libLLVM-$_majorver.0.so"
+ local soname="libLLVM-$_majorver.so"
local soname2="libLLVM-$pkgver.so"
_common_subpkg
@@ -243,13 +241,12 @@ _mv() {
mv $@
}
-sha512sums="cbbb00eb99cfeb4aff623ee1a5ba075e7b5a76fc00c5f9f539ff28c108598f5708a0369d5bd92683def5a20c2fe60cab7827b42d628dbfcc79b57e0e91b84dd9 llvm-6.0.1.src.tar.xz
+sha512sums="ac43a3cb71a53deb55e3693653847cf20bf6f5d9056f224e6956c96d63bc59ebee9404f088eec9cabe65337b4607a905ef931354b373cf64e0004c6905a6b5df llvm-7.0.1.src.tar.xz
f84cd65d7042e89826ba6e8d48c4c302bf4980da369d7f19a55f217e51c00ca8ed178d453df3a3cee76598a7cecb94aed0775a6d24fe73266f82749913fc3e71 llvm-fix-build-with-musl-libc.patch
-6d1a716e5aa24e6b9a3acf4cc11e2504b1b01abf574074e9e5617b991de87d5e4e687eb18e85e73d5e632568afe2fc357771c4c96f9e136502071991496fb78c cmake-fix-libLLVM-name.patch
49c47f125014b60d0ea7870f981a2c1708ad705793f89287ed846ee881a837a4dc0170bf467e03f2ef56177473128945287749ac80dc2d13cfabcf8b929ba58a disable-FileSystemTest.CreateDir-perms-assert.patch
caeec8e4dbd92f5f74940780b69075f3879a267a8623822cbdc193fd14706eb089071e3a5a20d60cc2eca59e4c5b2a61d29827a2f3362ee7c5f74f11d9ace200 disable-dlclose-test.patch
e5ddbc4b6c4928e79846dc3c022eb7928aaa8fed40515c78f5f03b8ab8264f34f1eb8aa8bfc0f436450932f4917e54ad261603032092ea271d9590f11a37cf1e musl-ppc64-elfv2.patch
-35d289641fa4d200b5a3f62f1d51da600a734641356b0dc6c54a3080dd89aec3b031e36af8b53be49c35346c1cbcce00268de7ec9b4f552bfd7bf84d3504d1c4 secure-plt.patch
-3d4a0a478bf800ea262c577451e22a1dbd5a4258226e49c66a697559263c8aa4fc0fff642a3c80ac3dfbb3efd6d9c0dbeb41dae1250fc7946de821cfef1ce1f0 more-secure-plt.patch
+8c0e2a08f6b503efb6673af4cb475ed788b288e016881eacb314a74b9cdd1a920853b219f1cdf1c20e67dec9fcceedfa37e726820b28cd0454302397188aac2f more-secure-plt.patch
deb71762721ebc73bfdf23143b582f40c70eddcef3e337ed14499e8e336bee2906292d38d64fe98fa633430c1bcb66cf6a2e067258c8fbe6e931f99f6d10a6f7 even-more-secure-plt.patch
-c3f596a1578a07ce0ee40c4e2576fe05ca6ca0c1b4f94b1f74c55cb09603afe7c846db9294fe28d83ca48633086bad422218e6d06e0d92173143fb298e06fb38 ppc32-calling-convention.patch"
+c3f596a1578a07ce0ee40c4e2576fe05ca6ca0c1b4f94b1f74c55cb09603afe7c846db9294fe28d83ca48633086bad422218e6d06e0d92173143fb298e06fb38 ppc32-calling-convention.patch
+53cc0d13dd871e9b775bb4e7567de4f9a97d91b8246cd7ce74607fd88d6e3e2ab9455f5b4195bc7f9dbdedbc77d659d43e98ec0b7cd78cd395aaea6919510287 python3-test.patch"
diff --git a/user/llvm6/disable-FileSystemTest.CreateDir-perms-assert.patch b/user/llvm7/disable-FileSystemTest.CreateDir-perms-assert.patch
index e73ce9b6f..e73ce9b6f 100644
--- a/user/llvm6/disable-FileSystemTest.CreateDir-perms-assert.patch
+++ b/user/llvm7/disable-FileSystemTest.CreateDir-perms-assert.patch
diff --git a/user/llvm6/disable-dlclose-test.patch b/user/llvm7/disable-dlclose-test.patch
index b70cd4d4d..b70cd4d4d 100644
--- a/user/llvm6/disable-dlclose-test.patch
+++ b/user/llvm7/disable-dlclose-test.patch
diff --git a/user/llvm6/even-more-secure-plt.patch b/user/llvm7/even-more-secure-plt.patch
index 112e111b8..112e111b8 100644
--- a/user/llvm6/even-more-secure-plt.patch
+++ b/user/llvm7/even-more-secure-plt.patch
diff --git a/user/llvm6/llvm-fix-build-with-musl-libc.patch b/user/llvm7/llvm-fix-build-with-musl-libc.patch
index 6ee91ea44..6ee91ea44 100644
--- a/user/llvm6/llvm-fix-build-with-musl-libc.patch
+++ b/user/llvm7/llvm-fix-build-with-musl-libc.patch
diff --git a/user/llvm7/more-secure-plt.patch b/user/llvm7/more-secure-plt.patch
new file mode 100644
index 000000000..64920c74c
--- /dev/null
+++ b/user/llvm7/more-secure-plt.patch
@@ -0,0 +1,15 @@
+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;
+ }
diff --git a/user/llvm6/musl-ppc64-elfv2.patch b/user/llvm7/musl-ppc64-elfv2.patch
index 016be5dad..016be5dad 100644
--- a/user/llvm6/musl-ppc64-elfv2.patch
+++ b/user/llvm7/musl-ppc64-elfv2.patch
diff --git a/user/llvm6/ppc32-calling-convention.patch b/user/llvm7/ppc32-calling-convention.patch
index 2e6d66427..2e6d66427 100644
--- a/user/llvm6/ppc32-calling-convention.patch
+++ b/user/llvm7/ppc32-calling-convention.patch
diff --git a/user/llvm7/python3-test.patch b/user/llvm7/python3-test.patch
new file mode 100644
index 000000000..746313317
--- /dev/null
+++ b/user/llvm7/python3-test.patch
@@ -0,0 +1,8 @@
+--- llvm-7.0.1.src/test/BugPoint/compile-custom.ll.py.old 2014-03-13 00:10:37.000000000 +0000
++++ llvm-7.0.1.src/test/BugPoint/compile-custom.ll.py 2019-03-10 03:48:48.600000000 +0000
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+
+ import sys
+