On 12/26/20 16:35, h...@zytor.com wrote:
> Why is CLANG_FLAGS non-null when unused? It would be better to centralize 
> that.
CLANG_FLAGS normally propagates through inclusion in the default KBUILD_CFLAGS 
and KBUILD_AFLAGS, set in `/Makefile':

    # Makefile
    KBUILD_CFLAGS += $(CLANG_FLAGS)
    KBUILD_AFLAGS += $(CLANG_FLAGS)
    export CLANG_FLAGS

This default can be overridden by explicit assignment, as is done in some of 
the arch/x86 makefiles:

    # arch/x86/realmode/rm/Makefile
    KBUILD_CFLAGS    := $(REALMODE_CFLAGS) -D_SETUP -D_WAKEUP \
               -I$(srctree)/arch/x86/boot
    KBUILD_AFLAGS    := $(KBUILD_CFLAGS) -D__ASSEMBLY__
    KBUILD_CFLAGS    += -fno-asynchronous-unwind-tables

Since REALMODE_CFLAGS is being built up from a plain assignment, the Clang 
flags get lost. As a result Clang fails to compile the real-mode code when 
cross-compiling for an x86 target.

    arch/x86/realmode/rm/header.S:36:1: error: unknown directive
    .type real_mode_header STT_OBJECT ; .size real_mode_header, 
.-real_mode_header
    ^
    arch/x86/realmode/rm/header.S:36:37: error: unknown directive
    .type real_mode_header STT_OBJECT ; .size real_mode_header, 
.-real_mode_header
                                        ^
    arch/x86/realmode/rm/header.S:41:62: error: unknown directive
    .globl end_signature ; ; end_signature: ; .long 0x65a22c82 ; .type 
end_signature STT_OBJECT ; .size end_signature, .-end_signature
                                                                 ^
    arch/x86/realmode/rm/header.S:41:95: error: unknown directive
    .globl end_signature ; ; end_signature: ; .long 0x65a22c82 ; .type 
end_signature STT_OBJECT ; .size end_signature, .-end_signature
                                                                                
                ^

This patch allows the Clang-specific flags to propagate through the 
REALMODE_CFLAGS variable set in `arch/x86/Makefile' and consumed by certain 
arch/x86 targets, which fixes cross-compilation of x86 kernels.

Reply via email to