1: armv8_switch_to_el2_m x4, x5, x6 ENDPROC(armv8_switch_to_el2) ENTRY(armv8_switch_to_el1) switch_el x6, 0f, 1f, 0f 0: /* x4 is kernel entry point. When running in EL1 * now, jump to the address saved in x4. */ br x4 1: armv8_switch_to_el1_m x4, x5, x6...
Status-R eretswitch_to_el1_from_el2:/* 使能el1与el0对el物理计数器reg,定时器reg的访问 */mrsx0, cnthctl_el2orrx0, x0,#3msrcnthctl_el2, x0msrcntvoff_el2, xzr/* Enable AArch64 in EL1. */// hcr_el2.rw = 1 设置在el1时使用aarch64 (否则为aarch32)movx1, #(1<<31)/...
(1)el1_sync是异常处理函数的入口,其定义位于arch/arm64/kvm/hyp/hyp-entry.S中: SYM_CODE_START(__kvm_hyp_vector) invalid_vect el2t_sync_invalid // Synchronous EL2t invalid_vect el2t_irq_invalid // IRQ EL2t invalid_vect el2t_fiq_invalid // FIQ EL2t invalid_vect el2t_error_invalid /...
ARM DDI 0487中D19.2以H开头的系列寄存器可以控制在guest读写执行某些敏感指令的行为。 enable HCR_EL2.IMO中断会route到EL2。还由FMO,AMObit也有同样的作用。 HCR_EL2的E2H控制vhe的行为,如果打开则由TGE决定当前是VM还是host,1是host,表面host kernel在EL2,也就不需要virtual interrupt了。所以在VM中E2H=1,...
switch_el x1, 3f, 1f, 1f 3: mrs x0, S3_1_c15_c2_1 /* cpuectlr_el1 */ orr x0, x0, #0x40 msr S3_1_c15_c2_1, x0 isb 1: #endif /* Apply ARM core specific erratas */ bl apply_core_errata --- (2) /* * Cache/BPB/TLB Invalidate * i-cache is invalidated before e...
ARMv8-A体系结构有四个异常级别:EL0、EL1、EL2和EL3。处理器执行 只能通过获取异常或从异常返回来在异常级别之间移动。 需要注意的是: When the processor moves from a higher to a lower Exception level, the Execution state can stay the same, or it can switch from AArch64 to AArch32. ...
登录后复制switch(irqnr) { 登录后复制casePENDING_G1S_INTID: 登录后复制returnINTR_TYPE_S_EL1; 登录后复制casePENDING_G1NS_INTID: 登录后复制returnINTR_TYPE_NS; 登录后复制caseGIC_SPURIOUS_INTERRUPT: 登录后复制returnINTR_TYPE_INVAL; 登录后复制default: ...
.align7,INV_INSN el0_sync_a64:restore_mapping mrs x2,esr_el1 mrs x3,sp_el0 lsr x2,x2,#ESR_EC_SHIFT cmp x2,#ESR_EC_AARCH64_SVC b.eq el0_svc//---b.cond的应用 b el0_sync_abort check_vector_size el0_sync_a64 (cbz、cbnz的...
.align7,INV_INSN el0_sync_a64:restore_mapping mrs x2,esr_el1 mrs x3,sp_el0 lsr x2,x2,#ESR_EC_SHIFT cmp x2,#ESR_EC_AARCH64_SVC b.eq el0_svc//---b.cond的应用 b el0_sync_abort check_vector_size el0_sync_a64 (cbz、cbnz的...
Linux内核中,异常处理主要由两个文件完毕,entry.S和traps.c。当然另一些其他异常处理函数分布于fault.c, memory.c等等。entry.S包括异常的入口、进入异常处理C函数前的压栈、退出C函数前的出栈、一些fork函数相关的处理代码(暂不分析)、任务切换汇编处理过程(cpu_switch_to函数,暂不分析)。