GDB Internals.

对于某特定类型数据, 在内存中和在寄存器中不要一样, 如:
  x86,   long double在内存中为96位, 而在寄存器中只有80位(x86支持80位浮点寄存器)


int gdbarch_convert_register_p(struct gdbarch *gdbarch, int reg)
若返回1, 则表示“以上”案例发生. 
------------------------------------------------------------------
至此: gdb包含两种“不一致”的转换
   * 同样类型的value在register中的表示和在内存中的表示不一致

   * 区别对待pointer和address. pointer是code space的地址. 

-------------------------------------------------------------------------------

1. 真实物理寄存器

2. 伪寄存器: 实际上不存在, 但是客观对应有. 
3. 物理寄存器+伪寄存器=Cooked寄存器(Set)
函数很变量定义了寄存器机构. (寄存器结构=函数+变量)
结构函数: read_pc, write_pc:
如果pc是一个物理寄存器, 那么也可以通过标准过程访问register缓存得到(pc). 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

riscv-tdep.c   (target dependent)
gdbarch_alloc
and the new target object is being populated later. 
And the main work lies here.


----------------------------------------------------------------------------------------------------------------------------------------------------------------

GDB为目标机型设置的模型如此简单。
GDB总是假设目标机器有一组寄存器以及一块内存. 
每个寄存器可以有不同的尺寸. 
GDB必须手动关联寄存器和其名字.
  (GDB可以处理小端,大端,以及双端系统)


地址不等同于指针. 
指针:结构指令是32位的,4字节对齐,因此指针指向的地址低两位总是0. 若使用16位地址,则只能访问64k(2^16)的代码地址空间. 所以我们可以将地址先向右移动两位(低两位总是0), 在使用的时候左移2位,这样我们就能表示256kb的(代码)地址空间。 (code space)
*地址空间是否相同?


---------------------------------------------------

THIS栈:当前检查的栈
NEXT栈: 被THIS栈调用的栈
PREVIOUS栈: etc.


栈总是一个接一个的. (no space between)


sentinel frame(#-1)  
the innermost frame do not hold a NEXT


prologue: 进入函数之后进行现场保护(类似pushad这样的行为)

function prologue

------------------------------------

gcc -S test.c
sp  栈顶指针     riscv: sp
fp  栈底指针      riscv: s0
通常都要保存s0和ra到栈上. (有时候不会有额外函数调用, 所以ra也可以不保存)


----------------------------------------

https://en.wikipedia.org/wiki/DWARF

DWARF  

Debugging With Attributed Record Format (was later proposed)

medieval fantasy of complement to ELF(Executable and Linkable Format)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值