armink / CmBacktrace

Advanced fault backtrace library for ARM Cortex-M series MCU | ARM Cortex-M 系列 MCU 错误追踪库
MIT License
1.65k stars 649 forks source link

BL 和 BLx 指令在判断的时候减去的长度好像存在问题 #58

Open lemonking77 opened 2 years ago

lemonking77 commented 2 years ago

disassembly_ins_is_bl_blx(pc - sizeof(size_t)) && (depth < size)) 这里的减4 应该只适用于BL 指令,在指向BL或者BLX 之前会把当前地址加上一个指令大小,BLx 指令应该是减去2吧?这里仅仅是我个人的看法,还没去验证,如果有错误,还请指导一下

armink commented 2 years ago

你好,可否有时间验证一下呢

lemonking77 commented 2 years ago

你好,可否有时间验证一下呢 BLx 相关的汇编代码: 0x1'61d2: 0x47b0 BLX R6 0x1'61d4: 0xf04f 0x0900 MOV.W R9, #0

BL 相关的汇编代码: 0x1'6202: 0xf018 0xfd5a BL tuya_queue_output ; 0x2'ecba 0x1'6206: 0x2800 CMP R0, #0

从这里地址偏差上看BL 是4字节的,BLX register 是2字节的,(对于 BLX label 又是4字节的,这个我还没有遇到)

armink commented 2 years ago

可以触发一下断言或 Hardfault 正好测试一下有没有效果哈

lemonking77 commented 2 years ago

对于HardFault_Handler 以汇编的形式给出,这个不太好移植,怎么在C语言环境下的 HardFault_Handler 中获取 LR 的值 用来进行硬件状态判断,请指导一下

armink commented 2 years ago

参考一下 demo 文件下的示例吧