Commit 27d26793 authored by Josh Poimboeuf's avatar Josh Poimboeuf
Browse files

x86/crypto/sha512-ssse3: 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/6ecaaac9f3828fbb903513bf90c34a08380a8e35.1614182415.git.jpoimboe@redhat.com
parent ec063e09
Loading
Loading
Loading
Loading
+19 −22
Original line number Diff line number Diff line
@@ -74,14 +74,10 @@ tmp0 = %rax

W_SIZE = 80*8
WK_SIZE = 2*8
RSPSAVE_SIZE = 1*8
GPRSAVE_SIZE = 5*8

frame_W = 0
frame_WK = frame_W + W_SIZE
frame_RSPSAVE = frame_WK + WK_SIZE
frame_GPRSAVE = frame_RSPSAVE + RSPSAVE_SIZE
frame_size = frame_GPRSAVE + GPRSAVE_SIZE
frame_size = frame_WK + WK_SIZE

# Useful QWORD "arrays" for simpler memory references
# MSG, DIGEST, K_t, W_t are arrays
@@ -283,18 +279,18 @@ SYM_FUNC_START(sha512_transform_ssse3)
	test msglen, msglen
	je nowork

	# 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, frame_GPRSAVE(%rsp)
	mov	%r12, frame_GPRSAVE +8*1(%rsp)
	mov	%r13, frame_GPRSAVE +8*2(%rsp)
	mov	%r14, frame_GPRSAVE +8*3(%rsp)
	mov	%r15, frame_GPRSAVE +8*4(%rsp)

updateblock:

@@ -355,15 +351,16 @@ updateblock:
	dec	msglen
	jnz	updateblock

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

	# Restore Stack Pointer
	mov	frame_RSPSAVE(%rsp), %rsp
	mov	%rbp, %rsp
	pop	%rbp

	# Restore GPRs
	pop	%r15
	pop	%r14
	pop	%r13
	pop	%r12
	pop	%rbx

nowork:
	ret