ARM上的共享库上缺少帧

时间:2011-08-29 13:55:04

标签: gdb shared-libraries arm coredump

我目前正在研究调试环境,而且我在ARM上创建有效的核心文件时遇到问题,导致共享库代码发生分段错误。

似乎在共享库中调用函数时,帧指针会丢失。

我已经检查了所有我能想到的gcc标志。我没有使用任何优化,没有使用-fomit-frame-pointer,我尝试使用-rdynamic,都没有成功。另外,我没有使用abort(),因为我读它在ARM上有些问题,因为由于函数没有返回,所以不保存帧信息。相反,我使用memset(NULL,0,1)来获得分段错误。

我正在使用arm-cortex_a8-linux-gnuabi工具链,我使用crosstool-NG的默认cortex-a8配置自行编译。 (gcc 4.4.3,gsb 6.8)。在主机(Ubuntu)上,一切正常。

GDB的输出是这样的(在通过set solib-search-path加载所有共享库之后。)为了便于阅读,我省略了不相关的输出。

(gdb) thread apply all bt full

Thread 1 (process 535):
#0 0x402ff624 in memset () from <my libc path>
No Symbol table info available.
#1 0x4011f60c in my_asserting_func () at src1.cc:5
No locals.
Backtrace stopped: frame did not save the PC

src1.cc:

#include <src1.h>
#include <string.h>
void my_asserting_func(void) 
{ 
    memset(NULL, 0, 1); 
}

main.cc:

#include <src1.h>
int main(void)
{
    my_asserting_func();
    return 0;
}

任何帮助都会很有帮助,

安德鲁。

PS:使用objump,这里是my_asserting_func函数的反汇编:

00000654 <_Z17my_asserting_funcv>:
654:    e1a0c00d        mov      ip, sp
658:    e92dd800        push     {fp, ip, lr, pc}
65c:    e24cb004        sub      fp, ip, #4
660:    e3a00000        mov      r0, #0
664:    e3a01000        mov      r1, #0
668:    e3a02001        mov      r2, #1
66c:    ebffffb1        bl       538 <_init+0x38>
670:    e89da800        ldm      sp, {fp, sp, pc}

0 个答案:

没有答案