173 lines
4.7 KiB
Diff
173 lines
4.7 KiB
Diff
From 852620258deea8afda5674f397113fa87ce1007c Mon Sep 17 00:00:00 2001
|
|
From: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
|
|
Date: Thu, 13 Dec 2018 09:42:22 +0100
|
|
Subject: [PATCH 59] powerpc: Add missing CFI register information (bug
|
|
#23614)
|
|
|
|
Add CFI information about the offset of registers stored in the stack
|
|
frame.
|
|
|
|
[BZ #23614]
|
|
* sysdeps/powerpc/powerpc64/addmul_1.S (FUNC): Add CFI offset for
|
|
registers saved in the stack frame.
|
|
* sysdeps/powerpc/powerpc64/lshift.S (__mpn_lshift): Likewise.
|
|
* sysdeps/powerpc/powerpc64/mul_1.S (__mpn_mul_1): Likewise.
|
|
|
|
Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
|
|
Reviewed-by: Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
|
|
(cherry picked from commit 1d880d4a9bf7608c2cd33bbe954ce6995f79121a)
|
|
---
|
|
ChangeLog | 8 +++++++
|
|
NEWS | 1 +
|
|
sysdeps/powerpc/powerpc64/addmul_1.S | 31 +++++++++++++++++++---------
|
|
sysdeps/powerpc/powerpc64/lshift.S | 12 +++++++----
|
|
sysdeps/powerpc/powerpc64/mul_1.S | 13 ++++++++----
|
|
5 files changed, 47 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/ChangeLog b/ChangeLog
|
|
index 09f50f28a0..6ad1f7a913 100644
|
|
--- a/ChangeLog
|
|
+++ b/ChangeLog
|
|
@@ -1,3 +1,11 @@
|
|
+2018-12-12 Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
|
|
+
|
|
+ [BZ #23614]
|
|
+ * sysdeps/powerpc/powerpc64/addmul_1.S (FUNC): Add CFI offset for
|
|
+ registers saved in the stack frame.
|
|
+ * sysdeps/powerpc/powerpc64/lshift.S (__mpn_lshift): Likewise.
|
|
+ * sysdeps/powerpc/powerpc64/mul_1.S (__mpn_mul_1): Likewise.
|
|
+
|
|
2018-12-07 DJ Delorie <dj@redhat.com>
|
|
|
|
[BZ #23907]
|
|
diff --git a/NEWS b/NEWS
|
|
index 4d4a5a1911..05f7342fcb 100644
|
|
--- a/NEWS
|
|
+++ b/NEWS
|
|
@@ -20,6 +20,7 @@ The following bugs are resolved with this release:
|
|
[23578] regex: Fix memory overread in re_compile_pattern
|
|
[23579] libc: Errors misreported in preadv2
|
|
[23606] Missing ENDBR32 in sysdeps/i386/start.S
|
|
+ [23614] powerpc: missing CFI register information in __mpn_* functions
|
|
[23679] gethostid: Missing NULL check for gethostbyname_r result
|
|
[23709] Fix CPU string flags for Haswell-type CPUs
|
|
[23717] Fix stack overflow in stdlib/tst-setcontext9
|
|
diff --git a/sysdeps/powerpc/powerpc64/addmul_1.S b/sysdeps/powerpc/powerpc64/addmul_1.S
|
|
index 48e3b1b290..e450d6a52c 100644
|
|
--- a/sysdeps/powerpc/powerpc64/addmul_1.S
|
|
+++ b/sysdeps/powerpc/powerpc64/addmul_1.S
|
|
@@ -34,16 +34,27 @@
|
|
#define N r5
|
|
#define VL r6
|
|
|
|
+#define R27SAVE (-40)
|
|
+#define R28SAVE (-32)
|
|
+#define R29SAVE (-24)
|
|
+#define R30SAVE (-16)
|
|
+#define R31SAVE (-8)
|
|
+
|
|
ENTRY_TOCLESS (FUNC, 5)
|
|
- std r31, -8(r1)
|
|
+ std r31, R31SAVE(r1)
|
|
rldicl. r0, N, 0, 62
|
|
- std r30, -16(r1)
|
|
+ std r30, R30SAVE(r1)
|
|
cmpdi VL, r0, 2
|
|
- std r29, -24(r1)
|
|
+ std r29, R29SAVE(r1)
|
|
addi N, N, 3
|
|
- std r28, -32(r1)
|
|
+ std r28, R28SAVE(r1)
|
|
srdi N, N, 2
|
|
- std r27, -40(r1)
|
|
+ std r27, R27SAVE(r1)
|
|
+ cfi_offset(r31, R31SAVE)
|
|
+ cfi_offset(r30, R30SAVE)
|
|
+ cfi_offset(r29, R29SAVE)
|
|
+ cfi_offset(r28, R28SAVE)
|
|
+ cfi_offset(r27, R27SAVE)
|
|
mtctr N
|
|
beq cr0, L(b00)
|
|
blt cr6, L(b01)
|
|
@@ -199,10 +210,10 @@ L(end): mulld r0, r9, VL
|
|
addic r11, r11, 1
|
|
#endif
|
|
addze RP, r8
|
|
- ld r31, -8(r1)
|
|
- ld r30, -16(r1)
|
|
- ld r29, -24(r1)
|
|
- ld r28, -32(r1)
|
|
- ld r27, -40(r1)
|
|
+ ld r31, R31SAVE(r1)
|
|
+ ld r30, R30SAVE(r1)
|
|
+ ld r29, R29SAVE(r1)
|
|
+ ld r28, R28SAVE(r1)
|
|
+ ld r27, R27SAVE(r1)
|
|
blr
|
|
END(FUNC)
|
|
diff --git a/sysdeps/powerpc/powerpc64/lshift.S b/sysdeps/powerpc/powerpc64/lshift.S
|
|
index 8b6396ee6c..855d6f2993 100644
|
|
--- a/sysdeps/powerpc/powerpc64/lshift.S
|
|
+++ b/sysdeps/powerpc/powerpc64/lshift.S
|
|
@@ -26,11 +26,15 @@
|
|
#define TNC r0
|
|
#define U0 r30
|
|
#define U1 r31
|
|
+#define U0SAVE (-16)
|
|
+#define U1SAVE (-8)
|
|
#define RETVAL r5
|
|
|
|
ENTRY_TOCLESS (__mpn_lshift, 5)
|
|
- std U1, -8(r1)
|
|
- std U0, -16(r1)
|
|
+ std U1, U1SAVE(r1)
|
|
+ std U0, U0SAVE(r1)
|
|
+ cfi_offset(U1, U1SAVE)
|
|
+ cfi_offset(U0, U0SAVE)
|
|
subfic TNC, CNT, 64
|
|
sldi r7, N, RP
|
|
add UP, UP, r7
|
|
@@ -170,8 +174,8 @@ L(cj3): or r10, r12, r7
|
|
L(cj2): std r10, -32(RP)
|
|
std r8, -40(RP)
|
|
|
|
-L(ret): ld U1, -8(r1)
|
|
- ld U0, -16(r1)
|
|
+L(ret): ld U1, U1SAVE(r1)
|
|
+ ld U0, U0SAVE(r1)
|
|
mr RP, RETVAL
|
|
blr
|
|
END(__mpn_lshift)
|
|
diff --git a/sysdeps/powerpc/powerpc64/mul_1.S b/sysdeps/powerpc/powerpc64/mul_1.S
|
|
index 953ded8028..cade365258 100644
|
|
--- a/sysdeps/powerpc/powerpc64/mul_1.S
|
|
+++ b/sysdeps/powerpc/powerpc64/mul_1.S
|
|
@@ -24,9 +24,14 @@
|
|
#define N r5
|
|
#define VL r6
|
|
|
|
+#define R26SAVE (-48)
|
|
+#define R27SAVE (-40)
|
|
+
|
|
ENTRY_TOCLESS (__mpn_mul_1, 5)
|
|
- std r27, -40(r1)
|
|
- std r26, -48(r1)
|
|
+ std r27, R27SAVE(r1)
|
|
+ std r26, R26SAVE(r1)
|
|
+ cfi_offset(r27, R27SAVE)
|
|
+ cfi_offset(r26, R26SAVE)
|
|
li r12, 0
|
|
ld r26, 0(UP)
|
|
|
|
@@ -129,7 +134,7 @@ L(end): mulld r0, r26, VL
|
|
std r0, 0(RP)
|
|
std r7, 8(RP)
|
|
L(ret): addze RP, r8
|
|
- ld r27, -40(r1)
|
|
- ld r26, -48(r1)
|
|
+ ld r27, R27SAVE(r1)
|
|
+ ld r26, R26SAVE(r1)
|
|
blr
|
|
END(__mpn_mul_1)
|
|
|