抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

背景

最近有个新需求,需要在很老的板(S3C2440)上运行,无奈有些程序只要有有函数指针就会报错Illegal instruction错误

用到的工具

  • CLION 2020.2
  • gdbserver
  • gdb
  • 开发板

测试代码

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
void fun(void)
{
printf("hello world");
}
int main()
{
void (*t) (void) = fun;
t();
return 0;
}

寻找问题

利用gdbserver 连接调试程序

1
# gdbserver :3000 fun_test

连接gdbserver调试

1
2
# gdb 命令行中开启
# set disassemble-next-line on

点击继续运行会报错

如箭头所示,运行blx指令的时候报的非法指令错误

总结

问题找到了,查了一下S3C2440用的是armv4t指令集,其中不包含BLX命令,所以会运行错误,修改这个错误需要在编译的时候增加指令指定flag -march=armv4t 即可

评论