lkml.org 
[lkml]   [2021]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: objtool/core] x86/crypto/sha512-ssse3: Standardize stack alignment prologue
    The following commit has been merged into the objtool/core branch of tip:

    Commit-ID: 27d26793f2105281d9374928448142777cef6f74
    Gitweb: https://git.kernel.org/tip/27d26793f2105281d9374928448142777cef6f74
    Author: Josh Poimboeuf <jpoimboe@redhat.com>
    AuthorDate: Wed, 24 Feb 2021 10:29:25 -06:00
    Committer: Josh Poimboeuf <jpoimboe@redhat.com>
    CommitterDate: Mon, 19 Apr 2021 12:36:37 -05:00

    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: Josh Poimboeuf <jpoimboe@redhat.com>
    Tested-by: Ard Biesheuvel <ardb@kernel.org>
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Tested-by: Sami Tolvanen <samitolvanen@google.com>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
    Link: https://lore.kernel.org/r/6ecaaac9f3828fbb903513bf90c34a08380a8e35.1614182415.git.jpoimboe@redhat.com
    ---
    arch/x86/crypto/sha512-ssse3-asm.S | 41 +++++++++++++----------------
    1 file changed, 19 insertions(+), 22 deletions(-)

    diff --git a/arch/x86/crypto/sha512-ssse3-asm.S b/arch/x86/crypto/sha512-ssse3-asm.S
    index 50812af..bd51c90 100644
    --- a/arch/x86/crypto/sha512-ssse3-asm.S
    +++ b/arch/x86/crypto/sha512-ssse3-asm.S
    @@ -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
    \
     
     \ /
      Last update: 2021-04-20 12:51    [W:4.092 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site