Floating point QNX中微子6:如何在div上以零产生SIGFPE?
我正在尝试交叉编译一个程序(Yorick,以防有任何用处)以在LE ARM上运行。。。我想使用Floating point QNX中微子6:如何在div上以零产生SIGFPE?,floating-point,qnx-neutrino,Floating Point,Qnx Neutrino,我正在尝试交叉编译一个程序(Yorick,以防有任何用处)以在LE ARM上运行。。。我想使用feenableexcept()捕获SIGFPE。。。问题是目标的库显示不存在这样的符号。有人知道QNX库是否具有同等的功能吗?我一直在谷歌上搜索,想知道QNX对这方面的支持,但运气不太好。。。我所能看到的是,在我的目标平台的所有库中,没有feenableexceptsymbol。。。谢谢 更新:我发现QNX有一个名为的库,它看起来很有趣,但似乎只适用于x86、mips和ppc。。。有人知道是否有ARM
feenableexcept()
捕获SIGFPE
。。。问题是目标的库显示不存在这样的符号。有人知道QNX库是否具有同等的功能吗?我一直在谷歌上搜索,想知道QNX对这方面的支持,但运气不太好。。。我所能看到的是,在我的目标平台的所有库中,没有feenableexcept
symbol。。。谢谢
更新:我发现QNX有一个名为的库,它看起来很有趣,但似乎只适用于x86、mips和ppc。。。有人知道是否有ARM版本吗
我使用的芯片可能也是at91sam9263
更新2:因此,在QNX中加入dub似乎有以下几点。基于此,我尝试了以下程序
#pragma STD FENV_ACCESS ON
#include <stdio.h>
#include <signal.h>
#include <fenv.h>
void signal_handler (int signo) {
if(signo == SIGFPE) {
printf("Caught FPE\n");
}
}
int main(int argc, char *argv[])
{
double d;
fexcept_t enables;
signal(SIGFPE,(*signal_handler));
enables = fegettrapenable();
printf("The FP trap enable mask is 0x%X\n", enables);
if( fesettrapenable(fegettrapenable() | FE_DIVBYZERO) )
{
printf("### ERROR could not set the FE enable mask\n");
fexcept_t enables = fegettrapenable();
printf("The FP trap enable mask is 0x%X\n", enables);
return(-1);
}
printf("Floating point mask successfully set\n");
enables = fegettrapenable();
printf("The FP trap enable mask is 0x%X and FE_DIVBYZERO is 0x%X\n", enables, (int)FE_DIVBYZERO);
d = 2.0 / 0.0;
printf("For div by zero, got the result %e\n", d);
printf("The exception test is %d\n", fetestexcept(FE_DIVBYZERO));
printf("Testing feraiseexcpetion()\n");
feraiseexcept(FE_DIVBYZERO);
return 0 ;
}
#pragma STD FENV_访问
#包括
#包括
#包括
无效信号处理器(int signo){
if(signo==SIGFPE){
printf(“捕获的FPE\n”);
}
}
int main(int argc,char*argv[])
{
双d;
feexcept_t启用;
信号(SIGFPE,(*信号处理器));
enables=fegettrapenable();
printf(“FP陷阱启用掩码为0x%X\n”,启用);
if(fesettrapenable(fegettrapenable()| FE_DIVBYZERO))
{
printf(“####错误无法设置FE启用掩码\n”);
fexcept_t enables=fegettrapenable();
printf(“FP陷阱启用掩码为0x%X\n”,启用);
返回(-1);
}
printf(“浮点掩码成功设置\n”);
enables=fegettrapenable();
printf(“FP陷阱启用掩码为0x%X,FE_DIVBYZERO为0x%X\n”),启用(int)FE_DIVBYZERO;
d=2.0/0.0;
printf(“对于由零进行的div,得到结果%e\n”,d);
printf(“异常测试是%d\n”,fetestexcept(FE_DIVBYZERO));
printf(“测试FeraiseException()\n”);
feraiseexcept(FE_除以零);
返回0;
}
这给了我以下输出
The FP trap enable mask is 0x0
Floating point mask successfully set
The FP trap enable mask is 0x4 and FE_DIVBYZERO is 0x4
For div by zero, got the result inf **<<<< DAMN IT - no signal!!!!**
The exception test is 0
Testing feraiseexcpetion()
Caught FPE
FP陷阱启用掩码为0x0
浮点掩码已成功设置
FP陷阱启用掩码为0x4,FE_DIVBYZERO为0x4
对于div by zero,得到了结果inf**感谢您指出Hans,不幸的是,刚刚尝试了它,但在libm或任何其他我使用过的库中都找不到该符号:-S将继续调查,并再次感谢您的建议经过一点额外的挖掘(为交叉编译器lol中的每个平台转储每个单个库)似乎我的系统上的PPC、x86和mips上提供了fp\u exception\u mask()。。。哦,乔伊:)它在QNX650上工作得很好,但在手臂上没有。不确定这是否有帮助。Hi-Bin,afriad not:)需要安装在手臂上,特别是at91sam9263或至少没有fpu的手臂上