RTEMS trap handling versus RISCV mtvec BASE and MODE
Schweikhardt, Jens (TSPCE3-TL4)
Jens.Schweikhardt at tesat.de
Tue Jun 1 10:05:02 UTC 2021
hello world,
I'm scratching my head over what may turn out to be a glitch in
Volume 2, Privileged Spec v. 20190608 RISC-V
https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMFDQC-and-Priv-v1.11/riscv-privileged-20190608.pdf
In particular, the way RTEMS for RISCV sets the machine trap vector
in src/rtems/bsps/riscv/shared/start/start.S with
LADDR t0, _RISCV_Exception_handler
csrw mtvec, t0
i.e. loads the 32 bit address _RISCV_Exception_handler into mtvec.
This seems to contradict the layout oft he mtvec register documented in 3.1.7 as
mtvec: 30 bits of BASE, 2 bits of MODE.
in conjunction with Table 3.5, MODE 0, "All exceptions set pc to BASE".
This would set pc to _RISCV_Exception_handler *divided by 4* and probably crash.
So either RTEMS writes the wrong value to mtvec, or the RISC-V docs should say "All exceptions set pc to BASE x 4".
Am I missing something?
Jens
________________________________
Tesat-Spacecom GmbH & Co. KG
Sitz: Backnang; Registergericht: Amtsgericht Stuttgart HRA 270977
Persoenlich haftender Gesellschafter: Tesat-Spacecom Geschaeftsfuehrungs GmbH;
Sitz: Backnang; Registergericht: Amtsgericht Stuttgart HRB 271658;
Geschaeftsfuehrung: Dr. Marc Steckling, Kerstin Basche, Ralf Zimmermann
[banner]
More information about the users
mailing list