【发布时间】:2019-11-06 20:59:05
【问题描述】:
我想知道 glibc 库中的哪些代码和文件在启用陷阱时负责为浮点异常生成陷阱。
目前,RISC-V 的 GCC 不捕获浮点异常。我有兴趣添加此功能。因此,我正在研究如何在 GCC for x86 中实现此功能。
我知道我们可以按照 [问题] 中的描述捕获信号 (Trapping floating-point overflow in C) 但我想知道更多关于它是如何工作的细节。
我浏览了 glibc/math 中的文件,据我说这些文件以某种形式负责生成类似的陷阱
fenv.h
feenablxcpt.c
fegetexpect.c
feupdateenv.c
以及许多其他以fe 开头的文件。
所有这些文件也存在于 RISC-V 的 glibc 中。我不能 弄清楚 glibc for x86 是如何生成陷阱的。
【问题讨论】:
-
这些天你得到的几乎唯一的“浮点异常”是 integer 除以零。浮点代码可以并且确实会生成无穷大或 NaN(非数字)值,以及非信号种类的 NaN。
-
@JonathanLeffler 我认为这是因为默认情况下仅启用除以零的陷阱。我们可以使用feenableexcept函数为其他浮点异常启用陷阱。