Skip to content
Snippets Groups Projects
  • Bin Meng's avatar
    3d2be800
    x86: Fix car_uninit weak symbol definition · 3d2be800
    Bin Meng authored
    
    Since commit 80df194f ("x86: detect unsupported relocation types"),
    an error message is seen on QEMU x86 target during boot:
    
    do_elf_reloc_fixups32: unsupported relocation type 0x1 at fff841f0, offset = 0xfff00087
    do_elf_reloc_fixups32: unsupported relocation type 0x2 at fff841f8, offset = 0xfff00091
    
    Check offset 0xfff00087 and 0xfff00091 in the u-boot ELF image,
    
    fff00087  000df401 R_386_32          00000000   car_uninit
    fff00091  000df402 R_386_PC32        00000000   car_uninit
    
    we see R_386_32 and R_386_PC32 relocation type is generated for
    symbol car_uninit, which is declared as a weak symbol in start.S.
    
    However the actual weak symbol implementation ends up nowhere. As
    we can see below, it's *UND*.
    
    $ objdump -t u-boot | grep car_uninit
    00000000  w      *UND*  00000000 car_uninit
    
    With this fix, it is normal now.
    
    $ objdump -t u-boot | grep car_uninit
    fff00094  w    F .text.start    00000001 car_uninit
    
    Reported-by: default avatarHannes Schmelzer <hannes@schmelzer.or.at>
    Signed-off-by: default avatarBin Meng <bmeng.cn@gmail.com>
    Tested-by: default avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
    Reviewed-by: default avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
    Tested-by: default avatarHannes Schmelzer <oe5hpm@oevsv.at>
    3d2be800
    History
    x86: Fix car_uninit weak symbol definition
    Bin Meng authored
    
    Since commit 80df194f ("x86: detect unsupported relocation types"),
    an error message is seen on QEMU x86 target during boot:
    
    do_elf_reloc_fixups32: unsupported relocation type 0x1 at fff841f0, offset = 0xfff00087
    do_elf_reloc_fixups32: unsupported relocation type 0x2 at fff841f8, offset = 0xfff00091
    
    Check offset 0xfff00087 and 0xfff00091 in the u-boot ELF image,
    
    fff00087  000df401 R_386_32          00000000   car_uninit
    fff00091  000df402 R_386_PC32        00000000   car_uninit
    
    we see R_386_32 and R_386_PC32 relocation type is generated for
    symbol car_uninit, which is declared as a weak symbol in start.S.
    
    However the actual weak symbol implementation ends up nowhere. As
    we can see below, it's *UND*.
    
    $ objdump -t u-boot | grep car_uninit
    00000000  w      *UND*  00000000 car_uninit
    
    With this fix, it is normal now.
    
    $ objdump -t u-boot | grep car_uninit
    fff00094  w    F .text.start    00000001 car_uninit
    
    Reported-by: default avatarHannes Schmelzer <hannes@schmelzer.or.at>
    Signed-off-by: default avatarBin Meng <bmeng.cn@gmail.com>
    Tested-by: default avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
    Reviewed-by: default avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
    Tested-by: default avatarHannes Schmelzer <oe5hpm@oevsv.at>