diff options
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.patch | 28 |
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 + |