REQUIRE8、PRESERVE8

REQUIRE8 ディレクティブは、現在のファイルに 8 バイト境界で境界調整されたスタックが必要であることを指定します。 このディレクティブは、このこをリンカに通知するために REQ8 ビルド属性を設定します。

PRESERVE8 ディレクティブは、現在のファイルが 8 バイト境界で境界調整されたスタックを保持していることを指定します。 このディレクティブは、このとをリンカに通知するために PRES8 ビルド属性を設定します。

リンカは、8 バイト境界でアラインメントされたスタックを必要とするコードが、8 バイト境界でアラインメントされたスタックを保持するコードによってのみ直接的または間接的に呼び出されることをチェックします。

Show/hide構文

REQUIRE8 {bool}
PRESERVE8 {bool}

各パラメータには以下の意味があります。

bool

任意でブール定数({TRUE} または {FALSE})を指定します。

Show/hide使用法

8 バイト境界で境界調整されたスタックをコードで保持する場合は、必要に応じて、PRESERVE8 を使用してファイルに PRES8 ビルド属性を設定します。 8 バイト境界で境界調整されたスタックをコードで保持しない場合は、PRESERVE8 {FALSE} を使用して PRES8 ビルド属性が設定されないようにします。 ファイル内に複数の REQUIRE8 ディレクティブまたは PRESERVE8 ディレクティブがある場合、アセンブラは最後のディレクティブの値を使用します。

Note

PRESERVE8PRESERVE8 {FALSE} の両方を省略すると、アセンブラは、SP を変更する命令を調べて、PRES8 ビルド属性を設定するかどうかを決定します。 PRESERVE8 は明示的に指定することを推奨します。

以下のように警告メッセージをイネーブルできます。

armasm --diag_warning 1546

警告メッセージをイネーブルすると、以下のような警告メッセージが表示されます。

"test.s"、ライン 37: 警告: A1546W: スタックポインタの更新によって、 
                               8 バイトのスタックのアライメントが分断される可能性があります
       37 00000044         STMFD    sp!,{r2,r3,lr}

Show/hide

REQUIRE8
REQUIRE8     {TRUE}      ; REQUIRE8 と等価
REQUIRE8     {FALSE}     ; REQUIRE8 が指定されていない場合と等価
PRESERVE8    {TRUE}      ; PRESERVE8 と等価
PRESERVE8    {FALSE}     ; PRESERVE8 が指定されていない場合と完全に等価ではない

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0489GJ
Non-ConfidentialID051612