mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
target/nios2: Prevent writes to read-only or reserved control fields
Create an array of masks which detail the writable and readonly bits for each control register. Apply them when writing to control registers, including the write to status during eret. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-Id: <20220421151735.31996-38-richard.henderson@linaro.org>
This commit is contained in:
parent
be77e1d5fe
commit
796945d596
4 changed files with 171 additions and 31 deletions
|
@ -190,6 +190,11 @@ struct CPUArchState {
|
|||
int error_code;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint32_t writable;
|
||||
uint32_t readonly;
|
||||
} ControlRegState;
|
||||
|
||||
/**
|
||||
* Nios2CPU:
|
||||
* @env: #CPUNios2State
|
||||
|
@ -213,9 +218,17 @@ struct ArchCPU {
|
|||
uint32_t reset_addr;
|
||||
uint32_t exception_addr;
|
||||
uint32_t fast_tlb_miss_addr;
|
||||
|
||||
/* Bits within each control register which are reserved or readonly. */
|
||||
ControlRegState cr_state[NUM_CR_REGS];
|
||||
};
|
||||
|
||||
|
||||
static inline bool nios2_cr_reserved(const ControlRegState *s)
|
||||
{
|
||||
return (s->writable | s->readonly) == 0;
|
||||
}
|
||||
|
||||
void nios2_tcg_init(void);
|
||||
void nios2_cpu_do_interrupt(CPUState *cs);
|
||||
void dump_mmu(CPUNios2State *env);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue