.section .text._start, "ax" .global _start _start: # 🕵️ DIAGNOSTIC: BREATHE li t0, 0x10000000 li t1, 0x23 # '#' sb t1, 0(t0) # Clear BSS (64-bit aligned zeroing) la t0, __bss_start la t1, __bss_end 1: bge t0, t1, 2f sd zero, 0(t0) addi t0, t0, 8 j 1b 2: fence rw, rw # 🔧 CRITICAL FIX: Set up stack pointer for userland # Stack grows down from top of 128MB userland RAM (0x90000000 - 32 bytes for alignment) li sp, 0x8FFFFFE0 # 🔧 CRITICAL FIX: Set up global pointer for RISC-V ABI # Global pointer should point to .sdata section for efficient global access # For userland at 0x88000000, set gp to middle of address space .option push .option norelax la gp, __global_pointer$ .option pop # 🕵️ DIAGNOSTIC: READY TO CALL MAIN li t0, 0x10000000 li t1, 0x21 # '!' sb t1, 0(t0) # Call main(0, NULL) li a0, 0 li a1, 0 call main # 🕵️ DIAGNOSTIC: RETURNED FROM MAIN # li t0, 0x10000000 # li t1, 0x24 # '$' # sb t1, 0(t0) # Call exit(result) call exit 1: j 1b