同样的程序,在arm及x86平台上都可以正常运行,但在MIPS平台就segmentation fault
有没有人遇到过这样的问题?
用printf大法看,程序根本就没进入main函数就segmentation fault了
很是疑惑,为什么?
程序是比较靠上层的网管程序,应该和CPU关系不太大啊
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
libc不是mips的?
是啊,交叉编译工具都是OK的啊,其它的程序编译了都可以正常使用的啊
出现segmentation fault的时候有没有其他信息, 比如哪个地址或者指令引起的? 然后可以进一步追下去
MIPS寻址上有缺陷
OMG,一条指令一条指令的看吧.
是linux吗?
先strace看看呢?
或者有什么信息被打出.
出现这种问题,一般只好自己来解决,hoho.
当然,在此之前,先编写个最简单的C语言程序,(比如main(){})编译/链接看看
mips中所有数据结构尽量4字节对齐,如果有没有对齐的,需要打开模拟器。
因为mips使用risc指令,该指令集一般是指令都是4字节的。
但那应该不是这样的提示信息啊,那应该是总线错误
在Linux下对于应用程序来说,显示出来的往往是Segmentaion fault.
不过这个和RISC没半点关系,是寻址特地导致的。对于内存而言,里面的电子开关特性要求必须是对齐的,但许多CPU/MC屏蔽了这一层,对于非对齐也可以访问,只是总线上有可能有读有写的几次操作真正完成它,如PowerPC是RISC,但支持非对齐内存的直接访问(多字操作的lwm等例外),而其它有些CPU则可能直接出现align exception;而出现异常的平台上有些操作了软件模拟,在异常处理中想办法完成要做的操作然后返回时跳过这一指令,但这样处理很慢,只适合偶尔出现一次的情况。
但为什么访问一个对齐的地址也会出现段错误?例如:
int *p = 08040000,r;
r=*p;