• H. Peter Anvin's avatar
    x86-32, relocs: Whitelist more symbols for ld bug workaround · fd952815
    H. Peter Anvin authored
    As noted in checkin:
    
    a3e854d9 x86, relocs: Workaround for binutils 2.22.52.0.1 section bug
    
    ld version 2.22.52.0.[12] can incorrectly promote relative symbols to
    absolute, if the output section they appear in is otherwise empty.
    
    Since checkin:
    
    6520fe55 x86, realmode: 16-bit real-mode code support for relocs tool
    
    we actually check for this and error out rather than silently creating
    a kernel which will malfunction if relocated.
    
    Ingo found a configuration in which __start_builtin_fw triggered the
    warning.
    
    Go through the linker script sources and look for more symbols that
    could plausibly get bogusly promoted to absolute, and add them to the
    whitelist.
    
    In general, if the following error triggers:
    
    	Invalid absolute R_386_32 relocation: <symbol>
    
    ... then we should verify that <symbol> is really meant to be
    relocated, and add it and any related symbols manually to the S_REL
    regexp.
    
    Please note that 6520fe55 does not introduce the error, only the check
    for the error -- without 6520fe55 this version of ld will simply
    produce a corrupt kernel if CONFIG_RELOCATABLE is set on x86-32.
    Reported-by: default avatarIngo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
    Cc: <stable@vger.kernel.org> v3.4
    fd952815
relocs.c 19.1 KB