4

默认情况下,任何大类型(大于 4 字节)在 EABI 上都将对齐到 8 字节。这意味着如果function(u32, u64)调用, u32 进入,并且 u64 在andr0之间分割,不使用。r2r3r1

我怎样才能让编译器将它对齐到 4 字节呢?我理解这个(打破 ABI)或其他的后果,但我并不在乎。也不建议使用 OABI,因为在内核配置中启用 OABI 会禁用对 ARMv7 的支持。

使用 4 字节对齐,u32 仍将进入,r0但 u64 现在将在r1和之间拆分r2

4

2 回答 2

3

我希望这样做的正确方法是使用修改后的 EABI 定义重新编译工具链,您可能部分地从您不想使用的 OABI 中抄袭。

您可能还必须重新编写内核的一些汇编语言部分,因此最好给修改后的 ABI 一个新名称。

确实期望花费相当多的时间来理解和修复它破坏的各种东西。

于 2012-07-01T01:07:10.990 回答
0

GCC 具有aligned可应用于类型的属性:

typedef long __attribute__((aligned(4))) unaligned_long;

现在,您可以在需要时(小心地)使用这种类型。

于 2012-06-24T19:31:40.150 回答