From b6bca9c6dde177f641137d2991aa677997c54c67 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Thu, 4 Apr 2024 00:50:59 -0400 Subject: [PATCH] Align perlasm SEH directives with gas/clang-assembler perlasm broadly uses gas syntax. gas and clang-assembler already have SEH directives. From what I can tell, no one ever properly documented this, but this mail describes this. LLVM's test data also has examples. https://sourceware.org/legacy-ml/binutils/2009-08/msg00193.html First, we named ours based on the MASM directives and prepended ".seh_". gas says "endprologue" instead of "endprolog", "savexmm" instead of "savexmm128", and "stackalloc" instead of "allocstack". Since perlasm mostly looks like gas, I've switched to the gas spellings. Second, we made .seh_endprologue implicit because it's always immediately after the last directive. Both MASM and clang-assembler make it explicit. Synthesizing an .seh_endprologue for those syntaxes would require buffering the up the whole function, so just require it be explicit in the source. The last difference is that gas says ".seh_proc name_of_function". I've not aligned on that one because MASM actually integrates it into the PROC line. You add the FRAME keyword or not depending on whether it's a frame function. To make the MASM output easier, I think we need to diverge from both gas and what we've currently done. I'll resolve that in a follow-up change. Along the way, fix a couple of instances where the _CET_ENDBR got put on the wrong side of the SEH directive. I don't think that macro works on Windows anyway, so it's moot. But if it did emit anything, it should be included in the prologue. Bug: 571 Change-Id: I39701a952a654afe6bfc8b3b908ca8fe65d6f1a1 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/68292 Commit-Queue: David Benjamin Reviewed-by: Bob Beck --- .../fipsmodule/modes/asm/aesni-gcm-x86_64.pl | 46 ++--- .../modes/asm/ghash-ssse3-x86_64.pl | 16 +- crypto/fipsmodule/modes/asm/ghash-x86_64.pl | 60 +++--- crypto/perlasm/x86_64-xlate.pl | 72 +++++--- crypto/test/asm/trampoline-x86_64.pl | 8 +- gen/bcm/aesni-gcm-x86_64-win.asm | 174 +++++++++--------- gen/bcm/ghash-ssse3-x86_64-win.asm | 42 +++-- gen/bcm/ghash-x86_64-apple.S | 2 + gen/bcm/ghash-x86_64-linux.S | 2 + gen/bcm/ghash-x86_64-win.asm | 136 +++++++------- gen/test_support/trampoline-x86_64-apple.S | 3 + gen/test_support/trampoline-x86_64-linux.S | 3 + gen/test_support/trampoline-x86_64-win.asm | 116 ++++++------ 13 files changed, 365 insertions(+), 315 deletions(-) diff --git a/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl b/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl index 82e46d48a..eabaa1b96 100644 --- a/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl +++ b/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl @@ -474,7 +474,7 @@ ___ if ($win64) { $code.=<<___ lea -0xa8(%rsp),%rsp # 8 extra bytes to align the stack -.seh_allocstack 0xa8 +.seh_stackalloc 0xa8 .seh_setframe %rbp, 0xa8+5*8 # Load the last two parameters. These go into %rdi and %rsi, which are # non-volatile on Windows, so stash them in the parameter stack area @@ -487,25 +487,26 @@ $code.=<<___ mov 0x38(%rbp), $Htable # Save non-volatile XMM registers. movaps %xmm6,-0xd0(%rbp) -.seh_savexmm128 %xmm6, 0xa8+5*8-0xd0 +.seh_savexmm %xmm6, 0xa8+5*8-0xd0 movaps %xmm7,-0xc0(%rbp) -.seh_savexmm128 %xmm7, 0xa8+5*8-0xc0 +.seh_savexmm %xmm7, 0xa8+5*8-0xc0 movaps %xmm8,-0xb0(%rbp) -.seh_savexmm128 %xmm8, 0xa8+5*8-0xb0 +.seh_savexmm %xmm8, 0xa8+5*8-0xb0 movaps %xmm9,-0xa0(%rbp) -.seh_savexmm128 %xmm9, 0xa8+5*8-0xa0 +.seh_savexmm %xmm9, 0xa8+5*8-0xa0 movaps %xmm10,-0x90(%rbp) -.seh_savexmm128 %xmm10, 0xa8+5*8-0x90 +.seh_savexmm %xmm10, 0xa8+5*8-0x90 movaps %xmm11,-0x80(%rbp) -.seh_savexmm128 %xmm11, 0xa8+5*8-0x80 +.seh_savexmm %xmm11, 0xa8+5*8-0x80 movaps %xmm12,-0x70(%rbp) -.seh_savexmm128 %xmm12, 0xa8+5*8-0x70 +.seh_savexmm %xmm12, 0xa8+5*8-0x70 movaps %xmm13,-0x60(%rbp) -.seh_savexmm128 %xmm13, 0xa8+5*8-0x60 +.seh_savexmm %xmm13, 0xa8+5*8-0x60 movaps %xmm14,-0x50(%rbp) -.seh_savexmm128 %xmm14, 0xa8+5*8-0x50 +.seh_savexmm %xmm14, 0xa8+5*8-0x50 movaps %xmm15,-0x40(%rbp) -.seh_savexmm128 %xmm15, 0xa8+5*8-0x40 +.seh_savexmm %xmm15, 0xa8+5*8-0x40 +.seh_endprologue ___ } $code.=<<___; @@ -753,7 +754,7 @@ ___ if ($win64) { $code.=<<___ lea -0xa8(%rsp),%rsp # 8 extra bytes to align the stack -.seh_allocstack 0xa8 +.seh_stackalloc 0xa8 .seh_setframe %rbp, 0xa8+5*8 # Load the last two parameters. These go into %rdi and %rsi, which are # non-volatile on Windows, so stash them in the parameter stack area @@ -766,25 +767,26 @@ $code.=<<___ mov 0x38(%rbp), $Htable # Save non-volatile XMM registers. movaps %xmm6,-0xd0(%rbp) -.seh_savexmm128 %xmm6, 0xa8+5*8-0xd0 +.seh_savexmm %xmm6, 0xa8+5*8-0xd0 movaps %xmm7,-0xc0(%rbp) -.seh_savexmm128 %xmm7, 0xa8+5*8-0xc0 +.seh_savexmm %xmm7, 0xa8+5*8-0xc0 movaps %xmm8,-0xb0(%rbp) -.seh_savexmm128 %xmm8, 0xa8+5*8-0xb0 +.seh_savexmm %xmm8, 0xa8+5*8-0xb0 movaps %xmm9,-0xa0(%rbp) -.seh_savexmm128 %xmm9, 0xa8+5*8-0xa0 +.seh_savexmm %xmm9, 0xa8+5*8-0xa0 movaps %xmm10,-0x90(%rbp) -.seh_savexmm128 %xmm10, 0xa8+5*8-0x90 +.seh_savexmm %xmm10, 0xa8+5*8-0x90 movaps %xmm11,-0x80(%rbp) -.seh_savexmm128 %xmm11, 0xa8+5*8-0x80 +.seh_savexmm %xmm11, 0xa8+5*8-0x80 movaps %xmm12,-0x70(%rbp) -.seh_savexmm128 %xmm12, 0xa8+5*8-0x70 +.seh_savexmm %xmm12, 0xa8+5*8-0x70 movaps %xmm13,-0x60(%rbp) -.seh_savexmm128 %xmm13, 0xa8+5*8-0x60 +.seh_savexmm %xmm13, 0xa8+5*8-0x60 movaps %xmm14,-0x50(%rbp) -.seh_savexmm128 %xmm14, 0xa8+5*8-0x50 +.seh_savexmm %xmm14, 0xa8+5*8-0x50 movaps %xmm15,-0x40(%rbp) -.seh_savexmm128 %xmm15, 0xa8+5*8-0x40 +.seh_savexmm %xmm15, 0xa8+5*8-0x40 +.seh_endprologue ___ } $code.=<<___; diff --git a/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl b/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl index 4a850f479..bdfbe04d7 100644 --- a/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl +++ b/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl @@ -108,11 +108,12 @@ gcm_gmult_ssse3: ____ $code .= <<____ if ($win64); subq \$40, %rsp -.seh_allocstack 40 +.seh_stackalloc 40 movdqa %xmm6, (%rsp) -.seh_savexmm128 %xmm6, 0 +.seh_savexmm %xmm6, 0 movdqa %xmm10, 16(%rsp) -.seh_savexmm128 %xmm10, 16 +.seh_savexmm %xmm10, 16 +.seh_endprologue ____ $code .= <<____; movdqu ($Xi), %xmm0 @@ -251,13 +252,14 @@ gcm_ghash_ssse3: ____ $code .= <<____ if ($win64); subq \$56, %rsp -.seh_allocstack 56 +.seh_stackalloc 56 movdqa %xmm6, (%rsp) -.seh_savexmm128 %xmm6, 0 +.seh_savexmm %xmm6, 0 movdqa %xmm10, 16(%rsp) -.seh_savexmm128 %xmm10, 16 +.seh_savexmm %xmm10, 16 movdqa %xmm11, 32(%rsp) -.seh_savexmm128 %xmm11, 32 +.seh_savexmm %xmm11, 32 +.seh_endprologue ____ $code .= <<____; movdqu ($Xi), %xmm0 diff --git a/crypto/fipsmodule/modes/asm/ghash-x86_64.pl b/crypto/fipsmodule/modes/asm/ghash-x86_64.pl index 33ee1cbab..c026d8f9d 100644 --- a/crypto/fipsmodule/modes/asm/ghash-x86_64.pl +++ b/crypto/fipsmodule/modes/asm/ghash-x86_64.pl @@ -210,9 +210,10 @@ gcm_init_clmul: ___ $code.=<<___ if ($win64); sub \$0x18,%rsp -.seh_allocstack 0x18 +.seh_stackalloc 0x18 movaps %xmm6,(%rsp) -.seh_savexmm128 %xmm6, 0 +.seh_savexmm %xmm6, 0 +.seh_endprologue ___ $code.=<<___; movdqu ($Xip),$Hkey @@ -347,27 +348,28 @@ ___ $code.=<<___ if ($win64); lea -0x88(%rsp),%rax lea -0x20(%rax),%rsp -.seh_allocstack 0x20+0x88 +.seh_stackalloc 0x20+0x88 movaps %xmm6,-0x20(%rax) -.seh_savexmm128 %xmm6, 0x20-0x20 +.seh_savexmm %xmm6, 0x20-0x20 movaps %xmm7,-0x10(%rax) -.seh_savexmm128 %xmm7, 0x20-0x10 +.seh_savexmm %xmm7, 0x20-0x10 movaps %xmm8,0(%rax) -.seh_savexmm128 %xmm8, 0x20+0 +.seh_savexmm %xmm8, 0x20+0 movaps %xmm9,0x10(%rax) -.seh_savexmm128 %xmm9, 0x20+0x10 +.seh_savexmm %xmm9, 0x20+0x10 movaps %xmm10,0x20(%rax) -.seh_savexmm128 %xmm10, 0x20+0x20 +.seh_savexmm %xmm10, 0x20+0x20 movaps %xmm11,0x30(%rax) -.seh_savexmm128 %xmm11, 0x20+0x30 +.seh_savexmm %xmm11, 0x20+0x30 movaps %xmm12,0x40(%rax) -.seh_savexmm128 %xmm12, 0x20+0x40 +.seh_savexmm %xmm12, 0x20+0x40 movaps %xmm13,0x50(%rax) -.seh_savexmm128 %xmm13, 0x20+0x50 +.seh_savexmm %xmm13, 0x20+0x50 movaps %xmm14,0x60(%rax) -.seh_savexmm128 %xmm14, 0x20+0x60 +.seh_savexmm %xmm14, 0x20+0x60 movaps %xmm15,0x70(%rax) -.seh_savexmm128 %xmm15, 0x20+0x70 +.seh_savexmm %xmm15, 0x20+0x70 +.seh_endprologue ___ $code.=<<___; movdqa .Lbswap_mask(%rip),$T3 @@ -704,6 +706,7 @@ $code.=<<___; .align 32 gcm_init_avx: .cfi_startproc +.seh_startproc _CET_ENDBR ___ if ($avx) { @@ -711,11 +714,11 @@ my ($Htbl,$Xip)=@_4args; my $HK="%xmm6"; $code.=<<___ if ($win64); -.seh_startproc sub \$0x18,%rsp -.seh_allocstack 0x18 +.seh_stackalloc 0x18 movaps %xmm6,(%rsp) -.seh_savexmm128 %xmm6, 0 +.seh_savexmm %xmm6, 0 +.seh_endprologue ___ $code.=<<___; vzeroupper @@ -862,6 +865,7 @@ $code.=<<___; .align 32 gcm_ghash_avx: .cfi_startproc +.seh_startproc _CET_ENDBR ___ if ($avx) { @@ -872,30 +876,30 @@ my ($Xlo,$Xhi,$Xmi, $Xi,$Xo,$Tred,$bswap,$Ii,$Ij) = map("%xmm$_",(0..15)); $code.=<<___ if ($win64); -.seh_startproc lea -0x88(%rsp),%rax lea -0x20(%rax),%rsp -.seh_allocstack 0x20+0x88 +.seh_stackalloc 0x20+0x88 movaps %xmm6,-0x20(%rax) -.seh_savexmm128 %xmm6, 0x20-0x20 +.seh_savexmm %xmm6, 0x20-0x20 movaps %xmm7,-0x10(%rax) -.seh_savexmm128 %xmm7, 0x20-0x10 +.seh_savexmm %xmm7, 0x20-0x10 movaps %xmm8,0(%rax) -.seh_savexmm128 %xmm8, 0x20+0 +.seh_savexmm %xmm8, 0x20+0 movaps %xmm9,0x10(%rax) -.seh_savexmm128 %xmm9, 0x20+0x10 +.seh_savexmm %xmm9, 0x20+0x10 movaps %xmm10,0x20(%rax) -.seh_savexmm128 %xmm10, 0x20+0x20 +.seh_savexmm %xmm10, 0x20+0x20 movaps %xmm11,0x30(%rax) -.seh_savexmm128 %xmm11, 0x20+0x30 +.seh_savexmm %xmm11, 0x20+0x30 movaps %xmm12,0x40(%rax) -.seh_savexmm128 %xmm12, 0x20+0x40 +.seh_savexmm %xmm12, 0x20+0x40 movaps %xmm13,0x50(%rax) -.seh_savexmm128 %xmm13, 0x20+0x50 +.seh_savexmm %xmm13, 0x20+0x50 movaps %xmm14,0x60(%rax) -.seh_savexmm128 %xmm14, 0x20+0x60 +.seh_savexmm %xmm14, 0x20+0x60 movaps %xmm15,0x70(%rax) -.seh_savexmm128 %xmm15, 0x20+0x70 +.seh_savexmm %xmm15, 0x20+0x70 +.seh_endprologue ___ $code.=<<___; vzeroupper diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl index 9fb1de19c..5b7705d4e 100755 --- a/crypto/perlasm/x86_64-xlate.pl +++ b/crypto/perlasm/x86_64-xlate.pl @@ -714,16 +714,21 @@ my %globals; } } { package seh_directive; - # This implements directives, like MASM's, for specifying Windows unwind - # codes. See https://learn.microsoft.com/en-us/cpp/build/exception-handling-x64?view=msvc-170 - # for details on the Windows unwind mechanism. Unlike MASM's directives, we - # have no .seh_endprolog directive. Instead, the last prolog directive is - # implicitly the end of the prolog. + # This implements directives, like MASM, gas, and clang-assembler for + # specifying Windows unwind codes. See + # https://learn.microsoft.com/en-us/cpp/build/exception-handling-x64?view=msvc-170 + # for details on the Windows unwind mechanism. As perlasm generally uses gas + # syntax, the syntax is patterned after the gas spelling, described in + # https://sourceware.org/legacy-ml/binutils/2009-08/msg00193.html + # + # TODO(https://crbug.com/boringssl/571): Translate to the MASM directives + # when using the MASM output. Emit as-is when using "mingw64" output, which + # is Windows with gas syntax. # # TODO(https://crbug.com/boringssl/259): For now, SEH directives are ignored # on non-Windows platforms. This means functions need to specify both CFI # and SEH directives, often redundantly. Ideally we'd abstract between the - # two. E.g., we can synthesize CFI from SEH prologs, but SEH does not + # two. E.g., we can synthesize CFI from SEH prologues, but SEH does not # annotate epilogs, so we'd need to combine parts from both. Or we can # restrict ourselves to a subset of CFI and synthesize SEH from CFI. # @@ -732,7 +737,7 @@ my %globals; # complication is the current scheme modifies RDI and RSI (non-volatile on # Windows) at the start of the function, and saves them in the parameter # stack area. This can be expressed with .seh_savereg, but .seh_savereg is - # only usable late in the prolog. However, unwind information gives enough + # only usable late in the prologue. However, unwind information gives enough # information to locate the parameter stack area at any point in the # function, so we can defer conversion or implement other schemes. @@ -777,6 +782,11 @@ my %globals; die "Missing .seh_startproc directive" unless %info; } + sub _check_in_prologue { + _check_in_proc(); + die "Invalid SEH directive after .seh_endprologue" if defined($info{endprologue}); + } + sub _check_not_in_proc { die "Missing .seh_endproc directive" if %info; } @@ -794,8 +804,8 @@ my %globals; info_label => $info_label, # start_label is the start of the function. start_label => $start_label, - # endprolog is the label of the last unwind code in the function. - endprolog => $start_label, + # endprologue is the label of the end of the prologue. + endprologue => undef, # unwind_codes contains the textual representation of the # unwind codes in the function so far. unwind_codes => "", @@ -821,14 +831,14 @@ my %globals; sub _add_unwind_code { my ($op, $value, @extra) = @_; - _check_in_proc(); + _check_in_prologue(); if ($op != $UWOP_PUSH_NONVOL) { $info{has_nonpushreg} = 1; } elsif ($info{has_nonpushreg}) { - die ".seh_pushreg directives must appear first in the prolog"; + die ".seh_pushreg directives must appear first in the prologue"; } - my $label = _new_unwind_label("prolog"); + my $label = _new_unwind_label("prologue"); # Encode an UNWIND_CODE structure. See # https://learn.microsoft.com/en-us/cpp/build/exception-handling-x64?view=msvc-170#struct-unwind_code my $encoded = $op | ($value << 4); @@ -844,17 +854,13 @@ ____ $info{num_codes} += 1 + scalar(@extra); # Unwind codes are listed in reverse order. $info{unwind_codes} = $codes . $info{unwind_codes}; - # Track the label of the last unwind code. It implicitly is the end of - # the prolog. MASM has an endprolog directive, but it seems to be - # unnecessary. - $info{endprolog} = $label; return $label; } sub _updating_fixed_allocation { - _check_in_proc(); + _check_in_prologue(); if ($info{frame_reg} != 0) { - # Windows documentation does not explicitly forbid .seh_allocstack + # Windows documentation does not explicitly forbid .seh_stackalloc # after .seh_setframe, but it appears to have no effect. Offsets are # still relative to the fixed allocation when the frame register was # established. @@ -862,7 +868,7 @@ ____ } if ($info{has_offset}) { # Windows documentation does not explicitly forbid .seh_savereg - # before .seh_allocstack, but it does not work very well. Offsets + # before .seh_stackalloc, but it does not work very well. Offsets # are relative to the top of the final fixed allocation, not where # RSP currently is. die "directives with an offset must come after the fixed allocation is established."; @@ -871,11 +877,8 @@ ____ sub _endproc { _check_in_proc(); - if ($info{num_codes} == 0) { - # If a Windows function has no directives (i.e. it doesn't touch the - # stack), it is a leaf function and is not expected to appear in - # .pdata or .xdata. - die ".seh_endproc found with no unwind codes"; + if (!defined($info{endprologue})) { + die "Missing .seh_endprologue"; } my $end_label = _new_unwind_label("end"); @@ -894,7 +897,7 @@ ____ $xdata .= <<____; $info{info_label}: .byte 1 # version 1, no flags - .byte $info{endprolog}-$info{start_label} + .byte $info{endprologue}-$info{start_label} .byte $info{num_codes} .byte $frame_encoded $info{unwind_codes} @@ -916,7 +919,7 @@ ____ my $label; SWITCH: for ($dir) { /^startproc$/ && do { - $label = _startproc(); + $label = _startproc($1); last; }; /^pushreg$/ && do { @@ -926,7 +929,7 @@ ____ $label = _add_unwind_code($UWOP_PUSH_NONVOL, $reg_num); last; }; - /^allocstack$/ && do { + /^stackalloc$/ && do { my $num = eval($$line); if ($num <= 0 || $num % 8 != 0) { die "invalid stack allocation: $num"; @@ -976,7 +979,7 @@ ____ $info{has_offset} = 1; last; }; - /^savexmm128$/ && do { + /^savexmm$/ && do { $$line =~ /%xmm(\d+)\s*,\s*(.+)/ or die "could not parse .seh_$dir"; my $reg_num = $1; my $offset = eval($2); @@ -991,6 +994,19 @@ ____ $info{has_offset} = 1; last; }; + /^endprologue$/ && do { + _check_in_prologue(); + if ($info{num_codes} == 0) { + # If a Windows function has no directives (i.e. it + # doesn't touch the stack), it is a leaf function and is + # not expected to appear in .pdata or .xdata. + die ".seh_endprologue found with no unwind codes"; + } + + $label = _new_unwind_label("endprologue"); + $info{endprologue} = $label; + last; + }; /^endproc$/ && do { $label = _endproc(); last; diff --git a/crypto/test/asm/trampoline-x86_64.pl b/crypto/test/asm/trampoline-x86_64.pl index 53b4bcd67..d8d2be282 100755 --- a/crypto/test/asm/trampoline-x86_64.pl +++ b/crypto/test/asm/trampoline-x86_64.pl @@ -179,7 +179,7 @@ my $caller_state_offset = $scratch_offset + 8; $code .= <<____; subq \$$stack_alloc_size, %rsp .cfi_adjust_cfa_offset $stack_alloc_size -.seh_allocstack $stack_alloc_size +.seh_stackalloc $stack_alloc_size ____ $code .= <<____ if (!$win64); movq $unwind, $unwind_offset(%rsp) @@ -195,12 +195,13 @@ $code .= store_caller_state($caller_state_offset, "%rsp", sub { # pointer just before the call. my $cfi_off = $off - $stack_alloc_size - 8; my $seh_dir = ".seh_savereg"; - $seh_dir = ".seh_savexmm128" if ($reg =~ /^xmm/); + $seh_dir = ".seh_savexmm" if ($reg =~ /^xmm/); return <<____; .cfi_offset $reg, $cfi_off $seh_dir \%$reg, $off ____ }); +$code .= ".seh_endprologue\n"; $code .= load_caller_state(0, $state); $code .= <<____; @@ -342,6 +343,7 @@ abi_test_bad_unwind_wrong_register: pushq %r12 .cfi_push %r13 # This should be %r13 .seh_pushreg %r13 # This should be %r13 +.seh_endprologue # Windows evaluates epilogs directly in the unwinder, rather than using # unwind codes. Add a nop so there is one non-epilog point (immediately # before the nop) where the unwinder can observe the mistake. @@ -366,6 +368,7 @@ abi_test_bad_unwind_temporary: pushq %r12 .cfi_push %r12 .seh_pushreg %r12 +.seh_endprologue movq %r12, %rax inc %rax @@ -422,6 +425,7 @@ abi_test_bad_unwind_epilog: .seh_startproc pushq %r12 .seh_pushreg %r12 +.seh_endprologue nop diff --git a/gen/bcm/aesni-gcm-x86_64-win.asm b/gen/bcm/aesni-gcm-x86_64-win.asm index d7a2665e4..7564a1cf0 100644 --- a/gen/bcm/aesni-gcm-x86_64-win.asm +++ b/gen/bcm/aesni-gcm-x86_64-win.asm @@ -363,57 +363,58 @@ _CET_ENDBR push rbp -$L$SEH_prolog_aesni_gcm_decrypt_2: +$L$SEH_prologue_aesni_gcm_decrypt_2: mov rbp,rsp push rbx -$L$SEH_prolog_aesni_gcm_decrypt_3: +$L$SEH_prologue_aesni_gcm_decrypt_3: push r12 -$L$SEH_prolog_aesni_gcm_decrypt_4: +$L$SEH_prologue_aesni_gcm_decrypt_4: push r13 -$L$SEH_prolog_aesni_gcm_decrypt_5: +$L$SEH_prologue_aesni_gcm_decrypt_5: push r14 -$L$SEH_prolog_aesni_gcm_decrypt_6: +$L$SEH_prologue_aesni_gcm_decrypt_6: push r15 -$L$SEH_prolog_aesni_gcm_decrypt_7: +$L$SEH_prologue_aesni_gcm_decrypt_7: lea rsp,[((-168))+rsp] -$L$SEH_prolog_aesni_gcm_decrypt_8: -$L$SEH_prolog_aesni_gcm_decrypt_9: +$L$SEH_prologue_aesni_gcm_decrypt_8: +$L$SEH_prologue_aesni_gcm_decrypt_9: mov QWORD[16+rbp],rdi -$L$SEH_prolog_aesni_gcm_decrypt_10: +$L$SEH_prologue_aesni_gcm_decrypt_10: mov QWORD[24+rbp],rsi -$L$SEH_prolog_aesni_gcm_decrypt_11: +$L$SEH_prologue_aesni_gcm_decrypt_11: mov rdi,QWORD[48+rbp] mov rsi,QWORD[56+rbp] movaps XMMWORD[(-208)+rbp],xmm6 -$L$SEH_prolog_aesni_gcm_decrypt_12: +$L$SEH_prologue_aesni_gcm_decrypt_12: movaps XMMWORD[(-192)+rbp],xmm7 -$L$SEH_prolog_aesni_gcm_decrypt_13: +$L$SEH_prologue_aesni_gcm_decrypt_13: movaps XMMWORD[(-176)+rbp],xmm8 -$L$SEH_prolog_aesni_gcm_decrypt_14: +$L$SEH_prologue_aesni_gcm_decrypt_14: movaps XMMWORD[(-160)+rbp],xmm9 -$L$SEH_prolog_aesni_gcm_decrypt_15: +$L$SEH_prologue_aesni_gcm_decrypt_15: movaps XMMWORD[(-144)+rbp],xmm10 -$L$SEH_prolog_aesni_gcm_decrypt_16: +$L$SEH_prologue_aesni_gcm_decrypt_16: movaps XMMWORD[(-128)+rbp],xmm11 -$L$SEH_prolog_aesni_gcm_decrypt_17: +$L$SEH_prologue_aesni_gcm_decrypt_17: movaps XMMWORD[(-112)+rbp],xmm12 -$L$SEH_prolog_aesni_gcm_decrypt_18: +$L$SEH_prologue_aesni_gcm_decrypt_18: movaps XMMWORD[(-96)+rbp],xmm13 -$L$SEH_prolog_aesni_gcm_decrypt_19: +$L$SEH_prologue_aesni_gcm_decrypt_19: movaps XMMWORD[(-80)+rbp],xmm14 -$L$SEH_prolog_aesni_gcm_decrypt_20: +$L$SEH_prologue_aesni_gcm_decrypt_20: movaps XMMWORD[(-64)+rbp],xmm15 -$L$SEH_prolog_aesni_gcm_decrypt_21: +$L$SEH_prologue_aesni_gcm_decrypt_21: +$L$SEH_endprologue_aesni_gcm_decrypt_22: vzeroupper mov r12,QWORD[64+rbp] @@ -512,7 +513,7 @@ $L$dec_no_key_aliasing: $L$gcm_dec_abort: ret -$L$SEH_end_aesni_gcm_decrypt_22: +$L$SEH_end_aesni_gcm_decrypt_23: @@ -629,57 +630,58 @@ EXTERN BORINGSSL_function_hit push rbp -$L$SEH_prolog_aesni_gcm_encrypt_2: +$L$SEH_prologue_aesni_gcm_encrypt_2: mov rbp,rsp push rbx -$L$SEH_prolog_aesni_gcm_encrypt_3: +$L$SEH_prologue_aesni_gcm_encrypt_3: push r12 -$L$SEH_prolog_aesni_gcm_encrypt_4: +$L$SEH_prologue_aesni_gcm_encrypt_4: push r13 -$L$SEH_prolog_aesni_gcm_encrypt_5: +$L$SEH_prologue_aesni_gcm_encrypt_5: push r14 -$L$SEH_prolog_aesni_gcm_encrypt_6: +$L$SEH_prologue_aesni_gcm_encrypt_6: push r15 -$L$SEH_prolog_aesni_gcm_encrypt_7: +$L$SEH_prologue_aesni_gcm_encrypt_7: lea rsp,[((-168))+rsp] -$L$SEH_prolog_aesni_gcm_encrypt_8: -$L$SEH_prolog_aesni_gcm_encrypt_9: +$L$SEH_prologue_aesni_gcm_encrypt_8: +$L$SEH_prologue_aesni_gcm_encrypt_9: mov QWORD[16+rbp],rdi -$L$SEH_prolog_aesni_gcm_encrypt_10: +$L$SEH_prologue_aesni_gcm_encrypt_10: mov QWORD[24+rbp],rsi -$L$SEH_prolog_aesni_gcm_encrypt_11: +$L$SEH_prologue_aesni_gcm_encrypt_11: mov rdi,QWORD[48+rbp] mov rsi,QWORD[56+rbp] movaps XMMWORD[(-208)+rbp],xmm6 -$L$SEH_prolog_aesni_gcm_encrypt_12: +$L$SEH_prologue_aesni_gcm_encrypt_12: movaps XMMWORD[(-192)+rbp],xmm7 -$L$SEH_prolog_aesni_gcm_encrypt_13: +$L$SEH_prologue_aesni_gcm_encrypt_13: movaps XMMWORD[(-176)+rbp],xmm8 -$L$SEH_prolog_aesni_gcm_encrypt_14: +$L$SEH_prologue_aesni_gcm_encrypt_14: movaps XMMWORD[(-160)+rbp],xmm9 -$L$SEH_prolog_aesni_gcm_encrypt_15: +$L$SEH_prologue_aesni_gcm_encrypt_15: movaps XMMWORD[(-144)+rbp],xmm10 -$L$SEH_prolog_aesni_gcm_encrypt_16: +$L$SEH_prologue_aesni_gcm_encrypt_16: movaps XMMWORD[(-128)+rbp],xmm11 -$L$SEH_prolog_aesni_gcm_encrypt_17: +$L$SEH_prologue_aesni_gcm_encrypt_17: movaps XMMWORD[(-112)+rbp],xmm12 -$L$SEH_prolog_aesni_gcm_encrypt_18: +$L$SEH_prologue_aesni_gcm_encrypt_18: movaps XMMWORD[(-96)+rbp],xmm13 -$L$SEH_prolog_aesni_gcm_encrypt_19: +$L$SEH_prologue_aesni_gcm_encrypt_19: movaps XMMWORD[(-80)+rbp],xmm14 -$L$SEH_prolog_aesni_gcm_encrypt_20: +$L$SEH_prologue_aesni_gcm_encrypt_20: movaps XMMWORD[(-64)+rbp],xmm15 -$L$SEH_prolog_aesni_gcm_encrypt_21: +$L$SEH_prologue_aesni_gcm_encrypt_21: +$L$SEH_endprologue_aesni_gcm_encrypt_22: vzeroupper vmovdqu xmm1,XMMWORD[rdi] @@ -943,7 +945,7 @@ $L$enc_no_key_aliasing: $L$gcm_enc_abort: ret -$L$SEH_end_aesni_gcm_encrypt_22: +$L$SEH_end_aesni_gcm_encrypt_23: section .rdata rdata align=8 @@ -968,11 +970,11 @@ section .text section .pdata rdata align=4 ALIGN 4 DD $L$SEH_begin_aesni_gcm_decrypt_1 wrt ..imagebase - DD $L$SEH_end_aesni_gcm_decrypt_22 wrt ..imagebase + DD $L$SEH_end_aesni_gcm_decrypt_23 wrt ..imagebase DD $L$SEH_info_aesni_gcm_decrypt_0 wrt ..imagebase DD $L$SEH_begin_aesni_gcm_encrypt_1 wrt ..imagebase - DD $L$SEH_end_aesni_gcm_encrypt_22 wrt ..imagebase + DD $L$SEH_end_aesni_gcm_encrypt_23 wrt ..imagebase DD $L$SEH_info_aesni_gcm_encrypt_0 wrt ..imagebase @@ -980,120 +982,120 @@ section .xdata rdata align=8 ALIGN 4 $L$SEH_info_aesni_gcm_decrypt_0: DB 1 - DB $L$SEH_prolog_aesni_gcm_decrypt_21-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_endprologue_aesni_gcm_decrypt_22-$L$SEH_begin_aesni_gcm_decrypt_1 DB 33 DB 213 - DB $L$SEH_prolog_aesni_gcm_decrypt_21-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_21-$L$SEH_begin_aesni_gcm_decrypt_1 DB 248 DW 9 - DB $L$SEH_prolog_aesni_gcm_decrypt_20-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_20-$L$SEH_begin_aesni_gcm_decrypt_1 DB 232 DW 8 - DB $L$SEH_prolog_aesni_gcm_decrypt_19-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_19-$L$SEH_begin_aesni_gcm_decrypt_1 DB 216 DW 7 - DB $L$SEH_prolog_aesni_gcm_decrypt_18-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_18-$L$SEH_begin_aesni_gcm_decrypt_1 DB 200 DW 6 - DB $L$SEH_prolog_aesni_gcm_decrypt_17-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_17-$L$SEH_begin_aesni_gcm_decrypt_1 DB 184 DW 5 - DB $L$SEH_prolog_aesni_gcm_decrypt_16-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_16-$L$SEH_begin_aesni_gcm_decrypt_1 DB 168 DW 4 - DB $L$SEH_prolog_aesni_gcm_decrypt_15-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_15-$L$SEH_begin_aesni_gcm_decrypt_1 DB 152 DW 3 - DB $L$SEH_prolog_aesni_gcm_decrypt_14-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_14-$L$SEH_begin_aesni_gcm_decrypt_1 DB 136 DW 2 - DB $L$SEH_prolog_aesni_gcm_decrypt_13-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_13-$L$SEH_begin_aesni_gcm_decrypt_1 DB 120 DW 1 - DB $L$SEH_prolog_aesni_gcm_decrypt_12-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_12-$L$SEH_begin_aesni_gcm_decrypt_1 DB 104 DW 0 - DB $L$SEH_prolog_aesni_gcm_decrypt_11-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_11-$L$SEH_begin_aesni_gcm_decrypt_1 DB 100 DW 29 - DB $L$SEH_prolog_aesni_gcm_decrypt_10-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_10-$L$SEH_begin_aesni_gcm_decrypt_1 DB 116 DW 28 - DB $L$SEH_prolog_aesni_gcm_decrypt_9-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_9-$L$SEH_begin_aesni_gcm_decrypt_1 DB 3 - DB $L$SEH_prolog_aesni_gcm_decrypt_8-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_8-$L$SEH_begin_aesni_gcm_decrypt_1 DB 1 DW 21 - DB $L$SEH_prolog_aesni_gcm_decrypt_7-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_7-$L$SEH_begin_aesni_gcm_decrypt_1 DB 240 - DB $L$SEH_prolog_aesni_gcm_decrypt_6-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_6-$L$SEH_begin_aesni_gcm_decrypt_1 DB 224 - DB $L$SEH_prolog_aesni_gcm_decrypt_5-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_5-$L$SEH_begin_aesni_gcm_decrypt_1 DB 208 - DB $L$SEH_prolog_aesni_gcm_decrypt_4-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_4-$L$SEH_begin_aesni_gcm_decrypt_1 DB 192 - DB $L$SEH_prolog_aesni_gcm_decrypt_3-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_3-$L$SEH_begin_aesni_gcm_decrypt_1 DB 48 - DB $L$SEH_prolog_aesni_gcm_decrypt_2-$L$SEH_begin_aesni_gcm_decrypt_1 + DB $L$SEH_prologue_aesni_gcm_decrypt_2-$L$SEH_begin_aesni_gcm_decrypt_1 DB 80 $L$SEH_info_aesni_gcm_encrypt_0: DB 1 - DB $L$SEH_prolog_aesni_gcm_encrypt_21-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_endprologue_aesni_gcm_encrypt_22-$L$SEH_begin_aesni_gcm_encrypt_1 DB 33 DB 213 - DB $L$SEH_prolog_aesni_gcm_encrypt_21-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_21-$L$SEH_begin_aesni_gcm_encrypt_1 DB 248 DW 9 - DB $L$SEH_prolog_aesni_gcm_encrypt_20-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_20-$L$SEH_begin_aesni_gcm_encrypt_1 DB 232 DW 8 - DB $L$SEH_prolog_aesni_gcm_encrypt_19-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_19-$L$SEH_begin_aesni_gcm_encrypt_1 DB 216 DW 7 - DB $L$SEH_prolog_aesni_gcm_encrypt_18-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_18-$L$SEH_begin_aesni_gcm_encrypt_1 DB 200 DW 6 - DB $L$SEH_prolog_aesni_gcm_encrypt_17-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_17-$L$SEH_begin_aesni_gcm_encrypt_1 DB 184 DW 5 - DB $L$SEH_prolog_aesni_gcm_encrypt_16-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_16-$L$SEH_begin_aesni_gcm_encrypt_1 DB 168 DW 4 - DB $L$SEH_prolog_aesni_gcm_encrypt_15-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_15-$L$SEH_begin_aesni_gcm_encrypt_1 DB 152 DW 3 - DB $L$SEH_prolog_aesni_gcm_encrypt_14-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_14-$L$SEH_begin_aesni_gcm_encrypt_1 DB 136 DW 2 - DB $L$SEH_prolog_aesni_gcm_encrypt_13-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_13-$L$SEH_begin_aesni_gcm_encrypt_1 DB 120 DW 1 - DB $L$SEH_prolog_aesni_gcm_encrypt_12-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_12-$L$SEH_begin_aesni_gcm_encrypt_1 DB 104 DW 0 - DB $L$SEH_prolog_aesni_gcm_encrypt_11-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_11-$L$SEH_begin_aesni_gcm_encrypt_1 DB 100 DW 29 - DB $L$SEH_prolog_aesni_gcm_encrypt_10-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_10-$L$SEH_begin_aesni_gcm_encrypt_1 DB 116 DW 28 - DB $L$SEH_prolog_aesni_gcm_encrypt_9-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_9-$L$SEH_begin_aesni_gcm_encrypt_1 DB 3 - DB $L$SEH_prolog_aesni_gcm_encrypt_8-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_8-$L$SEH_begin_aesni_gcm_encrypt_1 DB 1 DW 21 - DB $L$SEH_prolog_aesni_gcm_encrypt_7-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_7-$L$SEH_begin_aesni_gcm_encrypt_1 DB 240 - DB $L$SEH_prolog_aesni_gcm_encrypt_6-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_6-$L$SEH_begin_aesni_gcm_encrypt_1 DB 224 - DB $L$SEH_prolog_aesni_gcm_encrypt_5-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_5-$L$SEH_begin_aesni_gcm_encrypt_1 DB 208 - DB $L$SEH_prolog_aesni_gcm_encrypt_4-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_4-$L$SEH_begin_aesni_gcm_encrypt_1 DB 192 - DB $L$SEH_prolog_aesni_gcm_encrypt_3-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_3-$L$SEH_begin_aesni_gcm_encrypt_1 DB 48 - DB $L$SEH_prolog_aesni_gcm_encrypt_2-$L$SEH_begin_aesni_gcm_encrypt_1 + DB $L$SEH_prologue_aesni_gcm_encrypt_2-$L$SEH_begin_aesni_gcm_encrypt_1 DB 80 %else ; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738 diff --git a/gen/bcm/ghash-ssse3-x86_64-win.asm b/gen/bcm/ghash-ssse3-x86_64-win.asm index 84c5d40bd..a8be60ed8 100644 --- a/gen/bcm/ghash-ssse3-x86_64-win.asm +++ b/gen/bcm/ghash-ssse3-x86_64-win.asm @@ -26,11 +26,12 @@ gcm_gmult_ssse3: $L$SEH_begin_gcm_gmult_ssse3_1: _CET_ENDBR sub rsp,40 -$L$SEH_prolog_gcm_gmult_ssse3_2: +$L$SEH_prologue_gcm_gmult_ssse3_2: movdqa XMMWORD[rsp],xmm6 -$L$SEH_prolog_gcm_gmult_ssse3_3: +$L$SEH_prologue_gcm_gmult_ssse3_3: movdqa XMMWORD[16+rsp],xmm10 -$L$SEH_prolog_gcm_gmult_ssse3_4: +$L$SEH_prologue_gcm_gmult_ssse3_4: +$L$SEH_endprologue_gcm_gmult_ssse3_5: movdqu xmm0,XMMWORD[rcx] movdqa xmm10,XMMWORD[$L$reverse_bytes] movdqa xmm2,XMMWORD[$L$low4_mask] @@ -210,7 +211,7 @@ DB 102,65,15,56,0,210 add rsp,40 ret -$L$SEH_end_gcm_gmult_ssse3_5: +$L$SEH_end_gcm_gmult_ssse3_6: @@ -225,13 +226,14 @@ gcm_ghash_ssse3: $L$SEH_begin_gcm_ghash_ssse3_1: _CET_ENDBR sub rsp,56 -$L$SEH_prolog_gcm_ghash_ssse3_2: +$L$SEH_prologue_gcm_ghash_ssse3_2: movdqa XMMWORD[rsp],xmm6 -$L$SEH_prolog_gcm_ghash_ssse3_3: +$L$SEH_prologue_gcm_ghash_ssse3_3: movdqa XMMWORD[16+rsp],xmm10 -$L$SEH_prolog_gcm_ghash_ssse3_4: +$L$SEH_prologue_gcm_ghash_ssse3_4: movdqa XMMWORD[32+rsp],xmm11 -$L$SEH_prolog_gcm_ghash_ssse3_5: +$L$SEH_prologue_gcm_ghash_ssse3_5: +$L$SEH_endprologue_gcm_ghash_ssse3_6: movdqu xmm0,XMMWORD[rcx] movdqa xmm10,XMMWORD[$L$reverse_bytes] movdqa xmm11,XMMWORD[$L$low4_mask] @@ -434,7 +436,7 @@ DB 102,65,15,56,0,194 add rsp,56 ret -$L$SEH_end_gcm_ghash_ssse3_6: +$L$SEH_end_gcm_ghash_ssse3_7: section .rdata rdata align=8 @@ -451,11 +453,11 @@ section .text section .pdata rdata align=4 ALIGN 4 DD $L$SEH_begin_gcm_gmult_ssse3_1 wrt ..imagebase - DD $L$SEH_end_gcm_gmult_ssse3_5 wrt ..imagebase + DD $L$SEH_end_gcm_gmult_ssse3_6 wrt ..imagebase DD $L$SEH_info_gcm_gmult_ssse3_0 wrt ..imagebase DD $L$SEH_begin_gcm_ghash_ssse3_1 wrt ..imagebase - DD $L$SEH_end_gcm_ghash_ssse3_6 wrt ..imagebase + DD $L$SEH_end_gcm_ghash_ssse3_7 wrt ..imagebase DD $L$SEH_info_gcm_ghash_ssse3_0 wrt ..imagebase @@ -463,33 +465,33 @@ section .xdata rdata align=8 ALIGN 4 $L$SEH_info_gcm_gmult_ssse3_0: DB 1 - DB $L$SEH_prolog_gcm_gmult_ssse3_4-$L$SEH_begin_gcm_gmult_ssse3_1 + DB $L$SEH_endprologue_gcm_gmult_ssse3_5-$L$SEH_begin_gcm_gmult_ssse3_1 DB 5 DB 0 - DB $L$SEH_prolog_gcm_gmult_ssse3_4-$L$SEH_begin_gcm_gmult_ssse3_1 + DB $L$SEH_prologue_gcm_gmult_ssse3_4-$L$SEH_begin_gcm_gmult_ssse3_1 DB 168 DW 1 - DB $L$SEH_prolog_gcm_gmult_ssse3_3-$L$SEH_begin_gcm_gmult_ssse3_1 + DB $L$SEH_prologue_gcm_gmult_ssse3_3-$L$SEH_begin_gcm_gmult_ssse3_1 DB 104 DW 0 - DB $L$SEH_prolog_gcm_gmult_ssse3_2-$L$SEH_begin_gcm_gmult_ssse3_1 + DB $L$SEH_prologue_gcm_gmult_ssse3_2-$L$SEH_begin_gcm_gmult_ssse3_1 DB 66 $L$SEH_info_gcm_ghash_ssse3_0: DB 1 - DB $L$SEH_prolog_gcm_ghash_ssse3_5-$L$SEH_begin_gcm_ghash_ssse3_1 + DB $L$SEH_endprologue_gcm_ghash_ssse3_6-$L$SEH_begin_gcm_ghash_ssse3_1 DB 7 DB 0 - DB $L$SEH_prolog_gcm_ghash_ssse3_5-$L$SEH_begin_gcm_ghash_ssse3_1 + DB $L$SEH_prologue_gcm_ghash_ssse3_5-$L$SEH_begin_gcm_ghash_ssse3_1 DB 184 DW 2 - DB $L$SEH_prolog_gcm_ghash_ssse3_4-$L$SEH_begin_gcm_ghash_ssse3_1 + DB $L$SEH_prologue_gcm_ghash_ssse3_4-$L$SEH_begin_gcm_ghash_ssse3_1 DB 168 DW 1 - DB $L$SEH_prolog_gcm_ghash_ssse3_3-$L$SEH_begin_gcm_ghash_ssse3_1 + DB $L$SEH_prologue_gcm_ghash_ssse3_3-$L$SEH_begin_gcm_ghash_ssse3_1 DB 104 DW 0 - DB $L$SEH_prolog_gcm_ghash_ssse3_2-$L$SEH_begin_gcm_ghash_ssse3_1 + DB $L$SEH_prologue_gcm_ghash_ssse3_2-$L$SEH_begin_gcm_ghash_ssse3_1 DB 98 %else ; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738 diff --git a/gen/bcm/ghash-x86_64-apple.S b/gen/bcm/ghash-x86_64-apple.S index 909d65966..496129882 100644 --- a/gen/bcm/ghash-x86_64-apple.S +++ b/gen/bcm/ghash-x86_64-apple.S @@ -612,6 +612,7 @@ L$done: .p2align 5 _gcm_init_avx: + _CET_ENDBR vzeroupper @@ -734,6 +735,7 @@ _CET_ENDBR .p2align 5 _gcm_ghash_avx: + _CET_ENDBR vzeroupper diff --git a/gen/bcm/ghash-x86_64-linux.S b/gen/bcm/ghash-x86_64-linux.S index 22429a67b..e00bb9fda 100644 --- a/gen/bcm/ghash-x86_64-linux.S +++ b/gen/bcm/ghash-x86_64-linux.S @@ -612,6 +612,7 @@ _CET_ENDBR .align 32 gcm_init_avx: .cfi_startproc + _CET_ENDBR vzeroupper @@ -734,6 +735,7 @@ _CET_ENDBR .align 32 gcm_ghash_avx: .cfi_startproc + _CET_ENDBR vzeroupper diff --git a/gen/bcm/ghash-x86_64-win.asm b/gen/bcm/ghash-x86_64-win.asm index 41b189a2b..bd4d691bd 100644 --- a/gen/bcm/ghash-x86_64-win.asm +++ b/gen/bcm/ghash-x86_64-win.asm @@ -22,9 +22,10 @@ $L$SEH_begin_gcm_init_clmul_1: _CET_ENDBR $L$_init_clmul: sub rsp,0x18 -$L$SEH_prolog_gcm_init_clmul_2: +$L$SEH_prologue_gcm_init_clmul_2: movaps XMMWORD[rsp],xmm6 -$L$SEH_prolog_gcm_init_clmul_3: +$L$SEH_prologue_gcm_init_clmul_3: +$L$SEH_endprologue_gcm_init_clmul_4: movdqu xmm2,XMMWORD[rdx] pshufd xmm2,xmm2,78 @@ -178,7 +179,7 @@ DB 102,15,58,15,227,8 lea rsp,[24+rsp] ret -$L$SEH_end_gcm_init_clmul_4: +$L$SEH_end_gcm_init_clmul_5: global gcm_gmult_clmul @@ -244,27 +245,28 @@ _CET_ENDBR $L$_ghash_clmul: lea rax,[((-136))+rsp] lea rsp,[((-32))+rax] -$L$SEH_prolog_gcm_ghash_clmul_2: +$L$SEH_prologue_gcm_ghash_clmul_2: movaps XMMWORD[(-32)+rax],xmm6 -$L$SEH_prolog_gcm_ghash_clmul_3: +$L$SEH_prologue_gcm_ghash_clmul_3: movaps XMMWORD[(-16)+rax],xmm7 -$L$SEH_prolog_gcm_ghash_clmul_4: +$L$SEH_prologue_gcm_ghash_clmul_4: movaps XMMWORD[rax],xmm8 -$L$SEH_prolog_gcm_ghash_clmul_5: +$L$SEH_prologue_gcm_ghash_clmul_5: movaps XMMWORD[16+rax],xmm9 -$L$SEH_prolog_gcm_ghash_clmul_6: +$L$SEH_prologue_gcm_ghash_clmul_6: movaps XMMWORD[32+rax],xmm10 -$L$SEH_prolog_gcm_ghash_clmul_7: +$L$SEH_prologue_gcm_ghash_clmul_7: movaps XMMWORD[48+rax],xmm11 -$L$SEH_prolog_gcm_ghash_clmul_8: +$L$SEH_prologue_gcm_ghash_clmul_8: movaps XMMWORD[64+rax],xmm12 -$L$SEH_prolog_gcm_ghash_clmul_9: +$L$SEH_prologue_gcm_ghash_clmul_9: movaps XMMWORD[80+rax],xmm13 -$L$SEH_prolog_gcm_ghash_clmul_10: +$L$SEH_prologue_gcm_ghash_clmul_10: movaps XMMWORD[96+rax],xmm14 -$L$SEH_prolog_gcm_ghash_clmul_11: +$L$SEH_prologue_gcm_ghash_clmul_11: movaps XMMWORD[112+rax],xmm15 -$L$SEH_prolog_gcm_ghash_clmul_12: +$L$SEH_prologue_gcm_ghash_clmul_12: +$L$SEH_endprologue_gcm_ghash_clmul_13: movdqa xmm10,XMMWORD[$L$bswap_mask] movdqu xmm0,XMMWORD[rcx] @@ -649,19 +651,20 @@ DB 102,65,15,56,0,194 lea rsp,[168+rsp] ret -$L$SEH_end_gcm_ghash_clmul_13: +$L$SEH_end_gcm_ghash_clmul_14: global gcm_init_avx ALIGN 32 gcm_init_avx: -_CET_ENDBR $L$SEH_begin_gcm_init_avx_1: +_CET_ENDBR sub rsp,0x18 -$L$SEH_prolog_gcm_init_avx_2: +$L$SEH_prologue_gcm_init_avx_2: movaps XMMWORD[rsp],xmm6 -$L$SEH_prolog_gcm_init_avx_3: +$L$SEH_prologue_gcm_init_avx_3: +$L$SEH_endprologue_gcm_init_avx_4: vzeroupper vmovdqu xmm2,XMMWORD[rdx] @@ -766,7 +769,7 @@ $L$init_start_avx: movaps xmm6,XMMWORD[rsp] lea rsp,[24+rsp] ret -$L$SEH_end_gcm_init_avx_4: +$L$SEH_end_gcm_init_avx_5: global gcm_gmult_avx @@ -783,31 +786,32 @@ global gcm_ghash_avx ALIGN 32 gcm_ghash_avx: -_CET_ENDBR $L$SEH_begin_gcm_ghash_avx_1: +_CET_ENDBR lea rax,[((-136))+rsp] lea rsp,[((-32))+rax] -$L$SEH_prolog_gcm_ghash_avx_2: +$L$SEH_prologue_gcm_ghash_avx_2: movaps XMMWORD[(-32)+rax],xmm6 -$L$SEH_prolog_gcm_ghash_avx_3: +$L$SEH_prologue_gcm_ghash_avx_3: movaps XMMWORD[(-16)+rax],xmm7 -$L$SEH_prolog_gcm_ghash_avx_4: +$L$SEH_prologue_gcm_ghash_avx_4: movaps XMMWORD[rax],xmm8 -$L$SEH_prolog_gcm_ghash_avx_5: +$L$SEH_prologue_gcm_ghash_avx_5: movaps XMMWORD[16+rax],xmm9 -$L$SEH_prolog_gcm_ghash_avx_6: +$L$SEH_prologue_gcm_ghash_avx_6: movaps XMMWORD[32+rax],xmm10 -$L$SEH_prolog_gcm_ghash_avx_7: +$L$SEH_prologue_gcm_ghash_avx_7: movaps XMMWORD[48+rax],xmm11 -$L$SEH_prolog_gcm_ghash_avx_8: +$L$SEH_prologue_gcm_ghash_avx_8: movaps XMMWORD[64+rax],xmm12 -$L$SEH_prolog_gcm_ghash_avx_9: +$L$SEH_prologue_gcm_ghash_avx_9: movaps XMMWORD[80+rax],xmm13 -$L$SEH_prolog_gcm_ghash_avx_10: +$L$SEH_prologue_gcm_ghash_avx_10: movaps XMMWORD[96+rax],xmm14 -$L$SEH_prolog_gcm_ghash_avx_11: +$L$SEH_prologue_gcm_ghash_avx_11: movaps XMMWORD[112+rax],xmm15 -$L$SEH_prolog_gcm_ghash_avx_12: +$L$SEH_prologue_gcm_ghash_avx_12: +$L$SEH_endprologue_gcm_ghash_avx_13: vzeroupper vmovdqu xmm10,XMMWORD[rcx] @@ -1191,7 +1195,7 @@ $L$tail_no_xor_avx: lea rsp,[168+rsp] ret -$L$SEH_end_gcm_ghash_avx_13: +$L$SEH_end_gcm_ghash_avx_14: section .rdata rdata align=8 ALIGN 64 @@ -1213,19 +1217,19 @@ section .text section .pdata rdata align=4 ALIGN 4 DD $L$SEH_begin_gcm_init_clmul_1 wrt ..imagebase - DD $L$SEH_end_gcm_init_clmul_4 wrt ..imagebase + DD $L$SEH_end_gcm_init_clmul_5 wrt ..imagebase DD $L$SEH_info_gcm_init_clmul_0 wrt ..imagebase DD $L$SEH_begin_gcm_ghash_clmul_1 wrt ..imagebase - DD $L$SEH_end_gcm_ghash_clmul_13 wrt ..imagebase + DD $L$SEH_end_gcm_ghash_clmul_14 wrt ..imagebase DD $L$SEH_info_gcm_ghash_clmul_0 wrt ..imagebase DD $L$SEH_begin_gcm_init_avx_1 wrt ..imagebase - DD $L$SEH_end_gcm_init_avx_4 wrt ..imagebase + DD $L$SEH_end_gcm_init_avx_5 wrt ..imagebase DD $L$SEH_info_gcm_init_avx_0 wrt ..imagebase DD $L$SEH_begin_gcm_ghash_avx_1 wrt ..imagebase - DD $L$SEH_end_gcm_ghash_avx_13 wrt ..imagebase + DD $L$SEH_end_gcm_ghash_avx_14 wrt ..imagebase DD $L$SEH_info_gcm_ghash_avx_0 wrt ..imagebase @@ -1233,101 +1237,101 @@ section .xdata rdata align=8 ALIGN 4 $L$SEH_info_gcm_init_clmul_0: DB 1 - DB $L$SEH_prolog_gcm_init_clmul_3-$L$SEH_begin_gcm_init_clmul_1 + DB $L$SEH_endprologue_gcm_init_clmul_4-$L$SEH_begin_gcm_init_clmul_1 DB 3 DB 0 - DB $L$SEH_prolog_gcm_init_clmul_3-$L$SEH_begin_gcm_init_clmul_1 + DB $L$SEH_prologue_gcm_init_clmul_3-$L$SEH_begin_gcm_init_clmul_1 DB 104 DW 0 - DB $L$SEH_prolog_gcm_init_clmul_2-$L$SEH_begin_gcm_init_clmul_1 + DB $L$SEH_prologue_gcm_init_clmul_2-$L$SEH_begin_gcm_init_clmul_1 DB 34 $L$SEH_info_gcm_ghash_clmul_0: DB 1 - DB $L$SEH_prolog_gcm_ghash_clmul_12-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_endprologue_gcm_ghash_clmul_13-$L$SEH_begin_gcm_ghash_clmul_1 DB 22 DB 0 - DB $L$SEH_prolog_gcm_ghash_clmul_12-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_12-$L$SEH_begin_gcm_ghash_clmul_1 DB 248 DW 9 - DB $L$SEH_prolog_gcm_ghash_clmul_11-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_11-$L$SEH_begin_gcm_ghash_clmul_1 DB 232 DW 8 - DB $L$SEH_prolog_gcm_ghash_clmul_10-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_10-$L$SEH_begin_gcm_ghash_clmul_1 DB 216 DW 7 - DB $L$SEH_prolog_gcm_ghash_clmul_9-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_9-$L$SEH_begin_gcm_ghash_clmul_1 DB 200 DW 6 - DB $L$SEH_prolog_gcm_ghash_clmul_8-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_8-$L$SEH_begin_gcm_ghash_clmul_1 DB 184 DW 5 - DB $L$SEH_prolog_gcm_ghash_clmul_7-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_7-$L$SEH_begin_gcm_ghash_clmul_1 DB 168 DW 4 - DB $L$SEH_prolog_gcm_ghash_clmul_6-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_6-$L$SEH_begin_gcm_ghash_clmul_1 DB 152 DW 3 - DB $L$SEH_prolog_gcm_ghash_clmul_5-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_5-$L$SEH_begin_gcm_ghash_clmul_1 DB 136 DW 2 - DB $L$SEH_prolog_gcm_ghash_clmul_4-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_4-$L$SEH_begin_gcm_ghash_clmul_1 DB 120 DW 1 - DB $L$SEH_prolog_gcm_ghash_clmul_3-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_3-$L$SEH_begin_gcm_ghash_clmul_1 DB 104 DW 0 - DB $L$SEH_prolog_gcm_ghash_clmul_2-$L$SEH_begin_gcm_ghash_clmul_1 + DB $L$SEH_prologue_gcm_ghash_clmul_2-$L$SEH_begin_gcm_ghash_clmul_1 DB 1 DW 21 $L$SEH_info_gcm_init_avx_0: DB 1 - DB $L$SEH_prolog_gcm_init_avx_3-$L$SEH_begin_gcm_init_avx_1 + DB $L$SEH_endprologue_gcm_init_avx_4-$L$SEH_begin_gcm_init_avx_1 DB 3 DB 0 - DB $L$SEH_prolog_gcm_init_avx_3-$L$SEH_begin_gcm_init_avx_1 + DB $L$SEH_prologue_gcm_init_avx_3-$L$SEH_begin_gcm_init_avx_1 DB 104 DW 0 - DB $L$SEH_prolog_gcm_init_avx_2-$L$SEH_begin_gcm_init_avx_1 + DB $L$SEH_prologue_gcm_init_avx_2-$L$SEH_begin_gcm_init_avx_1 DB 34 $L$SEH_info_gcm_ghash_avx_0: DB 1 - DB $L$SEH_prolog_gcm_ghash_avx_12-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_endprologue_gcm_ghash_avx_13-$L$SEH_begin_gcm_ghash_avx_1 DB 22 DB 0 - DB $L$SEH_prolog_gcm_ghash_avx_12-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_12-$L$SEH_begin_gcm_ghash_avx_1 DB 248 DW 9 - DB $L$SEH_prolog_gcm_ghash_avx_11-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_11-$L$SEH_begin_gcm_ghash_avx_1 DB 232 DW 8 - DB $L$SEH_prolog_gcm_ghash_avx_10-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_10-$L$SEH_begin_gcm_ghash_avx_1 DB 216 DW 7 - DB $L$SEH_prolog_gcm_ghash_avx_9-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_9-$L$SEH_begin_gcm_ghash_avx_1 DB 200 DW 6 - DB $L$SEH_prolog_gcm_ghash_avx_8-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_8-$L$SEH_begin_gcm_ghash_avx_1 DB 184 DW 5 - DB $L$SEH_prolog_gcm_ghash_avx_7-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_7-$L$SEH_begin_gcm_ghash_avx_1 DB 168 DW 4 - DB $L$SEH_prolog_gcm_ghash_avx_6-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_6-$L$SEH_begin_gcm_ghash_avx_1 DB 152 DW 3 - DB $L$SEH_prolog_gcm_ghash_avx_5-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_5-$L$SEH_begin_gcm_ghash_avx_1 DB 136 DW 2 - DB $L$SEH_prolog_gcm_ghash_avx_4-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_4-$L$SEH_begin_gcm_ghash_avx_1 DB 120 DW 1 - DB $L$SEH_prolog_gcm_ghash_avx_3-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_3-$L$SEH_begin_gcm_ghash_avx_1 DB 104 DW 0 - DB $L$SEH_prolog_gcm_ghash_avx_2-$L$SEH_begin_gcm_ghash_avx_1 + DB $L$SEH_prologue_gcm_ghash_avx_2-$L$SEH_begin_gcm_ghash_avx_1 DB 1 DW 21 %else diff --git a/gen/test_support/trampoline-x86_64-apple.S b/gen/test_support/trampoline-x86_64-apple.S index 7c76d2d74..f618dacd1 100644 --- a/gen/test_support/trampoline-x86_64-apple.S +++ b/gen/test_support/trampoline-x86_64-apple.S @@ -52,6 +52,7 @@ _CET_ENDBR movq %r15,104(%rsp) + movq 0(%rsi),%rbx movq 8(%rsi),%rbp movq 16(%rsi),%r12 @@ -473,6 +474,7 @@ _CET_ENDBR + nop popq %r12 @@ -496,6 +498,7 @@ _CET_ENDBR + movq %r12,%rax incq %rax movq %rax,(%rsp) diff --git a/gen/test_support/trampoline-x86_64-linux.S b/gen/test_support/trampoline-x86_64-linux.S index 93af8b948..8557e9e4f 100644 --- a/gen/test_support/trampoline-x86_64-linux.S +++ b/gen/test_support/trampoline-x86_64-linux.S @@ -52,6 +52,7 @@ _CET_ENDBR movq %r15,104(%rsp) .cfi_offset r15, -24 + movq 0(%rsi),%rbx movq 8(%rsi),%rbp movq 16(%rsi),%r12 @@ -474,6 +475,7 @@ _CET_ENDBR + nop popq %r12 .cfi_adjust_cfa_offset -8 @@ -499,6 +501,7 @@ _CET_ENDBR .cfi_offset %r12,-16 + movq %r12,%rax incq %rax movq %rax,(%rsp) diff --git a/gen/test_support/trampoline-x86_64-win.asm b/gen/test_support/trampoline-x86_64-win.asm index ae04cbed4..dca395782 100644 --- a/gen/test_support/trampoline-x86_64-win.asm +++ b/gen/test_support/trampoline-x86_64-win.asm @@ -39,61 +39,62 @@ _CET_ENDBR sub rsp,344 -$L$SEH_prolog_abi_test_trampoline_2: +$L$SEH_prologue_abi_test_trampoline_2: mov QWORD[112+rsp],rbx -$L$SEH_prolog_abi_test_trampoline_3: +$L$SEH_prologue_abi_test_trampoline_3: mov QWORD[120+rsp],rbp -$L$SEH_prolog_abi_test_trampoline_4: +$L$SEH_prologue_abi_test_trampoline_4: mov QWORD[128+rsp],rdi -$L$SEH_prolog_abi_test_trampoline_5: +$L$SEH_prologue_abi_test_trampoline_5: mov QWORD[136+rsp],rsi -$L$SEH_prolog_abi_test_trampoline_6: +$L$SEH_prologue_abi_test_trampoline_6: mov QWORD[144+rsp],r12 -$L$SEH_prolog_abi_test_trampoline_7: +$L$SEH_prologue_abi_test_trampoline_7: mov QWORD[152+rsp],r13 -$L$SEH_prolog_abi_test_trampoline_8: +$L$SEH_prologue_abi_test_trampoline_8: mov QWORD[160+rsp],r14 -$L$SEH_prolog_abi_test_trampoline_9: +$L$SEH_prologue_abi_test_trampoline_9: mov QWORD[168+rsp],r15 -$L$SEH_prolog_abi_test_trampoline_10: +$L$SEH_prologue_abi_test_trampoline_10: movdqa XMMWORD[176+rsp],xmm6 -$L$SEH_prolog_abi_test_trampoline_11: +$L$SEH_prologue_abi_test_trampoline_11: movdqa XMMWORD[192+rsp],xmm7 -$L$SEH_prolog_abi_test_trampoline_12: +$L$SEH_prologue_abi_test_trampoline_12: movdqa XMMWORD[208+rsp],xmm8 -$L$SEH_prolog_abi_test_trampoline_13: +$L$SEH_prologue_abi_test_trampoline_13: movdqa XMMWORD[224+rsp],xmm9 -$L$SEH_prolog_abi_test_trampoline_14: +$L$SEH_prologue_abi_test_trampoline_14: movdqa XMMWORD[240+rsp],xmm10 -$L$SEH_prolog_abi_test_trampoline_15: +$L$SEH_prologue_abi_test_trampoline_15: movdqa XMMWORD[256+rsp],xmm11 -$L$SEH_prolog_abi_test_trampoline_16: +$L$SEH_prologue_abi_test_trampoline_16: movdqa XMMWORD[272+rsp],xmm12 -$L$SEH_prolog_abi_test_trampoline_17: +$L$SEH_prologue_abi_test_trampoline_17: movdqa XMMWORD[288+rsp],xmm13 -$L$SEH_prolog_abi_test_trampoline_18: +$L$SEH_prologue_abi_test_trampoline_18: movdqa XMMWORD[304+rsp],xmm14 -$L$SEH_prolog_abi_test_trampoline_19: +$L$SEH_prologue_abi_test_trampoline_19: movdqa XMMWORD[320+rsp],xmm15 -$L$SEH_prolog_abi_test_trampoline_20: +$L$SEH_prologue_abi_test_trampoline_20: +$L$SEH_endprologue_abi_test_trampoline_21: mov rbx,QWORD[rdx] mov rbp,QWORD[8+rdx] mov rdi,QWORD[16+rdx] @@ -254,7 +255,7 @@ $L$call_done: ret -$L$SEH_end_abi_test_trampoline_21: +$L$SEH_end_abi_test_trampoline_22: global abi_test_clobber_rax @@ -516,7 +517,8 @@ $L$SEH_begin_abi_test_bad_unwind_wrong_register_1: _CET_ENDBR push r12 -$L$SEH_prolog_abi_test_bad_unwind_wrong_register_2: +$L$SEH_prologue_abi_test_bad_unwind_wrong_register_2: +$L$SEH_endprologue_abi_test_bad_unwind_wrong_register_3: @@ -524,7 +526,7 @@ $L$SEH_prolog_abi_test_bad_unwind_wrong_register_2: pop r12 ret -$L$SEH_end_abi_test_bad_unwind_wrong_register_3: +$L$SEH_end_abi_test_bad_unwind_wrong_register_4: @@ -540,7 +542,8 @@ $L$SEH_begin_abi_test_bad_unwind_temporary_1: _CET_ENDBR push r12 -$L$SEH_prolog_abi_test_bad_unwind_temporary_2: +$L$SEH_prologue_abi_test_bad_unwind_temporary_2: +$L$SEH_endprologue_abi_test_bad_unwind_temporary_3: mov rax,r12 inc rax @@ -555,7 +558,7 @@ $L$SEH_prolog_abi_test_bad_unwind_temporary_2: ret -$L$SEH_end_abi_test_bad_unwind_temporary_3: +$L$SEH_end_abi_test_bad_unwind_temporary_4: @@ -592,7 +595,8 @@ ALIGN 16 abi_test_bad_unwind_epilog: $L$SEH_begin_abi_test_bad_unwind_epilog_1: push r12 -$L$SEH_prolog_abi_test_bad_unwind_epilog_2: +$L$SEH_prologue_abi_test_bad_unwind_epilog_2: +$L$SEH_endprologue_abi_test_bad_unwind_epilog_3: nop @@ -600,24 +604,24 @@ $L$SEH_prolog_abi_test_bad_unwind_epilog_2: pop r12 nop ret -$L$SEH_end_abi_test_bad_unwind_epilog_3: +$L$SEH_end_abi_test_bad_unwind_epilog_4: section .pdata rdata align=4 ALIGN 4 DD $L$SEH_begin_abi_test_trampoline_1 wrt ..imagebase - DD $L$SEH_end_abi_test_trampoline_21 wrt ..imagebase + DD $L$SEH_end_abi_test_trampoline_22 wrt ..imagebase DD $L$SEH_info_abi_test_trampoline_0 wrt ..imagebase DD $L$SEH_begin_abi_test_bad_unwind_wrong_register_1 wrt ..imagebase - DD $L$SEH_end_abi_test_bad_unwind_wrong_register_3 wrt ..imagebase + DD $L$SEH_end_abi_test_bad_unwind_wrong_register_4 wrt ..imagebase DD $L$SEH_info_abi_test_bad_unwind_wrong_register_0 wrt ..imagebase DD $L$SEH_begin_abi_test_bad_unwind_temporary_1 wrt ..imagebase - DD $L$SEH_end_abi_test_bad_unwind_temporary_3 wrt ..imagebase + DD $L$SEH_end_abi_test_bad_unwind_temporary_4 wrt ..imagebase DD $L$SEH_info_abi_test_bad_unwind_temporary_0 wrt ..imagebase DD $L$SEH_begin_abi_test_bad_unwind_epilog_1 wrt ..imagebase - DD $L$SEH_end_abi_test_bad_unwind_epilog_3 wrt ..imagebase + DD $L$SEH_end_abi_test_bad_unwind_epilog_4 wrt ..imagebase DD $L$SEH_info_abi_test_bad_unwind_epilog_0 wrt ..imagebase @@ -625,89 +629,89 @@ section .xdata rdata align=8 ALIGN 4 $L$SEH_info_abi_test_trampoline_0: DB 1 - DB $L$SEH_prolog_abi_test_trampoline_20-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_endprologue_abi_test_trampoline_21-$L$SEH_begin_abi_test_trampoline_1 DB 38 DB 0 - DB $L$SEH_prolog_abi_test_trampoline_20-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_20-$L$SEH_begin_abi_test_trampoline_1 DB 248 DW 20 - DB $L$SEH_prolog_abi_test_trampoline_19-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_19-$L$SEH_begin_abi_test_trampoline_1 DB 232 DW 19 - DB $L$SEH_prolog_abi_test_trampoline_18-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_18-$L$SEH_begin_abi_test_trampoline_1 DB 216 DW 18 - DB $L$SEH_prolog_abi_test_trampoline_17-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_17-$L$SEH_begin_abi_test_trampoline_1 DB 200 DW 17 - DB $L$SEH_prolog_abi_test_trampoline_16-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_16-$L$SEH_begin_abi_test_trampoline_1 DB 184 DW 16 - DB $L$SEH_prolog_abi_test_trampoline_15-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_15-$L$SEH_begin_abi_test_trampoline_1 DB 168 DW 15 - DB $L$SEH_prolog_abi_test_trampoline_14-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_14-$L$SEH_begin_abi_test_trampoline_1 DB 152 DW 14 - DB $L$SEH_prolog_abi_test_trampoline_13-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_13-$L$SEH_begin_abi_test_trampoline_1 DB 136 DW 13 - DB $L$SEH_prolog_abi_test_trampoline_12-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_12-$L$SEH_begin_abi_test_trampoline_1 DB 120 DW 12 - DB $L$SEH_prolog_abi_test_trampoline_11-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_11-$L$SEH_begin_abi_test_trampoline_1 DB 104 DW 11 - DB $L$SEH_prolog_abi_test_trampoline_10-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_10-$L$SEH_begin_abi_test_trampoline_1 DB 244 DW 21 - DB $L$SEH_prolog_abi_test_trampoline_9-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_9-$L$SEH_begin_abi_test_trampoline_1 DB 228 DW 20 - DB $L$SEH_prolog_abi_test_trampoline_8-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_8-$L$SEH_begin_abi_test_trampoline_1 DB 212 DW 19 - DB $L$SEH_prolog_abi_test_trampoline_7-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_7-$L$SEH_begin_abi_test_trampoline_1 DB 196 DW 18 - DB $L$SEH_prolog_abi_test_trampoline_6-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_6-$L$SEH_begin_abi_test_trampoline_1 DB 100 DW 17 - DB $L$SEH_prolog_abi_test_trampoline_5-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_5-$L$SEH_begin_abi_test_trampoline_1 DB 116 DW 16 - DB $L$SEH_prolog_abi_test_trampoline_4-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_4-$L$SEH_begin_abi_test_trampoline_1 DB 84 DW 15 - DB $L$SEH_prolog_abi_test_trampoline_3-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_3-$L$SEH_begin_abi_test_trampoline_1 DB 52 DW 14 - DB $L$SEH_prolog_abi_test_trampoline_2-$L$SEH_begin_abi_test_trampoline_1 + DB $L$SEH_prologue_abi_test_trampoline_2-$L$SEH_begin_abi_test_trampoline_1 DB 1 DW 43 $L$SEH_info_abi_test_bad_unwind_wrong_register_0: DB 1 - DB $L$SEH_prolog_abi_test_bad_unwind_wrong_register_2-$L$SEH_begin_abi_test_bad_unwind_wrong_register_1 + DB $L$SEH_endprologue_abi_test_bad_unwind_wrong_register_3-$L$SEH_begin_abi_test_bad_unwind_wrong_register_1 DB 1 DB 0 - DB $L$SEH_prolog_abi_test_bad_unwind_wrong_register_2-$L$SEH_begin_abi_test_bad_unwind_wrong_register_1 + DB $L$SEH_prologue_abi_test_bad_unwind_wrong_register_2-$L$SEH_begin_abi_test_bad_unwind_wrong_register_1 DB 208 $L$SEH_info_abi_test_bad_unwind_temporary_0: DB 1 - DB $L$SEH_prolog_abi_test_bad_unwind_temporary_2-$L$SEH_begin_abi_test_bad_unwind_temporary_1 + DB $L$SEH_endprologue_abi_test_bad_unwind_temporary_3-$L$SEH_begin_abi_test_bad_unwind_temporary_1 DB 1 DB 0 - DB $L$SEH_prolog_abi_test_bad_unwind_temporary_2-$L$SEH_begin_abi_test_bad_unwind_temporary_1 + DB $L$SEH_prologue_abi_test_bad_unwind_temporary_2-$L$SEH_begin_abi_test_bad_unwind_temporary_1 DB 192 $L$SEH_info_abi_test_bad_unwind_epilog_0: DB 1 - DB $L$SEH_prolog_abi_test_bad_unwind_epilog_2-$L$SEH_begin_abi_test_bad_unwind_epilog_1 + DB $L$SEH_endprologue_abi_test_bad_unwind_epilog_3-$L$SEH_begin_abi_test_bad_unwind_epilog_1 DB 1 DB 0 - DB $L$SEH_prolog_abi_test_bad_unwind_epilog_2-$L$SEH_begin_abi_test_bad_unwind_epilog_1 + DB $L$SEH_prologue_abi_test_bad_unwind_epilog_2-$L$SEH_begin_abi_test_bad_unwind_epilog_1 DB 192 %else ; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738