aboutsummaryrefslogtreecommitdiffstats
path: root/main/musl/0014-fix-ld-behavior-dependent-crash-in-ppc64-ldso-startu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/musl/0014-fix-ld-behavior-dependent-crash-in-ppc64-ldso-startu.patch')
-rw-r--r--main/musl/0014-fix-ld-behavior-dependent-crash-in-ppc64-ldso-startu.patch28
1 files changed, 28 insertions, 0 deletions
diff --git a/main/musl/0014-fix-ld-behavior-dependent-crash-in-ppc64-ldso-startu.patch b/main/musl/0014-fix-ld-behavior-dependent-crash-in-ppc64-ldso-startu.patch
new file mode 100644
index 0000000000..cf026c0f9a
--- /dev/null
+++ b/main/musl/0014-fix-ld-behavior-dependent-crash-in-ppc64-ldso-startu.patch
@@ -0,0 +1,28 @@
+From fc85fb38605a8bf341c367b8ab0d36edab2bdbfc Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Wed, 8 Mar 2017 13:35:33 -0500
+Subject: [PATCH] fix ld-behavior-dependent crash in ppc64 ldso startup
+
+the 32-bit pc-relative address for stage 2 of dynamic linker entry was
+wrongly loaded with a zero-extending load instead of sign-extending
+load, resulting in an invalid jump if the offset happened to be
+negative, which depends on the linker's ordering of text sections.
+---
+ arch/powerpc64/reloc.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/powerpc64/reloc.h b/arch/powerpc64/reloc.h
+index e1bad009..faf70acd 100644
+--- a/arch/powerpc64/reloc.h
++++ b/arch/powerpc64/reloc.h
+@@ -27,6 +27,6 @@
+ " bl 1f \n" \
+ " .long " #sym "-. \n" \
+ "1: mflr %1 \n" \
+- " lwz %0, 0(%1) \n" \
++ " lwa %0, 0(%1) \n" \
+ " add %0, %0, %1 \n" \
+ : "=r"(*(fp)), "=r"((long){0}) : : "memory", "lr" )
+--
+2.11.1
+