ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Self-hosted debug
1. 前言
2. 关于self-hosted debug
- Debugger调试器
是操作系统或系统软件的一部分,它会处理debug exception或修改debug system register,debugger运行在EL0,提供了用户debugger接口;
- Debugger异常
Debugger异常是在程序正常运行过程中由debugger编程PE来产生,满足如下两个条件,PE可以产生某个特定的异常:
(1)当前的异常级别和安全状态下使能了debug异常;
(2)Debugger使能了某个特定的debug异常
- Debug异常类型
(1)Break-point instruction异常:在程序流的特定点可以引起异常的指令,不能被mask,A64下为BRK#<immediate>;
(2)breakpoint异常:提供2-16个breakpoint异常,可以基于特定的指令地址或特定的PE上下文通过编程产生的异常;
(3)watchpoint异常:提供2-16个watchpoint异常,可以基于访问特定的数据地址或访问一个地址范围的数据;
(4)vector catch异常:只能在AArch32 translation regime???下产生;
(5)software step异常:运行在高异常级别的软件可以debug低异常级别的软件,被debug的软件每单步执行一条指令,PE会捕获software step异常;
3. Debug异常使能控制
|
breakpoint instruction异常 |
总是使能的; |
|
breakpoint异常 |
MDSCR_EL1.MDE, plus an enable control for each breakpoint, DBGBCR<n>_EL1.E |
|
watchpoint异常 |
MDSCR_EL1.MDE, plus an enable control for each watchpoint, DBGWCR<n>_EL1.E |
|
vector catch异常 |
MDSCR_EL1.MDE |
|
software step异常 |
MDSCR_EL1.SS |
4. Debug异常路由
- EL1和EL2都是debug异常的目标异常级别;
- 通常情况下debug异常被路由到EL1;
- 如果实现了EL2,且MDCR_EL2.TDE==1 且debug异常来自于non-secure,则异常被路由到EL2
5. Debug异常使能
当前异常级别和安全状态下满足如下4个条件则debug异常使能:
- OS lock解锁??
- DoubleLockStatus() == FALSE???
- 当前异常级别的debug异常使能
(1) 如下两种情况debug异常被禁用:
a. 当前异常级别 > (EL1 or EL2)
breakpoint instruction异常之外的debug异常被禁用;
b. 当前异常级别 == (EL1 or EL2):
local debug enable bit(即MDSCR_EL1.KDE==0,breakpoint instruction异常之外的debug异常被禁用;
debug exception mask bit(PSTATE.D)==1,breakpoint instruction异常之外的debug异常被禁用
(2)其它情况debug异常均使能
- 当前secure state的debug异常使能
(1)如果MDCR_EL3.SDD==1,则debug异常被禁用;
(2)其它情况下,debug异常均使能
6. 参考文档
[1] DDI0487A_k_armv8_arm_iss10775.pdf
ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Self-hosted debug的更多相关文章
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- ARMV8 datasheet学习笔记1:预备知识
1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST
1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer
1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型
1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性 2. 存储系统体系结构 2.1. 地址空间 指令地址空间溢出 指令地址计算((address_of ...
- ARMV8 datasheet学习笔记2:概述
1. 前言 本文主要概括的介绍ARMV8体系结构定义了哪些内容,概括的说: ARM体系结构定义了PE的行为,不会定义具体的实现 ARM体系结构也定义了debug体系结构和trace体系结构 ARM体系 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之VMSA
1. 前言 2. VMSA概述 2.1 ARMv8 VMSA naming VMSAv8 整个转换机中,地址转换有一个或两个stage VMSAv8-32 由运行AArch32的异常级别来管理 VMS ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它
1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常
1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2. RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...
随机推荐
- Powershell script to install Windows Updates (msu) from folder
######################################################### # # Name: InstallWindowsUpdates.ps1 # Auth ...
- luogu3305/bzoj3130 费用流 (二分答案+dinic)
Bob肯定想挑一个流量最大的边,然后把所有的费用都加给它呗 那Alice就让流量最大的边尽量小呗 那就二分一下答案再dinic呗 #include<bits/stdc++.h> #defi ...
- luogu3385 负环 (spfa)
我在做spfa的时候,如果有一个点被更新了超过N次,证明这个图里是有负环的. (神TM输出YE5和N0) #include<bits/stdc++.h> #define pa pair&l ...
- matplotlib 28原则
记下各个简易模板,方便ctrl+c和ctrl+v 子图: import numpy as np import matplotlib.pyplot as plt x = np.array(range(1 ...
- 最长上升子序列LIS(51nod1134)
1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递 ...
- Flash与JavaScript互动
最近做的一个项目需要用javascript来实现自动复制文本到剪切板,但测试时发现只有ie6.0支持. 到百度搜索后才发现,原来ie7.0.firefox是不支持这样的操作的,随后又搜索了一下,找到一 ...
- 使用React.cloneElement()给子组件传值
React提供了一个克隆组件的API: React.cloneElement( element, [props], [...child] ) 可以利用该方法,给子组件传值,使用如下: class Pa ...
- Linux:批量修改分隔符(awk、BEGIN、FS、OFS、print、tr命令)
批量修改文件的分隔符,可以用FS和OFS命令 FS:Field Separator,字段分隔符 OFS:Out of Field Separator,输出字段分隔符 修改空格为分隔符 假设有这么一个文 ...
- mysql存储过程变量的拼接
存储过程变量的拼接 有时候我们需要模糊查询,但是同时我们又要 在模糊查询的时候使用变量,我们又想在变量的后面拼接一个%去匹配模糊查询 那么就会用到 concat函数 示例如下: www. ...
- C语言实现KMP模式匹配算法
next: /*! * Description: * author scictor <scictor@gmail.com> * date 2018/7/4 */ #include < ...