• Anton Blanchard's avatar
    powerpc: Fix -mcmodel=medium breakage in prom_init.c · 1674400a
    Anton Blanchard authored
    Commit 5ac47f7a
    
     (powerpc: Relocate prom_init.c on 64bit) made
    prom_init.c position independent by manually relocating its entries
    in the TOC.
    
    We get the address of the TOC entries with the __prom_init_toc_start
    linker symbol. If __prom_init_toc_start ends up as an entry in the
    TOC then we need to add an offset to get the current address. This is
    the case for older toolchains.
    
    On the other hand, if we have a newer toolchain that supports
    -mcmodel=medium then __prom_init_toc_start will be created by a
    relative offset from r2 (the TOC pointer). Since r2 has already been
    relocated, nothing more needs to be done.  Adding an offset in this
    case is wrong and Aaro Koskinen and Alexander Graf have noticed noticed
    G5 and OpenBIOS breakage.
    
    Alan Modra suggested we just use r2 to get at the TOC which is simpler
    and works with both old and new toolchains.
    Reported-by: default avatarAlexander Graf <agraf@suse.de>
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Tested-by: default avatarAaro Koskinen <aaro.koskinen@iki.fi>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    1674400a
prom_init.c 81 KB