@@ -31,10 +31,18 @@ PROVIDE(abort = _default_abort);
3131 _pre_init_trap defaults to _default_abort. Note that _pre_init_trap must be 4-byte aligned */
3232PROVIDE(_pre_init_trap = _default_abort);
3333
34- /* Default trap entry point. The riscv-rt crate provides a weak alias of this function,
35- which saves caller saved registers, calls _start_trap_rust, restores caller saved registers
36- and then returns. Users can override this alias by defining the symbol themselves */
37- EXTERN(_start_trap);
34+ /* Default trap entry point. If not _start_trap symbol is provided, then _start_trap maps to
35+ _default_start_trap, which saves caller saved registers, calls _start_trap_rust, restores
36+ caller saved registers and then returns. Note that _start_trap must be 4-byte aligned */
37+ EXTERN(_default_start_trap);
38+ PROVIDE(_start_trap = _default_start_trap);
39+
40+ /* Default interrupt setup entry point. If not _setup_interrupts symbol is provided, then
41+ _setup_interrupts maps to _default_setup_interrupts, which in direct mode sets the value
42+ of the xtvec register to _start_trap and, in vectored mode, sets its value to
43+ _vector_table and enables vectored mode. */
44+ EXTERN(_default_setup_interrupts);
45+ PROVIDE(_setup_interrupts = _default_setup_interrupts);
3846
3947/* Default exception handler. By default, the exception handler is abort.
4048 Users can override this alias by defining the symbol themselves */
@@ -195,6 +203,9 @@ BUG(riscv-rt): start of .heap is not 4-byte aligned");
195203ASSERT(_pre_init_trap % 4 == 0, "
196204BUG(riscv-rt): _pre_init_trap is not 4-byte aligned");
197205
206+ ASSERT(_start_trap % 4 == 0, "
207+ BUG(riscv-rt): _start_trap is not 4-byte aligned");
208+
198209ASSERT(_stext + SIZEOF(.text) < ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT), "
199210ERROR(riscv-rt): The .text section must be placed inside the REGION_TEXT region.
200211Set _stext to an address smaller than 'ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT)'");
0 commit comments