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