7.2ARMV8-A草稿(2)
ARM构架提供的主要是一种模式,在指令执行方面,那就是一种指令执行的模式,比如说是单指令执行还是多指令并行;在内存管理方面,那就是一种内存管理模式,比如说内存是带缓存还是不带缓存,是共享还是不共享,是只读还是可读可写等;在数据计算方面,那就是一种数据计算模式,它就是释义一个算符的含义而不涉及其具体的左参数或右参数的内容(如果只有两个参数的话)。具体的内容是由平台和开发者以及用户的现实定义的。所以会出现很多的内容在手册中都出现由“由现实定义决定”的情形。而且该现实将是构架模式的子集下发挥实际定义。
最好的入门就是从工程出发,之前关于V8构架下关于指令的执行中TRAP捕获指令的行为只算是做了些简单的切入,而就这次就收集到TRAP捕获的主要关于EL3的寄存器实现,内容还是被当作草稿,就是简单地做个速写描摹个基本的模样先:
#define CPTR_EL3 Capture register el3
{
bit31:TCPAC
0b1 EL2 访问CPTR_EL2或者HCPTR,以及EL2和EL1访问CPACR_EL1或者CPACR,被EL3捕获除非它们已被CPTR_EL2.TCPAC捕获
其中TRAP对应的EC值为:
EL2->CPTR_EL2 == EC=0x18
EL2->HCPTR == EC=0x03
EL1/2->CPACR_EL1 == EC=0x18
EL1/2->CPACR == EC=0x3
0b0 这个控制位不会导致任何指令被捕获
bit20:TTA
0b1 任何系统寄存器的访问路径都被EL3捕获,除非已经被CPACR.TRCDIS,CPACR_EL1.TTA或者CPTR_EL2.TTA捕获
0b0 这个控制不会导致任何指令被捕获
note:
在AArch64状态,路径寄存器(指令寄存器/协处理器寄存器)的op0=2,op1=1,且CRn<0b1000并且被EL3捕获的,
它们的EC值都为0x18.
bit10:TFP
对于指令集:{Adbanced SIMD,浮点命令}涉及所有的EL等级以及任何安全状态
0b1 这个控制位引发这些指令的捕获
0b0 这个控制位不会导致任何指令被捕获
note:
这些指令如果被捕获,它们的EC值将为0x07
}
#define MDCR_EL3 Monitor Debug Config Register
{
bit16:SDD
AArch64 安全状态内置调试取消.取消在安全状态的软件调试除了断点指令中断.
0b1 在安全状态的调试中断,除了断点中断外,都被取消.
0b0 任何安全状态的调试中断不受这个控制位的影响
bit10:TDOSA
捕获debug 操作系统相关的访问.捕获Traps EL2以及EL1向系统关机调试寄存器的访问到EL3
FEAT_DoubleLock=1:
• Accesses from AArch64 state, OSLAR_EL1, OSLSR_EL1, OSDLR_EL1,
DBGPRCR_EL1, and any IMPLEMENTATION DEFINED register with similar functionality that
the implementation specifies as trapped by this bit, are trapped to EL3 and reported using EC
syndrome value 0x18.
• Accesses using MCR or MRC to DBGOSLAR, DBGOSLSR, DBGOSDLR, and
DBGPRCR, are trapped to EL3 and reported using EC syndrome value 0x05.
• Accesses to any IMPLEMENTATION DEFINED register with similar functionality that the
implementation specifies as trapped by this bit
否则:
The following registers are affected by this trap:
• AArch64: OSLAR_EL1, OSLSR_EL1, and DBGPRCR_EL1.
• AArch32: DBGOSLAR, DBGOSLSR, and DBGPRCR.
• AArch64 and AArch32: Any IMPLEMENTATION DEFINED register with similar functionality
that the implementation specifies as trapped by this bit.
0b1 EL2以及EL1向系统关机调试寄存器的访问都被EL3捕获,除非已经被HDCR.TDOSA或者MDCR_EL2.TDOSA捕获
0b0 这个控制位不会导致任何的指令被捕获
bit9:TDA
捕获调试访问.捕获EL2,EL1以及EL0系统寄存器访问到系统调试寄存器的而没有被MDCR_EL3.TDOSA捕获的访问
//......
0b1 EL0,EL1以及EL2访问这些调试寄存器(除了已经被MDCR_EL3.TDOSA捕获的)都被捕获到EL3.除非已经被DBGDSCRext.UDCCdis
MDSCR_EL1.TDCC,HDCR.TDA或者MDCR_EL2.TDA捕获
0b0 这个控制位不会导致任何指令被捕获.
` bit6:TPM
if FEAT_PMUv3==1
捕获处理器访问.向任何处理器寄存器的访问从EL0,EL2,EL2到EL3,遍及任何的安全状态和执行状态都被捕获.
相关的指令集都是PM开头的指令集.
0b1 任何这些指令都会被EL3捕获,除非它已经被HDCR.TPM或者MDCR_EL2.TPM捕获
0b0 这个控制位不会导致任何指令被捕获
else
res0(失效)
}