From 1b1e3e6b39e4d15d06952f0b248650d7d1c4fa6f Mon Sep 17 00:00:00 2001 From: Djordje Nedic Date: Wed, 22 May 2024 19:57:46 +0200 Subject: [PATCH] Linking and linker relaxation fixes (#200) --- bsp/espressif/esp/src/cpus/espressif-riscv.zig | 7 ++++++- build/src/generate_linkerscript.zig | 11 ++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/bsp/espressif/esp/src/cpus/espressif-riscv.zig b/bsp/espressif/esp/src/cpus/espressif-riscv.zig index c68e720..cb8a760 100644 --- a/bsp/espressif/esp/src/cpus/espressif-riscv.zig +++ b/bsp/espressif/esp/src/cpus/espressif-riscv.zig @@ -67,7 +67,12 @@ pub const startup_logic = struct { : : [eos] "r" (@as(u32, microzig.config.end_of_stack)), ); - asm volatile ("la gp, __global_pointer$"); + asm volatile ( + \\.option push + \\.option norelax + \\la gp, __global_pointer$ + \\.option pop + ); microzig.cpu.setStatusBit(.mtvec, microzig.config.end_of_stack); root.initialize_system_memories(); microzig_main(); diff --git a/build/src/generate_linkerscript.zig b/build/src/generate_linkerscript.zig index 0e66a5d..75e5d28 100644 --- a/build/src/generate_linkerscript.zig +++ b/build/src/generate_linkerscript.zig @@ -121,8 +121,9 @@ pub fn main() !void { \\ .data : \\ { \\ microzig_data_start = .; - \\ *(.rodata*) + \\ *(.sdata*) \\ *(.data*) + \\ *(.rodata*) \\ microzig_data_end = .; \\ } > ram0 AT> flash0 \\ @@ -137,6 +138,14 @@ pub fn main() !void { \\ ); } + + switch (program_args.cpu_arch) { + .riscv32, .riscv64 => try writer.writeAll( + \\ PROVIDE(__global_pointer$ = microzig_data_start + 0x800); + ), + else => {}, + } + try writer.writeAll("}\n"); // TODO: Assert that the flash can actually hold all data!