WHITLACK 发表于 2009-12-10 18:58

同样的程序,在arm及x86平台上都可以正常运行,但在MIPS平台就segmentation fault

有没有人遇到过这样的问题?
用printf大法看,程序根本就没进入main函数就segmentation fault了

很是疑惑,为什么?

程序是比较靠上层的网管程序,应该和CPU关系不太大啊

prolj 发表于 2009-12-10 19:21

libc不是mips的?

WHITLACK 发表于 2009-12-10 19:24

原帖由 prolj 于 2009-12-10 19:21 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
libc不是mips的?

是啊,交叉编译工具都是OK的啊,其它的程序编译了都可以正常使用的啊

accessory 发表于 2009-12-13 07:04

出现segmentation fault的时候有没有其他信息, 比如哪个地址或者指令引起的? 然后可以进一步追下去

prolj 发表于 2009-12-13 12:06

MIPS寻址上有缺陷

cjaizss 发表于 2009-12-13 12:53

OMG,一条指令一条指令的看吧.
是linux吗?
先strace看看呢?
或者有什么信息被打出.
出现这种问题,一般只好自己来解决,hoho.
当然,在此之前,先编写个最简单的C语言程序,(比如main(){})编译/链接看看

cyliu 发表于 2009-12-14 10:24

mips中所有数据结构尽量4字节对齐,如果有没有对齐的,需要打开模拟器。

因为mips使用risc指令,该指令集一般是指令都是4字节的。

cjaizss 发表于 2009-12-14 11:25

原帖由 cyliu 于 2009-12-14 10:24 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
mips中所有数据结构尽量4字节对齐,如果有没有对齐的,需要打开模拟器。

因为mips使用risc指令,该指令集一般是指令都是4字节的。
但那应该不是这样的提示信息啊,那应该是总线错误

Cyberman.Wu 发表于 2009-12-14 12:53

回复 #8 cjaizss 的帖子

在Linux下对于应用程序来说,显示出来的往往是Segmentaion fault.

不过这个和RISC没半点关系,是寻址特地导致的。对于内存而言,里面的电子开关特性要求必须是对齐的,但许多CPU/MC屏蔽了这一层,对于非对齐也可以访问,只是总线上有可能有读有写的几次操作真正完成它,如PowerPC是RISC,但支持非对齐内存的直接访问(多字操作的lwm等例外),而其它有些CPU则可能直接出现align exception;而出现异常的平台上有些操作了软件模拟,在异常处理中想办法完成要做的操作然后返回时跳过这一指令,但这样处理很慢,只适合偶尔出现一次的情况。

gofortime 发表于 2009-12-15 09:28

回复 #9 Cyberman.Wu 的帖子

但为什么访问一个对齐的地址也会出现段错误?例如:

int *p = 08040000,r;
r=*p;
页: [1] 2
查看完整版本: 同样的程序,在arm及x86平台上都可以正常运行,但在MIPS平台就segmentation fault