Re: Custom boot loader stub
Sad Clouds <[email protected]> Fri, 17 Oct 2025 08:03:31 +0100
| Newsgroups | gmane.os.netbsd.ports.sparc64 |
|---|---|
| Message-ID | <[email protected]> |
On Fri, 17 Oct 2025 00:11:20 +0300 Valery Ushakov <[email protected]> wrote: > [off-list] > > On Thu, Oct 16, 2025 at 14:32:15 +0100, Sad Clouds wrote: > > > I think OpenBoot can execute both, Forth byte codes and SPARC binaries. > > So I'm trying to understand how to execute SPARC binaries and in what > > format they should be. > > Well, go to the source of truth :) > > https://github.com/openbios/openboot > > From a quick glance at its obp/arch/sun4u/go.fth > > https://github.com/openbios/openboot/blob/1a08f436/obp/arch/sun4u/go.fth#L111 > > I guess it will try in order elf32, elf64, and a.out > > The check for h# 107 is the a.out's OMAGIC (0407). > > -uwe Brilliant, thanks for that. I didn't realise OpenBoot was open sourced on github. Also what is interesting in go.fth on line 75 the pointer to client interface is passed in %o4 register, I think. I can now execute a very minimal bootloader on Sun T5220 with ELF64 binary. The next step is to figure out how to call IEEE-1275 client interface functions so I can print messages on the screen. # cat boot.s .section .text .align 4 .global _start _start: ! Uncomment to execute sir instruction. ! On sun4v this should result in Illegal Instruction trap ! as only hypervisor is allowed to execute sir. !sir ! Execute infinite loop incrementing value in %l0 mov %g0, %l0 ! %l0 = 0 loop: ba loop inc %l0 ! %l0 += 1 # as -o boot.o boot.s && ld -o boot.bin boot.o # file boot.bin boot.bin: ELF 64-bit MSB executable, SPARC V9, relaxed memory ordering, version 1 (SYSV), statically linked, not stripped # ./sparc_disk_label write /dev/sd1c # dd if=boot.bin of=/dev/sd1c bs=512 seek=1 && sync Fake disk label at sector 0, then boot.bin at sector 1.