From e473826732585900411dced1c26fb0375c904b9c Mon Sep 17 00:00:00 2001 From: SashegDev Date: Fri, 11 Sep 2026 07:15:31 +0000 Subject: [PATCH] banner stub: preserve lr, pop-return to caller --- qemu/banner.S | 8 +++++--- qemu/saimaa.c | 14 +++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/qemu/banner.S b/qemu/banner.S index ba49f24..1e35ea4 100644 --- a/qemu/banner.S +++ b/qemu/banner.S @@ -1,11 +1,13 @@ .syntax unified .cpu cortex-a7 .thumb - @ Banner stub for SBL1 logger call at 0x802f690 (blx r3 patched to bl here). - @ r0 = string. Print raw bytes via UARTDM until NUL (cap 256), return 0. + @ Banner stub for SBL1 logger call at 0x802f690 (patched to bl here). + @ r0 = string. Print raw bytes via UARTDM until NUL (cap 256). + @ Preserve lr (set by bl) and return to caller with r0=0. .text .global banner_stub banner_stub: + push {r4, lr} movw r3, #0xf000 movt r3, #0x78a bn_loop: @@ -15,4 +17,4 @@ bn_loop: b bn_loop bn_done: movs r0, #0 - bx lr + pop {r4, pc} diff --git a/qemu/saimaa.c b/qemu/saimaa.c index 767c295..0cc1009 100644 --- a/qemu/saimaa.c +++ b/qemu/saimaa.c @@ -440,17 +440,13 @@ static void saimaa_machine_init(MachineState *machine) } } /* Banner stub at 0x08062150: print r0 string via UARTDM - * (b16 redirects 0x802f690 blx here). Built from qemu/banner.S */ + * (b16 redirects 0x802f690 blx here). Built from qemu/banner.S: + * push/pop frame, preserves lr, returns r0=0 to caller. */ { static const uint8_t bn[] = { - 0x4f, 0xf2, 0x00, 0x03, /* movw r3,#0xf000 */ - 0xc0, 0xf2, 0x8a, 0x73, /* movt r3,#0x78a */ - 0x10, 0xf8, 0x01, 0x1b, /* ldrb r1,[r0],#1 */ - 0x09, 0xb1, /* cbz r1,done */ - 0x19, 0x67, /* str r1,[r3,#0x70] */ - 0xfa, 0xe7, /* b loop */ - 0x00, 0x20, /* movs r0,#0 */ - 0x70, 0x47, /* bx lr */ + 0x10, 0xb5, 0x4f, 0xf2, 0x00, 0x03, 0xc0, 0xf2, + 0x8a, 0x73, 0x10, 0xf8, 0x01, 0x1b, 0x09, 0xb1, + 0x19, 0x67, 0xfa, 0xe7, 0x00, 0x20, 0x10, 0xbd, }; size_t k; for (k = 0; k < sizeof(bn); k += 4) {