本文介绍了86:HOWTO捕获数据对齐故障(又名SIGBUS在SPARC)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是它在某种程度上可能赶上数据定位错误,甚至在i386?也许通过设置一个特定的i386机器寄存器或类似的东西。

Is it somehow possible to catch data-alignment faults even on i386? Maybe by setting a i386 specific machine register or something like that.

在Solaris-Sparc的我收到在这种情况下SIGBUS,但是在i386一切都很好。

On Solaris-Sparc I am receiving a SIGBUS in this case, but on i386 everything is fine.

环境:


  • 32位应用程序

  • Ubuntu的业报

  • GCC / G ++ v4.4.1

修改
这是为什么我问的:

EDIT:Here is why I am asking this:


  • 我们的溶胶 - 用的Sparc SIGBUS应用程序崩溃。为了调试的目的,我会尽力让我们的i386平台上的类似行为。

  • 我们的溶胶 - SPARC机器很慢,所以编译和调试需要花费大量的时间。而我们的i386机器是令人难以置信的快(8核,32G内存)。

  • 即使在i386平台上存在的数据对齐故障性能为代价。因此,我想解决数据定位错误尽可能。

推荐答案

要在Vokuhila-Oliba的回答扩大在看的跟帖似乎GCC可产生code。与未对齐的内存访问。 AFAIK你没有在这个任何控制。

To expand on Vokuhila-Oliba's answer looking at the "SOF Mis-aligned pointers on x86." thread it seems that gcc can generate code with mis-aligned memory access. AFAIK you don't have any control over this.

在GCC编译code启用对齐检查将是一个坏主意。你的风险越来越SIGBUS错误的的的C $ C $角

Enabling alignment checks on gcc compiled code would be a bad idea. You risk getting SIGBUS errors for good C code.

重新编辑:我们对此深感抱歉。

ReEdited: Sorry about that

这篇关于86:HOWTO捕获数据对齐故障(又名SIGBUS在SPARC)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 08:49