introduction
watchpoint,也可被称为 data breakpoint,是由data address产生的一个debug event
debugger配置watchpoint在一个data address或者一个data address range
可配置为read access only, write access only, or both可以lint to a Linked Context breakpoint,即必须在特定的context下match才会触发watchpint eventwatchpint会产生一个watchpoint debug event指令fetch是不会产生watchpint event
regs
ID_AA64DFR0_EL1.WRPs 查询实现了多少个watchpointwatchpoint reg pairs
DBGWCR_EL1: Watchpoint Control Register: controls of watchpoint。32位寄存器,n=0-15
see ARM v8 doc D7.3.11DGBWVR.EL1: Watchpoint Value Register: data address value。64位寄存器,n=0-15
see ARM v8 doc D7.3.12
配置
基本配置
一个watchpoint可以配置match1个或者多个bytes。当其中任意一个byte match,就会产生一个watchpoint event。byte的数目可以有以下两种配置方式
1~8个bytes:通过设置DBGWCR_EL1.BAS Byte Address Selected filed实现,要求这些byte必须是连续的,并且都要在alliened doubleword中8 bytes~2GB: 通过设置DBGWCR_EL1.MASK MASK field实现。要求必须是2的幂次方,并且地址需要range aligndebugger 只能选择其中一种配置,否则unpredictable
配置1~8个bytes的watchpoint
通过设置DBGWCR_EL1.BAS Byte Address Selected Field,可以配置1~8bytes的address match。有以下两种配置方式
Doubleword-Aligned: 使用BAS[7:0]Word-Aligned: 使用BAS[3:0],BAS[7:4] res0
BAS设置必须是连续的byte。如果将BAS配置为非全1,则DBGWCR_EL1.MASK必须配置为全0.
配置8bytes~2GB的watchpoint
通过设置DBGWCR_EL1.MASK,可以将watchpoint配置到最多2GB的match range MASK定义了addr LSB bits被mask的个数,MASK包含5 bits,最多可以mask掉低31 bits。注意0b00000表示未mask任何bits,而0b00001和0b00010保留为Reserved data 当使用MASK配置时,debugger必须保证下列全部条件
DBGWCR_EL1.BAS必须为全1DBGWVR_EL1, 被mask掉的address bits设为0
Linked watchpoint
watchpoint通过设置type field in DBGWCR_EL1.WT,可以配置为以下任意一种
Unlinked watchpint: used in isolationLinked watchpint: link to Linked Context breakpoint。该配置下,watchpoint event只有在同时满足address match和context match才会产生
Linked watchpoint constraints
只有Linked watchpoint才能被linklinked watchpoint可以link任意类型的Linked Context Breakpoint。DBGWCR_EL1.LBN Linked Breakpoint Number field,设置了对应的Linked Context Breakpoint;DBGWCR_EL1.WT.{SSC, HMC, PAC}定义了产生watchpoint event的execution conditions;DBGBCR_EL1.{SSC, HMC, PMC}则被忽略一个Linked watchpoint 不能 link到另一个watchpoint。因此DBGWCR_EL1.LBN只能配置Breakpoint如果Linked Context Breakpoint 不是 context-aware的,则该行为unpredictable如果linked watchpoint link到一个Unlinked Context breakpoint,则watchpoint event永远不会发生多个linked watchpoint可以link到一个linked Context Breakpoint;同样的,多个address breakpoint也可以link到一个Linked Context Breakpoint。
execute conditions
watchpoint可以配置为在某个execute condition下才发生。由DBGWCR_EL1.WT.{SSC, HMC, PAC}定义
SCC:Security State Control。可配置为仅在在secure state下、仅在non-secure state下发生,或两者都可以。注意是和对应PE的secure state比,而不是指令fetch地址的NS属性比HMC:Higher Mode Control;PAC:privilege Access Control。两者决定了发生watchpint event的exception level
注意PAC决定的是access privilege。因此unprivilege load/store 在EL1或者更高level产生的watchppoint event可能是设置在EL0级的addr match(unprivilege load/store在EL1或者更高level执行时,会把访问当做还在EL0级时进行check)
Usage Constraints
see ARM v8 doc D2.10.7
产生
watchpoint debug event产生需要满足以下所有条件
watchpoint enable。通过设置DBGWCR_EL1.E watchpoint enable control bit实现conditions in DBGWCR_EL1 meetsDBGWVR_EL1地址compare成功:如果watchpoint lint to Linked Context Breakpoint,则context comparison也要成功产生watchpoint的指令commit产生watchpoint的指令pass condition code check
taking watchpoint exception
PE在Fault Address Register中记录trigger watchpoint的地址,使用其中一个地址寄存器:
FAR_EL1:若exception在EL1中响应FAR_EL2:若exception在EL2中响应PE在Exception Syndrome Register(ESR)总记录响应exception的Exception level
ESR_EL1:若exception在EL1中响应ESR_EL2:若exception在EL2中响应Table D2-19 in D2.10.8 给出了ESR个bit的值watchpoint不能在AArch64 EL3中响应,为什么? 如果一条指令trigger多个watchpoint exception,只记录其中一个address(哪一个?)prefered return address为产生watchpoint的指令address由非Dcache instruction引起的watchpoint记录的address,需要同时满足
inclusive range between
memory访问的最低地址(The lowest address accessed by the memory access that triggered the watchpoint.)产生watchpoint的memory访问的最高地址(The highest watchpointed address accessed by the memory access. A watchpointed address is an address that the watchpoint is watching.)在naturally-aligned block访问中,同时满足
size为2的幂次方不大于DC ZVA block size包含产生watchpoint的memory access
这段描述不容易理解,我们采用ARM文档上的一个例子做以详述
一个multiple load从0x8004开始向上取数据,在0x8019产生了watchpoint。如果DC ZVA block为32Bytes,则block块的地址应为32的整数
倍(0x8000,0x8020...)。最低位应为memory access最低地址0x8004,而最高位则为产生watchpoint的地址。因此地址范围[0x8004:0x8019];
0x8010为最低地址,因此地址范围为[0x8010:0x8019]
由Dcache instruction引起的watchpoint event,地址记录
记录传给指令的地址。因此该地址可能比引起watchpoint的地址位置要高。
entering Debug State
PE在EDWAR中记录trigger watchpoint的地址进入debug mode记录的地址和exception有相同的限制,见taking watchpoint exception
halting
如果允许halting (设置EDSCR.HDE),则watchpint event会进入Debug State如果禁止halting,并且enable watchpint, watchpoint event会产生watchpint exceptions;如果没有enable watchpoint,则watchpoint event ignores
addr match
addr[48:2] match DBGWVR_EL1[48:2],同时满足
access size match(见后节详述)。如果EL0是AArch32,EL1是AArch64,则EL0指令可以使用AArch64 stage 1 translation regime,此时地址使用0扩展与watchpoint比较DBGWVR_EL1.BAS设置的 Byte selection,或者DBGWVR_EL1.MASK设置的addr range
acess size match
注意watchpoint是data address访问的任意byte match都会产生。因此需要注意访问size对match的影响。如一个doubleword的地址访问0x1003,会覆盖0x1003~0x100a共8个bytes。一些特殊指令的地址定义如下:
DC ZVA instruction:access size定义为DC ZVA block size,在DCZID_EL0.BS中定义DC IVAC instruction: access size为implementation defiend,需要同时满足以下条件:
为2KB可CTR_EL0_DminLine定义的size之间(inclusive range)2的幂次方上述两类指令,
The lowest address accessed by the instruction is the address supplied to the instruction, rounded down to the nearest multiple of the access size initiated by that instruction.(??);最高地址为(size-1)的位置
watchpoint的一些特殊行为
以下指令从不产生watchpoint exception
ICache maintenance instructionaddress translation instructionTLB mainttenance instructionprefetch memory instructionStore-Exclusive instruction match watchpoint
如果store-exclusive fails,是否产生watchpoint exception由implementation defiend如果store-exclusive succeed,产生watchpoint exceptioncache maintenance instruction match watchpoint
只有DC IVAC和DC ZVA instruction可以产生watchpoint exception。DBGWCR_EL1.LSC必须配置为一下任意一种
10: match on data stores11: match on data stores and data loads
转载请注明原文地址: https://ju.6miu.com/read-1304570.html