我正在寻找一种简单的方法来阻止我们的项目使用双精度浮点运算。目前,我正在尝试使用正则表达式来过滤我们项目中的双精度(长双精度等)变量和常量的困难方法。但是变量/常量/定义在整个软件中的流动很难遵循。 我们的MCU支持硬件单精度浮点运算,但不支持双精度。我们希望通过通知用户来严格禁止双精度浮点运算的意外使用(例如失败的构建过程)。不幸的是,我们需要包含预构建的软件模块,这会禁止使用编译器标志(有一个可以自动将双精度转换为浮点等)。有人有检查双精度运算的通用方法吗?例如在链接器中? 非常感谢!
如果双精度运算是通过 FP 模拟实现的,即通过调用库函数,您可以检查它们是否存在于最终链接的二进制文件中。对于 GNU 目标,您可以使用例如
objdump
为此:
# TODO: add all functions from libgcc in grep
$ arm-none-eabi-objdump -d a.out | grep -E '\<bl .*(add|sub|mul)df3'
或
readelf
:
# TODO: add all functions from libgcc in grep
$ arm-none-eabi-readelf -sW a.out | grep '(add|sub|mul)df3'