Trying to migrate Chromium to the "link all the asm files together" strategy broke the aarch64 Android build because some of the ifdef'd out assembly files were missing the .note.gnu.property section for BTI. If we add support for IBT, that'll be another one. To fix this, introduce <openssl/asm_base.h>, which must be included at the start of every assembly file (before the target ifdefs). This does a couple things: - It emits BTI and noexecstack markers into every assembly file, even those that ifdef themselves out. - It resolves the MSan -> OPENSSL_NO_ASM logic, so we only need to do it once. - It defines the same OPENSSL_X86_64, etc., defines we set elsewhere, so we can ensure they're consistent. This required carving files up a bit. <openssl/base.h> has a lot of things, such that trying to guard everything in it on __ASSEMBLER__ would be tedious. Instead, I moved the target defines to a new <openssl/target.h>. Then <openssl/asm_base.h> is the new header that pulls in all those things. Bug: 542 Change-Id: I1682b4d929adea72908655fa1bb15765a6b3473b Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/60765 Reviewed-by: Bob Beck <bbe@google.com> Commit-Queue: David Benjamin <davidben@google.com>
138 lines
2.5 KiB
ArmAsm
138 lines
2.5 KiB
ArmAsm
#include <openssl/asm_base.h>
|
|
|
|
#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && \
|
|
(defined(__APPLE__) || defined(__ELF__))
|
|
|
|
.intel_syntax noprefix
|
|
.text
|
|
#if defined(__APPLE__)
|
|
.private_extern _fiat_curve25519_adx_square
|
|
.global _fiat_curve25519_adx_square
|
|
_fiat_curve25519_adx_square:
|
|
#else
|
|
.type fiat_curve25519_adx_square, @function
|
|
.hidden fiat_curve25519_adx_square
|
|
.global fiat_curve25519_adx_square
|
|
fiat_curve25519_adx_square:
|
|
#endif
|
|
|
|
.cfi_startproc
|
|
mov [rsp - 0x08], rbp
|
|
.cfi_offset rbp, -8-0x08
|
|
mov rbp, rsp
|
|
|
|
mov rdx, [ rsi + 0x0 ]
|
|
mulx r10, rax, [ rsi + 0x8 ]
|
|
mov rdx, [ rsi + 0x0 ]
|
|
mulx rcx, r11, [ rsi + 0x10 ]
|
|
xor rdx, rdx
|
|
adox r11, r10
|
|
mov rdx, [ rsi + 0x0 ]
|
|
mulx r9, r8, [ rsi + 0x18 ]
|
|
mov rdx, [ rsi + 0x8 ]
|
|
mov [ rsp - 0x80 ], rbx
|
|
.cfi_offset rbx, -8-0x80
|
|
mulx rbx, r10, [ rsi + 0x18 ]
|
|
adox r8, rcx
|
|
mov [rsp - 0x48 ], rdi
|
|
adox r10, r9
|
|
adcx rax, rax
|
|
mov rdx, [ rsi + 0x10 ]
|
|
mulx r9, rcx, [ rsi + 0x18 ]
|
|
adox rcx, rbx
|
|
mov rdx, [ rsi + 0x10 ]
|
|
mulx rdi, rbx, [ rsi + 0x8 ]
|
|
mov rdx, 0x0
|
|
adox r9, rdx
|
|
mov [ rsp - 0x70 ], r12
|
|
.cfi_offset r12, -8-0x70
|
|
mov r12, -0x3
|
|
inc r12
|
|
adox rbx, r8
|
|
adox rdi, r10
|
|
adcx r11, r11
|
|
mov r8, rdx
|
|
adox r8, rcx
|
|
mov r10, rdx
|
|
adox r10, r9
|
|
adcx rbx, rbx
|
|
mov rdx, [ rsi + 0x0 ]
|
|
mulx r9, rcx, rdx
|
|
mov rdx, [ rsi + 0x8 ]
|
|
mov [ rsp - 0x68 ], r13
|
|
.cfi_offset r13, -8-0x68
|
|
mov [ rsp - 0x60 ], r14
|
|
.cfi_offset r14, -8-0x60
|
|
mulx r14, r13, rdx
|
|
seto dl
|
|
inc r12
|
|
adox r9, rax
|
|
adox r13, r11
|
|
adox r14, rbx
|
|
adcx rdi, rdi
|
|
mov al, dl
|
|
mov rdx, [ rsi + 0x10 ]
|
|
mulx rbx, r11, rdx
|
|
adox r11, rdi
|
|
adcx r8, r8
|
|
adox rbx, r8
|
|
adcx r10, r10
|
|
movzx rdx, al
|
|
mov rdi, 0x0
|
|
adcx rdx, rdi
|
|
movzx r8, al
|
|
lea r8, [ r8 + rdx ]
|
|
mov rdx, [ rsi + 0x18 ]
|
|
mulx rdi, rax, rdx
|
|
adox rax, r10
|
|
mov rdx, 0x26
|
|
mov [ rsp - 0x58 ], r15
|
|
.cfi_offset r15, -8-0x58
|
|
mulx r15, r10, r11
|
|
clc
|
|
adcx r10, rcx
|
|
mulx r11, rcx, rbx
|
|
adox r8, rdi
|
|
mulx rdi, rbx, r8
|
|
inc r12
|
|
adox rcx, r9
|
|
mulx r8, r9, rax
|
|
adcx r15, rcx
|
|
adox r9, r13
|
|
adcx r11, r9
|
|
adox rbx, r14
|
|
adox rdi, r12
|
|
adcx r8, rbx
|
|
adc rdi, 0x0
|
|
mulx r14, r13, rdi
|
|
test al, al
|
|
mov rdi, [ rsp - 0x48 ]
|
|
adox r13, r10
|
|
mov r14, r12
|
|
adox r14, r15
|
|
mov [ rdi + 0x8 ], r14
|
|
mov rax, r12
|
|
adox rax, r11
|
|
mov r10, r12
|
|
adox r10, r8
|
|
mov [ rdi + 0x10 ], rax
|
|
mov rcx, r12
|
|
cmovo rcx, rdx
|
|
adcx r13, rcx
|
|
mov [ rdi + 0x0 ], r13
|
|
mov [ rdi + 0x18 ], r10
|
|
mov rbx, [ rsp - 0x80 ]
|
|
mov r12, [ rsp - 0x70 ]
|
|
mov r13, [ rsp - 0x68 ]
|
|
mov r14, [ rsp - 0x60 ]
|
|
mov r15, [ rsp - 0x58 ]
|
|
|
|
mov rbp, [rsp - 0x08]
|
|
ret
|
|
.cfi_endproc
|
|
#if defined(__ELF__)
|
|
.size fiat_curve25519_adx_square, .-fiat_curve25519_adx_square
|
|
#endif
|
|
|
|
#endif
|