Re: clang: error: unknown argument '-static-libasan'; did you mean '-static-libsan'?

From: Ryan Roberts
Date: Tue Apr 16 2024 - 10:55:36 EST


On 16/04/2024 15:42, Arnd Bergmann wrote:
> On Tue, Apr 16, 2024, at 16:33, Ryan Roberts wrote:
>> On 16/04/2024 08:42, kernel test robot wrote:
>>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
>>> head: 7efd0a74039fb6b584be2cb91c1d0ef0bd796ee1
>>> commit: c652df8a4a9d7853fa1100b244024fd6f1a9c18a selftests: link libasan statically for tests with -fsanitize=address
>>> compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
>>>
>>> If you fix the issue in a separate patch/commit (i.e. not just a new version of
>>> the same patch/commit), kindly add following tags
>>> | Reported-by: kernel test robot <yujie.liu@xxxxxxxxx>
>>> | Closes: https://lore.kernel.org/r/202404141807.LgsqXPY5-lkp@xxxxxxxxx/
>>>
>>> All errors (new ones prefixed by >>):
>>>
>>> # tools/testing/selftests/fchmodat2$ make CC=clang
>>> clang -Wall -O2 -g -fsanitize=address -fsanitize=undefined -static-libasan -isystem usr/include fchmodat2_test.c -o tools/testing/selftests/fchmodat2/fchmodat2_test
>>> clang: error: unknown argument '-static-libasan'; did you mean '-static-libsan'?
>>> make: *** [../lib.mk:181: tools/testing/selftests/fchmodat2/fchmodat2_test] Error 1
>>>
>>> # tools/testing/selftests/openat2$ make CC=clang
>>> clang -Wall -O2 -g -fsanitize=address -fsanitize=undefined -static-libasan openat2_test.c helpers.c helpers.h -o tools/testing/selftests/openat2/openat2_test
>>> clang: error: unknown argument '-static-libasan'; did you mean '-static-libsan'?
>>> clang: error: cannot specify -o when generating multiple output files
>>> make: *** [../lib.mk:181: tools/testing/selftests/openat2/openat2_test] Error 1
>>>
>>
>> Hi Arnd,
>>
>> This change went in quite a while ago and is on;y just blowing up. I saw your
>> comment in another thread [1] that Andrew merged your change to set -Wextra.
>> Perhaps that's what has caused this to show up only now? *although I don't
>> actually see -Wextra in the command line).
>>
>> I guess the problem is that `-static-libasan` is only supported by gcc. But I'm
>> Makefile-illiterate. Can anyone advise on what's the best way to make this
>> argument gcc-only?
>
> Thanks for letting me know about the problem, I had indeed missed
> build-testing any of tools/testing, so this might not be
> the only problem there.
>
> I'm not entirely sure how much of the Kbuild infrastructure we
> can rely on here. If the .config file gets included, this should
> work:
>
> --- a/tools/testing/selftests/fchmodat2/Makefile
> +++ b/tools/testing/selftests/fchmodat2/Makefile
> @@ -1,6 +1,12 @@
> # SPDX-License-Identifier: GPL-2.0-or-later
>
> -CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined -static-libasan $(KHDR_INCLUDES)
> +CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined $(KHDR_INCLUDES)
> +ifdef CONFIG_CC_IS_GCC
> +CFLAGS += -static-libasan
> +else
> +CFLAGS += -static-libsan
> +endif
> +
> TEST_GEN_PROGS := fchmodat2_test
>
> include ../lib.mk
>
> Alternatively, if the cc-option macro is available, you could
> try this one
>
> CFLAGS += $(call cc-option, -static-libasan) $(call cc-option, -static-libsan)
>
> Arnd

Thanks! I'll give this a try. Although I can't actually find any mention of
-static-libsan in the clang manual. I believe I read somewhere that static
linking is default for clang, so worst case, I guess we just leave it out
(presumably that's effectively been the case so far anyway).