Compare commits

..

4 commits

Author SHA1 Message Date
gil 7d658ad704 explain some of the .option directives in _enter() 2024-05-15 23:33:36 -05:00
gil e409015ff8 Remove extra braces 2024-05-15 23:17:55 -05:00
gil 2b80cb9a9b Add comment from memmap 2024-05-15 23:17:35 -05:00
gil 13fb110417 Printing from panic handler 2024-05-15 23:13:10 -05:00
2 changed files with 13 additions and 6 deletions

View file

@ -15,11 +15,16 @@ unsafe extern "C" fn _enter() -> ! {
use core::arch::asm; use core::arch::asm;
asm!( asm!(
// before we use the `la` pseudo-instruction for the first time, // before we use the `la` pseudo-instruction for the first time,
// we need to set `gp` (google linker relaxation) // we need to set `gp` (google linker relaxation)
".option push", ".option push", // pushes the current option stack
".option norelax", ".option norelax", // disable relaxation so we can properly set `gp`
// this instruction compiles to:
// 1:
// auipc gp, %pcrel_hi(_global_pointer)
// addi gp, gp, %pcrel_lo(1b)
// if relaxation were on, this would simply be `mv gp, gp` or `addi gp, gp, 0`
"la gp, _global_pointer", "la gp, _global_pointer",
".option pop", ".option pop", // pops the current option stack
// set the stack pointer // set the stack pointer
"la sp, _init_stack_top", "la sp, _init_stack_top",
@ -67,7 +72,9 @@ extern "C" fn start() -> ! {
} }
#[panic_handler] #[panic_handler]
fn on_panic(_info: &PanicInfo) -> ! { fn on_panic(info: &PanicInfo) -> ! {
println!("{}", info);
loop {} loop {}
} }

View file

@ -14,7 +14,7 @@ PHDRS {
} }
SECTIONS { SECTIONS {
. = ORIGIN(ram); # start at 0x8000_0000 . = ORIGIN(ram); # start at 0x8000_0000 (DRAM)
.text : { # put code first .text : { # put code first
*(.text.init) # start with anything in the .text.init section *(.text.init) # start with anything in the .text.init section