[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH v2 14/26] target/arm: Define arm_cpu_do_unaligned_acce
From: |
Richard Henderson |
Subject: |
[Qemu-arm] [PATCH v2 14/26] target/arm: Define arm_cpu_do_unaligned_access for CONFIG_USER_ONLY |
Date: |
Sun, 10 Feb 2019 17:08:17 -0800 |
We will need this to raise unaligned exceptions from user mode.
Signed-off-by: Richard Henderson <address@hidden>
---
target/arm/op_helper.c | 33 ++++++++++++++++-----------------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c
index 8698b4dc83..d3cf362e4b 100644
--- a/target/arm/op_helper.c
+++ b/target/arm/op_helper.c
@@ -87,8 +87,6 @@ uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, void
*vn,
return val;
}
-#if !defined(CONFIG_USER_ONLY)
-
static inline uint32_t merge_syn_data_abort(uint32_t template_syn,
unsigned int target_el,
bool same_el, bool ea,
@@ -179,6 +177,22 @@ static void deliver_fault(ARMCPU *cpu, vaddr addr,
MMUAccessType access_type,
raise_exception(env, exc, syn, target_el);
}
+/* Raise a data fault alignment exception for the specified virtual address */
+void arm_cpu_do_unaligned_access(CPUState *cs, vaddr vaddr,
+ MMUAccessType access_type,
+ int mmu_idx, uintptr_t retaddr)
+{
+ ARMCPU *cpu = ARM_CPU(cs);
+ ARMMMUFaultInfo fi = {};
+
+ /* now we have a real cpu fault */
+ cpu_restore_state(cs, retaddr, true);
+
+ fi.type = ARMFault_Alignment;
+ deliver_fault(cpu, vaddr, access_type, mmu_idx, &fi);
+}
+
+#ifndef CONFIG_USER_ONLY
/* try to fill the TLB and return an exception if error. If retaddr is
* NULL, it means that the function was called in C code (i.e. not
* from generated code or from helper.c)
@@ -200,21 +214,6 @@ void tlb_fill(CPUState *cs, target_ulong addr, int size,
}
}
-/* Raise a data fault alignment exception for the specified virtual address */
-void arm_cpu_do_unaligned_access(CPUState *cs, vaddr vaddr,
- MMUAccessType access_type,
- int mmu_idx, uintptr_t retaddr)
-{
- ARMCPU *cpu = ARM_CPU(cs);
- ARMMMUFaultInfo fi = {};
-
- /* now we have a real cpu fault */
- cpu_restore_state(cs, retaddr, true);
-
- fi.type = ARMFault_Alignment;
- deliver_fault(cpu, vaddr, access_type, mmu_idx, &fi);
-}
-
/* arm_cpu_do_transaction_failed: handle a memory system error response
* (eg "no device/memory present at address") by raising an external abort
* exception
--
2.17.2
- [Qemu-arm] [PATCH v2 07/26] target/arm: Assert no manual change to CACHED_PSTATE_BITS, (continued)
- [Qemu-arm] [PATCH v2 07/26] target/arm: Assert no manual change to CACHED_PSTATE_BITS, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 22/26] target/arm: Create tagged ram when MTE is enabled, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 11/26] target/arm: Implement ADDG, SUBG instructions, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 13/26] target/arm: Implement the SUBP instruction, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 25/26] target/arm: Enable MTE, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 23/26] target/arm: Add allocation tag storage for user mode, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 26/26] tests/tcg/aarch64: Add mte smoke tests, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 12/26] target/arm: Implement the GMI instruction, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 24/26] target/arm: Add allocation tag storage for system mode, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 20/26] tcg: Introduce target-specific page data for user-only, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 14/26] target/arm: Define arm_cpu_do_unaligned_access for CONFIG_USER_ONLY,
Richard Henderson <=
- [Qemu-arm] [PATCH v2 17/26] target/arm: Implement the access tag cache flushes, Richard Henderson, 2019/02/10
- [Qemu-arm] [PATCH v2 09/26] target/arm: Suppress tag check for sp+offset, Richard Henderson, 2019/02/10