projects
/
riscv-tests.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
debug: add missing align directive on trap_entry
[riscv-tests.git]
/
debug
/
programs
/
entry.S
diff --git
a/debug/programs/entry.S
b/debug/programs/entry.S
index c9e319ccc0549b31d4ef148bfc2ca8c62e15556d..6d84718f0388769e9f7140b733638d7a253ead48 100755
(executable)
--- a/
debug/programs/entry.S
+++ b/
debug/programs/entry.S
@@
-1,9
+1,6
@@
-#ifndef ENTRY_S
-#define ENTRY_S
-
#include "encoding.h"
#include "encoding.h"
-#define STACK_SIZE
512
+#define STACK_SIZE
(90 * XLEN / 8)
#if XLEN == 64
# define LREG ld
#if XLEN == 64
# define LREG ld
@@
-27,7
+24,9
@@
trap_vector:
j trap_entry
handle_reset:
j trap_entry
handle_reset:
- la t0, trap_entry
+ // If misa doesn't exist (or is following an old spec where it has a
+ // different number), skip the next block.
+ la t0, 3f
csrw mtvec, t0
csrwi mstatus, 0
csrw mtvec, t0
csrwi mstatus, 0
@@
-48,6
+47,10
@@
handle_reset:
csrwi medeleg, 0
2:
csrwi mie, 0
csrwi medeleg, 0
2:
csrwi mie, 0
+3:
+ la t0, trap_entry
+ csrw mtvec, t0
+ csrwi mstatus, 0
# initialize global pointer
.option push
# initialize global pointer
.option push
@@
-55,8
+58,15
@@
handle_reset:
la gp, __global_pointer$
.option pop
la gp, __global_pointer$
.option pop
- # initialize stack pointer
- la sp, stack_top
+ # Initialize stack pointer.
+ # Give each hart STACK_SIZE of stack.
+ # Assume hart IDs are contiguous and start at 0.
+ csrr t0, CSR_MHARTID
+ addi t0, t0, 1
+ li t1, STACK_SIZE
+ mul t0, t0, t1
+ la sp, stack_bottom
+ add sp, sp, t0
# Clear all hardware triggers
li t0, ~0
# Clear all hardware triggers
li t0, ~0
@@
-67,10
+77,36
@@
handle_reset:
csrr t1, CSR_TSELECT
beq t0, t1, 1b
csrr t1, CSR_TSELECT
beq t0, t1, 1b
+#ifdef MULTICORE
+ csrr t0, CSR_MHARTID
+ bnez t0, wait_until_initialized
+#endif
+
+ la t0, __bss_start
+ la t1, __bss_end
+1:
+ bge t0, t1, 2f
+ sb zero, 0(t0)
+ addi t0, t0, 1
+ j 1b
+2:
+#ifdef MULTICORE
+ la t0, initialized
+ li t1, 1
+ sw t1, 0(t0)
+
+wait_until_initialized: # Wait for hart 0 to perform initialization.
+ la t0, initialized
+1:
+ lw t1, 0(t0)
+ beqz t1, 1b
+#endif
+
# perform the rest of initialization in C
# perform the rest of initialization in C
- j _init
+ j
_init
+.align 2
trap_entry:
addi sp, sp, -32*REGBYTES
trap_entry:
addi sp, sp, -32*REGBYTES
@@
-151,9
+187,13
@@
trap_entry:
addi sp, sp, 32*REGBYTES
mret
addi sp, sp, 32*REGBYTES
mret
+loop_forever:
+ j loop_forever
+
// Fill the stack with data so we can see if it was overrun.
.align 4
stack_bottom:
// Fill the stack with data so we can see if it was overrun.
.align 4
stack_bottom:
- .fill STACK_SIZE/4, 4, 0x22446688
+ .fill
NHARTS *
STACK_SIZE/4, 4, 0x22446688
stack_top:
stack_top:
-#endif
+initialized:
+ .word 0