diff options
author | Bin Meng <bmeng.cn@gmail.com> | 2018-10-25 03:05:37 -0700 |
---|---|---|
committer | Bin Meng <bmeng.cn@gmail.com> | 2018-10-28 21:02:15 +0800 |
commit | 3d2be8003c77cad350f1ec7c79f914797718c5bf (patch) | |
tree | 6529f26302c486df7345d8e300fd6527475f1082 /arch/x86/cpu/start.S | |
parent | 87bb4fe86993f70dcd0aca10fa2e6692976f05fc (diff) | |
download | u-boot-3d2be8003c77cad350f1ec7c79f914797718c5bf.tar.gz u-boot-3d2be8003c77cad350f1ec7c79f914797718c5bf.tar.xz u-boot-3d2be8003c77cad350f1ec7c79f914797718c5bf.zip |
x86: Fix car_uninit weak symbol definition
Since commit 80df194f0165 ("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: Hannes Schmelzer <hannes@schmelzer.or.at>
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Tested-by: Hannes Schmelzer <oe5hpm@oevsv.at>
Diffstat (limited to 'arch/x86/cpu/start.S')
-rw-r--r-- | arch/x86/cpu/start.S | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/x86/cpu/start.S b/arch/x86/cpu/start.S index e1f634ffcd..30fa7def46 100644 --- a/arch/x86/cpu/start.S +++ b/arch/x86/cpu/start.S @@ -16,6 +16,7 @@ #include <asm/processor-flags.h> #include <generated/generic-asm-offsets.h> #include <generated/asm-offsets.h> +#include <linux/linkage.h> .section .text.start .code32 @@ -184,13 +185,8 @@ board_init_f_r_trampoline: movl %eax, %esp /* See if we need to disable CAR */ -.weak car_uninit - movl $car_uninit, %eax - cmpl $0, %eax - jz 1f - call car_uninit -1: + /* Re-enter U-Boot by calling board_init_f_r() */ call board_init_f_r @@ -199,6 +195,10 @@ die: jmp die hlt +WEAK(car_uninit) + ret +ENDPROC(car_uninit) + blank_idt_ptr: .word 0 /* limit */ .long 0 /* base */ |