1 From 0b6f90a930fcda6df287065d39e6b865428e3c69 Mon Sep 17 00:00:00 2001
2 From: Stijn Tintel <stijn@linux-ipv6.be>
3 Date: Sat, 27 Nov 2021 04:58:50 +0200
4 Subject: [PATCH] ppc64: check for AltiVec in setjmp/longjmp
6 On machines without AltiVec, the lvx and stvx instructions are not
7 supported. Use __hwcap to test if AltiVec is supported.
9 Fixes SIGILL on PowerPC 64 processors without AltiVec support.
10 Runtime-tested on e5500 and e6500.
12 Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
14 src/setjmp/powerpc64/longjmp.s | 13 ++++++++++++-
15 src/setjmp/powerpc64/setjmp.s | 13 ++++++++++++-
16 2 files changed, 24 insertions(+), 2 deletions(-)
18 diff --git a/src/setjmp/powerpc64/longjmp.s b/src/setjmp/powerpc64/longjmp.s
19 index 81d45ff6..da7172af 100644
20 --- a/src/setjmp/powerpc64/longjmp.s
21 +++ b/src/setjmp/powerpc64/longjmp.s
22 @@ -56,7 +56,17 @@ longjmp:
26 - # 6) restore vector registers v20-v31
27 + # 6) restore vector registers v20-v31 if hardware supports AltiVec
39 lvx 20, 0, 3 ; addi 3, 3, 16
40 lvx 21, 0, 3 ; addi 3, 3, 16
41 @@ -70,6 +80,7 @@ longjmp:
42 lvx 29, 0, 3 ; addi 3, 3, 16
43 lvx 30, 0, 3 ; addi 3, 3, 16
47 # 7) return r4 ? r4 : 1
49 diff --git a/src/setjmp/powerpc64/setjmp.s b/src/setjmp/powerpc64/setjmp.s
50 index 37683fda..32853693 100644
51 --- a/src/setjmp/powerpc64/setjmp.s
52 +++ b/src/setjmp/powerpc64/setjmp.s
53 @@ -69,7 +69,17 @@ __setjmp_toc:
57 - # 5) store vector registers v20-v31
58 + # 5) store vector registers v20-v31 if hardware supports AltiVec
70 stvx 20, 0, 3 ; addi 3, 3, 16
71 stvx 21, 0, 3 ; addi 3, 3, 16
72 @@ -83,6 +93,7 @@ __setjmp_toc:
73 stvx 29, 0, 3 ; addi 3, 3, 16
74 stvx 30, 0, 3 ; addi 3, 3, 16