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所有 ...
随机推荐
- IScroll的那些事——内容不足时下拉刷新
之前项目中的列表是采用的IScroll,但是在使用IScroll有一个问题就是:当内容不足全屏的时候,是木有办法往下拉的,这样就达不到刷新的目的了.[这是本人工作中遇到的,具体例子具体分析,这里只作一 ...
- 10 Zabbix Item类型之Zabbix IPMI类型
点击返回:自学Zabbix之路 Zabbix Item类型之Zabbix IPMI类型 一般使用zabbix IPMI 监控硬件信息,比如说温度. 在编译安装zabbix server的时候,一定要加 ...
- 自学Aruba7.2-Aruba安全认证-Portal认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.2-Aruba安全认证-Portal认证(web页面配置) 步骤1 建立AP Group,命名为testportal-group 步骤2 将AP加入到 ...
- node.js安装后出现环境变量错误找不到node
安装node.js和bower之后,运行bower出现/usr/bin/env: 'node': No such file or directory错误 这个错误是由于安装完node.js环境变量并没 ...
- [IOI2018] seats 排座位
[IOI2018] seats 排座位 IOI2018题解 压缩状态思想很不错的 每次把原来的贡献减掉,新来的再加上 最多涉及10个点 注意: 1.去重 2.下标从0开始 3.线段树初始的最小值个数都 ...
- 【洛谷P4097】Segment 李超线段树
题目大意:维护一个二维平面,给定若干条线段,支持询问任意整数横坐标处对应的纵坐标最靠上的线段的 id,相同高度取 id 值较小的,强制在线. 题解:初步学习了李超线段树.李超线段树的核心思想在于通过标 ...
- springboot 读取 resource文件
文件位置信息如图: import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import ...
- logging模块(二十六)
用于便捷记录日志且线程安全的模块 可在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有 filename:用指定的文件名创建FiledHandl ...
- 安装 scrapy 报错 error: Microsoft Visual C++ 14.0 is required
问题描述 使用 pip install scrapy 安装 scrapy 时出现以下错误: error: Microsoft Visual C++ 14.0 is required 错误提示中给出了一 ...
- Python介绍以及安装
Python介绍以及安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 借用我的导师的一句话:当你看到这篇文章的时候,那么恭喜你,你已经是踏入了开发的大门!欢迎加入:高级运维工程师 ...