asnoka 发表于 2014-03-22 23:33

powerpc上的奇怪sigill问题

小弟近来在调试公司设备上偶发性的因sigill导致的问题,因为现象比较奇怪,百思不得姐,故想请大家帮忙提供点思路,以便进一步分析。

问题环境如下:
嵌入式powerpc p1010 cpu上的运行的一个多线程程序,负责跑业务逻辑。
设备上有dma负责和外部设备收发数据。

问题现象如下:
频繁发生在C库/某些业务代码里的sigill错误(text segment),出错的指令从反汇编的结果来看,都是基本的powerpc指令,原则上不会出错。

小弟的分析如下:

由于死在text segment,按理说其他代码没有权限去写这些代码,那么有几种可能:
1. dma改写了内存,但我们停掉dma后,似乎问题也没有解决。
2. 内存器件有问题,偶尔读出来错误指令。

除了这些外,小弟在分析coredump时,发现内核似乎只会core dump text segment的一个page,因此无法比照cpu从内存中读到了错误指令。

小弟打算修改下kernel代码,在捕获到sigill时,把对应指令的memory打出来,以便比较一下内存是否与预期的指令不同,但目前还没有搞定如何在内核里打印用户态的内存内容,期待大家帮忙提供点思路,先行谢过。

gaojl0728 发表于 2014-03-24 15:02

《=

本帖最后由 gaojl0728 于 2014-03-24 15:04 编辑

1. 首先确定SIGILL 是从哪里发出来的,是内核发的还是应用程序自己发的,主要看si_code字段, 小于等于0是从用户空间自己发的,大于0就是从内核发出来的。
2. 如果是应用程序自己发的, 可以全局搜索SIGILL排查代码
3. 如果是内核发的, 可以考虑编译器生成的指令有问题, CPU捕获了非法的指令,可以在出问题的代码附近单步执行看看到底是在哪一条指令出的问题。

asnoka 发表于 2014-03-25 22:54

感谢您的提醒,我再详细看看。回复 2# gaojl0728


   
页: [1]
查看完整版本: powerpc上的奇怪sigill问题