aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2014-09-12 15:12:26 +0100
committerPeter Maydell <peter.maydell@linaro.org>2014-09-12 15:12:26 +0100
commit4c24f4004089a308c5de8ed720cf6bd1746aedd8 (patch)
treed83f318edd5b987a94d0a16ed8a25a215c645fca /include
parent6cd14054b67774cc58a51fca6660cfa1d3c08059 (diff)
parent92df845070290236d1b28b03453deec1ae9c4263 (diff)
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20140912' into staging
target-arm: * add "linux,stdout-path" to the virt DTB * fix a long standing bug with IRQ disabling on Cortex-M CPUs * implement input interrupt logic in the PL061 * fix failure to load correct SP/PC on reset of Cortex-M CPUs if the vector table is not in a ROM-blob-in-RAM * provide flash devices for boot ROMs in the virt board * implement architectural watchpoints * fix misimplementation of Inner Shareable TLB operations that caused instability of guests in TCG SMP configurations * configure PL011 and PL031 in the virt board correctly with level-triggered interrupts rather than edge-triggered * support providing a device tree blob to ROM (firmware) images as well as to kernels # gpg: Signature made Fri 12 Sep 2014 14:19:08 BST using RSA key ID 14360CDE # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" * remotes/pmaydell/tags/pull-target-arm-20140912: (23 commits) hw/arm/boot: enable DTB support when booting ELF images hw/arm/boot: load device tree to base of DRAM if no -kernel option was passed hw/arm/boot: pass an address limit to and return size from load_dtb() hw/arm/boot: load DTB as a ROM image hw/arm/virt: fix pl011 and pl031 irq flags target-arm: Make *IS TLB maintenance ops affect all CPUs target-arm: Push legacy wildcard TLB ops back into v6 target-arm: Implement minimal DBGVCR, OSDLR_EL1, MDCCSR_EL0 target-arm: Remove comment about MDSCR_EL1 being dummy implementation target-arm: Set DBGDSCR.MOE for debug exceptions taken to AArch32 target-arm: Implement handling of fired watchpoints target-arm: Move extended_addresses_enabled() to internals.h target-arm: Implement setting of watchpoints cpu-exec: Make debug_excp_handler a QOM CPU method exec.c: Record watchpoint fault address and direction exec.c: Provide full set of dummy wp remove functions in user-mode exec.c: Relax restrictions on watchpoint length and alignment hw/arm/virt: Provide flash devices for boot ROMs target-arm: Fix broken indentation in arm_cpu_reest() target-arm: Fix resetting issues on ARMv7-M CPUs ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include')
-rw-r--r--include/exec/exec-all.h4
-rw-r--r--include/qom/cpu.h10
2 files changed, 8 insertions, 6 deletions
diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
index 5e5d86ec46..421a142a0d 100644
--- a/include/exec/exec-all.h
+++ b/include/exec/exec-all.h
@@ -356,10 +356,6 @@ static inline tb_page_addr_t get_page_addr_code(CPUArchState *env1, target_ulong
tb_page_addr_t get_page_addr_code(CPUArchState *env1, target_ulong addr);
#endif
-typedef void (CPUDebugExcpHandler)(CPUArchState *env);
-
-void cpu_set_debug_excp_handler(CPUDebugExcpHandler *handler);
-
/* vl.c */
extern int singlestep;
diff --git a/include/qom/cpu.h b/include/qom/cpu.h
index 1aafbf5f34..370b3ebee9 100644
--- a/include/qom/cpu.h
+++ b/include/qom/cpu.h
@@ -95,6 +95,7 @@ struct TranslationBlock;
* @get_phys_page_debug: Callback for obtaining a physical address.
* @gdb_read_register: Callback for letting GDB read a register.
* @gdb_write_register: Callback for letting GDB write a register.
+ * @debug_excp_handler: Callback for handling debug exceptions.
* @vmsd: State description for migration.
* @gdb_num_core_regs: Number of core registers accessible to GDB.
* @gdb_core_xml_file: File name for core registers GDB XML description.
@@ -134,6 +135,7 @@ typedef struct CPUClass {
hwaddr (*get_phys_page_debug)(CPUState *cpu, vaddr addr);
int (*gdb_read_register)(CPUState *cpu, uint8_t *buf, int reg);
int (*gdb_write_register)(CPUState *cpu, uint8_t *buf, int reg);
+ void (*debug_excp_handler)(CPUState *cpu);
int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu,
int cpuid, void *opaque);
@@ -169,7 +171,8 @@ typedef struct CPUBreakpoint {
typedef struct CPUWatchpoint {
vaddr vaddr;
- vaddr len_mask;
+ vaddr len;
+ vaddr hitaddr;
int flags; /* BP_* */
QTAILQ_ENTRY(CPUWatchpoint) entry;
} CPUWatchpoint;
@@ -622,9 +625,12 @@ void cpu_single_step(CPUState *cpu, int enabled);
#define BP_MEM_WRITE 0x02
#define BP_MEM_ACCESS (BP_MEM_READ | BP_MEM_WRITE)
#define BP_STOP_BEFORE_ACCESS 0x04
-#define BP_WATCHPOINT_HIT 0x08
+/* 0x08 currently unused */
#define BP_GDB 0x10
#define BP_CPU 0x20
+#define BP_WATCHPOINT_HIT_READ 0x40
+#define BP_WATCHPOINT_HIT_WRITE 0x80
+#define BP_WATCHPOINT_HIT (BP_WATCHPOINT_HIT_READ | BP_WATCHPOINT_HIT_WRITE)
int cpu_breakpoint_insert(CPUState *cpu, vaddr pc, int flags,
CPUBreakpoint **breakpoint);