On 5/9/20 3:09 PM, Philippe Mathieu-Daudé wrote:
Restrict the following handlers to system-mode:
- do_unaligned_access
- do_transaction_failed
- get_phys_page_debug
- get_phys_page_attrs_debug
Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org>
---
include/hw/core/cpu.h | 8 +++++---
target/alpha/cpu.h | 4 +++-
target/arm/cpu.h | 6 +++---
target/arm/internals.h | 4 ++++
target/cris/cpu.h | 2 ++
target/hppa/cpu.h | 2 +-
target/i386/cpu.h | 2 ++
target/m68k/cpu.h | 7 ++++++-
target/microblaze/cpu.h | 5 ++++-
target/mips/internal.h | 2 +-
target/nios2/cpu.h | 5 ++++-
target/openrisc/cpu.h | 3 ++-
target/ppc/cpu.h | 2 +-
target/riscv/cpu.h | 20 ++++++++++----------
target/sh4/cpu.h | 2 +-
target/sparc/cpu.h | 2 ++
target/xtensa/cpu.h | 12 +++++++-----
target/hppa/cpu.c | 4 +++-
target/ppc/translate_init.inc.c | 2 +-
19 files changed, 62 insertions(+), 32 deletions(-)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 5bf94d28cf..ed09d056d1 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -167,6 +167,7 @@ typedef struct CPUClass {
int reset_dump_flags;
bool (*has_work)(CPUState *cpu);
void (*do_interrupt)(CPUState *cpu);
+#ifndef CONFIG_USER_ONLY
I forgot once Peter Maydell told me we can't do that for some reason I
don't remember.
At least this changes the sizeof(CPUClass), so we get:
qom/object.c:315:type_initialize: assertion failed: (parent->class_size
<= ti->class_size)
So we can't poison the hwaddr type? (final patch of this series).
void (*do_unaligned_access)(CPUState *cpu, vaddr addr,
MMUAccessType access_type,
int mmu_idx, uintptr_t retaddr);
@@ -174,6 +175,10 @@ typedef struct CPUClass {
unsigned size, MMUAccessType access_type,
int mmu_idx, MemTxAttrs attrs,
MemTxResult response, uintptr_t retaddr);
+ hwaddr (*get_phys_page_debug)(CPUState *cpu, vaddr addr);
+ hwaddr (*get_phys_page_attrs_debug)(CPUState *cpu, vaddr addr,
+ MemTxAttrs *attrs);
+#endif /* CONFIG_USER_ONLY */
bool (*virtio_is_big_endian)(CPUState *cpu);
int (*memory_rw_debug)(CPUState *cpu, vaddr addr,
uint8_t *buf, int len, bool is_write);
@@ -189,9 +194,6 @@ typedef struct CPUClass {
bool (*tlb_fill)(CPUState *cpu, vaddr address, int size,
MMUAccessType access_type, int mmu_idx,
bool probe, uintptr_t retaddr);
- hwaddr (*get_phys_page_debug)(CPUState *cpu, vaddr addr);
- hwaddr (*get_phys_page_attrs_debug)(CPUState *cpu, vaddr addr,
- MemTxAttrs *attrs);
int (*asidx_from_attrs)(CPUState *cpu, MemTxAttrs attrs);
int (*gdb_read_register)(CPUState *cpu, GByteArray *buf, int reg);
int (*gdb_write_register)(CPUState *cpu, uint8_t *buf, int reg);
[...]