3942
memop, result, fi);
3943
}
3944
3945
-static hwaddr arm_cpu_get_phys_addr(CPUARMState *env, vaddr addr,
3946
- MemTxAttrs *attrs, ARMMMUIdx mmu_idx)
3945
+static bool arm_cpu_get_phys_addr(CPUARMState *env, vaddr addr,
3946
+ TranslateForDebugResult *result,
3947
+ ARMMMUIdx mmu_idx)
3948
{
3949
S1Translate ptw = {
3950
.in_mmu_idx = mmu_idx,
3955
};
3956
GetPhysAddrResult res = {};
3957
ARMMMUFaultInfo fi = {};
3957
- bool ret = get_phys_addr_gpc(env, &ptw, addr, MMU_DATA_LOAD, 0, &res, &fi);
3958
- *attrs = res.f.attrs;
3958
+ bool fault = get_phys_addr_gpc(env, &ptw, addr, MMU_DATA_LOAD, 0, &res, &fi);
3959
3960
- if (ret) {
3961
- return -1;
3960
+ if (!fault) {
3961
+ /* translation succeeded */
3962
+ result->physaddr = res.f.phys_addr;
3963
+ result->attrs = res.f.attrs;
3964
+ result->lg_page_size = res.f.lg_page_size;
3965
}
3963
- return res.f.phys_addr;
3966
+ return fault;
3967
}
3968
3966
-hwaddr arm_cpu_get_phys_addr_attrs_debug(CPUState *cs, vaddr addr,
3967
- MemTxAttrs *attrs)
3969
+bool arm_cpu_translate_for_debug(CPUState *cs, vaddr addr,
3970
+ TranslateForDebugResult *result)
3971
{
3972
ARMCPU *cpu = ARM_CPU(cs);
3973
CPUARMState *env = &cpu->env;
3974
ARMMMUIdx mmu_idx = arm_mmu_idx(env);
3975
3973
- hwaddr res = arm_cpu_get_phys_addr(env, addr, attrs, mmu_idx);
3974
-
3975
- if (res != -1) {
3976
- return res;
3976
+ /*
3977
+ * Note that this function returns true on translation success,
3978
+ * but arm_cpu_get_phys_addr() and all the other get_phys_addr
3979
+ * style functions in this file return true on failure.
3980
+ */
3981
+ if (!arm_cpu_get_phys_addr(env, addr, result, mmu_idx)) {
3982
+ return true;
3983
}
3984
3985
/*
3990
switch (mmu_idx) {
3991
case ARMMMUIdx_E10_1:
3992
case ARMMMUIdx_E10_1_PAN:
3987
- return arm_cpu_get_phys_addr(env, addr, attrs, ARMMMUIdx_E10_0);
3993
+ return !arm_cpu_get_phys_addr(env, addr, result, ARMMMUIdx_E10_0);
3994
case ARMMMUIdx_E20_2:
3995
case ARMMMUIdx_E20_2_PAN:
3990
- return arm_cpu_get_phys_addr(env, addr, attrs, ARMMMUIdx_E20_0);
3996
+ return !arm_cpu_get_phys_addr(env, addr, result, ARMMMUIdx_E20_0);
3997
default:
3992
- return -1;
3998
+ /* translation failed */
3999
+ return false;
4000
}
4001
}