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异常路由

  1. EL1和EL2都是debug异常的目标异常级别;
  2. 通常情况下debug异常被路由到EL1;
  3. 如果实现了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的更多相关文章

  1. ARMV8 datasheet学习笔记3:AArch64应用级体系结构

    1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...

  2. ARMV8 datasheet学习笔记5:异常模型

    1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...

  3. ARMV8 datasheet学习笔记1:预备知识

    1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...

  4. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST

    1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...

  5. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer

    1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...

  6. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型

    1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性   2. 存储系统体系结构 2.1.    地址空间 指令地址空间溢出 指令地址计算((address_of ...

  7. ARMV8 datasheet学习笔记2:概述

    1. 前言 本文主要概括的介绍ARMV8体系结构定义了哪些内容,概括的说: ARM体系结构定义了PE的行为,不会定义具体的实现 ARM体系结构也定义了debug体系结构和trace体系结构 ARM体系 ...

  8. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之VMSA

    1. 前言 2. VMSA概述 2.1 ARMv8 VMSA naming VMSAv8 整个转换机中,地址转换有一个或两个stage VMSAv8-32 由运行AArch32的异常级别来管理 VMS ...

  9. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它

    1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...

  10. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常

    1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2.  RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...

随机推荐

  1. Java编程,打印昨天的当前时刻

    public class Demo {  /*  * Java编程,打印昨天的当前时刻  */ public static void main(String[] args){  Calendar ca ...

  2. P1339 热浪 最短路径模板题

    这么naive的题面一看就是最短路模板题~~~ ok.首先是floyd算法,tts,记得把k放在最外面就行了. #include <cstdio> #include <cstring ...

  3. A1033. To Fill or Not to Fill

    With highways available, driving a car from Hangzhou to any other city is easy. But since the tank c ...

  4. 通过url传递参数如果汉字乱码采用的方法

    urlCodeDeal 方法把汉字编码, 在Jsp界面通过Escape.unescape方法,将编码反编译成汉字. 下面是urlCodeDeal方法: //UrlCode 处理代码 function ...

  5. PHP去调用jenkins

    背景说明:目前公司用到 jenkins(持续集成开源工具)更多情况下,通过配置,可以在gitlab上通过webhooks去调度jenkins 或者通过 jenkins管理后台,去手动执行“立即构建”去 ...

  6. Python基础学习(五)

    一.使用模块 已经了解了什么是模块,模块就是一个个文件的体,我们可以做不同的文件中引入各个模块文件,当然如果模块有冲突,还可以给模块文件的上层建立一个目录简称包,包名只能唯一,不能重名. 另外,一旦建 ...

  7. hdu4549_M斐波那契数列 解题报告

    Solution: 1.快速幂:数/矩阵 2.以证明1000000007是素数. 费马小定理: 若p是素数,gcd(a,p)=1,则a^(p-1)1(mod p). 若a^b mod p 中b很大,则 ...

  8. Jenkins插件安装实战篇

    Jenkins插件安装实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 上篇博客我介绍了Jenkins是啥,以及持续集成,持续交付,持续部署的概念,那么问题来了:你知道CI和C ...

  9. mac下chrome快捷键

    打开开发者工具:alt + command + I: 打开“JavaScript 控制台”:⌘-Option-J: 打开当前网页的源代码:⌘-Option-U: 刷新页面:command + R: m ...

  10. JAVA-大白话探索JVM-运行时内存(三)

    前面章节 JAVA-大白话探索JVM-类加载器(一) JAVA-大白话探索JVM-类加载过程(二) JVM运行时内存 通过之前的章节,我们知道.class类如何加载到内存中,如图红框 开始讲讲内存空间 ...