Как я начинаю прозревать, никаких стандартов и соглашений нет.
Компилятор генерирует секции с данными инициализации, а скопировать
эти данные в .data стандартная инициализация почему-то не желает. _start линкуется из /riscv-none-embed/lib/rv32imac/ilp32/crt0.o
Как я понял - надо смотреть исходники библиотеки, из которых это собиралось.
А вообще странно - стандартная инициализация не может правильно проинициализировать переменные. Абсурд какой-то. Или для пользователей GCC это привычное дело? Хочешь чтобы работало - делай сам :-)