Skip to content
  • Guenter Roeck's avatar
    powerpc: Fix 64 bit builds with binutils 2.24 · 7998eb3d
    Guenter Roeck authored
    
    
    With binutils 2.24, various 64 bit builds fail with relocation errors
    such as
    
    arch/powerpc/kernel/built-in.o: In function `exc_debug_crit_book3e':
    	(.text+0x165ee): relocation truncated to fit: R_PPC64_ADDR16_HI
    	against symbol `interrupt_base_book3e' defined in .text section
    	in arch/powerpc/kernel/built-in.o
    arch/powerpc/kernel/built-in.o: In function `exc_debug_crit_book3e':
    	(.text+0x16602): relocation truncated to fit: R_PPC64_ADDR16_HI
    	against symbol `interrupt_end_book3e' defined in .text section
    	in arch/powerpc/kernel/built-in.o
    
    The assembler maintainer says:
    
     I changed the ABI, something that had to be done but unfortunately
     happens to break the booke kernel code.  When building up a 64-bit
     value with lis, ori, shl, oris, ori or similar sequences, you now
     should use @high and @higha in place of @h and @ha.  @h and @ha
     (and their associated relocs R_PPC64_ADDR16_HI and R_PPC64_ADDR16_HA)
     now report overflow if the value is out of 32-bit signed range.
     ie. @h and @ha assume you're building a 32-bit value. This is needed
     to report out-of-range -mcmodel=medium toc pointer offsets in @toc@h
     and @toc@ha expressions, and for consistency I did the same for all
     other @h and @ha relocs.
    
    Replacing @h with @high in one strategic location fixes the relocation
    errors. This has to be done conditionally since the assembler either
    supports @h or @high but not both.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    7998eb3d