同样的程序,在arm及x86平台上都可以正常运行,但在MIPS平台就segmentation fault
有没有人遇到过这样的问题?用printf大法看,程序根本就没进入main函数就segmentation fault了
很是疑惑,为什么?
程序是比较靠上层的网管程序,应该和CPU关系不太大啊 libc不是mips的? 原帖由 prolj 于 2009-12-10 19:21 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
libc不是mips的?
是啊,交叉编译工具都是OK的啊,其它的程序编译了都可以正常使用的啊 出现segmentation fault的时候有没有其他信息, 比如哪个地址或者指令引起的? 然后可以进一步追下去 MIPS寻址上有缺陷 OMG,一条指令一条指令的看吧.
是linux吗?
先strace看看呢?
或者有什么信息被打出.
出现这种问题,一般只好自己来解决,hoho.
当然,在此之前,先编写个最简单的C语言程序,(比如main(){})编译/链接看看 mips中所有数据结构尽量4字节对齐,如果有没有对齐的,需要打开模拟器。
因为mips使用risc指令,该指令集一般是指令都是4字节的。 原帖由 cyliu 于 2009-12-14 10:24 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
mips中所有数据结构尽量4字节对齐,如果有没有对齐的,需要打开模拟器。
因为mips使用risc指令,该指令集一般是指令都是4字节的。
但那应该不是这样的提示信息啊,那应该是总线错误
回复 #8 cjaizss 的帖子
在Linux下对于应用程序来说,显示出来的往往是Segmentaion fault.不过这个和RISC没半点关系,是寻址特地导致的。对于内存而言,里面的电子开关特性要求必须是对齐的,但许多CPU/MC屏蔽了这一层,对于非对齐也可以访问,只是总线上有可能有读有写的几次操作真正完成它,如PowerPC是RISC,但支持非对齐内存的直接访问(多字操作的lwm等例外),而其它有些CPU则可能直接出现align exception;而出现异常的平台上有些操作了软件模拟,在异常处理中想办法完成要做的操作然后返回时跳过这一指令,但这样处理很慢,只适合偶尔出现一次的情况。
回复 #9 Cyberman.Wu 的帖子
但为什么访问一个对齐的地址也会出现段错误?例如:int *p = 08040000,r;
r=*p;
页:
[1]
2