sylveos

Toy Operating System
Log | Files | Refs

bootable.zig (565B)


      1 // Boot stub for bootable programs (ran by bootloader)
      2 
      3 pub const bootable_asm =
      4     \\ ldr sp, =__stack_end__
      5     \\ mov fp, 0x0
      6     \\ bl %[kmain_fn:P]
      7     \\ bl %[abort_fn:P]
      8 ;
      9 
     10 pub fn make(comptime kmain: *const fn () callconv(.c) void, comptime abort: *const fn () callconv(.c) void) type {
     11     return struct {
     12         pub fn _start() linksection(".kmain") callconv(.naked) noreturn {
     13             asm volatile (bootable_asm
     14                 :
     15                 : [kmain_fn] "X" (kmain),
     16                   [abort_fn] "X" (abort),
     17             );
     18         }
     19     };
     20 }