@@ -31,10 +31,18 @@ PROVIDE(abort = _default_abort);
31
31
_pre_init_trap defaults to _default_abort. Note that _pre_init_trap must be 4-byte aligned */
32
32
PROVIDE(_pre_init_trap = _default_abort);
33
33
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);
38
46
39
47
/* Default exception handler. By default, the exception handler is abort.
40
48
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");
195
203
ASSERT(_pre_init_trap % 4 == 0, "
196
204
BUG(riscv-rt): _pre_init_trap is not 4-byte aligned");
197
205
206
+ ASSERT(_start_trap % 4 == 0, "
207
+ BUG(riscv-rt): _start_trap is not 4-byte aligned");
208
+
198
209
ASSERT(_stext + SIZEOF(.text) < ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT), "
199
210
ERROR(riscv-rt): The .text section must be placed inside the REGION_TEXT region.
200
211
Set _stext to an address smaller than 'ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT)'");
0 commit comments