首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为ARM-EABI编译Linux内核,但使用4字节大类型对齐?

为ARM-EABI编译Linux内核,但使用4字节大类型对齐?
EN

Stack Overflow用户
提问于 2012-06-24 21:21:50
回答 2查看 782关注 0票数 4

默认情况下,任何大类型(大于4个字节)在EABI上都将对齐到8个字节。这意味着如果调用function(u32, u64),u32将进入r0,而u64将在r2r3之间拆分,留下r1未使用。

我怎么才能让编译器把它对齐到4字节?我理解这(破坏ABI)或其他的后果,但我并不真正关心。也不要建议使用OABI,因为在内核配置中启用OABI会禁用对ARMv7的支持。

在4字节对齐的情况下,u32仍将使用r0,但u64现在将在r1r2之间拆分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-01 09:07:11

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

您可能还必须重写内核的一些汇编语言部分,所以如果给修改后的ABI一个新名称可能会更好。

一定要花相当多的时间来理解和修复它破坏的各种东西。

票数 3
EN

Stack Overflow用户

发布于 2012-06-25 03:31:40

GCC有aligned属性,可以应用于类型:

代码语言:javascript
复制
typedef long __attribute__((aligned(4))) unaligned_long;

现在,您可以在需要的时候(小心地)使用此类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11177804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档