• Zhangjin Wu's avatar
    tools/nolibc: silence ppc64 compile warnings · 872dbfa0
    Zhangjin Wu authored
    Silence the following warnings reported by the new -Wall -Wextra options
    with pure assembly code.
    
        In file included from sysroot/powerpc/include/stdio.h:13,
                         from nolibc-test.c:13:
        sysroot/powerpc/include/arch.h: In function '_start':
        sysroot/powerpc/include/arch.h:192:32: warning: unused variable 'r2' [-Wunused-variable]
          192 |         register volatile long r2 __asm__ ("r2") = (void *)&TOC - (void *)_start;
              |                                ^~
        sysroot/powerpc/include/arch.h:187:97: warning: optimization may eliminate reads and/or writes to register variables [-Wvolatile-register-var]
          187 | void __attribute__((weak, noreturn, optimize("Os", "omit-frame-pointer"))) __no_stack_protector _start(void)
              |                                                                                                 ^~~~~~
    
    Since only elfv2 ABI requires to save the TOC/GOT pointer to r2
    register, when using elfv1 ABI, the old C code is simply ignored by the
    compiler, but the compiler can not ignore the inline assembly code and
    will introduce build failure or running segfaults. So, let's further
    only add the new assembly code for elfv2 ABI with the checking of
    _CALL_ELF == 2.
    
    Link: https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.pdf
    Link: https://www.llvm.org/devmtg/2014-04/PDFs/Talks/Euro-LLVM-2014-Weigand.pdfSigned-off-by: default avatarZhangjin Wu <falcon@tinylab.org>
    Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
    872dbfa0
arch-powerpc.h 11.1 KB