mirror of
https://github.com/riscv-software-src/riscv-isa-sim.git
synced 2025-10-14 02:07:30 +08:00
Parameterize debug ROM contents on XLEN
This commit is contained in:
5
debug_rom/.gitignore
vendored
5
debug_rom/.gitignore
vendored
@@ -1,2 +1,5 @@
|
||||
/debug_rom
|
||||
/debug_rom.raw
|
||||
/debug_rom32
|
||||
/debug_rom64
|
||||
/debug_rom32.h
|
||||
/debug_rom64.h
|
||||
|
@@ -4,17 +4,27 @@
|
||||
CC = $(RISCV)/bin/riscv64-unknown-elf-gcc
|
||||
OBJCOPY = $(RISCV)/bin/riscv64-unknown-elf-objcopy
|
||||
|
||||
%.o: %.S
|
||||
$(CC) -I.. -c $<
|
||||
COMPILE = $(CC) -nostdlib -nostartfiles -I.. -Tlink.ld
|
||||
|
||||
debug_rom.h: debug_rom.raw
|
||||
ELFS = debug_rom debug_rom32 debug_rom64
|
||||
DEPS = debug_rom.S link.ld
|
||||
|
||||
all: $(patsubst %,%.h,$(ELFS))
|
||||
|
||||
%.h: %.raw
|
||||
xxd -i $^ | sed "s/^unsigned/static const unsigned/" > $@
|
||||
|
||||
debug_rom.raw: debug_rom
|
||||
$(OBJCOPY) -O binary --only-section .text debug_rom debug_rom.raw
|
||||
%.raw: %
|
||||
$(OBJCOPY) -O binary --only-section .text $^ $@
|
||||
|
||||
debug_rom: debug_rom.o link.ld
|
||||
$(CC) -nostdlib -nostartfiles -Tlink.ld -o $@ $^
|
||||
debug_rom: $(DEPS)
|
||||
$(COMPILE) -DRV32 -DRV64 -o $@ $^
|
||||
|
||||
debug_rom32: $(DEPS)
|
||||
$(COMPILE) -DRV32 -DDEBUG_RAM_SIZE=28 -o $@ $^
|
||||
|
||||
debug_rom64: $(DEPS)
|
||||
$(COMPILE) -DRV64 -o $@ $^
|
||||
|
||||
clean:
|
||||
rm -f debug_rom debug_rom.o debug_rom.raw debug_rom.h
|
||||
rm -f $(ELFS) debug_rom*.raw debug_rom*.h
|
||||
|
@@ -6,11 +6,19 @@
|
||||
# TODO: Update these constants once they're finalized in the doc.
|
||||
|
||||
#define DEBUG_RAM 0x400
|
||||
#define DEBUG_RAM_SIZE 64
|
||||
#ifndef DEBUG_RAM_SIZE
|
||||
# define DEBUG_RAM_SIZE 64
|
||||
#endif
|
||||
|
||||
#define CLEARDEBINT 0x100
|
||||
#define SETHALTNOT 0x10c
|
||||
|
||||
#if (defined(RV32) + defined(RV64) + defined(RV128)) > 1
|
||||
# define MULTI_XLEN
|
||||
#elif (defined(RV32) + defined(RV64) + defined(RV128)) == 0
|
||||
# error define one or more of RV32, RV64, RV128
|
||||
#endif
|
||||
|
||||
.global entry
|
||||
.global resume
|
||||
.global exception
|
||||
@@ -33,19 +41,39 @@ _resume2:
|
||||
fence
|
||||
|
||||
# Restore s1.
|
||||
#ifdef MULTI_XLEN
|
||||
csrr s1, CSR_MISA
|
||||
#endif
|
||||
|
||||
#ifdef RV32
|
||||
# ifdef MULTI_XLEN
|
||||
bltz s1, restore_not_32
|
||||
# endif
|
||||
|
||||
restore_32:
|
||||
lw s1, (DEBUG_RAM + DEBUG_RAM_SIZE - 4)(zero)
|
||||
# if defined(RV64) || defined(RV128)
|
||||
j finish_restore
|
||||
# endif
|
||||
#endif
|
||||
|
||||
restore_not_32:
|
||||
#if defined(RV64) && defined(RV128)
|
||||
slli s1, s1, 1
|
||||
bltz s1, restore_128
|
||||
#endif
|
||||
|
||||
#ifdef RV64
|
||||
restore_64:
|
||||
ld s1, (DEBUG_RAM + DEBUG_RAM_SIZE - 8)(zero)
|
||||
#endif
|
||||
#if defined(RV64) && defined(RV128)
|
||||
j finish_restore
|
||||
#endif
|
||||
#ifdef RV128
|
||||
restore_128:
|
||||
nop #lq s1, (DEBUG_RAM + DEBUG_RAM_SIZE - 16)(zero)
|
||||
lq s1, (DEBUG_RAM + DEBUG_RAM_SIZE - 16)(zero)
|
||||
#endif
|
||||
|
||||
finish_restore:
|
||||
# s0 contains ~0 if we got here through an exception, and 0 otherwise.
|
||||
@@ -60,8 +88,7 @@ finish_restore:
|
||||
check_halt:
|
||||
csrr s0, CSR_DCSR
|
||||
andi s0, s0, DCSR_HALT
|
||||
beqz s0, exit
|
||||
j wait_for_interrupt
|
||||
bnez s0, wait_for_interrupt
|
||||
|
||||
exit:
|
||||
# Restore s0.
|
||||
@@ -81,20 +108,36 @@ _entry:
|
||||
|
||||
jdebugram:
|
||||
# Save s1 so that the debug program can use two registers.
|
||||
#ifdef MULTI_XLEN
|
||||
csrr s0, CSR_MISA
|
||||
#endif
|
||||
|
||||
#ifdef RV32
|
||||
# ifdef MULTI_XLEN
|
||||
bltz s0, save_not_32
|
||||
# endif
|
||||
save_32:
|
||||
sw s1, (DEBUG_RAM + DEBUG_RAM_SIZE - 4)(zero)
|
||||
jr zero, DEBUG_RAM
|
||||
#endif
|
||||
|
||||
save_not_32:
|
||||
#if defined(RV64) && defined(RV128)
|
||||
slli s0, s0, 1
|
||||
bltz s0, save_128
|
||||
#endif
|
||||
|
||||
#ifdef RV64
|
||||
save_64:
|
||||
sd s1, (DEBUG_RAM + DEBUG_RAM_SIZE - 8)(zero)
|
||||
jr zero, DEBUG_RAM
|
||||
#endif
|
||||
|
||||
#ifdef RV128
|
||||
save_128:
|
||||
nop #sq s1, (DEBUG_RAM + DEBUG_RAM_SIZE - 16)(zero)
|
||||
sq s1, (DEBUG_RAM + DEBUG_RAM_SIZE - 16)(zero)
|
||||
jr zero, DEBUG_RAM
|
||||
#endif
|
||||
|
||||
spontaneous_halt:
|
||||
csrr s0, CSR_MHARTID
|
||||
|
@@ -1,19 +1,16 @@
|
||||
static const unsigned char debug_rom_raw[] = {
|
||||
0x6f, 0x00, 0x00, 0x06, 0x6f, 0x00, 0xc0, 0x00, 0x13, 0x04, 0xf0, 0xff,
|
||||
0x6f, 0x00, 0xc0, 0x04, 0x6f, 0x00, 0xc0, 0x00, 0x13, 0x04, 0xf0, 0xff,
|
||||
0x6f, 0x00, 0x80, 0x00, 0x13, 0x04, 0x00, 0x00, 0x0f, 0x00, 0xf0, 0x0f,
|
||||
0xf3, 0x24, 0x00, 0xf1, 0x63, 0xc6, 0x04, 0x00, 0x83, 0x24, 0xc0, 0x43,
|
||||
0x6f, 0x00, 0x80, 0x01, 0x93, 0x94, 0x14, 0x00, 0x63, 0xc6, 0x04, 0x00,
|
||||
0x83, 0x34, 0x80, 0x43, 0x6f, 0x00, 0x80, 0x00, 0x13, 0x00, 0x00, 0x00,
|
||||
0x23, 0x2e, 0x80, 0x42, 0x73, 0x24, 0x40, 0xf1, 0x23, 0x20, 0x80, 0x10,
|
||||
0x73, 0x24, 0x00, 0x7b, 0x13, 0x74, 0x84, 0x00, 0x63, 0x04, 0x04, 0x00,
|
||||
0x6f, 0x00, 0x80, 0x05, 0x73, 0x24, 0x20, 0x7b, 0x73, 0x00, 0x20, 0x7b,
|
||||
0x73, 0x10, 0x24, 0x7b, 0x73, 0x24, 0x00, 0x7b, 0x13, 0x74, 0x04, 0x1c,
|
||||
0x13, 0x04, 0x04, 0xf4, 0x63, 0x18, 0x04, 0x02, 0x0f, 0x10, 0x00, 0x00,
|
||||
0x6f, 0x00, 0x80, 0x00, 0x83, 0x34, 0x80, 0x43, 0x23, 0x2e, 0x80, 0x42,
|
||||
0x73, 0x24, 0x40, 0xf1, 0x23, 0x20, 0x80, 0x10, 0x73, 0x24, 0x00, 0x7b,
|
||||
0x13, 0x74, 0x84, 0x00, 0x63, 0x12, 0x04, 0x04, 0x73, 0x24, 0x20, 0x7b,
|
||||
0x73, 0x00, 0x20, 0x7b, 0x73, 0x10, 0x24, 0x7b, 0x73, 0x24, 0x00, 0x7b,
|
||||
0x13, 0x74, 0x04, 0x1c, 0x13, 0x04, 0x04, 0xf4, 0x63, 0x1e, 0x04, 0x00,
|
||||
0x73, 0x24, 0x00, 0xf1, 0x63, 0x46, 0x04, 0x00, 0x23, 0x2e, 0x90, 0x42,
|
||||
0x67, 0x00, 0x00, 0x40, 0x13, 0x14, 0x14, 0x00, 0x63, 0x46, 0x04, 0x00,
|
||||
0x23, 0x3c, 0x90, 0x42, 0x67, 0x00, 0x00, 0x40, 0x13, 0x00, 0x00, 0x00,
|
||||
0x67, 0x00, 0x00, 0x40, 0x73, 0x24, 0x40, 0xf1, 0x23, 0x26, 0x80, 0x10,
|
||||
0x73, 0x60, 0x04, 0x7b, 0x73, 0x24, 0x00, 0x7b, 0x13, 0x74, 0x04, 0x02,
|
||||
0xe3, 0x0c, 0x04, 0xfe, 0x6f, 0xf0, 0xdf, 0xfb
|
||||
0x67, 0x00, 0x00, 0x40, 0x23, 0x3c, 0x90, 0x42, 0x67, 0x00, 0x00, 0x40,
|
||||
0x73, 0x24, 0x40, 0xf1, 0x23, 0x26, 0x80, 0x10, 0x73, 0x60, 0x04, 0x7b,
|
||||
0x73, 0x24, 0x00, 0x7b, 0x13, 0x74, 0x04, 0x02, 0xe3, 0x0c, 0x04, 0xfe,
|
||||
0x6f, 0xf0, 0x1f, 0xfd
|
||||
};
|
||||
static const unsigned int debug_rom_raw_len = 188;
|
||||
static const unsigned int debug_rom_raw_len = 148;
|
||||
|
Reference in New Issue
Block a user