forked from mirror/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
786 B
ArmAsm
54 lines
786 B
ArmAsm
.option norvc
|
|
|
|
.text
|
|
.global _start
|
|
_start:
|
|
lla t0, trap
|
|
csrw mtvec, t0
|
|
|
|
# These are all illegal instructions
|
|
csrw time, x0
|
|
.insn i CUSTOM_0, 0, x0, x0, 0x321
|
|
csrw time, x0
|
|
.insn i CUSTOM_0, 0, x0, x0, 0x123
|
|
csrw cycle, x0
|
|
|
|
# Success!
|
|
li a0, 0
|
|
j _exit
|
|
|
|
trap:
|
|
# When an instruction traps, compare it to the insn in memory.
|
|
csrr t0, mepc
|
|
csrr t1, mtval
|
|
lwu t2, 0(t0)
|
|
bne t1, t2, fail
|
|
|
|
# Skip the insn and continue.
|
|
addi t0, t0, 4
|
|
csrw mepc, t0
|
|
mret
|
|
|
|
fail:
|
|
li a0, 1
|
|
|
|
# Exit code in a0
|
|
_exit:
|
|
lla a1, semiargs
|
|
li t0, 0x20026 # ADP_Stopped_ApplicationExit
|
|
sd t0, 0(a1)
|
|
sd a0, 8(a1)
|
|
li a0, 0x20 # TARGET_SYS_EXIT_EXTENDED
|
|
|
|
# Semihosting call sequence
|
|
.balign 16
|
|
slli zero, zero, 0x1f
|
|
ebreak
|
|
srai zero, zero, 0x7
|
|
j .
|
|
|
|
.data
|
|
.balign 16
|
|
semiargs:
|
|
.space 16
|