各位大牛有木有遇到MSM8226 CPU取值错误的奇葩问题
05-08
如题。
本屌搬砖的公司用msm8226,最近有几个奇葩的crash,data abort。
本来很常见,可是追踪发现,user stack完全看不到。
用t32 dump PC寄存器指向的那段空间,发现正执行一个寄存器加减立即数的指令,不可能crash。
由于user space进程的crash由debugd捕捉,开始怀疑相应内存被释放了,从而map失败,看不到stack。
怀着试试看态度,在内核捕捉到data abort的时候打印user pc寄存器对应的arm指令,和T32 dump出来的对比。
奇葩出现鸟:
kernel log里边打印的东西和T32 dump出来的东西不一样!打印出来的二进制,强制用t32 反汇编,发现确实是寻址指令,确实访问非法地址!
kernel log里边打印的东西是CPU通过虚拟地址物理地址映射找到的,其中不一定通过页表,可能用cache之类的东西。
T32的内容是根据页表数据结构算的,属于软件层面的。
两者不一样,岂不是说MMU寻址选错了。
用T32的d,find查询kernel log打印出来的pc指针对应的指令,发现确实存在,但它的物理地址并不在crash的进程map的物理空间上,怀疑是别的进程!
今天又有个问题,不是这类的crash,是free的时候magic data被修改。可是T32仍然发现申请内存的末尾,没有被修改!
类似,难道MSM8226有这个bug?
本屌搬砖的公司用msm8226,最近有几个奇葩的crash,data abort。
本来很常见,可是追踪发现,user stack完全看不到。
用t32 dump PC寄存器指向的那段空间,发现正执行一个寄存器加减立即数的指令,不可能crash。
由于user space进程的crash由debugd捕捉,开始怀疑相应内存被释放了,从而map失败,看不到stack。
怀着试试看态度,在内核捕捉到data abort的时候打印user pc寄存器对应的arm指令,和T32 dump出来的对比。
奇葩出现鸟:
kernel log里边打印的东西和T32 dump出来的东西不一样!打印出来的二进制,强制用t32 反汇编,发现确实是寻址指令,确实访问非法地址!
kernel log里边打印的东西是CPU通过虚拟地址物理地址映射找到的,其中不一定通过页表,可能用cache之类的东西。
T32的内容是根据页表数据结构算的,属于软件层面的。
两者不一样,岂不是说MMU寻址选错了。
用T32的d,find查询kernel log打印出来的pc指针对应的指令,发现确实存在,但它的物理地址并不在crash的进程map的物理空间上,怀疑是别的进程!
今天又有个问题,不是这类的crash,是free的时候magic data被修改。可是T32仍然发现申请内存的末尾,没有被修改!
类似,难道MSM8226有这个bug?
小编可以给msm8226的datasheet我么,好人一生平安
好深奥,不懂,呵呵。
debug应用程序不需要那么多的东西,基本上logcat一份就够了。
希望不被忽悠
学习。
相关文章:
- 工业级CPU,安卓4.2手持设备解决方案(05-08)
- 谁可以测试MDM9215的CPU及内存运行效率,有现金(1K-5K)回报(05-08)
- 高通8929是什么类型CPU(05-08)
- 高通最新2015年Roadmap以及手机CPU大全(05-08)
- 高通CPU处理器解析(05-08)
- 高通功能机1110 1100 CPU(05-08)
射频专业培训教程推荐