• Michael Ellerman's avatar
    powerpc/boot: Fix build failure since GCC 4.9 removal · 1619b69e
    Michael Ellerman authored
    Stephen reported that the build was broken since commit
    6d2ef226 ("compiler_attributes.h: drop __has_attribute() support for
    gcc4"), with errors such as:
    
      include/linux/compiler_attributes.h:296:5: warning: "__has_attribute" is not defined, evaluates to 0 [-Wundef]
        296 | #if __has_attribute(__warning__)
            |     ^~~~~~~~~~~~~~~
      make[2]: *** [arch/powerpc/boot/Makefile:225: arch/powerpc/boot/crt0.o] Error 1
    
    But we expect __has_attribute() to always be defined now that we've
    stopped using GCC 4.
    
    Linus debugged it to the point of reading the GCC sources, and noticing
    that the problem is that __has_attribute() is not defined when
    preprocessing assembly files, which is what we're doing here.
    
    Our assembly files don't include, or need, compiler_attributes.h, but
    they are getting it unconditionally from the -include in BOOT_CFLAGS,
    which is then added in its entirety to BOOT_AFLAGS.
    
    That -include was added in commit 77433830 ("powerpc: boot: include
    compiler_attributes.h") so that we'd have "fallthrough" and other
    attributes defined for the C files in arch/powerpc/boot. But it's not
    needed for assembly files.
    
    The minimal fix is to move the addition to BOOT_CFLAGS of -include
    compiler_attributes.h until after we've copied BOOT_CFLAGS into
    BOOT_AFLAGS. That avoids including compiler_attributes.h for asm files,
    but makes no other change to BOOT_CFLAGS or BOOT_AFLAGS.
    Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
    Debugged-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    1619b69e
Makefile 18.7 KB