linux - 如何禁用 SVC ARM 指令(gcc、uclibc、buildroot)?

标签 linux gcc arm buildroot uclibc

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

我用过strace:

execve("/opt/busybox", ["/opt/busybox"], [/* 8 vars */]) = 0 brk(0)
= 0 --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLTRP, si_addr=0xa3f20} --- +++ killed by SIGILL +++ Illegal instruction

然后是 IDA。

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

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

最佳答案

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

原因是 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++

关于linux - 如何禁用 SVC ARM 指令(gcc、uclibc、buildroot)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15678506/

相关文章:

非root用户在centos上的python2.7

c++ - vector::push_back 坚持使用复制构造函数,尽管提供了移动构造函数

c - 如何使用 ARM gcc 7.3 生成以下 arm 汇编程序输出?

uwp - VS 2017 社区 : Change target for existing project to ARM

linux - 为什么 "find -mmin -1 -exec du -cb {} + | grep total | head -1"和 "find -mmin -1 -exec du -ch {} + | grep total | head -1"不同

linux - 在linux中从其他机器挂载文件夹

linux - 执行命令而不将其保留在历史记录中

c - 为什么 gcc 使用 && 一元运算符而不是给出标签的直接地址?

c - 运行时指针变化

arm - 如何调试闪存中的引导加载程序?