diff options
| author | Bradley Morgan <brads@mainlining.org> | 2026-10-04 10:42:10 +0000 |
|---|---|---|
| committer | Bradley Morgan <brads@mainlining.org> | 2026-10-04 10:46:46 +0000 |
| commit | 5ff54a875642962fc857cee00bde17f9a465f1fa (patch) | |
| tree | b265a12d538167c3bbb86b24118a7ad7a062fc74 /test | |
holy shit it's here, Tashaboot, based from arm arm, enjoy
reading this masterpiece
Signed-off-by: Bradley Morgan <brads@mainlining.org>
Diffstat (limited to 'test')
| -rw-r--r-- | test/payload.S | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/payload.S b/test/payload.S new file mode 100644 index 0000000..d1891a2 --- /dev/null +++ b/test/payload.S @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * payload.S - tiny arm64 image for testing tashaboot. carries the real + * Image header from Documentation/arch/arm64/booting.rst, prints one + * line on the virt uart, parks. built with the same conventions the + * kernel itself uses so the header math in tashaboot is exercised for + * real, not against a fake. + * + * Copyright (C) 2026 Bradley Morgan <brads@mainlining.org> + */ + +#include <asm/linkage.h> + +/* the header the bootloader validates */ +#define ARM64_IMAGE_MAGIC 0x644d5241 + +.section .text.head +.globl _start +_start: + /* code0/code1: branch over the header, like the kernel does */ + b 1f + .long 0 + + /* text_offset, 0x80000 like every kernel since forever */ + .quad 0x80000 + /* image_size, filled at build time by scripts/mkpayload.sh */ + .quad payload_end - _start + /* flags, bit 3 = anywhere in memory is fine */ + .quad (1 << 3) + .quad 0 + .quad 0 + .quad 0 + /* magic "ARM\x64" */ + .long ARM64_IMAGE_MAGIC + .long 0 +1: + /* the payload entry: x0 = dtb from the bootloader */ + ldr x1, =0x09000000 /* pl011 on qemu virt */ + adr x2, msg +2: ldrb w3, [x2], #1 + cbz w3, 3f + str w3, [x1] + b 2b +3: /* clean exit through semihosting, proof we got here */ + mov x0, #0x18 /* SYS_EXIT */ + ldr x1, =0x20026 /* ADP_Stopped_ApplicationExit */ + hlt #0xF000 + b 3b + +msg: .asciz "payload: alive, tashaboot jumped here\n" + .balign 8 +payload_end: |
