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

发布于 2022-09-18 10:36:27 字数 128 浏览 11 评论 0

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

很是疑惑,为什么?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

睫毛溺水了 2022-09-25 10:36:27

libc不是mips的?

空‖城人不在 2022-09-25 10:36:27

原帖由 prolj 于 2009-12-10 19:21 发表
libc不是mips的?

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

绅士风度i 2022-09-25 10:36:27

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

红墙和绿瓦 2022-09-25 10:36:27

MIPS寻址上有缺陷

白日梦 2022-09-25 10:36:27

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

终陌 2022-09-25 10:36:27

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

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

零度℉ 2022-09-25 10:36:27

原帖由 cyliu 于 2009-12-14 10:24 发表
mips中所有数据结构尽量4字节对齐,如果有没有对齐的,需要打开模拟器。

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

但那应该不是这样的提示信息啊,那应该是总线错误

神妖 2022-09-25 10:36:27

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

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

千纸鹤 2022-09-25 10:36:27

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

int *p = 08040000,r;
r=*p;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文