Merge 5.15.40 into android-5.15
Changes in 5.15.40
x86/lib/atomic64_386_32: Rename things
x86: Prepare asm files for straight-line-speculation
x86: Prepare inline-asm for straight-line-speculation
objtool: Add straight-line-speculation validation
x86/alternative: Relax text_poke_bp() constraint
kbuild: move objtool_args back to scripts/Makefile.build
x86: Add straight-line-speculation mitigation
tools arch: Update arch/x86/lib/mem{cpy,set}_64.S copies used in 'perf bench mem memcpy'
kvm/emulate: Fix SETcc emulation function offsets with SLS
crypto: x86/poly1305 - Fixup SLS
objtool: Fix SLS validation for kcov tail-call replacement
Bluetooth: Fix the creation of hdev->name
rfkill: uapi: fix RFKILL_IOCTL_MAX_SIZE ioctl request definition
udf: Avoid using stale lengthOfImpUse
mm: fix missing cache flush for all tail pages of compound page
mm: hugetlb: fix missing cache flush in copy_huge_page_from_user()
mm: shmem: fix missing cache flush in shmem_mfill_atomic_pte()
mm: userfaultfd: fix missing cache flush in mcopy_atomic_pte() and __mcopy_atomic()
mm/hwpoison: fix error page recovered but reported "not recovered"
mm/mlock: fix potential imbalanced rlimit ucounts adjustment
mm: fix invalid page pointer returned with FOLL_PIN gups
Linux 5.15.40
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I039f8014f8e898f74f2f98ab71ef29c39a1ad544
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 15
|
||||
SUBLEVEL = 39
|
||||
SUBLEVEL = 40
|
||||
EXTRAVERSION =
|
||||
NAME = Trick or Treat
|
||||
|
||||
|
||||
@@ -470,6 +470,18 @@ config RETPOLINE
|
||||
branches. Requires a compiler with -mindirect-branch=thunk-extern
|
||||
support for full protection. The kernel may run slower.
|
||||
|
||||
config CC_HAS_SLS
|
||||
def_bool $(cc-option,-mharden-sls=all)
|
||||
|
||||
config SLS
|
||||
bool "Mitigate Straight-Line-Speculation"
|
||||
depends on CC_HAS_SLS && X86_64
|
||||
default n
|
||||
help
|
||||
Compile the kernel with straight-line-speculation options to guard
|
||||
against straight line speculation. The kernel image might be slightly
|
||||
larger.
|
||||
|
||||
config X86_CPU_RESCTRL
|
||||
bool "x86 CPU resource control support"
|
||||
depends on X86 && (CPU_SUP_INTEL || CPU_SUP_AMD)
|
||||
|
||||
@@ -179,6 +179,10 @@ ifdef CONFIG_RETPOLINE
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef CONFIG_SLS
|
||||
KBUILD_CFLAGS += -mharden-sls=all
|
||||
endif
|
||||
|
||||
KBUILD_LDFLAGS += -m elf_$(UTS_MACHINE)
|
||||
|
||||
ifdef CONFIG_LTO_CLANG
|
||||
|
||||
@@ -93,7 +93,7 @@ SYM_FUNC_START(__efi64_thunk)
|
||||
|
||||
pop %rbx
|
||||
pop %rbp
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__efi64_thunk)
|
||||
|
||||
.code32
|
||||
|
||||
@@ -813,7 +813,7 @@ SYM_FUNC_START(efi32_pe_entry)
|
||||
2: popl %edi // restore callee-save registers
|
||||
popl %ebx
|
||||
leave
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(efi32_pe_entry)
|
||||
|
||||
.section ".rodata"
|
||||
@@ -868,7 +868,7 @@ SYM_FUNC_START(startup32_set_idt_entry)
|
||||
|
||||
pop %ecx
|
||||
pop %ebx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(startup32_set_idt_entry)
|
||||
#endif
|
||||
|
||||
@@ -884,7 +884,7 @@ SYM_FUNC_START(startup32_load_idt)
|
||||
movl %eax, rva(boot32_idt_desc+2)(%ebp)
|
||||
lidt rva(boot32_idt_desc)(%ebp)
|
||||
#endif
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(startup32_load_idt)
|
||||
|
||||
/*
|
||||
@@ -954,7 +954,7 @@ SYM_FUNC_START(startup32_check_sev_cbit)
|
||||
popl %ebx
|
||||
popl %eax
|
||||
#endif
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(startup32_check_sev_cbit)
|
||||
|
||||
/*
|
||||
|
||||
@@ -58,7 +58,7 @@ SYM_FUNC_START(get_sev_encryption_bit)
|
||||
|
||||
#endif /* CONFIG_AMD_MEM_ENCRYPT */
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(get_sev_encryption_bit)
|
||||
|
||||
/**
|
||||
@@ -92,7 +92,7 @@ SYM_CODE_START_LOCAL(sev_es_req_cpuid)
|
||||
/* All good - return success */
|
||||
xorl %eax, %eax
|
||||
1:
|
||||
ret
|
||||
RET
|
||||
2:
|
||||
movl $-1, %eax
|
||||
jmp 1b
|
||||
@@ -221,7 +221,7 @@ SYM_FUNC_START(set_sev_encryption_mask)
|
||||
#endif
|
||||
|
||||
xor %rax, %rax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(set_sev_encryption_mask)
|
||||
|
||||
.data
|
||||
|
||||
@@ -122,7 +122,7 @@ SYM_FUNC_START_LOCAL(__load_partial)
|
||||
pxor T0, MSG
|
||||
|
||||
.Lld_partial_8:
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__load_partial)
|
||||
|
||||
/*
|
||||
@@ -180,7 +180,7 @@ SYM_FUNC_START_LOCAL(__store_partial)
|
||||
mov %r10b, (%r9)
|
||||
|
||||
.Lst_partial_1:
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__store_partial)
|
||||
|
||||
/*
|
||||
@@ -225,7 +225,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_init)
|
||||
movdqu STATE4, 0x40(STATEP)
|
||||
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crypto_aegis128_aesni_init)
|
||||
|
||||
/*
|
||||
@@ -337,7 +337,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_ad)
|
||||
movdqu STATE3, 0x30(STATEP)
|
||||
movdqu STATE4, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lad_out_1:
|
||||
movdqu STATE4, 0x00(STATEP)
|
||||
@@ -346,7 +346,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_ad)
|
||||
movdqu STATE2, 0x30(STATEP)
|
||||
movdqu STATE3, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lad_out_2:
|
||||
movdqu STATE3, 0x00(STATEP)
|
||||
@@ -355,7 +355,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_ad)
|
||||
movdqu STATE1, 0x30(STATEP)
|
||||
movdqu STATE2, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lad_out_3:
|
||||
movdqu STATE2, 0x00(STATEP)
|
||||
@@ -364,7 +364,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_ad)
|
||||
movdqu STATE0, 0x30(STATEP)
|
||||
movdqu STATE1, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lad_out_4:
|
||||
movdqu STATE1, 0x00(STATEP)
|
||||
@@ -373,11 +373,11 @@ SYM_FUNC_START(crypto_aegis128_aesni_ad)
|
||||
movdqu STATE4, 0x30(STATEP)
|
||||
movdqu STATE0, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lad_out:
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crypto_aegis128_aesni_ad)
|
||||
|
||||
.macro encrypt_block a s0 s1 s2 s3 s4 i
|
||||
@@ -452,7 +452,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_enc)
|
||||
movdqu STATE2, 0x30(STATEP)
|
||||
movdqu STATE3, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lenc_out_1:
|
||||
movdqu STATE3, 0x00(STATEP)
|
||||
@@ -461,7 +461,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_enc)
|
||||
movdqu STATE1, 0x30(STATEP)
|
||||
movdqu STATE2, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lenc_out_2:
|
||||
movdqu STATE2, 0x00(STATEP)
|
||||
@@ -470,7 +470,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_enc)
|
||||
movdqu STATE0, 0x30(STATEP)
|
||||
movdqu STATE1, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lenc_out_3:
|
||||
movdqu STATE1, 0x00(STATEP)
|
||||
@@ -479,7 +479,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_enc)
|
||||
movdqu STATE4, 0x30(STATEP)
|
||||
movdqu STATE0, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lenc_out_4:
|
||||
movdqu STATE0, 0x00(STATEP)
|
||||
@@ -488,11 +488,11 @@ SYM_FUNC_START(crypto_aegis128_aesni_enc)
|
||||
movdqu STATE3, 0x30(STATEP)
|
||||
movdqu STATE4, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lenc_out:
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crypto_aegis128_aesni_enc)
|
||||
|
||||
/*
|
||||
@@ -532,7 +532,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_enc_tail)
|
||||
movdqu STATE3, 0x40(STATEP)
|
||||
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crypto_aegis128_aesni_enc_tail)
|
||||
|
||||
.macro decrypt_block a s0 s1 s2 s3 s4 i
|
||||
@@ -606,7 +606,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_dec)
|
||||
movdqu STATE2, 0x30(STATEP)
|
||||
movdqu STATE3, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Ldec_out_1:
|
||||
movdqu STATE3, 0x00(STATEP)
|
||||
@@ -615,7 +615,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_dec)
|
||||
movdqu STATE1, 0x30(STATEP)
|
||||
movdqu STATE2, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Ldec_out_2:
|
||||
movdqu STATE2, 0x00(STATEP)
|
||||
@@ -624,7 +624,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_dec)
|
||||
movdqu STATE0, 0x30(STATEP)
|
||||
movdqu STATE1, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Ldec_out_3:
|
||||
movdqu STATE1, 0x00(STATEP)
|
||||
@@ -633,7 +633,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_dec)
|
||||
movdqu STATE4, 0x30(STATEP)
|
||||
movdqu STATE0, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Ldec_out_4:
|
||||
movdqu STATE0, 0x00(STATEP)
|
||||
@@ -642,11 +642,11 @@ SYM_FUNC_START(crypto_aegis128_aesni_dec)
|
||||
movdqu STATE3, 0x30(STATEP)
|
||||
movdqu STATE4, 0x40(STATEP)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Ldec_out:
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crypto_aegis128_aesni_dec)
|
||||
|
||||
/*
|
||||
@@ -696,7 +696,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_dec_tail)
|
||||
movdqu STATE3, 0x40(STATEP)
|
||||
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crypto_aegis128_aesni_dec_tail)
|
||||
|
||||
/*
|
||||
@@ -743,5 +743,5 @@ SYM_FUNC_START(crypto_aegis128_aesni_final)
|
||||
movdqu MSG, (%rsi)
|
||||
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crypto_aegis128_aesni_final)
|
||||
|
||||
@@ -525,7 +525,7 @@ ddq_add_8:
|
||||
/* return updated IV */
|
||||
vpshufb xbyteswap, xcounter, xcounter
|
||||
vmovdqu xcounter, (p_iv)
|
||||
ret
|
||||
RET
|
||||
.endm
|
||||
|
||||
/*
|
||||
|
||||
@@ -1594,7 +1594,7 @@ SYM_FUNC_START(aesni_gcm_dec)
|
||||
GCM_ENC_DEC dec
|
||||
GCM_COMPLETE arg10, arg11
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_dec)
|
||||
|
||||
|
||||
@@ -1683,7 +1683,7 @@ SYM_FUNC_START(aesni_gcm_enc)
|
||||
|
||||
GCM_COMPLETE arg10, arg11
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_enc)
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -1701,7 +1701,7 @@ SYM_FUNC_START(aesni_gcm_init)
|
||||
FUNC_SAVE
|
||||
GCM_INIT %arg3, %arg4,%arg5, %arg6
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_init)
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -1716,7 +1716,7 @@ SYM_FUNC_START(aesni_gcm_enc_update)
|
||||
FUNC_SAVE
|
||||
GCM_ENC_DEC enc
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_enc_update)
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -1731,7 +1731,7 @@ SYM_FUNC_START(aesni_gcm_dec_update)
|
||||
FUNC_SAVE
|
||||
GCM_ENC_DEC dec
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_dec_update)
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -1746,7 +1746,7 @@ SYM_FUNC_START(aesni_gcm_finalize)
|
||||
FUNC_SAVE
|
||||
GCM_COMPLETE %arg3 %arg4
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_finalize)
|
||||
|
||||
#endif
|
||||
@@ -1762,7 +1762,7 @@ SYM_FUNC_START_LOCAL(_key_expansion_256a)
|
||||
pxor %xmm1, %xmm0
|
||||
movaps %xmm0, (TKEYP)
|
||||
add $0x10, TKEYP
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_key_expansion_256a)
|
||||
SYM_FUNC_END_ALIAS(_key_expansion_128)
|
||||
|
||||
@@ -1787,7 +1787,7 @@ SYM_FUNC_START_LOCAL(_key_expansion_192a)
|
||||
shufps $0b01001110, %xmm2, %xmm1
|
||||
movaps %xmm1, 0x10(TKEYP)
|
||||
add $0x20, TKEYP
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_key_expansion_192a)
|
||||
|
||||
SYM_FUNC_START_LOCAL(_key_expansion_192b)
|
||||
@@ -1806,7 +1806,7 @@ SYM_FUNC_START_LOCAL(_key_expansion_192b)
|
||||
|
||||
movaps %xmm0, (TKEYP)
|
||||
add $0x10, TKEYP
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_key_expansion_192b)
|
||||
|
||||
SYM_FUNC_START_LOCAL(_key_expansion_256b)
|
||||
@@ -1818,7 +1818,7 @@ SYM_FUNC_START_LOCAL(_key_expansion_256b)
|
||||
pxor %xmm1, %xmm2
|
||||
movaps %xmm2, (TKEYP)
|
||||
add $0x10, TKEYP
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_key_expansion_256b)
|
||||
|
||||
/*
|
||||
@@ -1933,7 +1933,7 @@ SYM_FUNC_START(aesni_set_key)
|
||||
popl KEYP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_set_key)
|
||||
|
||||
/*
|
||||
@@ -1957,7 +1957,7 @@ SYM_FUNC_START(aesni_enc)
|
||||
popl KEYP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_enc)
|
||||
|
||||
/*
|
||||
@@ -2014,7 +2014,7 @@ SYM_FUNC_START_LOCAL(_aesni_enc1)
|
||||
aesenc KEY, STATE
|
||||
movaps 0x70(TKEYP), KEY
|
||||
aesenclast KEY, STATE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_aesni_enc1)
|
||||
|
||||
/*
|
||||
@@ -2122,7 +2122,7 @@ SYM_FUNC_START_LOCAL(_aesni_enc4)
|
||||
aesenclast KEY, STATE2
|
||||
aesenclast KEY, STATE3
|
||||
aesenclast KEY, STATE4
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_aesni_enc4)
|
||||
|
||||
/*
|
||||
@@ -2147,7 +2147,7 @@ SYM_FUNC_START(aesni_dec)
|
||||
popl KEYP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_dec)
|
||||
|
||||
/*
|
||||
@@ -2204,7 +2204,7 @@ SYM_FUNC_START_LOCAL(_aesni_dec1)
|
||||
aesdec KEY, STATE
|
||||
movaps 0x70(TKEYP), KEY
|
||||
aesdeclast KEY, STATE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_aesni_dec1)
|
||||
|
||||
/*
|
||||
@@ -2312,7 +2312,7 @@ SYM_FUNC_START_LOCAL(_aesni_dec4)
|
||||
aesdeclast KEY, STATE2
|
||||
aesdeclast KEY, STATE3
|
||||
aesdeclast KEY, STATE4
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_aesni_dec4)
|
||||
|
||||
/*
|
||||
@@ -2372,7 +2372,7 @@ SYM_FUNC_START(aesni_ecb_enc)
|
||||
popl LEN
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_ecb_enc)
|
||||
|
||||
/*
|
||||
@@ -2433,7 +2433,7 @@ SYM_FUNC_START(aesni_ecb_dec)
|
||||
popl LEN
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_ecb_dec)
|
||||
|
||||
/*
|
||||
@@ -2477,7 +2477,7 @@ SYM_FUNC_START(aesni_cbc_enc)
|
||||
popl IVP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_cbc_enc)
|
||||
|
||||
/*
|
||||
@@ -2570,7 +2570,7 @@ SYM_FUNC_START(aesni_cbc_dec)
|
||||
popl IVP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_cbc_dec)
|
||||
|
||||
/*
|
||||
@@ -2627,7 +2627,7 @@ SYM_FUNC_START(aesni_cts_cbc_enc)
|
||||
popl IVP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_cts_cbc_enc)
|
||||
|
||||
/*
|
||||
@@ -2688,7 +2688,7 @@ SYM_FUNC_START(aesni_cts_cbc_dec)
|
||||
popl IVP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_cts_cbc_dec)
|
||||
|
||||
.pushsection .rodata
|
||||
@@ -2725,7 +2725,7 @@ SYM_FUNC_START_LOCAL(_aesni_inc_init)
|
||||
mov $1, TCTR_LOW
|
||||
movq TCTR_LOW, INC
|
||||
movq CTR, TCTR_LOW
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_aesni_inc_init)
|
||||
|
||||
/*
|
||||
@@ -2753,7 +2753,7 @@ SYM_FUNC_START_LOCAL(_aesni_inc)
|
||||
.Linc_low:
|
||||
movaps CTR, IV
|
||||
pshufb BSWAP_MASK, IV
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(_aesni_inc)
|
||||
|
||||
/*
|
||||
@@ -2816,7 +2816,7 @@ SYM_FUNC_START(aesni_ctr_enc)
|
||||
movups IV, (IVP)
|
||||
.Lctr_enc_just_ret:
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_ctr_enc)
|
||||
|
||||
#endif
|
||||
@@ -2932,7 +2932,7 @@ SYM_FUNC_START(aesni_xts_encrypt)
|
||||
popl IVP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxts_enc_1x:
|
||||
add $64, LEN
|
||||
@@ -3092,7 +3092,7 @@ SYM_FUNC_START(aesni_xts_decrypt)
|
||||
popl IVP
|
||||
#endif
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxts_dec_1x:
|
||||
add $64, LEN
|
||||
|
||||
@@ -1767,7 +1767,7 @@ SYM_FUNC_START(aesni_gcm_init_avx_gen2)
|
||||
FUNC_SAVE
|
||||
INIT GHASH_MUL_AVX, PRECOMPUTE_AVX
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_init_avx_gen2)
|
||||
|
||||
###############################################################################
|
||||
@@ -1788,15 +1788,15 @@ SYM_FUNC_START(aesni_gcm_enc_update_avx_gen2)
|
||||
# must be 192
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, ENC, 11
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_128_enc_update:
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, ENC, 9
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_256_enc_update:
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, ENC, 13
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_enc_update_avx_gen2)
|
||||
|
||||
###############################################################################
|
||||
@@ -1817,15 +1817,15 @@ SYM_FUNC_START(aesni_gcm_dec_update_avx_gen2)
|
||||
# must be 192
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, DEC, 11
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_128_dec_update:
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, DEC, 9
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_256_dec_update:
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, DEC, 13
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_dec_update_avx_gen2)
|
||||
|
||||
###############################################################################
|
||||
@@ -1846,15 +1846,15 @@ SYM_FUNC_START(aesni_gcm_finalize_avx_gen2)
|
||||
# must be 192
|
||||
GCM_COMPLETE GHASH_MUL_AVX, 11, arg3, arg4
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_128_finalize:
|
||||
GCM_COMPLETE GHASH_MUL_AVX, 9, arg3, arg4
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_256_finalize:
|
||||
GCM_COMPLETE GHASH_MUL_AVX, 13, arg3, arg4
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_finalize_avx_gen2)
|
||||
|
||||
###############################################################################
|
||||
@@ -2735,7 +2735,7 @@ SYM_FUNC_START(aesni_gcm_init_avx_gen4)
|
||||
FUNC_SAVE
|
||||
INIT GHASH_MUL_AVX2, PRECOMPUTE_AVX2
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_init_avx_gen4)
|
||||
|
||||
###############################################################################
|
||||
@@ -2756,15 +2756,15 @@ SYM_FUNC_START(aesni_gcm_enc_update_avx_gen4)
|
||||
# must be 192
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, ENC, 11
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_128_enc_update4:
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, ENC, 9
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_256_enc_update4:
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, ENC, 13
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_enc_update_avx_gen4)
|
||||
|
||||
###############################################################################
|
||||
@@ -2785,15 +2785,15 @@ SYM_FUNC_START(aesni_gcm_dec_update_avx_gen4)
|
||||
# must be 192
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, DEC, 11
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_128_dec_update4:
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, DEC, 9
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_256_dec_update4:
|
||||
GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, DEC, 13
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_dec_update_avx_gen4)
|
||||
|
||||
###############################################################################
|
||||
@@ -2814,13 +2814,13 @@ SYM_FUNC_START(aesni_gcm_finalize_avx_gen4)
|
||||
# must be 192
|
||||
GCM_COMPLETE GHASH_MUL_AVX2, 11, arg3, arg4
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_128_finalize4:
|
||||
GCM_COMPLETE GHASH_MUL_AVX2, 9, arg3, arg4
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
key_256_finalize4:
|
||||
GCM_COMPLETE GHASH_MUL_AVX2, 13, arg3, arg4
|
||||
FUNC_RESTORE
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(aesni_gcm_finalize_avx_gen4)
|
||||
|
||||
@@ -171,7 +171,7 @@ SYM_FUNC_START(blake2s_compress_ssse3)
|
||||
movdqu %xmm1,0x10(%rdi)
|
||||
movdqu %xmm14,0x20(%rdi)
|
||||
.Lendofloop:
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(blake2s_compress_ssse3)
|
||||
|
||||
#ifdef CONFIG_AS_AVX512
|
||||
@@ -251,6 +251,6 @@ SYM_FUNC_START(blake2s_compress_avx512)
|
||||
vmovdqu %xmm1,0x10(%rdi)
|
||||
vmovdqu %xmm4,0x20(%rdi)
|
||||
vzeroupper
|
||||
retq
|
||||
RET
|
||||
SYM_FUNC_END(blake2s_compress_avx512)
|
||||
#endif /* CONFIG_AS_AVX512 */
|
||||
|
||||
@@ -135,10 +135,10 @@ SYM_FUNC_START(__blowfish_enc_blk)
|
||||
jnz .L__enc_xor;
|
||||
|
||||
write_block();
|
||||
ret;
|
||||
RET;
|
||||
.L__enc_xor:
|
||||
xor_block();
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__blowfish_enc_blk)
|
||||
|
||||
SYM_FUNC_START(blowfish_dec_blk)
|
||||
@@ -170,7 +170,7 @@ SYM_FUNC_START(blowfish_dec_blk)
|
||||
|
||||
movq %r11, %r12;
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(blowfish_dec_blk)
|
||||
|
||||
/**********************************************************************
|
||||
@@ -322,14 +322,14 @@ SYM_FUNC_START(__blowfish_enc_blk_4way)
|
||||
|
||||
popq %rbx;
|
||||
popq %r12;
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.L__enc_xor4:
|
||||
xor_block4();
|
||||
|
||||
popq %rbx;
|
||||
popq %r12;
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__blowfish_enc_blk_4way)
|
||||
|
||||
SYM_FUNC_START(blowfish_dec_blk_4way)
|
||||
@@ -364,5 +364,5 @@ SYM_FUNC_START(blowfish_dec_blk_4way)
|
||||
popq %rbx;
|
||||
popq %r12;
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(blowfish_dec_blk_4way)
|
||||
|
||||
@@ -192,7 +192,7 @@ SYM_FUNC_START_LOCAL(roundsm16_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_c
|
||||
roundsm16(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7,
|
||||
%xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm15,
|
||||
%rcx, (%r9));
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(roundsm16_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd)
|
||||
|
||||
.align 8
|
||||
@@ -200,7 +200,7 @@ SYM_FUNC_START_LOCAL(roundsm16_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_a
|
||||
roundsm16(%xmm4, %xmm5, %xmm6, %xmm7, %xmm0, %xmm1, %xmm2, %xmm3,
|
||||
%xmm12, %xmm13, %xmm14, %xmm15, %xmm8, %xmm9, %xmm10, %xmm11,
|
||||
%rax, (%r9));
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(roundsm16_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab)
|
||||
|
||||
/*
|
||||
@@ -778,7 +778,7 @@ SYM_FUNC_START_LOCAL(__camellia_enc_blk16)
|
||||
%xmm15, (key_table)(CTX, %r8, 8), (%rax), 1 * 16(%rax));
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.align 8
|
||||
.Lenc_max32:
|
||||
@@ -865,7 +865,7 @@ SYM_FUNC_START_LOCAL(__camellia_dec_blk16)
|
||||
%xmm15, (key_table)(CTX), (%rax), 1 * 16(%rax));
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.align 8
|
||||
.Ldec_max32:
|
||||
@@ -906,7 +906,7 @@ SYM_FUNC_START(camellia_ecb_enc_16way)
|
||||
%xmm8, %rsi);
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(camellia_ecb_enc_16way)
|
||||
|
||||
SYM_FUNC_START(camellia_ecb_dec_16way)
|
||||
@@ -936,7 +936,7 @@ SYM_FUNC_START(camellia_ecb_dec_16way)
|
||||
%xmm8, %rsi);
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(camellia_ecb_dec_16way)
|
||||
|
||||
SYM_FUNC_START(camellia_cbc_dec_16way)
|
||||
@@ -987,5 +987,5 @@ SYM_FUNC_START(camellia_cbc_dec_16way)
|
||||
%xmm8, %rsi);
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(camellia_cbc_dec_16way)
|
||||
|
||||
@@ -226,7 +226,7 @@ SYM_FUNC_START_LOCAL(roundsm32_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_c
|
||||
roundsm32(%ymm0, %ymm1, %ymm2, %ymm3, %ymm4, %ymm5, %ymm6, %ymm7,
|
||||
%ymm8, %ymm9, %ymm10, %ymm11, %ymm12, %ymm13, %ymm14, %ymm15,
|
||||
%rcx, (%r9));
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(roundsm32_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd)
|
||||
|
||||
.align 8
|
||||
@@ -234,7 +234,7 @@ SYM_FUNC_START_LOCAL(roundsm32_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_a
|
||||
roundsm32(%ymm4, %ymm5, %ymm6, %ymm7, %ymm0, %ymm1, %ymm2, %ymm3,
|
||||
%ymm12, %ymm13, %ymm14, %ymm15, %ymm8, %ymm9, %ymm10, %ymm11,
|
||||
%rax, (%r9));
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(roundsm32_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab)
|
||||
|
||||
/*
|
||||
@@ -814,7 +814,7 @@ SYM_FUNC_START_LOCAL(__camellia_enc_blk32)
|
||||
%ymm15, (key_table)(CTX, %r8, 8), (%rax), 1 * 32(%rax));
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.align 8
|
||||
.Lenc_max32:
|
||||
@@ -901,7 +901,7 @@ SYM_FUNC_START_LOCAL(__camellia_dec_blk32)
|
||||
%ymm15, (key_table)(CTX), (%rax), 1 * 32(%rax));
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.align 8
|
||||
.Ldec_max32:
|
||||
@@ -946,7 +946,7 @@ SYM_FUNC_START(camellia_ecb_enc_32way)
|
||||
vzeroupper;
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(camellia_ecb_enc_32way)
|
||||
|
||||
SYM_FUNC_START(camellia_ecb_dec_32way)
|
||||
@@ -980,7 +980,7 @@ SYM_FUNC_START(camellia_ecb_dec_32way)
|
||||
vzeroupper;
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(camellia_ecb_dec_32way)
|
||||
|
||||
SYM_FUNC_START(camellia_cbc_dec_32way)
|
||||
@@ -1047,5 +1047,5 @@ SYM_FUNC_START(camellia_cbc_dec_32way)
|
||||
|
||||
addq $(16 * 32), %rsp;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(camellia_cbc_dec_32way)
|
||||
|
||||
@@ -213,13 +213,13 @@ SYM_FUNC_START(__camellia_enc_blk)
|
||||
enc_outunpack(mov, RT1);
|
||||
|
||||
movq RR12, %r12;
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.L__enc_xor:
|
||||
enc_outunpack(xor, RT1);
|
||||
|
||||
movq RR12, %r12;
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__camellia_enc_blk)
|
||||
|
||||
SYM_FUNC_START(camellia_dec_blk)
|
||||
@@ -257,7 +257,7 @@ SYM_FUNC_START(camellia_dec_blk)
|
||||
dec_outunpack();
|
||||
|
||||
movq RR12, %r12;
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(camellia_dec_blk)
|
||||
|
||||
/**********************************************************************
|
||||
@@ -448,14 +448,14 @@ SYM_FUNC_START(__camellia_enc_blk_2way)
|
||||
|
||||
movq RR12, %r12;
|
||||
popq %rbx;
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.L__enc2_xor:
|
||||
enc_outunpack2(xor, RT2);
|
||||
|
||||
movq RR12, %r12;
|
||||
popq %rbx;
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__camellia_enc_blk_2way)
|
||||
|
||||
SYM_FUNC_START(camellia_dec_blk_2way)
|
||||
@@ -495,5 +495,5 @@ SYM_FUNC_START(camellia_dec_blk_2way)
|
||||
|
||||
movq RR12, %r12;
|
||||
movq RXOR, %rbx;
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(camellia_dec_blk_2way)
|
||||
|
||||
@@ -279,7 +279,7 @@ SYM_FUNC_START_LOCAL(__cast5_enc_blk16)
|
||||
outunpack_blocks(RR3, RL3, RTMP, RX, RKM);
|
||||
outunpack_blocks(RR4, RL4, RTMP, RX, RKM);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__cast5_enc_blk16)
|
||||
|
||||
.align 16
|
||||
@@ -352,7 +352,7 @@ SYM_FUNC_START_LOCAL(__cast5_dec_blk16)
|
||||
outunpack_blocks(RR3, RL3, RTMP, RX, RKM);
|
||||
outunpack_blocks(RR4, RL4, RTMP, RX, RKM);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.L__skip_dec:
|
||||
vpsrldq $4, RKR, RKR;
|
||||
@@ -393,7 +393,7 @@ SYM_FUNC_START(cast5_ecb_enc_16way)
|
||||
|
||||
popq %r15;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(cast5_ecb_enc_16way)
|
||||
|
||||
SYM_FUNC_START(cast5_ecb_dec_16way)
|
||||
@@ -431,7 +431,7 @@ SYM_FUNC_START(cast5_ecb_dec_16way)
|
||||
|
||||
popq %r15;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(cast5_ecb_dec_16way)
|
||||
|
||||
SYM_FUNC_START(cast5_cbc_dec_16way)
|
||||
@@ -483,7 +483,7 @@ SYM_FUNC_START(cast5_cbc_dec_16way)
|
||||
popq %r15;
|
||||
popq %r12;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(cast5_cbc_dec_16way)
|
||||
|
||||
SYM_FUNC_START(cast5_ctr_16way)
|
||||
@@ -559,5 +559,5 @@ SYM_FUNC_START(cast5_ctr_16way)
|
||||
popq %r15;
|
||||
popq %r12;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(cast5_ctr_16way)
|
||||
|
||||
@@ -289,7 +289,7 @@ SYM_FUNC_START_LOCAL(__cast6_enc_blk8)
|
||||
outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
|
||||
outunpack_blocks(RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__cast6_enc_blk8)
|
||||
|
||||
.align 8
|
||||
@@ -336,7 +336,7 @@ SYM_FUNC_START_LOCAL(__cast6_dec_blk8)
|
||||
outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
|
||||
outunpack_blocks(RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__cast6_dec_blk8)
|
||||
|
||||
SYM_FUNC_START(cast6_ecb_enc_8way)
|
||||
@@ -359,7 +359,7 @@ SYM_FUNC_START(cast6_ecb_enc_8way)
|
||||
|
||||
popq %r15;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(cast6_ecb_enc_8way)
|
||||
|
||||
SYM_FUNC_START(cast6_ecb_dec_8way)
|
||||
@@ -382,7 +382,7 @@ SYM_FUNC_START(cast6_ecb_dec_8way)
|
||||
|
||||
popq %r15;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(cast6_ecb_dec_8way)
|
||||
|
||||
SYM_FUNC_START(cast6_cbc_dec_8way)
|
||||
@@ -408,5 +408,5 @@ SYM_FUNC_START(cast6_cbc_dec_8way)
|
||||
popq %r15;
|
||||
popq %r12;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(cast6_cbc_dec_8way)
|
||||
|
||||
@@ -193,7 +193,7 @@ SYM_FUNC_START(chacha_2block_xor_avx2)
|
||||
|
||||
.Ldone2:
|
||||
vzeroupper
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxorpart2:
|
||||
# xor remaining bytes from partial register into output
|
||||
@@ -498,7 +498,7 @@ SYM_FUNC_START(chacha_4block_xor_avx2)
|
||||
|
||||
.Ldone4:
|
||||
vzeroupper
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxorpart4:
|
||||
# xor remaining bytes from partial register into output
|
||||
@@ -992,7 +992,7 @@ SYM_FUNC_START(chacha_8block_xor_avx2)
|
||||
.Ldone8:
|
||||
vzeroupper
|
||||
lea -8(%r10),%rsp
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxorpart8:
|
||||
# xor remaining bytes from partial register into output
|
||||
|
||||
@@ -166,7 +166,7 @@ SYM_FUNC_START(chacha_2block_xor_avx512vl)
|
||||
|
||||
.Ldone2:
|
||||
vzeroupper
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxorpart2:
|
||||
# xor remaining bytes from partial register into output
|
||||
@@ -432,7 +432,7 @@ SYM_FUNC_START(chacha_4block_xor_avx512vl)
|
||||
|
||||
.Ldone4:
|
||||
vzeroupper
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxorpart4:
|
||||
# xor remaining bytes from partial register into output
|
||||
@@ -812,7 +812,7 @@ SYM_FUNC_START(chacha_8block_xor_avx512vl)
|
||||
|
||||
.Ldone8:
|
||||
vzeroupper
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxorpart8:
|
||||
# xor remaining bytes from partial register into output
|
||||
|
||||
@@ -108,7 +108,7 @@ SYM_FUNC_START_LOCAL(chacha_permute)
|
||||
sub $2,%r8d
|
||||
jnz .Ldoubleround
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(chacha_permute)
|
||||
|
||||
SYM_FUNC_START(chacha_block_xor_ssse3)
|
||||
@@ -166,7 +166,7 @@ SYM_FUNC_START(chacha_block_xor_ssse3)
|
||||
|
||||
.Ldone:
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxorpart:
|
||||
# xor remaining bytes from partial register into output
|
||||
@@ -217,7 +217,7 @@ SYM_FUNC_START(hchacha_block_ssse3)
|
||||
movdqu %xmm3,0x10(%rsi)
|
||||
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(hchacha_block_ssse3)
|
||||
|
||||
SYM_FUNC_START(chacha_4block_xor_ssse3)
|
||||
@@ -762,7 +762,7 @@ SYM_FUNC_START(chacha_4block_xor_ssse3)
|
||||
|
||||
.Ldone4:
|
||||
lea -8(%r10),%rsp
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lxorpart4:
|
||||
# xor remaining bytes from partial register into output
|
||||
|
||||
@@ -236,5 +236,5 @@ fold_64:
|
||||
pxor %xmm2, %xmm1
|
||||
pextrd $0x01, %xmm1, %eax
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crc32_pclmul_le_16)
|
||||
|
||||
@@ -306,7 +306,7 @@ do_return:
|
||||
popq %rsi
|
||||
popq %rdi
|
||||
popq %rbx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(crc_pcl)
|
||||
|
||||
.section .rodata, "a", @progbits
|
||||
|
||||
@@ -257,7 +257,7 @@ SYM_FUNC_START(crc_t10dif_pcl)
|
||||
# Final CRC value (x^16 * M(x)) mod G(x) is in low 16 bits of xmm0.
|
||||
|
||||
pextrw $0, %xmm0, %eax
|
||||
ret
|
||||
RET
|
||||
|
||||
.align 16
|
||||
.Lless_than_256_bytes:
|
||||
|
||||
@@ -243,7 +243,7 @@ SYM_FUNC_START(des3_ede_x86_64_crypt_blk)
|
||||
popq %r12;
|
||||
popq %rbx;
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(des3_ede_x86_64_crypt_blk)
|
||||
|
||||
/***********************************************************************
|
||||
@@ -528,7 +528,7 @@ SYM_FUNC_START(des3_ede_x86_64_crypt_blk_3way)
|
||||
popq %r12;
|
||||
popq %rbx;
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(des3_ede_x86_64_crypt_blk_3way)
|
||||
|
||||
.section .rodata, "a", @progbits
|
||||
|
||||
@@ -85,7 +85,7 @@ SYM_FUNC_START_LOCAL(__clmul_gf128mul_ble)
|
||||
psrlq $1, T2
|
||||
pxor T2, T1
|
||||
pxor T1, DATA
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__clmul_gf128mul_ble)
|
||||
|
||||
/* void clmul_ghash_mul(char *dst, const u128 *shash) */
|
||||
@@ -99,7 +99,7 @@ SYM_FUNC_START(clmul_ghash_mul)
|
||||
pshufb BSWAP, DATA
|
||||
movups DATA, (%rdi)
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(clmul_ghash_mul)
|
||||
|
||||
/*
|
||||
@@ -128,5 +128,5 @@ SYM_FUNC_START(clmul_ghash_update)
|
||||
movups DATA, (%rdi)
|
||||
.Lupdate_just_ret:
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(clmul_ghash_update)
|
||||
|
||||
@@ -153,5 +153,5 @@ SYM_FUNC_START(nh_avx2)
|
||||
vpaddq T1, T0, T0
|
||||
vpaddq T4, T0, T0
|
||||
vmovdqu T0, (HASH)
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(nh_avx2)
|
||||
|
||||
@@ -119,5 +119,5 @@ SYM_FUNC_START(nh_sse2)
|
||||
paddq PASS2_SUMS, T1
|
||||
movdqu T0, 0x00(HASH)
|
||||
movdqu T1, 0x10(HASH)
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(nh_sse2)
|
||||
|
||||
@@ -297,7 +297,7 @@ ___
|
||||
$code.=<<___;
|
||||
mov \$1,%eax
|
||||
.Lno_key:
|
||||
ret
|
||||
RET
|
||||
___
|
||||
&end_function("poly1305_init_x86_64");
|
||||
|
||||
@@ -373,7 +373,7 @@ $code.=<<___;
|
||||
.cfi_adjust_cfa_offset -48
|
||||
.Lno_data:
|
||||
.Lblocks_epilogue:
|
||||
ret
|
||||
RET
|
||||
.cfi_endproc
|
||||
___
|
||||
&end_function("poly1305_blocks_x86_64");
|
||||
@@ -399,7 +399,7 @@ $code.=<<___;
|
||||
mov %rax,0($mac) # write result
|
||||
mov %rcx,8($mac)
|
||||
|
||||
ret
|
||||
RET
|
||||
___
|
||||
&end_function("poly1305_emit_x86_64");
|
||||
if ($avx) {
|
||||
@@ -429,7 +429,7 @@ ___
|
||||
&poly1305_iteration();
|
||||
$code.=<<___;
|
||||
pop $ctx
|
||||
ret
|
||||
RET
|
||||
.size __poly1305_block,.-__poly1305_block
|
||||
|
||||
.type __poly1305_init_avx,\@abi-omnipotent
|
||||
@@ -594,7 +594,7 @@ __poly1305_init_avx:
|
||||
|
||||
lea -48-64($ctx),$ctx # size [de-]optimization
|
||||
pop %rbp
|
||||
ret
|
||||
RET
|
||||
.size __poly1305_init_avx,.-__poly1305_init_avx
|
||||
___
|
||||
|
||||
@@ -747,7 +747,7 @@ $code.=<<___;
|
||||
.cfi_restore %rbp
|
||||
.Lno_data_avx:
|
||||
.Lblocks_avx_epilogue:
|
||||
ret
|
||||
RET
|
||||
.cfi_endproc
|
||||
|
||||
.align 32
|
||||
@@ -1452,7 +1452,7 @@ $code.=<<___ if (!$win64);
|
||||
___
|
||||
$code.=<<___;
|
||||
vzeroupper
|
||||
ret
|
||||
RET
|
||||
.cfi_endproc
|
||||
___
|
||||
&end_function("poly1305_blocks_avx");
|
||||
@@ -1508,7 +1508,7 @@ $code.=<<___;
|
||||
mov %rax,0($mac) # write result
|
||||
mov %rcx,8($mac)
|
||||
|
||||
ret
|
||||
RET
|
||||
___
|
||||
&end_function("poly1305_emit_avx");
|
||||
|
||||
@@ -1675,7 +1675,7 @@ $code.=<<___;
|
||||
.cfi_restore %rbp
|
||||
.Lno_data_avx2$suffix:
|
||||
.Lblocks_avx2_epilogue$suffix:
|
||||
ret
|
||||
RET
|
||||
.cfi_endproc
|
||||
|
||||
.align 32
|
||||
@@ -2201,7 +2201,7 @@ $code.=<<___ if (!$win64);
|
||||
___
|
||||
$code.=<<___;
|
||||
vzeroupper
|
||||
ret
|
||||
RET
|
||||
.cfi_endproc
|
||||
___
|
||||
if($avx > 2 && $avx512) {
|
||||
@@ -2792,7 +2792,7 @@ $code.=<<___ if (!$win64);
|
||||
.cfi_def_cfa_register %rsp
|
||||
___
|
||||
$code.=<<___;
|
||||
ret
|
||||
RET
|
||||
.cfi_endproc
|
||||
___
|
||||
|
||||
@@ -2893,7 +2893,7 @@ $code.=<<___ if ($flavour =~ /elf32/);
|
||||
___
|
||||
$code.=<<___;
|
||||
mov \$1,%eax
|
||||
ret
|
||||
RET
|
||||
.size poly1305_init_base2_44,.-poly1305_init_base2_44
|
||||
___
|
||||
{
|
||||
@@ -3010,7 +3010,7 @@ poly1305_blocks_vpmadd52:
|
||||
jnz .Lblocks_vpmadd52_4x
|
||||
|
||||
.Lno_data_vpmadd52:
|
||||
ret
|
||||
RET
|
||||
.size poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52
|
||||
___
|
||||
}
|
||||
@@ -3451,7 +3451,7 @@ poly1305_blocks_vpmadd52_4x:
|
||||
vzeroall
|
||||
|
||||
.Lno_data_vpmadd52_4x:
|
||||
ret
|
||||
RET
|
||||
.size poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x
|
||||
___
|
||||
}
|
||||
@@ -3824,7 +3824,7 @@ $code.=<<___;
|
||||
vzeroall
|
||||
|
||||
.Lno_data_vpmadd52_8x:
|
||||
ret
|
||||
RET
|
||||
.size poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x
|
||||
___
|
||||
}
|
||||
@@ -3861,7 +3861,7 @@ poly1305_emit_base2_44:
|
||||
mov %rax,0($mac) # write result
|
||||
mov %rcx,8($mac)
|
||||
|
||||
ret
|
||||
RET
|
||||
.size poly1305_emit_base2_44,.-poly1305_emit_base2_44
|
||||
___
|
||||
} } }
|
||||
@@ -3916,7 +3916,7 @@ xor128_encrypt_n_pad:
|
||||
|
||||
.Ldone_enc:
|
||||
mov $otp,%rax
|
||||
ret
|
||||
RET
|
||||
.size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad
|
||||
|
||||
.globl xor128_decrypt_n_pad
|
||||
@@ -3967,7 +3967,7 @@ xor128_decrypt_n_pad:
|
||||
|
||||
.Ldone_dec:
|
||||
mov $otp,%rax
|
||||
ret
|
||||
RET
|
||||
.size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad
|
||||
___
|
||||
}
|
||||
@@ -4109,7 +4109,7 @@ avx_handler:
|
||||
pop %rbx
|
||||
pop %rdi
|
||||
pop %rsi
|
||||
ret
|
||||
RET
|
||||
.size avx_handler,.-avx_handler
|
||||
|
||||
.section .pdata
|
||||
|
||||
@@ -601,7 +601,7 @@ SYM_FUNC_START_LOCAL(__serpent_enc_blk8_avx)
|
||||
write_blocks(RA1, RB1, RC1, RD1, RK0, RK1, RK2);
|
||||
write_blocks(RA2, RB2, RC2, RD2, RK0, RK1, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__serpent_enc_blk8_avx)
|
||||
|
||||
.align 8
|
||||
@@ -655,7 +655,7 @@ SYM_FUNC_START_LOCAL(__serpent_dec_blk8_avx)
|
||||
write_blocks(RC1, RD1, RB1, RE1, RK0, RK1, RK2);
|
||||
write_blocks(RC2, RD2, RB2, RE2, RK0, RK1, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__serpent_dec_blk8_avx)
|
||||
|
||||
SYM_FUNC_START(serpent_ecb_enc_8way_avx)
|
||||
@@ -673,7 +673,7 @@ SYM_FUNC_START(serpent_ecb_enc_8way_avx)
|
||||
store_8way(%rsi, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(serpent_ecb_enc_8way_avx)
|
||||
|
||||
SYM_FUNC_START(serpent_ecb_dec_8way_avx)
|
||||
@@ -691,7 +691,7 @@ SYM_FUNC_START(serpent_ecb_dec_8way_avx)
|
||||
store_8way(%rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2);
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(serpent_ecb_dec_8way_avx)
|
||||
|
||||
SYM_FUNC_START(serpent_cbc_dec_8way_avx)
|
||||
@@ -709,5 +709,5 @@ SYM_FUNC_START(serpent_cbc_dec_8way_avx)
|
||||
store_cbc_8way(%rdx, %rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2);
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(serpent_cbc_dec_8way_avx)
|
||||
|
||||
@@ -601,7 +601,7 @@ SYM_FUNC_START_LOCAL(__serpent_enc_blk16)
|
||||
write_blocks(RA1, RB1, RC1, RD1, RK0, RK1, RK2);
|
||||
write_blocks(RA2, RB2, RC2, RD2, RK0, RK1, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__serpent_enc_blk16)
|
||||
|
||||
.align 8
|
||||
@@ -655,7 +655,7 @@ SYM_FUNC_START_LOCAL(__serpent_dec_blk16)
|
||||
write_blocks(RC1, RD1, RB1, RE1, RK0, RK1, RK2);
|
||||
write_blocks(RC2, RD2, RB2, RE2, RK0, RK1, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__serpent_dec_blk16)
|
||||
|
||||
SYM_FUNC_START(serpent_ecb_enc_16way)
|
||||
@@ -677,7 +677,7 @@ SYM_FUNC_START(serpent_ecb_enc_16way)
|
||||
vzeroupper;
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(serpent_ecb_enc_16way)
|
||||
|
||||
SYM_FUNC_START(serpent_ecb_dec_16way)
|
||||
@@ -699,7 +699,7 @@ SYM_FUNC_START(serpent_ecb_dec_16way)
|
||||
vzeroupper;
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(serpent_ecb_dec_16way)
|
||||
|
||||
SYM_FUNC_START(serpent_cbc_dec_16way)
|
||||
@@ -722,5 +722,5 @@ SYM_FUNC_START(serpent_cbc_dec_16way)
|
||||
vzeroupper;
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(serpent_cbc_dec_16way)
|
||||
|
||||
@@ -553,12 +553,12 @@ SYM_FUNC_START(__serpent_enc_blk_4way)
|
||||
|
||||
write_blocks(%eax, RA, RB, RC, RD, RT0, RT1, RE);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.L__enc_xor4:
|
||||
xor_blocks(%eax, RA, RB, RC, RD, RT0, RT1, RE);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__serpent_enc_blk_4way)
|
||||
|
||||
SYM_FUNC_START(serpent_dec_blk_4way)
|
||||
@@ -612,5 +612,5 @@ SYM_FUNC_START(serpent_dec_blk_4way)
|
||||
movl arg_dst(%esp), %eax;
|
||||
write_blocks(%eax, RC, RD, RB, RE, RT0, RT1, RA);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(serpent_dec_blk_4way)
|
||||
|
||||
@@ -675,13 +675,13 @@ SYM_FUNC_START(__serpent_enc_blk_8way)
|
||||
write_blocks(%rsi, RA1, RB1, RC1, RD1, RK0, RK1, RK2);
|
||||
write_blocks(%rax, RA2, RB2, RC2, RD2, RK0, RK1, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.L__enc_xor8:
|
||||
xor_blocks(%rsi, RA1, RB1, RC1, RD1, RK0, RK1, RK2);
|
||||
xor_blocks(%rax, RA2, RB2, RC2, RD2, RK0, RK1, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__serpent_enc_blk_8way)
|
||||
|
||||
SYM_FUNC_START(serpent_dec_blk_8way)
|
||||
@@ -735,5 +735,5 @@ SYM_FUNC_START(serpent_dec_blk_8way)
|
||||
write_blocks(%rsi, RC1, RD1, RB1, RE1, RK0, RK1, RK2);
|
||||
write_blocks(%rax, RC2, RD2, RB2, RE2, RK0, RK1, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(serpent_dec_blk_8way)
|
||||
|
||||
@@ -674,7 +674,7 @@ _loop3:
|
||||
pop %r12
|
||||
pop %rbx
|
||||
|
||||
ret
|
||||
RET
|
||||
|
||||
SYM_FUNC_END(\name)
|
||||
.endm
|
||||
|
||||
@@ -290,7 +290,7 @@ SYM_FUNC_START(sha1_ni_transform)
|
||||
mov %rbp, %rsp
|
||||
pop %rbp
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sha1_ni_transform)
|
||||
|
||||
.section .rodata.cst16.PSHUFFLE_BYTE_FLIP_MASK, "aM", @progbits, 16
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
pop %rbp
|
||||
pop %r12
|
||||
pop %rbx
|
||||
ret
|
||||
RET
|
||||
|
||||
SYM_FUNC_END(\name)
|
||||
.endm
|
||||
|
||||
@@ -458,7 +458,7 @@ done_hash:
|
||||
popq %r13
|
||||
popq %r12
|
||||
popq %rbx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sha256_transform_avx)
|
||||
|
||||
.section .rodata.cst256.K256, "aM", @progbits, 256
|
||||
|
||||
@@ -710,7 +710,7 @@ done_hash:
|
||||
popq %r13
|
||||
popq %r12
|
||||
popq %rbx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sha256_transform_rorx)
|
||||
|
||||
.section .rodata.cst512.K256, "aM", @progbits, 512
|
||||
|
||||
@@ -472,7 +472,7 @@ done_hash:
|
||||
popq %r12
|
||||
popq %rbx
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sha256_transform_ssse3)
|
||||
|
||||
.section .rodata.cst256.K256, "aM", @progbits, 256
|
||||
|
||||
@@ -326,7 +326,7 @@ SYM_FUNC_START(sha256_ni_transform)
|
||||
|
||||
.Ldone_hash:
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sha256_ni_transform)
|
||||
|
||||
.section .rodata.cst256.K256, "aM", @progbits, 256
|
||||
|
||||
@@ -361,7 +361,7 @@ updateblock:
|
||||
pop %rbx
|
||||
|
||||
nowork:
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sha512_transform_avx)
|
||||
|
||||
########################################################################
|
||||
|
||||
@@ -679,7 +679,7 @@ done_hash:
|
||||
pop %r12
|
||||
pop %rbx
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sha512_transform_rorx)
|
||||
|
||||
########################################################################
|
||||
|
||||
@@ -363,7 +363,7 @@ updateblock:
|
||||
pop %rbx
|
||||
|
||||
nowork:
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sha512_transform_ssse3)
|
||||
|
||||
########################################################################
|
||||
|
||||
@@ -246,7 +246,7 @@ SYM_FUNC_START(sm4_aesni_avx_crypt4)
|
||||
.Lblk4_store_output_done:
|
||||
vzeroall;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(sm4_aesni_avx_crypt4)
|
||||
|
||||
.align 8
|
||||
@@ -356,7 +356,7 @@ SYM_FUNC_START_LOCAL(__sm4_crypt_blk8)
|
||||
vpshufb RTMP2, RB3, RB3;
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__sm4_crypt_blk8)
|
||||
|
||||
/*
|
||||
@@ -412,7 +412,7 @@ SYM_FUNC_START(sm4_aesni_avx_crypt8)
|
||||
.Lblk8_store_output_done:
|
||||
vzeroall;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(sm4_aesni_avx_crypt8)
|
||||
|
||||
/*
|
||||
@@ -487,7 +487,7 @@ SYM_FUNC_START(sm4_aesni_avx_ctr_enc_blk8)
|
||||
|
||||
vzeroall;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(sm4_aesni_avx_ctr_enc_blk8)
|
||||
|
||||
/*
|
||||
@@ -537,7 +537,7 @@ SYM_FUNC_START(sm4_aesni_avx_cbc_dec_blk8)
|
||||
|
||||
vzeroall;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(sm4_aesni_avx_cbc_dec_blk8)
|
||||
|
||||
/*
|
||||
@@ -590,5 +590,5 @@ SYM_FUNC_START(sm4_aesni_avx_cfb_dec_blk8)
|
||||
|
||||
vzeroall;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(sm4_aesni_avx_cfb_dec_blk8)
|
||||
|
||||
@@ -268,7 +268,7 @@ SYM_FUNC_START_LOCAL(__sm4_crypt_blk16)
|
||||
vpshufb RTMP2, RB3, RB3;
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__sm4_crypt_blk16)
|
||||
|
||||
#define inc_le128(x, minus_one, tmp) \
|
||||
@@ -387,7 +387,7 @@ SYM_FUNC_START(sm4_aesni_avx2_ctr_enc_blk16)
|
||||
|
||||
vzeroall;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(sm4_aesni_avx2_ctr_enc_blk16)
|
||||
|
||||
/*
|
||||
@@ -441,7 +441,7 @@ SYM_FUNC_START(sm4_aesni_avx2_cbc_dec_blk16)
|
||||
|
||||
vzeroall;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(sm4_aesni_avx2_cbc_dec_blk16)
|
||||
|
||||
/*
|
||||
@@ -497,5 +497,5 @@ SYM_FUNC_START(sm4_aesni_avx2_cfb_dec_blk16)
|
||||
|
||||
vzeroall;
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(sm4_aesni_avx2_cfb_dec_blk16)
|
||||
|
||||
@@ -267,7 +267,7 @@ SYM_FUNC_START_LOCAL(__twofish_enc_blk8)
|
||||
outunpack_blocks(RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2);
|
||||
outunpack_blocks(RC2, RD2, RA2, RB2, RK1, RX0, RY0, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__twofish_enc_blk8)
|
||||
|
||||
.align 8
|
||||
@@ -307,7 +307,7 @@ SYM_FUNC_START_LOCAL(__twofish_dec_blk8)
|
||||
outunpack_blocks(RA1, RB1, RC1, RD1, RK1, RX0, RY0, RK2);
|
||||
outunpack_blocks(RA2, RB2, RC2, RD2, RK1, RX0, RY0, RK2);
|
||||
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__twofish_dec_blk8)
|
||||
|
||||
SYM_FUNC_START(twofish_ecb_enc_8way)
|
||||
@@ -327,7 +327,7 @@ SYM_FUNC_START(twofish_ecb_enc_8way)
|
||||
store_8way(%r11, RC1, RD1, RA1, RB1, RC2, RD2, RA2, RB2);
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(twofish_ecb_enc_8way)
|
||||
|
||||
SYM_FUNC_START(twofish_ecb_dec_8way)
|
||||
@@ -347,7 +347,7 @@ SYM_FUNC_START(twofish_ecb_dec_8way)
|
||||
store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(twofish_ecb_dec_8way)
|
||||
|
||||
SYM_FUNC_START(twofish_cbc_dec_8way)
|
||||
@@ -372,5 +372,5 @@ SYM_FUNC_START(twofish_cbc_dec_8way)
|
||||
popq %r12;
|
||||
|
||||
FRAME_END
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(twofish_cbc_dec_8way)
|
||||
|
||||
@@ -260,7 +260,7 @@ SYM_FUNC_START(twofish_enc_blk)
|
||||
pop %ebx
|
||||
pop %ebp
|
||||
mov $1, %eax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(twofish_enc_blk)
|
||||
|
||||
SYM_FUNC_START(twofish_dec_blk)
|
||||
@@ -317,5 +317,5 @@ SYM_FUNC_START(twofish_dec_blk)
|
||||
pop %ebx
|
||||
pop %ebp
|
||||
mov $1, %eax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(twofish_dec_blk)
|
||||
|
||||
@@ -258,7 +258,7 @@ SYM_FUNC_START(__twofish_enc_blk_3way)
|
||||
popq %rbx;
|
||||
popq %r12;
|
||||
popq %r13;
|
||||
ret;
|
||||
RET;
|
||||
|
||||
.L__enc_xor3:
|
||||
outunpack_enc3(xor);
|
||||
@@ -266,7 +266,7 @@ SYM_FUNC_START(__twofish_enc_blk_3way)
|
||||
popq %rbx;
|
||||
popq %r12;
|
||||
popq %r13;
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(__twofish_enc_blk_3way)
|
||||
|
||||
SYM_FUNC_START(twofish_dec_blk_3way)
|
||||
@@ -301,5 +301,5 @@ SYM_FUNC_START(twofish_dec_blk_3way)
|
||||
popq %rbx;
|
||||
popq %r12;
|
||||
popq %r13;
|
||||
ret;
|
||||
RET;
|
||||
SYM_FUNC_END(twofish_dec_blk_3way)
|
||||
|
||||
@@ -252,7 +252,7 @@ SYM_FUNC_START(twofish_enc_blk)
|
||||
|
||||
popq R1
|
||||
movl $1,%eax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(twofish_enc_blk)
|
||||
|
||||
SYM_FUNC_START(twofish_dec_blk)
|
||||
@@ -304,5 +304,5 @@ SYM_FUNC_START(twofish_dec_blk)
|
||||
|
||||
popq R1
|
||||
movl $1,%eax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(twofish_dec_blk)
|
||||
|
||||
@@ -740,7 +740,7 @@ SYM_FUNC_START(schedule_tail_wrapper)
|
||||
popl %eax
|
||||
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(schedule_tail_wrapper)
|
||||
.popsection
|
||||
|
||||
|
||||
@@ -738,7 +738,7 @@ SYM_FUNC_START(asm_load_gs_index)
|
||||
2: ALTERNATIVE "", "mfence", X86_BUG_SWAPGS_FENCE
|
||||
swapgs
|
||||
FRAME_END
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(asm_load_gs_index)
|
||||
EXPORT_SYMBOL(asm_load_gs_index)
|
||||
|
||||
@@ -889,7 +889,7 @@ SYM_CODE_START_LOCAL(paranoid_entry)
|
||||
* is needed here.
|
||||
*/
|
||||
SAVE_AND_SET_GSBASE scratch_reg=%rax save_reg=%rbx
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lparanoid_entry_checkgs:
|
||||
/* EBX = 1 -> kernel GSBASE active, no restore required */
|
||||
@@ -910,7 +910,7 @@ SYM_CODE_START_LOCAL(paranoid_entry)
|
||||
.Lparanoid_kernel_gsbase:
|
||||
|
||||
FENCE_SWAPGS_KERNEL_ENTRY
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(paranoid_entry)
|
||||
|
||||
/*
|
||||
@@ -989,7 +989,7 @@ SYM_CODE_START_LOCAL(error_entry)
|
||||
movq %rax, %rsp /* switch stack */
|
||||
ENCODE_FRAME_POINTER
|
||||
pushq %r12
|
||||
ret
|
||||
RET
|
||||
|
||||
/*
|
||||
* There are two places in the kernel that can potentially fault with
|
||||
@@ -1020,7 +1020,7 @@ SYM_CODE_START_LOCAL(error_entry)
|
||||
*/
|
||||
.Lerror_entry_done_lfence:
|
||||
FENCE_SWAPGS_KERNEL_ENTRY
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lbstep_iret:
|
||||
/* Fix truncated RIP */
|
||||
|
||||
@@ -24,7 +24,7 @@ SYM_CODE_START_NOALIGN(\name)
|
||||
popl %edx
|
||||
popl %ecx
|
||||
popl %eax
|
||||
ret
|
||||
RET
|
||||
_ASM_NOKPROBE(\name)
|
||||
SYM_CODE_END(\name)
|
||||
.endm
|
||||
|
||||
@@ -50,7 +50,7 @@ SYM_CODE_START_LOCAL_NOALIGN(__thunk_restore)
|
||||
popq %rsi
|
||||
popq %rdi
|
||||
popq %rbp
|
||||
ret
|
||||
RET
|
||||
_ASM_NOKPROBE(__thunk_restore)
|
||||
SYM_CODE_END(__thunk_restore)
|
||||
#endif
|
||||
|
||||
@@ -78,7 +78,7 @@ SYM_INNER_LABEL(int80_landing_pad, SYM_L_GLOBAL)
|
||||
popl %ecx
|
||||
CFI_RESTORE ecx
|
||||
CFI_ADJUST_CFA_OFFSET -4
|
||||
ret
|
||||
RET
|
||||
CFI_ENDPROC
|
||||
|
||||
.size __kernel_vsyscall,.-__kernel_vsyscall
|
||||
|
||||
@@ -81,7 +81,7 @@ SYM_FUNC_START(__vdso_sgx_enter_enclave)
|
||||
pop %rbx
|
||||
leave
|
||||
.cfi_def_cfa %rsp, 8
|
||||
ret
|
||||
RET
|
||||
|
||||
/* The out-of-line code runs with the pre-leave stack frame. */
|
||||
.cfi_def_cfa %rbp, 16
|
||||
|
||||
@@ -19,17 +19,17 @@ __vsyscall_page:
|
||||
|
||||
mov $__NR_gettimeofday, %rax
|
||||
syscall
|
||||
ret
|
||||
RET
|
||||
|
||||
.balign 1024, 0xcc
|
||||
mov $__NR_time, %rax
|
||||
syscall
|
||||
ret
|
||||
RET
|
||||
|
||||
.balign 1024, 0xcc
|
||||
mov $__NR_getcpu, %rax
|
||||
syscall
|
||||
ret
|
||||
RET
|
||||
|
||||
.balign 4096, 0xcc
|
||||
|
||||
|
||||
@@ -18,6 +18,20 @@
|
||||
#define __ALIGN_STR __stringify(__ALIGN)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SLS
|
||||
#define RET ret; int3
|
||||
#else
|
||||
#define RET ret
|
||||
#endif
|
||||
|
||||
#else /* __ASSEMBLY__ */
|
||||
|
||||
#ifdef CONFIG_SLS
|
||||
#define ASM_RET "ret; int3\n\t"
|
||||
#else
|
||||
#define ASM_RET "ret\n\t"
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* _ASM_X86_LINKAGE_H */
|
||||
|
||||
@@ -665,7 +665,7 @@ bool __raw_callee_save___native_vcpu_is_preempted(long cpu);
|
||||
"call " #func ";" \
|
||||
PV_RESTORE_ALL_CALLER_REGS \
|
||||
FRAME_END \
|
||||
"ret;" \
|
||||
ASM_RET \
|
||||
".size " PV_THUNK_NAME(func) ", .-" PV_THUNK_NAME(func) ";" \
|
||||
".popsection")
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ asm (".pushsection .text;"
|
||||
"jne .slowpath;"
|
||||
"pop %rdx;"
|
||||
FRAME_END
|
||||
"ret;"
|
||||
ASM_RET
|
||||
".slowpath: "
|
||||
"push %rsi;"
|
||||
"movzbl %al,%esi;"
|
||||
@@ -56,7 +56,7 @@ asm (".pushsection .text;"
|
||||
"pop %rsi;"
|
||||
"pop %rdx;"
|
||||
FRAME_END
|
||||
"ret;"
|
||||
ASM_RET
|
||||
".size " PV_UNLOCK ", .-" PV_UNLOCK ";"
|
||||
".popsection");
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
__ARCH_DEFINE_STATIC_CALL_TRAMP(name, ".byte 0xe9; .long " #func " - (. + 4)")
|
||||
|
||||
#define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) \
|
||||
__ARCH_DEFINE_STATIC_CALL_TRAMP(name, "ret; nop; nop; nop; nop")
|
||||
__ARCH_DEFINE_STATIC_CALL_TRAMP(name, "ret; int3; nop; nop; nop")
|
||||
|
||||
|
||||
#define ARCH_ADD_TRAMP_KEY(name) \
|
||||
|
||||
@@ -60,7 +60,7 @@ save_registers:
|
||||
popl saved_context_eflags
|
||||
|
||||
movl $ret_point, saved_eip
|
||||
ret
|
||||
RET
|
||||
|
||||
|
||||
restore_registers:
|
||||
@@ -70,7 +70,7 @@ restore_registers:
|
||||
movl saved_context_edi, %edi
|
||||
pushl saved_context_eflags
|
||||
popfl
|
||||
ret
|
||||
RET
|
||||
|
||||
SYM_CODE_START(do_suspend_lowlevel)
|
||||
call save_processor_state
|
||||
@@ -86,7 +86,7 @@ SYM_CODE_START(do_suspend_lowlevel)
|
||||
ret_point:
|
||||
call restore_registers
|
||||
call restore_processor_state
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(do_suspend_lowlevel)
|
||||
|
||||
.data
|
||||
|
||||
@@ -537,7 +537,7 @@ asm (
|
||||
" .type int3_magic, @function\n"
|
||||
"int3_magic:\n"
|
||||
" movl $1, (%" _ASM_ARG1 ")\n"
|
||||
" ret\n"
|
||||
ASM_RET
|
||||
" .size int3_magic, .-int3_magic\n"
|
||||
" .popsection\n"
|
||||
);
|
||||
@@ -930,10 +930,13 @@ void text_poke_sync(void)
|
||||
}
|
||||
|
||||
struct text_poke_loc {
|
||||
s32 rel_addr; /* addr := _stext + rel_addr */
|
||||
s32 rel32;
|
||||
/* addr := _stext + rel_addr */
|
||||
s32 rel_addr;
|
||||
s32 disp;
|
||||
u8 len;
|
||||
u8 opcode;
|
||||
const u8 text[POKE_MAX_OPCODE_SIZE];
|
||||
/* see text_poke_bp_batch() */
|
||||
u8 old;
|
||||
};
|
||||
|
||||
@@ -948,7 +951,8 @@ static struct bp_patching_desc *bp_desc;
|
||||
static __always_inline
|
||||
struct bp_patching_desc *try_get_desc(struct bp_patching_desc **descp)
|
||||
{
|
||||
struct bp_patching_desc *desc = __READ_ONCE(*descp); /* rcu_dereference */
|
||||
/* rcu_dereference */
|
||||
struct bp_patching_desc *desc = __READ_ONCE(*descp);
|
||||
|
||||
if (!desc || !arch_atomic_inc_not_zero(&desc->refs))
|
||||
return NULL;
|
||||
@@ -982,7 +986,7 @@ noinstr int poke_int3_handler(struct pt_regs *regs)
|
||||
{
|
||||
struct bp_patching_desc *desc;
|
||||
struct text_poke_loc *tp;
|
||||
int len, ret = 0;
|
||||
int ret = 0;
|
||||
void *ip;
|
||||
|
||||
if (user_mode(regs))
|
||||
@@ -1022,8 +1026,7 @@ noinstr int poke_int3_handler(struct pt_regs *regs)
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
len = text_opcode_size(tp->opcode);
|
||||
ip += len;
|
||||
ip += tp->len;
|
||||
|
||||
switch (tp->opcode) {
|
||||
case INT3_INSN_OPCODE:
|
||||
@@ -1038,12 +1041,12 @@ noinstr int poke_int3_handler(struct pt_regs *regs)
|
||||
break;
|
||||
|
||||
case CALL_INSN_OPCODE:
|
||||
int3_emulate_call(regs, (long)ip + tp->rel32);
|
||||
int3_emulate_call(regs, (long)ip + tp->disp);
|
||||
break;
|
||||
|
||||
case JMP32_INSN_OPCODE:
|
||||
case JMP8_INSN_OPCODE:
|
||||
int3_emulate_jmp(regs, (long)ip + tp->rel32);
|
||||
int3_emulate_jmp(regs, (long)ip + tp->disp);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1118,7 +1121,7 @@ static void text_poke_bp_batch(struct text_poke_loc *tp, unsigned int nr_entries
|
||||
*/
|
||||
for (do_sync = 0, i = 0; i < nr_entries; i++) {
|
||||
u8 old[POKE_MAX_OPCODE_SIZE] = { tp[i].old, };
|
||||
int len = text_opcode_size(tp[i].opcode);
|
||||
int len = tp[i].len;
|
||||
|
||||
if (len - INT3_INSN_SIZE > 0) {
|
||||
memcpy(old + INT3_INSN_SIZE,
|
||||
@@ -1195,20 +1198,36 @@ static void text_poke_loc_init(struct text_poke_loc *tp, void *addr,
|
||||
const void *opcode, size_t len, const void *emulate)
|
||||
{
|
||||
struct insn insn;
|
||||
int ret;
|
||||
int ret, i;
|
||||
|
||||
memcpy((void *)tp->text, opcode, len);
|
||||
if (!emulate)
|
||||
emulate = opcode;
|
||||
|
||||
ret = insn_decode_kernel(&insn, emulate);
|
||||
|
||||
BUG_ON(ret < 0);
|
||||
BUG_ON(len != insn.length);
|
||||
|
||||
tp->rel_addr = addr - (void *)_stext;
|
||||
tp->len = len;
|
||||
tp->opcode = insn.opcode.bytes[0];
|
||||
|
||||
switch (tp->opcode) {
|
||||
case RET_INSN_OPCODE:
|
||||
case JMP32_INSN_OPCODE:
|
||||
case JMP8_INSN_OPCODE:
|
||||
/*
|
||||
* Control flow instructions without implied execution of the
|
||||
* next instruction can be padded with INT3.
|
||||
*/
|
||||
for (i = insn.length; i < len; i++)
|
||||
BUG_ON(tp->text[i] != INT3_INSN_OPCODE);
|
||||
break;
|
||||
|
||||
default:
|
||||
BUG_ON(len != insn.length);
|
||||
};
|
||||
|
||||
|
||||
switch (tp->opcode) {
|
||||
case INT3_INSN_OPCODE:
|
||||
case RET_INSN_OPCODE:
|
||||
@@ -1217,7 +1236,7 @@ static void text_poke_loc_init(struct text_poke_loc *tp, void *addr,
|
||||
case CALL_INSN_OPCODE:
|
||||
case JMP32_INSN_OPCODE:
|
||||
case JMP8_INSN_OPCODE:
|
||||
tp->rel32 = insn.immediate.value;
|
||||
tp->disp = insn.immediate.value;
|
||||
break;
|
||||
|
||||
default: /* assume NOP */
|
||||
@@ -1225,13 +1244,13 @@ static void text_poke_loc_init(struct text_poke_loc *tp, void *addr,
|
||||
case 2: /* NOP2 -- emulate as JMP8+0 */
|
||||
BUG_ON(memcmp(emulate, x86_nops[len], len));
|
||||
tp->opcode = JMP8_INSN_OPCODE;
|
||||
tp->rel32 = 0;
|
||||
tp->disp = 0;
|
||||
break;
|
||||
|
||||
case 5: /* NOP5 -- emulate as JMP32+0 */
|
||||
BUG_ON(memcmp(emulate, x86_nops[len], len));
|
||||
tp->opcode = JMP32_INSN_OPCODE;
|
||||
tp->rel32 = 0;
|
||||
tp->disp = 0;
|
||||
break;
|
||||
|
||||
default: /* unknown instruction */
|
||||
|
||||
@@ -308,7 +308,7 @@ union ftrace_op_code_union {
|
||||
} __attribute__((packed));
|
||||
};
|
||||
|
||||
#define RET_SIZE 1
|
||||
#define RET_SIZE 1 + IS_ENABLED(CONFIG_SLS)
|
||||
|
||||
static unsigned long
|
||||
create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#endif
|
||||
|
||||
SYM_FUNC_START(__fentry__)
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__fentry__)
|
||||
EXPORT_SYMBOL(__fentry__)
|
||||
|
||||
@@ -84,7 +84,7 @@ ftrace_graph_call:
|
||||
|
||||
/* This is weak to keep gas from relaxing the jumps */
|
||||
SYM_INNER_LABEL_ALIGN(ftrace_stub, SYM_L_WEAK)
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(ftrace_caller)
|
||||
|
||||
SYM_CODE_START(ftrace_regs_caller)
|
||||
@@ -177,7 +177,7 @@ SYM_CODE_START(ftrace_graph_caller)
|
||||
popl %edx
|
||||
popl %ecx
|
||||
popl %eax
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(ftrace_graph_caller)
|
||||
|
||||
.globl return_to_handler
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
|
||||
SYM_FUNC_START(__fentry__)
|
||||
retq
|
||||
RET
|
||||
SYM_FUNC_END(__fentry__)
|
||||
EXPORT_SYMBOL(__fentry__)
|
||||
|
||||
@@ -181,11 +181,11 @@ SYM_INNER_LABEL(ftrace_graph_call, SYM_L_GLOBAL)
|
||||
|
||||
/*
|
||||
* This is weak to keep gas from relaxing the jumps.
|
||||
* It is also used to copy the retq for trampolines.
|
||||
* It is also used to copy the RET for trampolines.
|
||||
*/
|
||||
SYM_INNER_LABEL_ALIGN(ftrace_stub, SYM_L_WEAK)
|
||||
UNWIND_HINT_FUNC
|
||||
retq
|
||||
RET
|
||||
SYM_FUNC_END(ftrace_epilogue)
|
||||
|
||||
SYM_FUNC_START(ftrace_regs_caller)
|
||||
@@ -299,7 +299,7 @@ fgraph_trace:
|
||||
#endif
|
||||
|
||||
SYM_INNER_LABEL(ftrace_stub, SYM_L_GLOBAL)
|
||||
retq
|
||||
RET
|
||||
|
||||
trace:
|
||||
/* save_mcount_regs fills in first two parameters */
|
||||
@@ -331,7 +331,7 @@ SYM_FUNC_START(ftrace_graph_caller)
|
||||
|
||||
restore_mcount_regs
|
||||
|
||||
retq
|
||||
RET
|
||||
SYM_FUNC_END(ftrace_graph_caller)
|
||||
|
||||
SYM_FUNC_START(return_to_handler)
|
||||
|
||||
@@ -340,7 +340,7 @@ SYM_FUNC_END(startup_32_smp)
|
||||
__INIT
|
||||
setup_once:
|
||||
andl $0,setup_once_ref /* Once is enough, thanks */
|
||||
ret
|
||||
RET
|
||||
|
||||
SYM_FUNC_START(early_idt_handler_array)
|
||||
# 36(%esp) %eflags
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
SYM_FUNC_START(native_save_fl)
|
||||
pushf
|
||||
pop %_ASM_AX
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(native_save_fl)
|
||||
EXPORT_SYMBOL(native_save_fl)
|
||||
|
||||
@@ -1044,7 +1044,7 @@ asm(
|
||||
RESTORE_REGS_STRING
|
||||
" popfl\n"
|
||||
#endif
|
||||
" ret\n"
|
||||
ASM_RET
|
||||
".size kretprobe_trampoline, .-kretprobe_trampoline\n"
|
||||
);
|
||||
NOKPROBE_SYMBOL(kretprobe_trampoline);
|
||||
|
||||
@@ -41,7 +41,7 @@ extern void _paravirt_nop(void);
|
||||
asm (".pushsection .entry.text, \"ax\"\n"
|
||||
".global _paravirt_nop\n"
|
||||
"_paravirt_nop:\n\t"
|
||||
"ret\n\t"
|
||||
ASM_RET
|
||||
".size _paravirt_nop, . - _paravirt_nop\n\t"
|
||||
".type _paravirt_nop, @function\n\t"
|
||||
".popsection");
|
||||
|
||||
@@ -91,7 +91,7 @@ SYM_CODE_START_NOALIGN(relocate_kernel)
|
||||
movl %edi, %eax
|
||||
addl $(identity_mapped - relocate_kernel), %eax
|
||||
pushl %eax
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(relocate_kernel)
|
||||
|
||||
SYM_CODE_START_LOCAL_NOALIGN(identity_mapped)
|
||||
@@ -159,7 +159,7 @@ SYM_CODE_START_LOCAL_NOALIGN(identity_mapped)
|
||||
xorl %edx, %edx
|
||||
xorl %esi, %esi
|
||||
xorl %ebp, %ebp
|
||||
ret
|
||||
RET
|
||||
1:
|
||||
popl %edx
|
||||
movl CP_PA_SWAP_PAGE(%edi), %esp
|
||||
@@ -190,7 +190,7 @@ SYM_CODE_START_LOCAL_NOALIGN(identity_mapped)
|
||||
movl %edi, %eax
|
||||
addl $(virtual_mapped - relocate_kernel), %eax
|
||||
pushl %eax
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(identity_mapped)
|
||||
|
||||
SYM_CODE_START_LOCAL_NOALIGN(virtual_mapped)
|
||||
@@ -208,7 +208,7 @@ SYM_CODE_START_LOCAL_NOALIGN(virtual_mapped)
|
||||
popl %edi
|
||||
popl %esi
|
||||
popl %ebx
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(virtual_mapped)
|
||||
|
||||
/* Do the copies */
|
||||
@@ -271,7 +271,7 @@ SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
|
||||
popl %edi
|
||||
popl %ebx
|
||||
popl %ebp
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(swap_pages)
|
||||
|
||||
.globl kexec_control_code_size
|
||||
|
||||
@@ -104,7 +104,7 @@ SYM_CODE_START_NOALIGN(relocate_kernel)
|
||||
/* jump to identity mapped page */
|
||||
addq $(identity_mapped - relocate_kernel), %r8
|
||||
pushq %r8
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(relocate_kernel)
|
||||
|
||||
SYM_CODE_START_LOCAL_NOALIGN(identity_mapped)
|
||||
@@ -191,7 +191,7 @@ SYM_CODE_START_LOCAL_NOALIGN(identity_mapped)
|
||||
xorl %r14d, %r14d
|
||||
xorl %r15d, %r15d
|
||||
|
||||
ret
|
||||
RET
|
||||
|
||||
1:
|
||||
popq %rdx
|
||||
@@ -210,7 +210,7 @@ SYM_CODE_START_LOCAL_NOALIGN(identity_mapped)
|
||||
call swap_pages
|
||||
movq $virtual_mapped, %rax
|
||||
pushq %rax
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(identity_mapped)
|
||||
|
||||
SYM_CODE_START_LOCAL_NOALIGN(virtual_mapped)
|
||||
@@ -231,7 +231,7 @@ SYM_CODE_START_LOCAL_NOALIGN(virtual_mapped)
|
||||
popq %r12
|
||||
popq %rbp
|
||||
popq %rbx
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(virtual_mapped)
|
||||
|
||||
/* Do the copies */
|
||||
@@ -288,7 +288,7 @@ SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
|
||||
lea PAGE_SIZE(%rax), %rsi
|
||||
jmp 0b
|
||||
3:
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(swap_pages)
|
||||
|
||||
.globl kexec_control_code_size
|
||||
|
||||
@@ -85,5 +85,5 @@ SYM_FUNC_START(sev_verify_cbit)
|
||||
#endif
|
||||
/* Return page-table pointer */
|
||||
movq %rdi, %rax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(sev_verify_cbit)
|
||||
|
||||
@@ -16,6 +16,8 @@ enum insn_type {
|
||||
*/
|
||||
static const u8 xor5rax[] = { 0x2e, 0x2e, 0x2e, 0x31, 0xc0 };
|
||||
|
||||
static const u8 retinsn[] = { RET_INSN_OPCODE, 0xcc, 0xcc, 0xcc, 0xcc };
|
||||
|
||||
static void __ref __static_call_transform(void *insn, enum insn_type type, void *func)
|
||||
{
|
||||
const void *emulate = NULL;
|
||||
@@ -41,8 +43,7 @@ static void __ref __static_call_transform(void *insn, enum insn_type type, void
|
||||
break;
|
||||
|
||||
case RET:
|
||||
code = text_gen_insn(RET_INSN_OPCODE, insn, func);
|
||||
size = RET_INSN_SIZE;
|
||||
code = &retinsn;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -132,9 +132,9 @@ SYM_FUNC_START_LOCAL(verify_cpu)
|
||||
.Lverify_cpu_no_longmode:
|
||||
popf # Restore caller passed flags
|
||||
movl $1,%eax
|
||||
ret
|
||||
RET
|
||||
.Lverify_cpu_sse_ok:
|
||||
popf # Restore caller passed flags
|
||||
xorl %eax, %eax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(verify_cpu)
|
||||
|
||||
@@ -315,7 +315,7 @@ static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop);
|
||||
__FOP_FUNC(#name)
|
||||
|
||||
#define __FOP_RET(name) \
|
||||
"ret \n\t" \
|
||||
ASM_RET \
|
||||
".size " name ", .-" name "\n\t"
|
||||
|
||||
#define FOP_RET(name) \
|
||||
@@ -427,15 +427,30 @@ static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop);
|
||||
FOP_END
|
||||
|
||||
/* Special case for SETcc - 1 instruction per cc */
|
||||
|
||||
/*
|
||||
* Depending on .config the SETcc functions look like:
|
||||
*
|
||||
* SETcc %al [3 bytes]
|
||||
* RET [1 byte]
|
||||
* INT3 [1 byte; CONFIG_SLS]
|
||||
*
|
||||
* Which gives possible sizes 4 or 5. When rounded up to the
|
||||
* next power-of-two alignment they become 4 or 8.
|
||||
*/
|
||||
#define SETCC_LENGTH (4 + IS_ENABLED(CONFIG_SLS))
|
||||
#define SETCC_ALIGN (4 << IS_ENABLED(CONFIG_SLS))
|
||||
static_assert(SETCC_LENGTH <= SETCC_ALIGN);
|
||||
|
||||
#define FOP_SETCC(op) \
|
||||
".align 4 \n\t" \
|
||||
".align " __stringify(SETCC_ALIGN) " \n\t" \
|
||||
".type " #op ", @function \n\t" \
|
||||
#op ": \n\t" \
|
||||
#op " %al \n\t" \
|
||||
__FOP_RET(#op)
|
||||
|
||||
asm(".pushsection .fixup, \"ax\"\n"
|
||||
"kvm_fastop_exception: xor %esi, %esi; ret\n"
|
||||
"kvm_fastop_exception: xor %esi, %esi; " ASM_RET
|
||||
".popsection");
|
||||
|
||||
FOP_START(setcc)
|
||||
@@ -1053,7 +1068,7 @@ static int em_bsr_c(struct x86_emulate_ctxt *ctxt)
|
||||
static __always_inline u8 test_cc(unsigned int condition, unsigned long flags)
|
||||
{
|
||||
u8 rc;
|
||||
void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf);
|
||||
void (*fop)(void) = (void *)em_setcc + SETCC_ALIGN * (condition & 0xf);
|
||||
|
||||
flags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF;
|
||||
asm("push %[flags]; popf; " CALL_NOSPEC
|
||||
|
||||
@@ -148,7 +148,7 @@ SYM_FUNC_START(__svm_vcpu_run)
|
||||
pop %edi
|
||||
#endif
|
||||
pop %_ASM_BP
|
||||
ret
|
||||
RET
|
||||
|
||||
3: cmpb $0, kvm_rebooting
|
||||
jne 2b
|
||||
@@ -202,7 +202,7 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run)
|
||||
pop %edi
|
||||
#endif
|
||||
pop %_ASM_BP
|
||||
ret
|
||||
RET
|
||||
|
||||
3: cmpb $0, kvm_rebooting
|
||||
jne 2b
|
||||
|
||||
@@ -49,14 +49,14 @@ SYM_FUNC_START_LOCAL(vmx_vmenter)
|
||||
je 2f
|
||||
|
||||
1: vmresume
|
||||
ret
|
||||
RET
|
||||
|
||||
2: vmlaunch
|
||||
ret
|
||||
RET
|
||||
|
||||
3: cmpb $0, kvm_rebooting
|
||||
je 4f
|
||||
ret
|
||||
RET
|
||||
4: ud2
|
||||
|
||||
_ASM_EXTABLE(1b, 3b)
|
||||
@@ -89,7 +89,7 @@ SYM_FUNC_START(vmx_vmexit)
|
||||
pop %_ASM_AX
|
||||
.Lvmexit_skip_rsb:
|
||||
#endif
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(vmx_vmexit)
|
||||
|
||||
/**
|
||||
@@ -228,7 +228,7 @@ SYM_FUNC_START(__vmx_vcpu_run)
|
||||
pop %edi
|
||||
#endif
|
||||
pop %_ASM_BP
|
||||
ret
|
||||
RET
|
||||
|
||||
/* VM-Fail. Out-of-line to avoid a taken Jcc after VM-Exit. */
|
||||
2: mov $1, %eax
|
||||
@@ -293,7 +293,7 @@ SYM_FUNC_START(vmread_error_trampoline)
|
||||
pop %_ASM_AX
|
||||
pop %_ASM_BP
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(vmread_error_trampoline)
|
||||
|
||||
SYM_FUNC_START(vmx_do_interrupt_nmi_irqoff)
|
||||
@@ -326,5 +326,5 @@ SYM_FUNC_START(vmx_do_interrupt_nmi_irqoff)
|
||||
*/
|
||||
mov %_ASM_BP, %_ASM_SP
|
||||
pop %_ASM_BP
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(vmx_do_interrupt_nmi_irqoff)
|
||||
|
||||
@@ -9,81 +9,83 @@
|
||||
#include <asm/alternative.h>
|
||||
|
||||
/* if you want SMP support, implement these with real spinlocks */
|
||||
.macro LOCK reg
|
||||
.macro IRQ_SAVE reg
|
||||
pushfl
|
||||
cli
|
||||
.endm
|
||||
|
||||
.macro UNLOCK reg
|
||||
.macro IRQ_RESTORE reg
|
||||
popfl
|
||||
.endm
|
||||
|
||||
#define BEGIN(op) \
|
||||
#define BEGIN_IRQ_SAVE(op) \
|
||||
.macro endp; \
|
||||
SYM_FUNC_END(atomic64_##op##_386); \
|
||||
.purgem endp; \
|
||||
.endm; \
|
||||
SYM_FUNC_START(atomic64_##op##_386); \
|
||||
LOCK v;
|
||||
IRQ_SAVE v;
|
||||
|
||||
#define ENDP endp
|
||||
|
||||
#define RET \
|
||||
UNLOCK v; \
|
||||
ret
|
||||
|
||||
#define RET_ENDP \
|
||||
RET; \
|
||||
ENDP
|
||||
#define RET_IRQ_RESTORE \
|
||||
IRQ_RESTORE v; \
|
||||
RET
|
||||
|
||||
#define v %ecx
|
||||
BEGIN(read)
|
||||
BEGIN_IRQ_SAVE(read)
|
||||
movl (v), %eax
|
||||
movl 4(v), %edx
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(set)
|
||||
BEGIN_IRQ_SAVE(set)
|
||||
movl %ebx, (v)
|
||||
movl %ecx, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(xchg)
|
||||
BEGIN_IRQ_SAVE(xchg)
|
||||
movl (v), %eax
|
||||
movl 4(v), %edx
|
||||
movl %ebx, (v)
|
||||
movl %ecx, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %ecx
|
||||
BEGIN(add)
|
||||
BEGIN_IRQ_SAVE(add)
|
||||
addl %eax, (v)
|
||||
adcl %edx, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %ecx
|
||||
BEGIN(add_return)
|
||||
BEGIN_IRQ_SAVE(add_return)
|
||||
addl (v), %eax
|
||||
adcl 4(v), %edx
|
||||
movl %eax, (v)
|
||||
movl %edx, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %ecx
|
||||
BEGIN(sub)
|
||||
BEGIN_IRQ_SAVE(sub)
|
||||
subl %eax, (v)
|
||||
sbbl %edx, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %ecx
|
||||
BEGIN(sub_return)
|
||||
BEGIN_IRQ_SAVE(sub_return)
|
||||
negl %edx
|
||||
negl %eax
|
||||
sbbl $0, %edx
|
||||
@@ -91,47 +93,52 @@ BEGIN(sub_return)
|
||||
adcl 4(v), %edx
|
||||
movl %eax, (v)
|
||||
movl %edx, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(inc)
|
||||
BEGIN_IRQ_SAVE(inc)
|
||||
addl $1, (v)
|
||||
adcl $0, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(inc_return)
|
||||
BEGIN_IRQ_SAVE(inc_return)
|
||||
movl (v), %eax
|
||||
movl 4(v), %edx
|
||||
addl $1, %eax
|
||||
adcl $0, %edx
|
||||
movl %eax, (v)
|
||||
movl %edx, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(dec)
|
||||
BEGIN_IRQ_SAVE(dec)
|
||||
subl $1, (v)
|
||||
sbbl $0, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(dec_return)
|
||||
BEGIN_IRQ_SAVE(dec_return)
|
||||
movl (v), %eax
|
||||
movl 4(v), %edx
|
||||
subl $1, %eax
|
||||
sbbl $0, %edx
|
||||
movl %eax, (v)
|
||||
movl %edx, 4(v)
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(add_unless)
|
||||
BEGIN_IRQ_SAVE(add_unless)
|
||||
addl %eax, %ecx
|
||||
adcl %edx, %edi
|
||||
addl (v), %eax
|
||||
@@ -143,7 +150,7 @@ BEGIN(add_unless)
|
||||
movl %edx, 4(v)
|
||||
movl $1, %eax
|
||||
2:
|
||||
RET
|
||||
RET_IRQ_RESTORE
|
||||
3:
|
||||
cmpl %edx, %edi
|
||||
jne 1b
|
||||
@@ -153,7 +160,7 @@ ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(inc_not_zero)
|
||||
BEGIN_IRQ_SAVE(inc_not_zero)
|
||||
movl (v), %eax
|
||||
movl 4(v), %edx
|
||||
testl %eax, %eax
|
||||
@@ -165,7 +172,7 @@ BEGIN(inc_not_zero)
|
||||
movl %edx, 4(v)
|
||||
movl $1, %eax
|
||||
2:
|
||||
RET
|
||||
RET_IRQ_RESTORE
|
||||
3:
|
||||
testl %edx, %edx
|
||||
jne 1b
|
||||
@@ -174,7 +181,7 @@ ENDP
|
||||
#undef v
|
||||
|
||||
#define v %esi
|
||||
BEGIN(dec_if_positive)
|
||||
BEGIN_IRQ_SAVE(dec_if_positive)
|
||||
movl (v), %eax
|
||||
movl 4(v), %edx
|
||||
subl $1, %eax
|
||||
@@ -183,5 +190,6 @@ BEGIN(dec_if_positive)
|
||||
movl %eax, (v)
|
||||
movl %edx, 4(v)
|
||||
1:
|
||||
RET_ENDP
|
||||
RET_IRQ_RESTORE
|
||||
ENDP
|
||||
#undef v
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
SYM_FUNC_START(atomic64_read_cx8)
|
||||
read64 %ecx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(atomic64_read_cx8)
|
||||
|
||||
SYM_FUNC_START(atomic64_set_cx8)
|
||||
@@ -28,7 +28,7 @@ SYM_FUNC_START(atomic64_set_cx8)
|
||||
cmpxchg8b (%esi)
|
||||
jne 1b
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(atomic64_set_cx8)
|
||||
|
||||
SYM_FUNC_START(atomic64_xchg_cx8)
|
||||
@@ -37,7 +37,7 @@ SYM_FUNC_START(atomic64_xchg_cx8)
|
||||
cmpxchg8b (%esi)
|
||||
jne 1b
|
||||
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(atomic64_xchg_cx8)
|
||||
|
||||
.macro addsub_return func ins insc
|
||||
@@ -68,7 +68,7 @@ SYM_FUNC_START(atomic64_\func\()_return_cx8)
|
||||
popl %esi
|
||||
popl %ebx
|
||||
popl %ebp
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(atomic64_\func\()_return_cx8)
|
||||
.endm
|
||||
|
||||
@@ -93,7 +93,7 @@ SYM_FUNC_START(atomic64_\func\()_return_cx8)
|
||||
movl %ebx, %eax
|
||||
movl %ecx, %edx
|
||||
popl %ebx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(atomic64_\func\()_return_cx8)
|
||||
.endm
|
||||
|
||||
@@ -118,7 +118,7 @@ SYM_FUNC_START(atomic64_dec_if_positive_cx8)
|
||||
movl %ebx, %eax
|
||||
movl %ecx, %edx
|
||||
popl %ebx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(atomic64_dec_if_positive_cx8)
|
||||
|
||||
SYM_FUNC_START(atomic64_add_unless_cx8)
|
||||
@@ -149,7 +149,7 @@ SYM_FUNC_START(atomic64_add_unless_cx8)
|
||||
addl $8, %esp
|
||||
popl %ebx
|
||||
popl %ebp
|
||||
ret
|
||||
RET
|
||||
4:
|
||||
cmpl %edx, 4(%esp)
|
||||
jne 2b
|
||||
@@ -176,5 +176,5 @@ SYM_FUNC_START(atomic64_inc_not_zero_cx8)
|
||||
movl $1, %eax
|
||||
3:
|
||||
popl %ebx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(atomic64_inc_not_zero_cx8)
|
||||
|
||||
@@ -127,7 +127,7 @@ SYM_FUNC_START(csum_partial)
|
||||
8:
|
||||
popl %ebx
|
||||
popl %esi
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(csum_partial)
|
||||
|
||||
#else
|
||||
@@ -245,7 +245,7 @@ SYM_FUNC_START(csum_partial)
|
||||
90:
|
||||
popl %ebx
|
||||
popl %esi
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(csum_partial)
|
||||
|
||||
#endif
|
||||
@@ -371,7 +371,7 @@ EXC( movb %cl, (%edi) )
|
||||
popl %esi
|
||||
popl %edi
|
||||
popl %ecx # equivalent to addl $4,%esp
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(csum_partial_copy_generic)
|
||||
|
||||
#else
|
||||
@@ -447,7 +447,7 @@ EXC( movb %dl, (%edi) )
|
||||
popl %esi
|
||||
popl %edi
|
||||
popl %ebx
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(csum_partial_copy_generic)
|
||||
|
||||
#undef ROUND
|
||||
|
||||
@@ -17,7 +17,7 @@ SYM_FUNC_START(clear_page_rep)
|
||||
movl $4096/8,%ecx
|
||||
xorl %eax,%eax
|
||||
rep stosq
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(clear_page_rep)
|
||||
EXPORT_SYMBOL_GPL(clear_page_rep)
|
||||
|
||||
@@ -39,7 +39,7 @@ SYM_FUNC_START(clear_page_orig)
|
||||
leaq 64(%rdi),%rdi
|
||||
jnz .Lloop
|
||||
nop
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(clear_page_orig)
|
||||
EXPORT_SYMBOL_GPL(clear_page_orig)
|
||||
|
||||
@@ -47,6 +47,6 @@ SYM_FUNC_START(clear_page_erms)
|
||||
movl $4096,%ecx
|
||||
xorl %eax,%eax
|
||||
rep stosb
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(clear_page_erms)
|
||||
EXPORT_SYMBOL_GPL(clear_page_erms)
|
||||
|
||||
@@ -37,11 +37,11 @@ SYM_FUNC_START(this_cpu_cmpxchg16b_emu)
|
||||
|
||||
popfq
|
||||
mov $1, %al
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lnot_same:
|
||||
popfq
|
||||
xor %al,%al
|
||||
ret
|
||||
RET
|
||||
|
||||
SYM_FUNC_END(this_cpu_cmpxchg16b_emu)
|
||||
|
||||
@@ -32,7 +32,7 @@ SYM_FUNC_START(cmpxchg8b_emu)
|
||||
movl %ecx, 4(%esi)
|
||||
|
||||
popfl
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lnot_same:
|
||||
movl (%esi), %eax
|
||||
@@ -40,7 +40,7 @@ SYM_FUNC_START(cmpxchg8b_emu)
|
||||
movl 4(%esi), %edx
|
||||
|
||||
popfl
|
||||
ret
|
||||
RET
|
||||
|
||||
SYM_FUNC_END(cmpxchg8b_emu)
|
||||
EXPORT_SYMBOL(cmpxchg8b_emu)
|
||||
|
||||
@@ -77,7 +77,7 @@ SYM_FUNC_START(copy_mc_fragile)
|
||||
.L_done_memcpy_trap:
|
||||
xorl %eax, %eax
|
||||
.L_done:
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(copy_mc_fragile)
|
||||
|
||||
.section .fixup, "ax"
|
||||
@@ -132,7 +132,7 @@ SYM_FUNC_START(copy_mc_enhanced_fast_string)
|
||||
rep movsb
|
||||
/* Copy successful. Return zero */
|
||||
xorl %eax, %eax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(copy_mc_enhanced_fast_string)
|
||||
|
||||
.section .fixup, "ax"
|
||||
@@ -145,7 +145,7 @@ SYM_FUNC_END(copy_mc_enhanced_fast_string)
|
||||
* user-copy routines.
|
||||
*/
|
||||
movq %rcx, %rax
|
||||
ret
|
||||
RET
|
||||
|
||||
.previous
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ SYM_FUNC_START(copy_page)
|
||||
ALTERNATIVE "jmp copy_page_regs", "", X86_FEATURE_REP_GOOD
|
||||
movl $4096/8, %ecx
|
||||
rep movsq
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(copy_page)
|
||||
EXPORT_SYMBOL(copy_page)
|
||||
|
||||
@@ -85,5 +85,5 @@ SYM_FUNC_START_LOCAL(copy_page_regs)
|
||||
movq (%rsp), %rbx
|
||||
movq 1*8(%rsp), %r12
|
||||
addq $2*8, %rsp
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(copy_page_regs)
|
||||
|
||||
@@ -105,7 +105,7 @@ SYM_FUNC_START(copy_user_generic_unrolled)
|
||||
jnz 21b
|
||||
23: xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
|
||||
.section .fixup,"ax"
|
||||
30: shll $6,%ecx
|
||||
@@ -173,7 +173,7 @@ SYM_FUNC_START(copy_user_generic_string)
|
||||
movsb
|
||||
xorl %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
|
||||
.section .fixup,"ax"
|
||||
11: leal (%rdx,%rcx,8),%ecx
|
||||
@@ -207,7 +207,7 @@ SYM_FUNC_START(copy_user_enhanced_fast_string)
|
||||
movsb
|
||||
xorl %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
|
||||
.section .fixup,"ax"
|
||||
12: movl %ecx,%edx /* ecx is zerorest also */
|
||||
@@ -239,7 +239,7 @@ SYM_CODE_START_LOCAL(.Lcopy_user_handle_tail)
|
||||
1: rep movsb
|
||||
2: mov %ecx,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
|
||||
/*
|
||||
* Return zero to pretend that this copy succeeded. This
|
||||
@@ -250,7 +250,7 @@ SYM_CODE_START_LOCAL(.Lcopy_user_handle_tail)
|
||||
*/
|
||||
3: xorl %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
|
||||
_ASM_EXTABLE_CPY(1b, 2b)
|
||||
SYM_CODE_END(.Lcopy_user_handle_tail)
|
||||
@@ -361,7 +361,7 @@ SYM_FUNC_START(__copy_user_nocache)
|
||||
xorl %eax,%eax
|
||||
ASM_CLAC
|
||||
sfence
|
||||
ret
|
||||
RET
|
||||
|
||||
.section .fixup,"ax"
|
||||
.L_fixup_4x8b_copy:
|
||||
|
||||
@@ -201,7 +201,7 @@ SYM_FUNC_START(csum_partial_copy_generic)
|
||||
movq 3*8(%rsp), %r13
|
||||
movq 4*8(%rsp), %r15
|
||||
addq $5*8, %rsp
|
||||
ret
|
||||
RET
|
||||
.Lshort:
|
||||
movl %ecx, %r10d
|
||||
jmp .L1
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/error-injection.h>
|
||||
#include <linux/kprobes.h>
|
||||
|
||||
@@ -10,7 +11,7 @@ asm(
|
||||
".type just_return_func, @function\n"
|
||||
".globl just_return_func\n"
|
||||
"just_return_func:\n"
|
||||
" ret\n"
|
||||
ASM_RET
|
||||
".size just_return_func, .-just_return_func\n"
|
||||
);
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ SYM_FUNC_START(__get_user_1)
|
||||
1: movzbl (%_ASM_AX),%edx
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__get_user_1)
|
||||
EXPORT_SYMBOL(__get_user_1)
|
||||
|
||||
@@ -71,7 +71,7 @@ SYM_FUNC_START(__get_user_2)
|
||||
2: movzwl (%_ASM_AX),%edx
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__get_user_2)
|
||||
EXPORT_SYMBOL(__get_user_2)
|
||||
|
||||
@@ -85,7 +85,7 @@ SYM_FUNC_START(__get_user_4)
|
||||
3: movl (%_ASM_AX),%edx
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__get_user_4)
|
||||
EXPORT_SYMBOL(__get_user_4)
|
||||
|
||||
@@ -100,7 +100,7 @@ SYM_FUNC_START(__get_user_8)
|
||||
4: movq (%_ASM_AX),%rdx
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
#else
|
||||
LOAD_TASK_SIZE_MINUS_N(7)
|
||||
cmp %_ASM_DX,%_ASM_AX
|
||||
@@ -112,7 +112,7 @@ SYM_FUNC_START(__get_user_8)
|
||||
5: movl 4(%_ASM_AX),%ecx
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
#endif
|
||||
SYM_FUNC_END(__get_user_8)
|
||||
EXPORT_SYMBOL(__get_user_8)
|
||||
@@ -124,7 +124,7 @@ SYM_FUNC_START(__get_user_nocheck_1)
|
||||
6: movzbl (%_ASM_AX),%edx
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__get_user_nocheck_1)
|
||||
EXPORT_SYMBOL(__get_user_nocheck_1)
|
||||
|
||||
@@ -134,7 +134,7 @@ SYM_FUNC_START(__get_user_nocheck_2)
|
||||
7: movzwl (%_ASM_AX),%edx
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__get_user_nocheck_2)
|
||||
EXPORT_SYMBOL(__get_user_nocheck_2)
|
||||
|
||||
@@ -144,7 +144,7 @@ SYM_FUNC_START(__get_user_nocheck_4)
|
||||
8: movl (%_ASM_AX),%edx
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__get_user_nocheck_4)
|
||||
EXPORT_SYMBOL(__get_user_nocheck_4)
|
||||
|
||||
@@ -159,7 +159,7 @@ SYM_FUNC_START(__get_user_nocheck_8)
|
||||
#endif
|
||||
xor %eax,%eax
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__get_user_nocheck_8)
|
||||
EXPORT_SYMBOL(__get_user_nocheck_8)
|
||||
|
||||
@@ -169,7 +169,7 @@ SYM_CODE_START_LOCAL(.Lbad_get_user_clac)
|
||||
bad_get_user:
|
||||
xor %edx,%edx
|
||||
mov $(-EFAULT),%_ASM_AX
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(.Lbad_get_user_clac)
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
@@ -179,7 +179,7 @@ bad_get_user_8:
|
||||
xor %edx,%edx
|
||||
xor %ecx,%ecx
|
||||
mov $(-EFAULT),%_ASM_AX
|
||||
ret
|
||||
RET
|
||||
SYM_CODE_END(.Lbad_get_user_8_clac)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ SYM_FUNC_START(__sw_hweight32)
|
||||
imull $0x01010101, %eax, %eax # w_tmp *= 0x01010101
|
||||
shrl $24, %eax # w = w_tmp >> 24
|
||||
__ASM_SIZE(pop,) %__ASM_REG(dx)
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__sw_hweight32)
|
||||
EXPORT_SYMBOL(__sw_hweight32)
|
||||
|
||||
@@ -65,7 +65,7 @@ SYM_FUNC_START(__sw_hweight64)
|
||||
|
||||
popq %rdx
|
||||
popq %rdi
|
||||
ret
|
||||
RET
|
||||
#else /* CONFIG_X86_32 */
|
||||
/* We're getting an u64 arg in (%eax,%edx): unsigned long hweight64(__u64 w) */
|
||||
pushl %ecx
|
||||
@@ -77,7 +77,7 @@ SYM_FUNC_START(__sw_hweight64)
|
||||
addl %ecx, %eax # result
|
||||
|
||||
popl %ecx
|
||||
ret
|
||||
RET
|
||||
#endif
|
||||
SYM_FUNC_END(__sw_hweight64)
|
||||
EXPORT_SYMBOL(__sw_hweight64)
|
||||
|
||||
@@ -11,5 +11,5 @@
|
||||
SYM_FUNC_START(__iowrite32_copy)
|
||||
movl %edx,%ecx
|
||||
rep movsd
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__iowrite32_copy)
|
||||
|
||||
@@ -39,7 +39,7 @@ SYM_FUNC_START_WEAK(memcpy)
|
||||
rep movsq
|
||||
movl %edx, %ecx
|
||||
rep movsb
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(memcpy)
|
||||
SYM_FUNC_END_ALIAS(__memcpy)
|
||||
EXPORT_SYMBOL(memcpy)
|
||||
@@ -53,7 +53,7 @@ SYM_FUNC_START_LOCAL(memcpy_erms)
|
||||
movq %rdi, %rax
|
||||
movq %rdx, %rcx
|
||||
rep movsb
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(memcpy_erms)
|
||||
|
||||
SYM_FUNC_START_LOCAL(memcpy_orig)
|
||||
@@ -137,7 +137,7 @@ SYM_FUNC_START_LOCAL(memcpy_orig)
|
||||
movq %r9, 1*8(%rdi)
|
||||
movq %r10, -2*8(%rdi, %rdx)
|
||||
movq %r11, -1*8(%rdi, %rdx)
|
||||
retq
|
||||
RET
|
||||
.p2align 4
|
||||
.Lless_16bytes:
|
||||
cmpl $8, %edx
|
||||
@@ -149,7 +149,7 @@ SYM_FUNC_START_LOCAL(memcpy_orig)
|
||||
movq -1*8(%rsi, %rdx), %r9
|
||||
movq %r8, 0*8(%rdi)
|
||||
movq %r9, -1*8(%rdi, %rdx)
|
||||
retq
|
||||
RET
|
||||
.p2align 4
|
||||
.Lless_8bytes:
|
||||
cmpl $4, %edx
|
||||
@@ -162,7 +162,7 @@ SYM_FUNC_START_LOCAL(memcpy_orig)
|
||||
movl -4(%rsi, %rdx), %r8d
|
||||
movl %ecx, (%rdi)
|
||||
movl %r8d, -4(%rdi, %rdx)
|
||||
retq
|
||||
RET
|
||||
.p2align 4
|
||||
.Lless_3bytes:
|
||||
subl $1, %edx
|
||||
@@ -180,7 +180,7 @@ SYM_FUNC_START_LOCAL(memcpy_orig)
|
||||
movb %cl, (%rdi)
|
||||
|
||||
.Lend:
|
||||
retq
|
||||
RET
|
||||
SYM_FUNC_END(memcpy_orig)
|
||||
|
||||
.popsection
|
||||
|
||||
@@ -40,7 +40,7 @@ SYM_FUNC_START(__memmove)
|
||||
/* FSRM implies ERMS => no length checks, do the copy directly */
|
||||
.Lmemmove_begin_forward:
|
||||
ALTERNATIVE "cmp $0x20, %rdx; jb 1f", "", X86_FEATURE_FSRM
|
||||
ALTERNATIVE "", "movq %rdx, %rcx; rep movsb; retq", X86_FEATURE_ERMS
|
||||
ALTERNATIVE "", __stringify(movq %rdx, %rcx; rep movsb; RET), X86_FEATURE_ERMS
|
||||
|
||||
/*
|
||||
* movsq instruction have many startup latency
|
||||
@@ -205,7 +205,7 @@ SYM_FUNC_START(__memmove)
|
||||
movb (%rsi), %r11b
|
||||
movb %r11b, (%rdi)
|
||||
13:
|
||||
retq
|
||||
RET
|
||||
SYM_FUNC_END(__memmove)
|
||||
SYM_FUNC_END_ALIAS(memmove)
|
||||
EXPORT_SYMBOL(__memmove)
|
||||
|
||||
@@ -40,7 +40,7 @@ SYM_FUNC_START(__memset)
|
||||
movl %edx,%ecx
|
||||
rep stosb
|
||||
movq %r9,%rax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__memset)
|
||||
SYM_FUNC_END_ALIAS(memset)
|
||||
EXPORT_SYMBOL(memset)
|
||||
@@ -63,7 +63,7 @@ SYM_FUNC_START_LOCAL(memset_erms)
|
||||
movq %rdx,%rcx
|
||||
rep stosb
|
||||
movq %r9,%rax
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(memset_erms)
|
||||
|
||||
SYM_FUNC_START_LOCAL(memset_orig)
|
||||
@@ -125,7 +125,7 @@ SYM_FUNC_START_LOCAL(memset_orig)
|
||||
|
||||
.Lende:
|
||||
movq %r10,%rax
|
||||
ret
|
||||
RET
|
||||
|
||||
.Lbad_alignment:
|
||||
cmpq $7,%rdx
|
||||
|
||||
@@ -35,7 +35,7 @@ SYM_FUNC_START(\op\()_safe_regs)
|
||||
movl %edi, 28(%r10)
|
||||
popq %r12
|
||||
popq %rbx
|
||||
ret
|
||||
RET
|
||||
3:
|
||||
movl $-EIO, %r11d
|
||||
jmp 2b
|
||||
@@ -77,7 +77,7 @@ SYM_FUNC_START(\op\()_safe_regs)
|
||||
popl %esi
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
ret
|
||||
RET
|
||||
3:
|
||||
movl $-EIO, 4(%esp)
|
||||
jmp 2b
|
||||
|
||||
@@ -52,7 +52,7 @@ SYM_INNER_LABEL(__put_user_nocheck_1, SYM_L_GLOBAL)
|
||||
1: movb %al,(%_ASM_CX)
|
||||
xor %ecx,%ecx
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__put_user_1)
|
||||
EXPORT_SYMBOL(__put_user_1)
|
||||
EXPORT_SYMBOL(__put_user_nocheck_1)
|
||||
@@ -66,7 +66,7 @@ SYM_INNER_LABEL(__put_user_nocheck_2, SYM_L_GLOBAL)
|
||||
2: movw %ax,(%_ASM_CX)
|
||||
xor %ecx,%ecx
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__put_user_2)
|
||||
EXPORT_SYMBOL(__put_user_2)
|
||||
EXPORT_SYMBOL(__put_user_nocheck_2)
|
||||
@@ -80,7 +80,7 @@ SYM_INNER_LABEL(__put_user_nocheck_4, SYM_L_GLOBAL)
|
||||
3: movl %eax,(%_ASM_CX)
|
||||
xor %ecx,%ecx
|
||||
ASM_CLAC
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(__put_user_4)
|
||||
EXPORT_SYMBOL(__put_user_4)
|
||||
EXPORT_SYMBOL(__put_user_nocheck_4)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
.Ldo_rop_\@:
|
||||
mov %\reg, (%_ASM_SP)
|
||||
UNWIND_HINT_FUNC
|
||||
ret
|
||||
RET
|
||||
.endm
|
||||
|
||||
.macro THUNK reg
|
||||
@@ -34,7 +34,7 @@ SYM_FUNC_START(__x86_indirect_thunk_\reg)
|
||||
|
||||
ALTERNATIVE_2 __stringify(ANNOTATE_RETPOLINE_SAFE; jmp *%\reg), \
|
||||
__stringify(RETPOLINE \reg), X86_FEATURE_RETPOLINE, \
|
||||
__stringify(lfence; ANNOTATE_RETPOLINE_SAFE; jmp *%\reg), X86_FEATURE_RETPOLINE_LFENCE
|
||||
__stringify(lfence; ANNOTATE_RETPOLINE_SAFE; jmp *%\reg; int3), X86_FEATURE_RETPOLINE_LFENCE
|
||||
|
||||
SYM_FUNC_END(__x86_indirect_thunk_\reg)
|
||||
|
||||
|
||||
@@ -341,7 +341,7 @@ L_exit:
|
||||
popl %esi
|
||||
|
||||
leave
|
||||
ret
|
||||
RET
|
||||
|
||||
|
||||
#ifdef PARANOID
|
||||
|
||||
@@ -44,5 +44,5 @@ SYM_FUNC_START(FPU_div_small)
|
||||
popl %esi
|
||||
|
||||
leave
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(FPU_div_small)
|
||||
|
||||
@@ -62,7 +62,7 @@ SYM_FUNC_START(mul32_Xsig)
|
||||
|
||||
popl %esi
|
||||
leave
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(mul32_Xsig)
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ SYM_FUNC_START(mul64_Xsig)
|
||||
|
||||
popl %esi
|
||||
leave
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(mul64_Xsig)
|
||||
|
||||
|
||||
@@ -175,5 +175,5 @@ SYM_FUNC_START(mul_Xsig_Xsig)
|
||||
|
||||
popl %esi
|
||||
leave
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(mul_Xsig_Xsig)
|
||||
|
||||
@@ -133,5 +133,5 @@ L_accum_done:
|
||||
popl %edi
|
||||
popl %esi
|
||||
leave
|
||||
ret
|
||||
RET
|
||||
SYM_FUNC_END(polynomial_Xsig)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user