On 10/10/20 3:06 AM, Yifei Jiang wrote: > +++ b/target/riscv/cpu.h > @@ -311,6 +311,10 @@ extern const char * const riscv_fpr_regnames[]; > extern const char * const riscv_excp_names[]; > extern const char * const riscv_intr_names[]; > > +#ifndef CONFIG_USER_ONLY > +extern const VMStateDescription vmstate_riscv_cpu; > +#endif > +
This is not part of the public interface to RISCVCPU, so it should go in internals.h. Not that there aren't other things in cpu.h that don't belong. No target has been perfect in differentiating what's interface and what's implementation. > + > +#ifdef TARGET_RISCV32 > + VMSTATE_UINTTL(env.mstatush, RISCVCPU), > +#endif Would this be a good time to expand mstatus to uint64_t instead of target_ulong so that it can be saved as one unit and reduce some ifdefs in the code base? Similarly with some of the other status registers that are two halved for riscv32. r~