Fix RBP-based unwind in fiat assembly
RBP pointed 8 bytes off of where it should be. I've left the RSP offsets
alone, though it does mean they're shifted by 8 from what they
previously were. Per Andres, the new version of CryptOpt will generate
an RBP-compatible prolog, but for now I've just fixed it up by hand.
(This part was already hand-written.)
Change-Id: I23720e76affff6fae46b8f85b0a509380ccc8bc0
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/62805
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
Auto-Submit: David Benjamin <davidben@google.com>
diff --git a/third_party/fiat/asm/fiat_curve25519_adx_mul.S b/third_party/fiat/asm/fiat_curve25519_adx_mul.S
index b5d2aae..60351c7 100644
--- a/third_party/fiat/asm/fiat_curve25519_adx_mul.S
+++ b/third_party/fiat/asm/fiat_curve25519_adx_mul.S
@@ -18,8 +18,9 @@
.cfi_startproc
_CET_ENDBR
-mov [rsp - 0x08], rbp
-.cfi_offset rbp, -8-0x08
+push rbp
+.cfi_adjust_cfa_offset 8
+.cfi_offset rbp, -16
mov rbp, rsp
mov rax, rdx
@@ -27,21 +28,21 @@
mulx r11, r10, [ rax + 0x8 ]
mov rdx, [ rax + 0x0 ]
mov [ rsp - 0x58 ], r15
-.cfi_offset r15, -8-0x58
+.cfi_offset r15, -16-0x58
mulx r8, rcx, [ rsi + 0x18 ]
mov rdx, [ rsi + 0x8 ]
mov [ rsp - 0x80 ], rbx
-.cfi_offset rbx, -8-0x80
+.cfi_offset rbx, -16-0x80
mulx rbx, r9, [ rax + 0x18 ]
mov rdx, [ rsi + 0x8 ]
mov [ rsp - 0x70 ], r12
-.cfi_offset r12, -8-0x70
+.cfi_offset r12, -16-0x70
mulx r15, r12, [ rax + 0x8 ]
mov rdx, [ rsi + 0x0 ]
mov [ rsp - 0x68 ], r13
-.cfi_offset r13, -8-0x68
+.cfi_offset r13, -16-0x68
mov [ rsp - 0x60 ], r14
-.cfi_offset r14, -8-0x60
+.cfi_offset r14, -16-0x60
mulx r14, r13, [ rax + 0x0 ]
mov rdx, [ rax + 0x10 ]
mov [ rsp - 0x18 ], r15
@@ -160,7 +161,8 @@
mov r14, [ rsp - 0x60 ]
mov r15, [ rsp - 0x58 ]
-mov rbp, [rsp - 0x08]
+pop rbp
+.cfi_adjust_cfa_offset -8
ret
.cfi_endproc
#if defined(__ELF__)
diff --git a/third_party/fiat/asm/fiat_curve25519_adx_square.S b/third_party/fiat/asm/fiat_curve25519_adx_square.S
index 0b876ab..5d75c3e 100644
--- a/third_party/fiat/asm/fiat_curve25519_adx_square.S
+++ b/third_party/fiat/asm/fiat_curve25519_adx_square.S
@@ -18,8 +18,9 @@
.cfi_startproc
_CET_ENDBR
-mov [rsp - 0x08], rbp
-.cfi_offset rbp, -8-0x08
+push rbp
+.cfi_adjust_cfa_offset 8
+.cfi_offset rbp, -16
mov rbp, rsp
mov rdx, [ rsi + 0x0 ]
@@ -32,7 +33,7 @@
mulx r9, r8, [ rsi + 0x18 ]
mov rdx, [ rsi + 0x8 ]
mov [ rsp - 0x80 ], rbx
-.cfi_offset rbx, -8-0x80
+.cfi_offset rbx, -16-0x80
mulx rbx, r10, [ rsi + 0x18 ]
adox r8, rcx
mov [rsp - 0x48 ], rdi
@@ -46,7 +47,7 @@
mov rdx, 0x0
adox r9, rdx
mov [ rsp - 0x70 ], r12
-.cfi_offset r12, -8-0x70
+.cfi_offset r12, -16-0x70
mov r12, -0x3
inc r12
adox rbx, r8
@@ -61,9 +62,9 @@
mulx r9, rcx, rdx
mov rdx, [ rsi + 0x8 ]
mov [ rsp - 0x68 ], r13
-.cfi_offset r13, -8-0x68
+.cfi_offset r13, -16-0x68
mov [ rsp - 0x60 ], r14
-.cfi_offset r14, -8-0x60
+.cfi_offset r14, -16-0x60
mulx r14, r13, rdx
seto dl
inc r12
@@ -88,7 +89,7 @@
adox rax, r10
mov rdx, 0x26
mov [ rsp - 0x58 ], r15
-.cfi_offset r15, -8-0x58
+.cfi_offset r15, -16-0x58
mulx r15, r10, r11
clc
adcx r10, rcx
@@ -128,7 +129,8 @@
mov r14, [ rsp - 0x60 ]
mov r15, [ rsp - 0x58 ]
-mov rbp, [rsp - 0x08]
+pop rbp
+.cfi_adjust_cfa_offset -8
ret
.cfi_endproc
#if defined(__ELF__)