ARMv8 Debug

内容来自 DEN0024A_v8_architecture_PG.pdf
本质
  • ARMv8 Debug 是什么
历史
	在 ARMv4 开始被引入,并已发展成一系列广泛的调试(debug1)和跟踪(trace)功能
	ARMv6和ARMv7-a 新增了 自托管调试(debug2)和性能评测(trace-enhance)
	ARMv8处理器提供硬件功能
		侵入式 		: 调试工具能够对核心活动提供显著级别的控制
		非侵入式  	: 以非侵入性方式收集有关程序执行的大量数据。
	

侵入式调试
	提供了一些工具,使您能够在C源代码级别或汇编语言指令中停止程序并逐行执行它们。
	这可以通过使用芯片JTAG引脚连接到内核的外部设备实现,也可以通过调试监控代码实现。

非侵入性调试
	允许在执行时观察核心行为。有不同种类的非侵入性调试
		1. ETM : 
			可以记录执行的内存访问(包括地址和数据值),
			并生成程序的实时跟踪,查看外围访问、堆栈和堆访问以及变量的更改。
			带来了很大问题: 
				1. 大量信息很难被传出 // 引脚输出可以以远低于内核时钟的速率进行切换
					当前的内核可能会在每个周期执行一个或多个64位缓存访问,记录数据地址和数据值可能需要很大的带宽。
				2. 大量传出的信息很难被解码

		2. ETB : 尝试压缩信息以减少所需的带宽

侵入式调试硬件概念
侵入式调试
	Invasive debug may be divided into 
		1. halting debug (also known as external debug) // 传统上的概念是外部调试器调试
			the debug event causes the core to enter debug state. 也叫 Halting Debug mode.也叫 external debug model.

			In debug state
				the core is halted, meaning that it no longer fetches instructions. 
				the core executes instructions under the direction of a debugger running on a different host connected through JTAG, or another external interface.

		2. monitor debug (also known as self-hosted debug)  // 传统上的概念就是主机侧调试(例如用本机的gdb调试本机的应用程序),本质利用异常处理函数
			the debug event causes a debug exception to be raised.也叫 self-hosted debug model , 也叫 Monitor debug mode. 
			The exception must be handled by dedicated debug monitor software running on the same core. 
			Monitor debug presupposes software support.

	注意 : 
		 halting debug 和 monitor debug 被称为一个过程,并不对应任何ARM实际概念

debug event

	debug event 包括什么
		Software debug events
			Breakpoint debug event
			Watchpoint debug event
			Software Step debug event
			Software breakpoint instruction debug event
				A64 : BRK
				A32 : BKPT
			Vector Catch debug event
		Hardware debug events
			external debugger send a request sequence to halt the core // 最后会进入 debug state // TODO
			
	debug event 的四种处理情况 // 只会进入一种或不进入
		1. 进入 debug state // 所谓的 halting debug
			// depending on the setup of the External Debug Status and Control Register (EDSCR)
		2. 进入 debug exception // 所谓的 monitor debug
			// depending on the setup of the External Debug Status and Control Register (EDSCR)
		3. 什么都不做 // 所谓的 Ignore the debug event.
		4. Pend the debug event and convert it into an action later
Semihosting debug
半托管是一种机制,使ARM目标上运行的代码能够使用运行调试器的主机上提供的功能。
	
	这方面的示例可能包括键盘输入、屏幕输出和磁盘I/O。
	例如,您可以使用此机制启用C库函数,例如printf()和scanf(),以使用主机的屏幕和键盘。
	开发硬件通常没有完整的输入和输出设施,但半托管使主机能够提供这些设施。
	半托管由一组定义的软件指令实现,这些指令会生成异常。
	应用程序调用适当的半宿主调用,然后调试代理处理异常。
	调试代理提供与主机所需的通信。
	semihosting对ARMv8处理器使用的规范与对实现ARMv7的处理器使用的规范不同。
	DS-5调试器通过拦截AArch64中的HLT 0xF000来处理半托管。
	
	当然,在开发环境之外,在主机上运行的调试器通常不会连接到系统。
	
	因此,开发人员有必要重新定位任何使用半托管的C库函数,例如,使用fputc()。
	这需要将使用SVC调用的库代码替换为可以输出字符的代码。
非侵入式调试硬件概念

你可能感兴趣的:(ARMv8,ARM64,架构,linux,运维)