LoongArch: Replace -ffreestanding with finer-grained -fno-builtin's
authorWANG Xuerui <git@xen0n.name>
Fri, 25 Aug 2023 15:40:26 +0000 (23:40 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Fri, 25 Aug 2023 15:40:26 +0000 (23:40 +0800)
commit3f301dc292eb122eff61b8b2906e519154b0327f
treeeed036a6c477a92ae5bf010d93771023f39a2237
parentb8e2771b7f880a0b899b380ef15476160c693b59
LoongArch: Replace -ffreestanding with finer-grained -fno-builtin's

As explained by Nick in the original issue: the kernel usually does a
good job of providing library helpers that have similar semantics as
their ordinary userspace libc equivalents, but -ffreestanding disables
such libcall optimization and other related features in the compiler,
which can lead to unexpected things such as CONFIG_FORTIFY_SOURCE not
working (!).

However, due to the desire for better control over unaligned accesses
with respect to CONFIG_ARCH_STRICT_ALIGN, and also for avoiding the
GCC bug https://gcc.gnu.org/PR109465, we do want to still disable
optimizations for the memory libcalls (memcpy, memmove and memset for
now). Use finer-grained -fno-builtin-* toggles to achieve this without
losing source fortification and other libcall optimizations.

Closes: https://github.com/ClangBuiltLinux/linux/issues/1897
Reported-by: Nathan Chancellor <nathan@kernel.org>
Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: WANG Xuerui <git@xen0n.name>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/Makefile