Linking fails on RISC-V

Finally I was able to fix this!
Minimal reproducer available at github
It wasn’t as much as Zig’ s problem as it is LLVM’s.
Fix was to include ‘“ax”, %progbits’ in asm file (otherwise whole “.ram.vector_table” section would be discarded):

diff --git a/src/vectors.S b/src/vectors.S
index 642a887..1b3d41e 100644
--- a/src/vectors.S
+++ b/src/vectors.S
@@ -1,4 +1,4 @@
- .section .ram.vector_table
+ .section .ram.vector_table, "ax", %progbits

I saw MicroZig but I was unable to compile even simpliest example. At least that is what I thought.

build output
rm -rf zig-cache zig-out
unset ZIG_LOCAL_CACHE_DIR
zig build
run regz (chip.zig): error: warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended
warning(svd): failed to load register: error.TodoDimElementsExtended

It “fails” but .bin and .elf files are available in zig-out/firmware folder.
To flash it, I use Rust tool (which is much quicker than ESP IDF’s tool):

espflash flash --format direct-boot --monitor zig-out/firmware/blinky-esp32-c3.elf

Tested on FreeBSD and Linux.
You’ll need to unset shell env variable ZIG_LOCAL_CACHE_DIR (if it is set) for some reason.

Thorny is the way to blinky on bare, bare metal.

2 Likes