• Joel Stanley's avatar
    powerpc/boot: Ensure _zimage_start is a weak symbol · ee9d21b3
    Joel Stanley authored
    When building with clang crt0's _zimage_start is not marked weak, which
    breaks the build when linking the kernel image:
    
     $ objdump -t arch/powerpc/boot/crt0.o |grep _zimage_start$
     0000000000000058 g       .text  0000000000000000 _zimage_start
    
     ld: arch/powerpc/boot/wrapper.a(crt0.o): in function '_zimage_start':
     (.text+0x58): multiple definition of '_zimage_start';
     arch/powerpc/boot/pseries-head.o:(.text+0x0): first defined here
    
    Clang requires the .weak directive to appear after the symbol is
    declared. The binutils manual says:
    
     This directive sets the weak attribute on the comma separated list of
     symbol names. If the symbols do not already exist, they will be
     created.
    
    So it appears this is different with clang. The only reference I could
    see for this was an OpenBSD mailing list post[1].
    
    Changing it to be after the declaration fixes building with Clang, and
    still works with GCC.
    
     $ objdump -t arch/powerpc/boot/crt0.o |grep _zimage_start$
     0000000000000058  w      .text	0000000000000000 _zimage_start
    
    Reported to clang as https://bugs.llvm.org/show_bug.cgi?id=38921
    
    [1] https://groups.google.com/forum/#!topic/fa.openbsd.tech/PAgKKen2YCYSigned-off-by: default avatarJoel Stanley <joel@jms.id.au>
    Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    ee9d21b3
crt0.S 7.09 KB