From 23a2994e051488561294050993f16162f24a85e7 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sat, 10 Sep 2022 20:18:42 +0200 Subject: startup: Add RISC-V reset handler. --- startup/SConscript | 12 ++++++++++++ startup/riscv_reset_handler.cpp | 11 +++++++++++ 2 files changed, 23 insertions(+) create mode 100644 startup/SConscript create mode 100644 startup/riscv_reset_handler.cpp (limited to 'startup') diff --git a/startup/SConscript b/startup/SConscript new file mode 100644 index 0000000..971f9fa --- /dev/null +++ b/startup/SConscript @@ -0,0 +1,12 @@ +Import('env') + +sources = [ + File('entry.cpp'), +] + +startup = env['PLATFORM_SPEC'].get('startup', []) + +for file in startup: + sources.append(File(f'{file}.cpp')) + +Return('sources') diff --git a/startup/riscv_reset_handler.cpp b/startup/riscv_reset_handler.cpp new file mode 100644 index 0000000..0eed06d --- /dev/null +++ b/startup/riscv_reset_handler.cpp @@ -0,0 +1,11 @@ +void entry(); +extern int _ram_end; + +[[gnu::naked]] +[[gnu::section(".vectors")]] +void _reset_handler() { + // Initialize stack pointer. + asm volatile("lui sp, %%hi(%0); add sp, sp, %%lo(%0)" :: "i"(&_ram_end)); + // Absolute jump to entry function. + asm volatile("jr %0" :: "m"(entry)); +} -- cgit v1.2.3