aboutsummaryrefslogtreecommitdiff
path: root/arch/x86
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2018-10-25 03:05:37 -0700
committerBin Meng <bmeng.cn@gmail.com>2018-10-28 21:02:15 +0800
commit3d2be8003c77cad350f1ec7c79f914797718c5bf (patch)
tree6529f26302c486df7345d8e300fd6527475f1082 /arch/x86
parent87bb4fe86993f70dcd0aca10fa2e6692976f05fc (diff)
downloadu-boot-3d2be8003c77cad350f1ec7c79f914797718c5bf.zip
u-boot-3d2be8003c77cad350f1ec7c79f914797718c5bf.tar.gz
u-boot-3d2be8003c77cad350f1ec7c79f914797718c5bf.tar.bz2
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')
-rw-r--r--arch/x86/cpu/start.S12
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/x86/cpu/start.S b/arch/x86/cpu/start.S
index e1f634f..30fa7de 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 */