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,...
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...
// sctlr_el1.EOS = 1 设置在el1返回的异常为同步异常 // sctlr_el1.TSCXT = 1 禁止el0访问SCXTNUM_EL0(这个寄存器可以用来防止利用分支预测进行侧信道攻击,没什么用,关掉了之) // sctlr_el1.EIS = 1 设置向进入el1的异常为同步异常 // sctlr_el2.SPAN = 1 发生异常到EL1时,PSTATE.PAN 不变...
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)/...
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...
switch (exception_index) { case ARM_EXCEPTION_IRQ: return 1; case ARM_EXCEPTION_EL1_SERROR: return 1; case ARM_EXCEPTION_TRAP: return handle_trap_exceptions(vcpu); … return 0; } } 我们看到该函数对中断退出情形未做任何处理而直接返回了,那么虚拟中断是在哪里被注入的呢?
登录后复制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的...
Linux内核中,异常处理主要由两个文件完毕,entry.S和traps.c。当然另一些其他异常处理函数分布于fault.c, memory.c等等。entry.S包括异常的入口、进入异常处理C函数前的压栈、退出C函数前的出栈、一些fork函数相关的处理代码(暂不分析)、任务切换汇编处理过程(cpu_switch_to函数,暂不分析)。
#if defined(CONFIG_ARMV8__SPL_EXCEPTION_VECTORS) || !defined(CONFIG_SPL_BUILD) #if defined(CONFIG_ARMV8_SPL_EXCEPTION_VECTORS) || !defined(CONFIG_SPL_BUILD) /* Relocate vBAR */ adr x0, vectors switch_el x1, 3f, 2f, 1f 0 comments on commit ef331e3 Please sign in to comment. Fo...