Commit ec063e09 authored by Josh Poimboeuf's avatar Josh Poimboeuf
Browse files

x86/crypto/sha512-avx2: Standardize stack alignment prologue



Use a more standard prologue for saving the stack pointer before
realigning the stack.

This enables ORC unwinding by allowing objtool to understand the stack
realignment.

Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
Tested-by: default avatarArd Biesheuvel <ardb@kernel.org>
Acked-by: default avatarArd Biesheuvel <ardb@kernel.org>
Tested-by: default avatarSami Tolvanen <samitolvanen@google.com>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Link: https://lore.kernel.org/r/b1a7b29fcfc65d60a3b6e77ef75f4762a5b8488d.1614182415.git.jpoimboe@redhat.com
parent d61684b5
Loading
Loading
Loading
Loading
+20 −22
Original line number Diff line number Diff line
@@ -102,17 +102,13 @@ SRND_SIZE = 1*8
INP_SIZE = 1*8
INPEND_SIZE = 1*8
CTX_SIZE = 1*8
RSPSAVE_SIZE = 1*8
GPRSAVE_SIZE = 5*8

frame_XFER = 0
frame_SRND = frame_XFER + XFER_SIZE
frame_INP = frame_SRND + SRND_SIZE
frame_INPEND = frame_INP + INP_SIZE
frame_CTX = frame_INPEND + INPEND_SIZE
frame_RSPSAVE = frame_CTX + CTX_SIZE
frame_GPRSAVE = frame_RSPSAVE + RSPSAVE_SIZE
frame_size = frame_GPRSAVE + GPRSAVE_SIZE
frame_size = frame_CTX + CTX_SIZE

## assume buffers not aligned
#define	VMOVDQ vmovdqu
@@ -570,18 +566,18 @@ frame_size = frame_GPRSAVE + GPRSAVE_SIZE
# "blocks" is the message length in SHA512 blocks
########################################################################
SYM_FUNC_START(sha512_transform_rorx)
	# Save GPRs
	push	%rbx
	push	%r12
	push	%r13
	push	%r14
	push	%r15

	# Allocate Stack Space
	mov	%rsp, %rax
	push	%rbp
	mov	%rsp, %rbp
	sub	$frame_size, %rsp
	and	$~(0x20 - 1), %rsp
	mov	%rax, frame_RSPSAVE(%rsp)

	# Save GPRs
	mov	%rbx, 8*0+frame_GPRSAVE(%rsp)
	mov	%r12, 8*1+frame_GPRSAVE(%rsp)
	mov	%r13, 8*2+frame_GPRSAVE(%rsp)
	mov	%r14, 8*3+frame_GPRSAVE(%rsp)
	mov	%r15, 8*4+frame_GPRSAVE(%rsp)

	shl	$7, NUM_BLKS	# convert to bytes
	jz	done_hash
@@ -672,15 +668,17 @@ loop2:

done_hash:

	# Restore Stack Pointer
	mov	%rbp, %rsp
	pop	%rbp

	# Restore GPRs
	mov	8*0+frame_GPRSAVE(%rsp), %rbx
	mov	8*1+frame_GPRSAVE(%rsp), %r12
	mov	8*2+frame_GPRSAVE(%rsp), %r13
	mov	8*3+frame_GPRSAVE(%rsp), %r14
	mov	8*4+frame_GPRSAVE(%rsp), %r15
	pop	%r15
	pop	%r14
	pop	%r13
	pop	%r12
	pop	%rbx

	# Restore Stack Pointer
	mov	frame_RSPSAVE(%rsp), %rsp
	ret
SYM_FUNC_END(sha512_transform_rorx)