ARM EABI浮点问题

时间:2012-10-15 04:12:47

标签: arm eabi

我的ARM9代码中有一个使用varargs的数据转换功能。 我几年来一直在使用arm-elf yagarto发行版 没有问题。最近,我们升级到了arm-eabi-none 来自yagarto网站的yagarto包,我发现我们现在拥有 浮点值的问题。我最终发现的是 那个双打被强制转换为8字节的边界,并且是现有的 varargs浮点处理程序并不期望在args中找到空白。

我可以手动检查指针并将其强制为8字节 边界(事实上,我这样做了,完全解决了这个问题),但是 我想知道为什么会突然发生这种情况。

是否有编译器开关指定堆栈上的数据对齐方式, 或者在函数调用中,或类似的东西?为什么会这样呢 在32位(4字节)架构上默认为8字节边界??

我很感激任何人都可以提供的任何建议或见解 这些问题。

代码很简单:

    .....
    float floatValue = 10.0;
    int intValue = 10;
    char buffer[32];
    ...
    snprintf (buffer, 32, "%g", floatValue); /* Here we are getting junk value bcz of 8-byte*/
    snprintf (buffer, 32, "%lld", intValue); /* Here we are getting junk value bcz of 8-byte */
    ....

我们使用的GCC版本是4.7.1

编制选项:

工具链编译选项:

    `mabi=aapcs-linux
    `mcpu=arm7tdmi/mcpu=arm946e-s`
    `mfloat-abi=softfp`

应用程序编译器选项:

    `-mfloat-abi=softfp`
    `-mfpu=vfp`
    `-mstructure-size-boundary=8`
    `-fomit-frame-pointer`
    `-fshort-wchar`
    `-fno-short-enums`

0 个答案:

没有答案