diff --git a/src/main.rs b/src/main.rs index 0276ae3..92164f2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,11 +15,16 @@ unsafe extern "C" fn _enter() -> ! { use core::arch::asm; asm!( // before we use the `la` pseudo-instruction for the first time, - // we need to set `gp` (google linker relaxation) - ".option push", - ".option norelax", + // we need to set `gp` (google linker relaxation) + ".option push", // pushes the current option stack + ".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", - ".option pop", + ".option pop", // pops the current option stack // set the stack pointer "la sp, _init_stack_top",