Re: [PATCH] init/Kconfig: fix CC_HAS_ASM_GOTO_TIED_OUTPUT test with dash
From: Randy Dunlap
Date: Wed Aug 17 2022 - 19:52:38 EST
On 8/17/22 16:46, Nick Desaulniers wrote:
> On Thu, Aug 4, 2022 at 12:03 PM <alexandre.belloni@xxxxxxxxxxx> wrote:
>>
>> From: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>
>>
>> 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:
>
> Thanks for the patch, though I think I'd rather see `/bin/bash`
> hardcoded. Bash is a non-optional requirement as of
> commit da4288b95baa ("scripts/check-local-export: avoid 'wait $!' for
> process substitution")
> scripts/ is kind of a mess...
>
Well, once upon a time, we took patches to remove bash-isms (convert to
standard shell)...
No longer, AFAICT.
>>
>> <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@xxxxxxxxxxx>
>> ---
>> 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@xxxxxxxxxx>
>>
>> +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
>>
>
>
--
~Randy