0

我正在使用buildroot。编译工作正常,但目标系统上的二进制文件显示“非法指令”

我用过 strace:

execve("/opt/busybox", ["/opt/busybox"], [/* 8 vars */]) = 0 brk(0)
= 0 --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLTRP, si_addr= 0xa3f20} --- +++ 被 SIGILL 杀死 +++ 非法指令

然后是国际开发协会。

原因是 SVC 指令(si_addr 在我尝试的所有二进制文件中都指向它)

我应该怎么做才能防止 GCC 使用这条指令?

4

1 回答 1

1

看起来我已经解决了这个问题。

原因是 EABI / OABI 配置错误。感谢无艺术的噪音!我需要 OABI 配置。

另外,我真的不知道为什么,但它仅在 GCC 4.3.x 上开始工作在 gcc 4.7.x eabi/oabi 的默认 buildroot 配置上没有效果。

最后,我设置了额外的 GCC 选项:

--with-march=armv5te --with-cpu=arm926ej-s --with-mtune=arm926ej-s --enable-multilib --disable-libssp --enable-languages=c,c++

于 2013-03-29T15:07:31.323 回答