lkml.org 
[lkml]   [2020]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    SubjectRe: [GIT PULL] Crypto Fixes for 5.6
    Funny, I always thought it was like that "for a good reason" that I
    just didn't know about -- assumedly something having to do with a
    difference between config time and compile time. I agree with you that
    everything gets so much cleaner if we can do this in Kconfig. I've put
    together the patch pasted below, which appears to work well. I'll work
    on replumbing the other stuff and will send a series off to the list
    hopefully not before too long.

    From 12375354ddb4c8b1c75663312a9b6d9b9bc5f520 Mon Sep 17 00:00:00 2001
    From: "Jason A. Donenfeld" <Jason@zx2c4.com>
    Date: Fri, 20 Mar 2020 17:49:36 -0600
    Subject: [PATCH] x86: probe assembler instead of kconfig instead of makefile

    Doing this probing inside of the Makefiles means we have a maze of
    ifdefs inside the source code and child Makefiles that need to make
    proper decisions on this too. Instead, we do it at Kconfig time, like
    many other compiler and assembler options, which allows us to set up the
    dependencies normally for full compilation units.

    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    ---
    arch/x86/Kconfig | 2 ++
    arch/x86/Kconfig.assembler | 33 +++++++++++++++++++++++++++++++++
    arch/x86/Makefile | 22 ----------------------
    3 files changed, 35 insertions(+), 22 deletions(-)
    create mode 100644 arch/x86/Kconfig.assembler

    diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
    index beea77046f9b..707673227837 100644
    --- a/arch/x86/Kconfig
    +++ b/arch/x86/Kconfig
    @@ -2935,3 +2935,5 @@ config HAVE_ATOMIC_IOMAP
    source "drivers/firmware/Kconfig"

    source "arch/x86/kvm/Kconfig"
    +
    +source "arch/x86/Kconfig.assembler"
    diff --git a/arch/x86/Kconfig.assembler b/arch/x86/Kconfig.assembler
    new file mode 100644
    index 000000000000..809adcf6f7c3
    --- /dev/null
    +++ b/arch/x86/Kconfig.assembler
    @@ -0,0 +1,33 @@
    +# SPDX-License-Identifier: GPL-2.0
    +# Copyright (C) 2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
    +
    +config AS_CFI
    + def_bool $(as-instr,.cfi_startproc\n.cfi_rel_offset
    rsp$(comma)0\n.cfi_endproc) if 64BIT
    + def_bool $(as-instr,.cfi_startproc\n.cfi_rel_offset
    esp$(comma)0\n.cfi_endproc) if !64BIT
    +
    +config AS_CFI_SIGNAL_FRAME
    + def_bool $(as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc)
    +
    +config AS_CFI_SECTIONS
    + def_bool $(as-instr,.cfi_sections .debug_frame)
    +
    +config AS_SSSE3
    + def_bool $(as-instr,pshufb %xmm0$(comma)%xmm0)
    +
    +config AS_AVX
    + def_bool $(as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2)
    +
    +config AS_AVX2
    + def_bool $(as-instr,vpbroadcastb %xmm0$(comma)%ymm1)
    +
    +config AS_AVX512
    + def_bool $(as-instr,vpmovm2b %k1$(comma)%zmm5)
    +
    +config AS_SHA1_NI
    + def_bool $(as-instr,sha1msg1 %xmm0$(comma)%xmm1)
    +
    +config AS_SHA256_NI
    + def_bool $(as-instr,sha256msg1 %xmm0$(comma)%xmm1)
    +
    +config AS_ADX
    + def_bool $(as-instr,adox %r10$(comma)%r10)
    diff --git a/arch/x86/Makefile b/arch/x86/Makefile
    index 513a55562d75..b65ec63c7db7 100644
    --- a/arch/x86/Makefile
    +++ b/arch/x86/Makefile
    @@ -177,28 +177,6 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1)
    KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,)
    endif

    -# Stackpointer is addressed different for 32 bit and 64 bit x86
    -sp-$(CONFIG_X86_32) := esp
    -sp-$(CONFIG_X86_64) := rsp
    -
    -# do binutils support CFI?
    -cfi := $(call as-instr,.cfi_startproc\n.cfi_rel_offset
    $(sp-y)$(comma)0\n.cfi_endproc,-DCONFIG_AS_CFI=1)
    -# is .cfi_signal_frame supported too?
    -cfi-sigframe := $(call
    as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1)
    -cfi-sections := $(call as-instr,.cfi_sections
    .debug_frame,-DCONFIG_AS_CFI_SECTIONS=1)
    -
    -# does binutils support specific instructions?
    -asinstr += $(call as-instr,pshufb %xmm0$(comma)%xmm0,-DCONFIG_AS_SSSE3=1)
    -avx_instr := $(call as-instr,vxorps
    %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1)
    -avx2_instr :=$(call as-instr,vpbroadcastb
    %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1)
    -avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1)
    -sha1_ni_instr :=$(call as-instr,sha1msg1
    %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1)
    -sha256_ni_instr :=$(call as-instr,sha256msg1
    %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1)
    -adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1)
    -
    -KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr)
    $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr)
    $(sha256_ni_instr) $(adx_instr)
    -KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr)
    $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr)
    $(sha256_ni_instr) $(adx_instr)
    -
    KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)

    #
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-03-21 00:55    [W:3.738 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site