4

デフォルトでは、大きなタイプ(4バイトより大きい)はEABIで8バイトにアラインされます。これは、function(u32, u64)が呼び出されると、u32がにr0なり、u64がとに分割されr2て未使用r3のままになることを意味します。r1

代わりに、コンパイラに4バイトにアラインさせるにはどうすればよいですか?私はこれ(ABIを壊す)などの結果を理解していますが、私は本当に気にしません。カーネル構成でOABIを有効にすると、ARMv7のサポートが無効になるため、OABIの使用を提案しないでください。

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 に答える