1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
| From 501a6b55853af549fae72723e74271f2a4ec7cf6 Mon Sep 17 00:00:00 2001
| From: Brett Warren <brett.warren@arm.com>
| Date: Fri, 27 Nov 2020 15:28:42 +0000
| Subject: [PATCH] arm/sysv: reverted clang VFP mitigation
|
| Since commit e3d2812ce43940aacae5bab2d0e965278cb1e7ea,
| seperate instructions were used when compiling under clang,
| as clang didn't allow the directives at the time. This mitigation
| now causes compilation to fail under clang 10, as described by
| https://github.com/libffi/libffi/issues/607. Now that
| clang supports the LDC and SDC instructions, this mitigation
| has been reverted.
|
| Upstream-Status: Pending
| Signed-off-by: Brett Warren <brett.warren@arm.com>
| ---
| src/arm/sysv.S | 33 ---------------------------------
| 1 file changed, 33 deletions(-)
|
| diff --git a/src/arm/sysv.S b/src/arm/sysv.S
| index fb36213..e4272a1 100644
| --- a/src/arm/sysv.S
| +++ b/src/arm/sysv.S
| @@ -142,13 +142,8 @@ ARM_FUNC_START(ffi_call_VFP)
|
| cmp r3, #3 @ load only d0 if possible
| ite le
| -#ifdef __clang__
| - vldrle d0, [r0]
| - vldmgt r0, {d0-d7}
| -#else
| ldcle p11, cr0, [r0] @ vldrle d0, [r0]
| ldcgt p11, cr0, [r0], {16} @ vldmgt r0, {d0-d7}
| -#endif
| add r0, r0, #64 @ discard the vfp register args
| /* FALLTHRU */
| ARM_FUNC_END(ffi_call_VFP)
| @@ -193,25 +188,13 @@ ARM_FUNC_START(ffi_call_SYSV)
| #endif
| 0:
| E(ARM_TYPE_VFP_S)
| -#ifdef __clang__
| - vstr s0, [r2]
| -#else
| stc p10, cr0, [r2] @ vstr s0, [r2]
| -#endif
| pop {fp,pc}
| E(ARM_TYPE_VFP_D)
| -#ifdef __clang__
| - vstr d0, [r2]
| -#else
| stc p11, cr0, [r2] @ vstr d0, [r2]
| -#endif
| pop {fp,pc}
| E(ARM_TYPE_VFP_N)
| -#ifdef __clang__
| - vstm r2, {d0-d3}
| -#else
| stc p11, cr0, [r2], {8} @ vstm r2, {d0-d3}
| -#endif
| pop {fp,pc}
| E(ARM_TYPE_INT64)
| str r1, [r2, #4]
| @@ -320,11 +303,7 @@ ARM_FUNC_START(ffi_closure_VFP)
| add ip, sp, #16
| sub sp, sp, #64+32 @ allocate frame
| cfi_adjust_cfa_offset(64+32)
| -#ifdef __clang__
| - vstm sp, {d0-d7}
| -#else
| stc p11, cr0, [sp], {16} @ vstm sp, {d0-d7}
| -#endif
| stmdb sp!, {ip,lr}
|
| /* See above. */
| @@ -358,25 +337,13 @@ ARM_FUNC_START_LOCAL(ffi_closure_ret)
| cfi_rel_offset(lr, 4)
| 0:
| E(ARM_TYPE_VFP_S)
| -#ifdef __clang__
| - vldr s0, [r2]
| -#else
| ldc p10, cr0, [r2] @ vldr s0, [r2]
| -#endif
| b call_epilogue
| E(ARM_TYPE_VFP_D)
| -#ifdef __clang__
| - vldr d0, [r2]
| -#else
| ldc p11, cr0, [r2] @ vldr d0, [r2]
| -#endif
| b call_epilogue
| E(ARM_TYPE_VFP_N)
| -#ifdef __clang__
| - vldm r2, {d0-d3}
| -#else
| ldc p11, cr0, [r2], {8} @ vldm r2, {d0-d3}
| -#endif
| b call_epilogue
| E(ARM_TYPE_INT64)
| ldr r1, [r2, #4]
| --
| 2.25.1
|
|