提交 1ef63898 编写于 作者: B Bernd Edlinger

Fix aesni_cbc_sha256_enc_avx2 backtrace info

We store a secondary frame pointer info for the debugger
in the red zone.  This fixes a crash in the unwinder when
this function is interrupted.

Additionally the missing cfi function annotation is added
to aesni_cbc_sha256_enc_shaext.

[extended tests]
Reviewed-by: NRichard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/10674)

(cherry picked from commit 665de4d48aef2507022a7d74f5c7f6e339d5e6bc)
上级 b6d0a1c7
...@@ -1086,7 +1086,23 @@ $code.=<<___; ...@@ -1086,7 +1086,23 @@ $code.=<<___;
vmovdqa $t0,0x00(%rsp) vmovdqa $t0,0x00(%rsp)
xor $a1,$a1 xor $a1,$a1
vmovdqa $t1,0x20(%rsp) vmovdqa $t1,0x20(%rsp)
___
$code.=<<___ if (!$win64);
# temporarily use %rsi as frame pointer
mov $_rsp,%rsi
.cfi_def_cfa %rsi,8
___
$code.=<<___;
lea -$PUSH8(%rsp),%rsp lea -$PUSH8(%rsp),%rsp
___
$code.=<<___ if (!$win64);
# the frame info is at $_rsp, but the stack is moving...
# so a second frame pointer is saved at -8(%rsp)
# that is in the red zone
mov %rsi,-8(%rsp)
.cfi_cfa_expression %rsp-8,deref,+8
___
$code.=<<___;
mov $B,$a3 mov $B,$a3
vmovdqa $t2,0x00(%rsp) vmovdqa $t2,0x00(%rsp)
xor $C,$a3 # magic xor $C,$a3 # magic
...@@ -1108,7 +1124,17 @@ my @X = @_; ...@@ -1108,7 +1124,17 @@ my @X = @_;
my @insns = (&$body,&$body,&$body,&$body); # 96 instructions my @insns = (&$body,&$body,&$body,&$body); # 96 instructions
my $base = "+2*$PUSH8(%rsp)"; my $base = "+2*$PUSH8(%rsp)";
&lea ("%rsp","-$PUSH8(%rsp)") if (($j%2)==0); if (($j%2)==0) {
&lea ("%rsp","-$PUSH8(%rsp)");
$code.=<<___ if (!$win64);
.cfi_cfa_expression %rsp+`$PUSH8-8`,deref,+8
# copy secondary frame pointer to new location again at -8(%rsp)
pushq $PUSH8-8(%rsp)
.cfi_cfa_expression %rsp,deref,+8
lea 8(%rsp),%rsp
.cfi_cfa_expression %rsp-8,deref,+8
___
}
foreach (Xupdate_256_AVX()) { # 29 instructions foreach (Xupdate_256_AVX()) { # 29 instructions
eval; eval;
eval(shift(@insns)); eval(shift(@insns));
...@@ -1234,26 +1260,28 @@ $code.=<<___; ...@@ -1234,26 +1260,28 @@ $code.=<<___;
jbe .Loop_avx2 jbe .Loop_avx2
lea (%rsp),$Tbl lea (%rsp),$Tbl
# temporarily use $Tbl as index to $_rsp
# this avoids the need to save a secondary frame pointer at -8(%rsp)
.cfi_cfa_expression $Tbl+`16*$SZ+7*8`,deref,+8
.Ldone_avx2: .Ldone_avx2:
lea ($Tbl),%rsp mov 16*$SZ+4*8($Tbl),$ivp
mov $_ivp,$ivp mov 16*$SZ+7*8($Tbl),%rsi
mov $_rsp,%rsi
.cfi_def_cfa %rsi,8 .cfi_def_cfa %rsi,8
vmovdqu $iv,($ivp) # output IV vmovdqu $iv,($ivp) # output IV
vzeroall vzeroall
___ ___
$code.=<<___ if ($win64); $code.=<<___ if ($win64);
movaps `$framesz+16*0`(%rsp),%xmm6 movaps `$framesz+16*0`($Tbl),%xmm6
movaps `$framesz+16*1`(%rsp),%xmm7 movaps `$framesz+16*1`($Tbl),%xmm7
movaps `$framesz+16*2`(%rsp),%xmm8 movaps `$framesz+16*2`($Tbl),%xmm8
movaps `$framesz+16*3`(%rsp),%xmm9 movaps `$framesz+16*3`($Tbl),%xmm9
movaps `$framesz+16*4`(%rsp),%xmm10 movaps `$framesz+16*4`($Tbl),%xmm10
movaps `$framesz+16*5`(%rsp),%xmm11 movaps `$framesz+16*5`($Tbl),%xmm11
movaps `$framesz+16*6`(%rsp),%xmm12 movaps `$framesz+16*6`($Tbl),%xmm12
movaps `$framesz+16*7`(%rsp),%xmm13 movaps `$framesz+16*7`($Tbl),%xmm13
movaps `$framesz+16*8`(%rsp),%xmm14 movaps `$framesz+16*8`($Tbl),%xmm14
movaps `$framesz+16*9`(%rsp),%xmm15 movaps `$framesz+16*9`($Tbl),%xmm15
___ ___
$code.=<<___; $code.=<<___;
mov -48(%rsi),%r15 mov -48(%rsi),%r15
...@@ -1341,6 +1369,7 @@ $code.=<<___; ...@@ -1341,6 +1369,7 @@ $code.=<<___;
.type ${func}_shaext,\@function,6 .type ${func}_shaext,\@function,6
.align 32 .align 32
${func}_shaext: ${func}_shaext:
.cfi_startproc
mov `($win64?56:8)`(%rsp),$inp # load 7th argument mov `($win64?56:8)`(%rsp),$inp # load 7th argument
___ ___
$code.=<<___ if ($win64); $code.=<<___ if ($win64);
...@@ -1557,6 +1586,7 @@ $code.=<<___ if ($win64); ...@@ -1557,6 +1586,7 @@ $code.=<<___ if ($win64);
___ ___
$code.=<<___; $code.=<<___;
ret ret
.cfi_endproc
.size ${func}_shaext,.-${func}_shaext .size ${func}_shaext,.-${func}_shaext
___ ___
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册