ports/devel/libffi/patches/patch-src_aarch64_sysv_S

369 lines
7 KiB
Text

Index: src/aarch64/sysv.S
--- src/aarch64/sysv.S.orig
+++ src/aarch64/sysv.S
@@ -78,6 +78,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
cfi_startproc
CNAME(ffi_call_SYSV):
+ bti c
/* Sign the lr with x1 since that is where it will be stored */
SIGN_LR_WITH_REG(x1)
@@ -138,78 +139,142 @@ CNAME(ffi_call_SYSV):
/* Save the return value as directed. */
adr x5, 0f
and w4, w4, #AARCH64_RET_MASK
- add x5, x5, x4, lsl #3
+ add x5, x5, x4, lsl #4
br x5
- /* Note that each table entry is 2 insns, and thus 8 bytes.
+ /* Note that each table entry is 4 insns, and thus 16 bytes.
For integer data, note that we're storing into ffi_arg
and therefore we want to extend to 64 bits; these types
have two consecutive entries allocated for them. */
.align 4
-0: b 99f /* VOID */
+0: bti j /* VOID */
+ b 99f
+ nop
nop
-1: str x0, [x3] /* INT64 */
+1: bti j /* INT64 */
+ str x0, [x3]
b 99f
-2: stp x0, x1, [x3] /* INT128 */
+ nop
+2: bti j /* INT128 */
+ stp x0, x1, [x3]
b 99f
+ nop
3: brk #1000 /* UNUSED */
b 99f
+ nop
+ nop
4: brk #1000 /* UNUSED */
b 99f
+ nop
+ nop
5: brk #1000 /* UNUSED */
b 99f
+ nop
+ nop
6: brk #1000 /* UNUSED */
b 99f
+ nop
+ nop
7: brk #1000 /* UNUSED */
b 99f
-8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */
+ nop
+ nop
+8: bti j /* S4 */
+ st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3]
b 99f
-9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */
+ nop
+9: bti j /* S3 */
+ st3 { v0.s, v1.s, v2.s }[0], [x3]
b 99f
-10: stp s0, s1, [x3] /* S2 */
+ nop
+10: bti j /* S2 */
+ stp s0, s1, [x3]
b 99f
-11: str s0, [x3] /* S1 */
+ nop
+11: bti j
+ str s0, [x3] /* S1 */
b 99f
-12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */
+ nop
+12: bti j /* D4 */
+ st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3]
b 99f
-13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */
+ nop
+13: bti j /* D3 */
+ st3 { v0.d, v1.d, v2.d }[0], [x3]
b 99f
-14: stp d0, d1, [x3] /* D2 */
+ nop
+14: bti j /* D2 */
+ stp d0, d1, [x3]
b 99f
-15: str d0, [x3] /* D1 */
+ nop
+15: bti j /* D1 */
+ str d0, [x3]
b 99f
-16: str q3, [x3, #48] /* Q4 */
nop
-17: str q2, [x3, #32] /* Q3 */
+16: bti j /* Q4 */
+ str q3, [x3, #48]
nop
-18: stp q0, q1, [x3] /* Q2 */
+ nop
+17: bti j /* Q3 */
+ str q2, [x3, #32]
+ nop
+ nop
+18: bti j /* Q2 */
+ stp q0, q1, [x3]
b 99f
-19: str q0, [x3] /* Q1 */
+ nop
+19: bti j /* Q1 */
+ str q0, [x3]
b 99f
-20: uxtb w0, w0 /* UINT8 */
+ nop
+20: bti j /* UINT8 */
+ uxtb w0, w0
str x0, [x3]
+ nop
21: b 99f /* reserved */
nop
-22: uxth w0, w0 /* UINT16 */
+ nop
+ nop
+22: bti j /* UINT16 */
+ uxth w0, w0
str x0, [x3]
+ nop
23: b 99f /* reserved */
nop
-24: mov w0, w0 /* UINT32 */
+ nop
+ nop
+24: bti j /* UINT32 */
+ mov w0, w0
str x0, [x3]
+ nop
25: b 99f /* reserved */
nop
-26: sxtb x0, w0 /* SINT8 */
+ nop
+ nop
+26: bti j /* SINT8 */
+ sxtb x0, w0
str x0, [x3]
+ nop
27: b 99f /* reserved */
nop
-28: sxth x0, w0 /* SINT16 */
+ nop
+ nop
+28: bti j /* SINT16 */
+ sxth x0, w0
str x0, [x3]
+ nop
29: b 99f /* reserved */
nop
-30: sxtw x0, w0 /* SINT32 */
+ nop
+ nop
+30: bti j /* SINT32 */
+ sxtw x0, w0
str x0, [x3]
+ nop
31: b 99f /* reserved */
nop
+ nop
+ nop
/* Return now that result has been populated. */
99:
@@ -246,6 +311,7 @@ CNAME(ffi_call_SYSV):
.align 4
CNAME(ffi_closure_SYSV_V):
cfi_startproc
+ bti c
SIGN_LR
stp x29, x30, [sp, #-ffi_closure_SYSV_FS]!
cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
@@ -270,6 +336,7 @@ CNAME(ffi_closure_SYSV_V):
.align 4
cfi_startproc
CNAME(ffi_closure_SYSV):
+ bti c
SIGN_LR
stp x29, x30, [sp, #-ffi_closure_SYSV_FS]!
cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
@@ -299,74 +366,136 @@ CNAME(ffi_closure_SYSV):
/* Load the return value as directed. */
adr x1, 0f
and w0, w0, #AARCH64_RET_MASK
- add x1, x1, x0, lsl #3
+ add x1, x1, x0, lsl #4
add x3, sp, #16+CALL_CONTEXT_SIZE
br x1
- /* Note that each table entry is 2 insns, and thus 8 bytes. */
+ /* Note that each table entry is 4 insns, and thus 16 bytes. */
.align 4
-0: b 99f /* VOID */
+0: bti j /* VOID */
+ b 99f
nop
-1: ldr x0, [x3] /* INT64 */
+ nop
+1: bti j /* INT64 */
+ ldr x0, [x3]
b 99f
-2: ldp x0, x1, [x3] /* INT128 */
+ nop
+2: bti j /* INT128 */
+ ldp x0, x1, [x3]
b 99f
+ nop
3: brk #1000 /* UNUSED */
nop
+ nop
+ nop
4: brk #1000 /* UNUSED */
nop
+ nop
+ nop
5: brk #1000 /* UNUSED */
nop
+ nop
+ nop
6: brk #1000 /* UNUSED */
nop
+ nop
+ nop
7: brk #1000 /* UNUSED */
nop
-8: ldr s3, [x3, #12] /* S4 */
nop
-9: ldr s2, [x3, #8] /* S3 */
nop
-10: ldp s0, s1, [x3] /* S2 */
+8: bti j /* S4 */
+ ldr s3, [x3, #12]
+ nop
+ nop
+9: bti j /* S3 */
+ ldr s2, [x3, #8]
+ nop
+ nop
+10: bti j /* S2 */
+ ldp s0, s1, [x3]
b 99f
-11: ldr s0, [x3] /* S1 */
+ nop
+11: bti j /* S1 */
+ ldr s0, [x3]
b 99f
-12: ldr d3, [x3, #24] /* D4 */
nop
-13: ldr d2, [x3, #16] /* D3 */
+12: bti j /* D4 */
+ ldr d3, [x3, #24]
nop
-14: ldp d0, d1, [x3] /* D2 */
+ nop
+13: bti j /* D3 */
+ ldr d2, [x3, #16]
+ nop
+ nop
+14: bti j /* D2 */
+ ldp d0, d1, [x3]
b 99f
-15: ldr d0, [x3] /* D1 */
+ nop
+15: bti j /* D1 */
+ ldr d0, [x3]
b 99f
-16: ldr q3, [x3, #48] /* Q4 */
nop
-17: ldr q2, [x3, #32] /* Q3 */
+16: bti j /* Q4 */
+ ldr q3, [x3, #48]
nop
-18: ldp q0, q1, [x3] /* Q2 */
+ nop
+17: bti j /* Q3 */
+ ldr q2, [x3, #32]
+ nop
+ nop
+18: bti j /* Q2 */
+ ldp q0, q1, [x3]
b 99f
-19: ldr q0, [x3] /* Q1 */
+ nop
+19: bti j /* Q1 */
+ ldr q0, [x3]
b 99f
-20: ldrb w0, [x3, #BE(7)] /* UINT8 */
+ nop
+20: bti j /* UINT8 */
+ ldrb w0, [x3, #BE(7)]
b 99f
+ nop
21: brk #1000 /* reserved */
nop
-22: ldrh w0, [x3, #BE(6)] /* UINT16 */
+ nop
+ nop
+22: bti j /* UINT16 */
+ ldrh w0, [x3, #BE(6)]
b 99f
+ nop
23: brk #1000 /* reserved */
nop
-24: ldr w0, [x3, #BE(4)] /* UINT32 */
+ nop
+ nop
+24: bti j /* UINT32 */
+ ldr w0, [x3, #BE(4)]
b 99f
+ nop
25: brk #1000 /* reserved */
nop
-26: ldrsb x0, [x3, #BE(7)] /* SINT8 */
+ nop
+ nop
+26: bti j /* SINT8 */
+ ldrsb x0, [x3, #BE(7)]
b 99f
+ nop
27: brk #1000 /* reserved */
nop
-28: ldrsh x0, [x3, #BE(6)] /* SINT16 */
+ nop
+ nop
+28: bti j /* SINT16 */
+ ldrsh x0, [x3, #BE(6)]
b 99f
+ nop
29: brk #1000 /* reserved */
nop
-30: ldrsw x0, [x3, #BE(4)] /* SINT32 */
nop
+ nop
+30: bti j /* SINT32 */
+ ldrsw x0, [x3, #BE(4)]
+ nop
+ nop
31: /* reserved */
99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS
cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS)
@@ -479,6 +608,7 @@ CNAME(ffi_closure_trampoline_table_page):
.align 4
CNAME(ffi_go_closure_SYSV_V):
cfi_startproc
+ bti c
stp x29, x30, [sp, #-ffi_closure_SYSV_FS]!
cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
cfi_rel_offset (x29, 0)
@@ -502,6 +632,7 @@ CNAME(ffi_go_closure_SYSV_V):
.align 4
cfi_startproc
CNAME(ffi_go_closure_SYSV):
+ bti c
stp x29, x30, [sp, #-ffi_closure_SYSV_FS]!
cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
cfi_rel_offset (x29, 0)