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__)