默认情况下,任何大类型(大于4个字节)在EABI上都将对齐到8个字节。这意味着如果调用function(u32, u64),u32将进入r0,而u64将在r2和r3之间拆分,留下r1未使用。
我怎么才能让编译器把它对齐到4字节?我理解这(破坏ABI)或其他的后果,但我并不真正关心。也不要建议使用OABI,因为在内核配置中启用OABI会禁用对ARMv7的支持。
在4字节对齐的情况下,u32仍将使用r0,但u64现在将在r1和r2之间拆分。
发布于 2012-07-01 09:07:11
我希望这样做的正确方法是使用修改后的EABI定义重新编译工具链,您可能部分地抄袭了您不想使用的OABI。
您可能还必须重写内核的一些汇编语言部分,所以如果给修改后的ABI一个新名称可能会更好。
一定要花相当多的时间来理解和修复它破坏的各种东西。
发布于 2012-06-25 03:31:40
GCC有aligned属性,可以应用于类型:
typedef long __attribute__((aligned(4))) unaligned_long;现在,您可以在需要的时候(小心地)使用此类型。
https://stackoverflow.com/questions/11177804
复制相似问题