From b4850e5ae9607f9f31932f693ca48f52619493d7 Mon Sep 17 00:00:00 2001 From: Sylvain Garrigues Date: Wed, 20 Apr 2016 23:35:28 +0200 Subject: hw/arm/boot: always clear r0 when booting kernels The 32-bit ARM Linux kernel booting ABI requires that r0 is 0 when calling the kernel image. A bug in commit 10b8ec73e610e01 meant that for boards which use the write_board_setup hook (which means "highbank", "midway", "raspi2" and "xilinx-zynq-a9") we were incorrectly skipping the "clear r0" instruction in the mini-bootloader. Use the right offset in the "add lr, pc, #n" instruction so that we return from the board-setup code to the correct place. Signed-off-by: Sylvain Garrigues [PMM: Expanded commit message] Cc: qemu-stable@nongnu.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- hw/arm/boot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index 5975fbfa8c..5876945575 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -68,7 +68,7 @@ static const ARMInsnFixup bootloader_aarch64[] = { */ static const ARMInsnFixup bootloader[] = { - { 0xe28fe008 }, /* add lr, pc, #8 */ + { 0xe28fe004 }, /* add lr, pc, #4 */ { 0xe51ff004 }, /* ldr pc, [pc, #-4] */ { 0, FIXUP_BOARD_SETUP }, #define BOOTLOADER_NO_BOARD_SETUP_OFFSET 3 -- cgit v1.2.1