authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-09-25 15:15:52-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-09-25 15:15:52-04:00
log40e77dad836abf130bf49af1838d108f0fc2e94e
tree0a57fb0fa6d5d87e4eedc10b91e580e6c7dfc8f7
parentdc3c4197c6e6564fb2558768cf2102b868347442
signaturelock-open Commit is signed but in an unrecognized format.

musl [PATCH] arm: fix setjmp and longjmp asm for armv8-a

From: Szabolcs Nagy <szabolcs.nagy@arm.com> armv8 removed the coprocessor instructions other than cp14, so on an armv8 system the related hwcaps should never be set. new llvm complains about the use of coprocessor instructions in armv8-a mode (even though they are never executed at runtime), so ifdef them out when musl is built for armv8. <dalias> i think the patch looks ok

5 files changed, 104 insertions(+), 90 deletions(-)

lib/libc/musl/src/setjmp/arm/longjmp.S created+50
......@@ -0,0 +1,50 @@
1.syntax unified
2.global _longjmp
3.global longjmp
4.type _longjmp,%function
5.type longjmp,%function
6_longjmp:
7longjmp:
8 mov ip,r0
9 movs r0,r1
10 moveq r0,#1
11 ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp}
12 ldmia ip!, {r2,lr}
13 mov sp,r2
14
15 adr r1,1f
16 ldr r2,1f
17 ldr r1,[r1,r2]
18
19#if __ARM_ARCH < 8
20 tst r1,#0x260
21 beq 3f
22 // HWCAP_ARM_FPA
23 tst r1,#0x20
24 beq 2f
25 ldc p2, cr4, [ip], #48
26#endif
272: tst r1,#0x40
28 beq 2f
29 .fpu vfp
30 vldmia ip!, {d8-d15}
31 .fpu softvfp
32 .eabi_attribute 10, 0
33 .eabi_attribute 27, 0
34#if __ARM_ARCH < 8
35 // HWCAP_ARM_IWMMXT
362: tst r1,#0x200
37 beq 3f
38 ldcl p1, cr10, [ip], #8
39 ldcl p1, cr11, [ip], #8
40 ldcl p1, cr12, [ip], #8
41 ldcl p1, cr13, [ip], #8
42 ldcl p1, cr14, [ip], #8
43 ldcl p1, cr15, [ip], #8
44#endif
452:
463: bx lr
47
48.hidden __hwcap
49.align 2
501: .word __hwcap-1b
lib/libc/musl/src/setjmp/arm/longjmp.s deleted-43
......@@ -1,43 +0,0 @@
1.syntax unified
2.global _longjmp
3.global longjmp
4.type _longjmp,%function
5.type longjmp,%function
6_longjmp:
7longjmp:
8 mov ip,r0
9 movs r0,r1
10 moveq r0,#1
11 ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp}
12 ldmia ip!, {r2,lr}
13 mov sp,r2
14
15 adr r1,1f
16 ldr r2,1f
17 ldr r1,[r1,r2]
18
19 tst r1,#0x260
20 beq 3f
21 tst r1,#0x20
22 beq 2f
23 ldc p2, cr4, [ip], #48
242: tst r1,#0x40
25 beq 2f
26 .fpu vfp
27 vldmia ip!, {d8-d15}
28 .fpu softvfp
29 .eabi_attribute 10, 0
30 .eabi_attribute 27, 0
312: tst r1,#0x200
32 beq 3f
33 ldcl p1, cr10, [ip], #8
34 ldcl p1, cr11, [ip], #8
35 ldcl p1, cr12, [ip], #8
36 ldcl p1, cr13, [ip], #8
37 ldcl p1, cr14, [ip], #8
38 ldcl p1, cr15, [ip], #8
393: bx lr
40
41.hidden __hwcap
42.align 2
431: .word __hwcap-1b
lib/libc/musl/src/setjmp/arm/setjmp.S created+52
......@@ -0,0 +1,52 @@
1.syntax unified
2.global __setjmp
3.global _setjmp
4.global setjmp
5.type __setjmp,%function
6.type _setjmp,%function
7.type setjmp,%function
8__setjmp:
9_setjmp:
10setjmp:
11 mov ip,r0
12 stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp}
13 mov r2,sp
14 stmia ip!,{r2,lr}
15 mov r0,#0
16
17 adr r1,1f
18 ldr r2,1f
19 ldr r1,[r1,r2]
20
21#if __ARM_ARCH < 8
22 tst r1,#0x260
23 beq 3f
24 // HWCAP_ARM_FPA
25 tst r1,#0x20
26 beq 2f
27 stc p2, cr4, [ip], #48
28#endif
292: tst r1,#0x40
30 beq 2f
31 .fpu vfp
32 vstmia ip!, {d8-d15}
33 .fpu softvfp
34 .eabi_attribute 10, 0
35 .eabi_attribute 27, 0
36#if __ARM_ARCH < 8
37 // HWCAP_ARM_IWMMXT
382: tst r1,#0x200
39 beq 3f
40 stcl p1, cr10, [ip], #8
41 stcl p1, cr11, [ip], #8
42 stcl p1, cr12, [ip], #8
43 stcl p1, cr13, [ip], #8
44 stcl p1, cr14, [ip], #8
45 stcl p1, cr15, [ip], #8
46#endif
472:
483: bx lr
49
50.hidden __hwcap
51.align 2
521: .word __hwcap-1b
lib/libc/musl/src/setjmp/arm/setjmp.s deleted-45
......@@ -1,45 +0,0 @@
1.syntax unified
2.global __setjmp
3.global _setjmp
4.global setjmp
5.type __setjmp,%function
6.type _setjmp,%function
7.type setjmp,%function
8__setjmp:
9_setjmp:
10setjmp:
11 mov ip,r0
12 stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp}
13 mov r2,sp
14 stmia ip!,{r2,lr}
15 mov r0,#0
16
17 adr r1,1f
18 ldr r2,1f
19 ldr r1,[r1,r2]
20
21 tst r1,#0x260
22 beq 3f
23 tst r1,#0x20
24 beq 2f
25 stc p2, cr4, [ip], #48
262: tst r1,#0x40
27 beq 2f
28 .fpu vfp
29 vstmia ip!, {d8-d15}
30 .fpu softvfp
31 .eabi_attribute 10, 0
32 .eabi_attribute 27, 0
332: tst r1,#0x200
34 beq 3f
35 stcl p1, cr10, [ip], #8
36 stcl p1, cr11, [ip], #8
37 stcl p1, cr12, [ip], #8
38 stcl p1, cr13, [ip], #8
39 stcl p1, cr14, [ip], #8
40 stcl p1, cr15, [ip], #8
413: bx lr
42
43.hidden __hwcap
44.align 2
451: .word __hwcap-1b
src/install_files.h+2-2
......@@ -1155,8 +1155,8 @@ static const char *ZIG_MUSL_SRC_FILES[] = {
11551155"musl/src/select/select.c",
11561156"musl/src/setjmp/aarch64/longjmp.s",
11571157"musl/src/setjmp/aarch64/setjmp.s",
1158"musl/src/setjmp/arm/longjmp.s",
1159"musl/src/setjmp/arm/setjmp.s",
1158"musl/src/setjmp/arm/longjmp.S",
1159"musl/src/setjmp/arm/setjmp.S",
11601160"musl/src/setjmp/i386/longjmp.s",
11611161"musl/src/setjmp/i386/setjmp.s",
11621162"musl/src/setjmp/longjmp.c",