mirror of
				https://github.com/yuzu-emu/unicorn.git
				synced 2025-11-04 11:54:47 +00:00 
			
		
		
		
	target/arm/op_helper: Correct bad merge
This commit is contained in:
		
							parent
							
								
									9a0632bfcf
								
							
						
					
					
						commit
						0751366e5c
					
				| 
						 | 
					@ -217,7 +217,6 @@ void arm_cpu_do_transaction_failed(CPUState *cs, hwaddr physaddr,
 | 
				
			||||||
    cpu_restore_state(cs, retaddr);
 | 
					    cpu_restore_state(cs, retaddr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fi.ea = arm_extabort_type(response);
 | 
					    fi.ea = arm_extabort_type(response);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    fi.type = ARMFault_SyncExternal;
 | 
					    fi.type = ARMFault_SyncExternal;
 | 
				
			||||||
    deliver_fault(cpu, addr, access_type, mmu_idx, &fi);
 | 
					    deliver_fault(cpu, addr, access_type, mmu_idx, &fi);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -889,7 +888,6 @@ void HELPER(pre_smc)(CPUARMState *env, uint32_t syndrome)
 | 
				
			||||||
         * "firmware" via HCR.TSC, so for these purposes treat
 | 
					         * "firmware" via HCR.TSC, so for these purposes treat
 | 
				
			||||||
         * PSCI-via-SMC as implying an EL3.
 | 
					         * PSCI-via-SMC as implying an EL3.
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        /* If we have no EL3 then SMC always UNDEFs */
 | 
					 | 
				
			||||||
        undef = true;
 | 
					        undef = true;
 | 
				
			||||||
    } else if (!secure && cur_el == 1 && (env->cp15.hcr_el2 & HCR_TSC)) {
 | 
					    } else if (!secure && cur_el == 1 && (env->cp15.hcr_el2 & HCR_TSC)) {
 | 
				
			||||||
        /* In NS EL1, HCR controlled routing to EL2 has priority over SMD.
 | 
					        /* In NS EL1, HCR controlled routing to EL2 has priority over SMD.
 | 
				
			||||||
| 
						 | 
					@ -1114,15 +1112,27 @@ static bool bp_wp_matches(ARMCPU *cpu, int n, bool is_wp)
 | 
				
			||||||
    CPUARMState *env = &cpu->env;
 | 
					    CPUARMState *env = &cpu->env;
 | 
				
			||||||
    uint64_t cr;
 | 
					    uint64_t cr;
 | 
				
			||||||
    int pac, hmc, ssc, wt, lbn;
 | 
					    int pac, hmc, ssc, wt, lbn;
 | 
				
			||||||
    /* TODO: check against CPU security state when we implement TrustZone */
 | 
					    /* Note that for watchpoints the check is against the CPU security
 | 
				
			||||||
    bool is_secure = false;
 | 
					     * state, not the S/NS attribute on the offending data access.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    bool is_secure = arm_is_secure(env);
 | 
				
			||||||
 | 
					    int access_el = arm_current_el(env);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (is_wp) {
 | 
					    if (is_wp) {
 | 
				
			||||||
        if (!env->cpu_watchpoint[n]
 | 
					        CPUWatchpoint *wp = env->cpu_watchpoint[n];
 | 
				
			||||||
            || !(env->cpu_watchpoint[n]->flags & BP_WATCHPOINT_HIT)) {
 | 
					
 | 
				
			||||||
 | 
					        if (!wp || !(wp->flags & BP_WATCHPOINT_HIT)) {
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        cr = env->cp15.dbgwcr[n];
 | 
					        cr = env->cp15.dbgwcr[n];
 | 
				
			||||||
 | 
					       // Unicorn: commented out
 | 
				
			||||||
 | 
					       // if (wp->hitattrs.user) {
 | 
				
			||||||
 | 
					       //     /* The LDRT/STRT/LDT/STT "unprivileged access" instructions should
 | 
				
			||||||
 | 
					       //      * match watchpoints as if they were accesses done at EL0, even if
 | 
				
			||||||
 | 
					       //      * the CPU is at EL1 or higher.
 | 
				
			||||||
 | 
					       //      */
 | 
				
			||||||
 | 
					       //     access_el = 0;
 | 
				
			||||||
 | 
					       // }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        uint64_t pc = is_a64(env) ? env->pc : env->regs[15];
 | 
					        uint64_t pc = is_a64(env) ? env->pc : env->regs[15];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1163,15 +1173,7 @@ static bool bp_wp_matches(ARMCPU *cpu, int n, bool is_wp)
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* TODO: this is not strictly correct because the LDRT/STRT/LDT/STT
 | 
					    switch (access_el) {
 | 
				
			||||||
     * "unprivileged access" instructions should match watchpoints as if
 | 
					 | 
				
			||||||
     * they were accesses done at EL0, even if the CPU is at EL1 or higher.
 | 
					 | 
				
			||||||
     * Implementing this would require reworking the core watchpoint code
 | 
					 | 
				
			||||||
     * to plumb the mmu_idx through to this point. Luckily Linux does not
 | 
					 | 
				
			||||||
     * rely on this behaviour currently.
 | 
					 | 
				
			||||||
     * For breakpoints we do want to use the current CPU state.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    switch (arm_current_el(env)) {
 | 
					 | 
				
			||||||
    case 3:
 | 
					    case 3:
 | 
				
			||||||
    case 2:
 | 
					    case 2:
 | 
				
			||||||
        if (!hmc) {
 | 
					        if (!hmc) {
 | 
				
			||||||
| 
						 | 
					@ -1300,6 +1302,7 @@ void arm_debug_excp_handler(CPUState *cs)
 | 
				
			||||||
            bool same_el = arm_debug_target_el(env) == arm_current_el(env);
 | 
					            bool same_el = arm_debug_target_el(env) == arm_current_el(env);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            cs->watchpoint_hit = NULL;
 | 
					            cs->watchpoint_hit = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (extended_addresses_enabled(env)) {
 | 
					            if (extended_addresses_enabled(env)) {
 | 
				
			||||||
                env->exception.fsr = (1 << 9) | 0x22;
 | 
					                env->exception.fsr = (1 << 9) | 0x22;
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue