IMPORT、EXTERN

これらのディレクティブは、現在のアセンブリに定義されていない名前をアセンブラに渡します。

Show/hide構文

directive symbol {[SIZE=n]}
directive symbol {[type]}
directive symbol [attr{,type}{,SIZE=n}]
directive symbol [WEAK{,attr}{,type}{,SIZE=n}]

各項目には以下の意味があります。

directive

次のいずれかを指定できます。

IMPORT

シンボルを無条件にインポートします。

EXTERN

シンボルが現在のアセンブリで参照される場合にのみ、インポートします。

symbol

別々にアセンブルされたソースファイル、オブジェクトファイル、またはライブラリ内で定義されているシンボルの名前を指定します。シンボル名では大文字と小文字が区別されます。

WEAK

シンボルがどこにも定義されていない場合に、リンカによってエラーメッセージが生成されるのを回避します。また、このオプションを指定すると、リンカはインクルードされていないライブラリの検索も行いません。

attr

次のいずれかを指定できます。

DYNAMIC

ELF シンボルの可視性を STV_DEFAULT に設定します。

PROTECTED

ELF シンボルの可視性を STV_PROTECTED に設定します。

HIDDEN

ELF シンボルの可視性を STV_HIDDEN に設定します。

INTERNAL

ELF シンボルの可視性を STV_INTERNAL に設定します。

type

シンボル型を指定します。

DATA

ソースがアセンブルされリンクされると、symbol はデータとして扱われます。

CODE

ソースがアセンブルされリンクされると、symbol はコードとして扱われます。

ELFTYPE=n

n の値に従って、symbol は特定の ELF シンボルとして扱われます。ただし、n015 の任意の値を取ります。

指定されない場合、リンカは最適な型を選択します。

n

32 ビット値でサイズを指定します。SIZE 属性が指定されていない場合、アセンブラはサイズを次のように計算します。

  • PROC および FUNCTION シンボルの場合、サイズは ENDP または ENDFUNC までのコードのサイズに設定されます。

  • その他のシンボルの場合、サイズは同じソース行の命令またはデータのサイズになります。命令またはデータがない場合、サイズはゼロです。

Show/hide使用法

別のオブジェクトファイル内で定義されたシンボルへのリンク時に、シンボル名が解決されます。このシンボルはプログラムのアドレスとして処理されます。[WEAK] が指定されていない場合、対応するシンボルがリンク時に検出されないと、リンカによってエラーが生成されます。

[WEAK] が指定されており、対応するシンボルがリンク時に検出されない場合は、以下のようになります。

  • 参照が B 命令または BL 命令のデスティネーションである場合、シンボルの値が次の命令のアドレスとして使用されます。したがって、この B 命令または BL 命令は NOP となります。

  • それ以外の場合、シンボルの値はゼロと見なされます。

Show/hide

この例では、C++ ライブラリがリンクされていて、演算結果に基づいて条件分岐が発生するかどうかを確認しています。

    AREA    Example, CODE, READONLY
    EXTERN  __CPP_INITIALIZE[WEAK]  ; C++ ライブラリがリンクされている場合、
                                    ; __CPP_INITIALIZE 関数のアドレスを取得する
    LDR     r0,=__CPP_INITIALIZE    ; リンクされていない場合、アドレスはゼロになる
    CMP     r0,#0                   ; ゼロかどうかを確認する
    BEQ     nocplusplus             ; 演算結果に基づいて分岐する


以下に、SIZE 属性の使用例を示します。

    EXTERN symA [SIZE=4]
    EXTERN symA [DATA, SIZE=4]

Show/hide関連項目

Copyright © 2014 ARM. All rights reserved.ARM DUI 0802AJ
Non-ConfidentialID061814