lkml.org 
[lkml]   [2022]   [Aug]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] init/Kconfig: fix CC_HAS_ASM_GOTO_TIED_OUTPUT test with dash
    Date
    From: Alexandre Belloni <alexandre.belloni@bootlin.com>

    When using dash as /bin/sh, the CC_HAS_ASM_GOTO_TIED_OUTPUT test fails
    with a syntax error which is not the one we are looking for:

    <stdin>: In function ‘foo’:
    <stdin>:1:29: warning: missing terminating " character
    <stdin>:1:29: error: missing terminating " character
    <stdin>:2:5: error: expected ‘:’ before ‘+’ token
    <stdin>:2:7: warning: missing terminating " character
    <stdin>:2:7: error: missing terminating " character
    <stdin>:2:5: error: expected declaration or statement at end of input

    Move all the CC_HAS_ASM_GOTO tests to scripts/gcc-goto.sh to solve the
    escaping issues.

    Fixes: 1aa0e8b144b6 ("Kconfig: Add option for asm goto w/ tied outputs to workaround clang-13 bug")
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    ---
    init/Kconfig | 6 +++---
    scripts/gcc-goto.sh | 31 +++++++++++++++++++++++++++++++
    2 files changed, 34 insertions(+), 3 deletions(-)

    diff --git a/init/Kconfig b/init/Kconfig
    index c984afc489de..9903a11cfe7d 100644
    --- a/init/Kconfig
    +++ b/init/Kconfig
    @@ -71,16 +71,16 @@ config CC_CAN_LINK_STATIC
    default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m32-flag) -static)

    config CC_HAS_ASM_GOTO
    - def_bool $(success,$(srctree)/scripts/gcc-goto.sh $(CC))
    + def_bool $(success,$(srctree)/scripts/gcc-goto.sh goto $(CC))

    config CC_HAS_ASM_GOTO_OUTPUT
    depends on CC_HAS_ASM_GOTO
    - def_bool $(success,echo 'int foo(int x) { asm goto ("": "=r"(x) ::: bar); return x; bar: return 0; }' | $(CC) -x c - -c -o /dev/null)
    + def_bool $(success,$(srctree)/scripts/gcc-goto.sh goto_output $(CC))

    config CC_HAS_ASM_GOTO_TIED_OUTPUT
    depends on CC_HAS_ASM_GOTO_OUTPUT
    # Detect buggy gcc and clang, fixed in gcc-11 clang-14.
    - def_bool $(success,echo 'int foo(int *x) { asm goto (".long (%l[bar]) - .\n": "+m"(*x) ::: bar); return *x; bar: return 0; }' | $CC -x c - -c -o /dev/null)
    + def_bool $(success,$(srctree)/scripts/gcc-goto.sh goto_tied_output $(CC))

    config TOOLS_SUPPORT_RELR
    def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh)
    diff --git a/scripts/gcc-goto.sh b/scripts/gcc-goto.sh
    index 8b980fb2270a..aa9498b74df8 100755
    --- a/scripts/gcc-goto.sh
    +++ b/scripts/gcc-goto.sh
    @@ -3,6 +3,11 @@
    # Test for gcc 'asm goto' support
    # Copyright (C) 2010, Jason Baron <jbaron@redhat.com>

    +TEST=$1
    +shift
    +
    +case $TEST in
    + "goto")
    cat << "END" | $@ -x c - -fno-PIE -c -o /dev/null
    int main(void)
    {
    @@ -20,3 +25,29 @@ entry:
    return 0;
    }
    END
    + ;;
    +
    + "goto_output")
    +cat << "END" | $@ -x c - -c -o /dev/null
    +int foo(int x) {
    + asm goto ("": "=r"(x) ::: bar);
    + return x;
    + bar: return 0;
    +}
    +END
    + ;;
    +
    + "goto_tied_output")
    +cat << "END" | $@ -x c - -c -o /dev/null
    +int foo(int *x) {
    + asm goto (".long (%l[bar]) - .\n": "+m"(*x) ::: bar);
    + return *x;
    + bar: return 0;
    +}
    +END
    + ;;
    +
    + *)
    + exit -1
    + ;;
    +esac
    --
    2.37.1
    \
     
     \ /
      Last update: 2022-08-04 21:04    [W:3.035 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site