diff --git a/src/device/riscv/start.S b/src/device/riscv/start.S index eee57fee..25217b35 100644 --- a/src/device/riscv/start.S +++ b/src/device/riscv/start.S @@ -9,7 +9,12 @@ _start: // Load the globals pointer. The program will load pointers relative to this // register, so it must be set to the right value on startup. // See: https://gnu-mcu-eclipse.github.io/arch/riscv/programmer/#the-gp-global-pointer-register + // Linker relaxations must be disabled to avoid the initialization beign + // relaxed with an uninitialized global pointer: mv gp, gp + .option push + .option norelax la gp, __global_pointer$ + .option pop // Jump to runtime.main call main