EXPORT、GLOBAL

EXPORT ディレクティブは、個別のオブジェクトファイルとライブラリファイルに含まれるシンボルへの参照を解決するためにリンカが使用できるシンボルを宣言します。GLOBALEXPORT と同じ意味です。

Show/hide構文

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

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

symbol

エクスポートするシンボル名を指定します。シンボル名では大文字と小文字が区別されます。symbol が省略されている場合は、すべてのシンボルがエクスポートされます。

WEAK

他のソースによって別の symbol がエクスポートされない場合にのみ、symbol は他のソースにインポートされます。symbol を指定せずに [WEAK] を指定すると、エクスポートされるすべてのシンボルが 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 の任意の値を取ります。

指定されない場合、アセンブラは最適な type を選択します。通常はアセンブラによって適切な型が選択されるので、type を指定する必要はありません。

set

命令セットを指定します。

ARM

symbol は A32 シンボルとして処理されます。

THUMB

symbol は T32 シンボルとして処理されます。

指定されない場合、アセンブラは最適なセットを選択します。

n

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

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

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

Show/hide使用法

EXPORT を使用して、他のファイルのコードが現在のファイルのシンボルにアクセスできるようにします。

[WEAK] 属性を使用して、symbol の別のインスタンスが別のソースに存在する場合は、そのインスタンスがこのインスタンスに優先されることをリンカに通知します。[WEAK] 属性は、任意のシンボル可視性属性と共に使用できます。

Show/hide

        AREA    Example,CODE,READONLY
        EXPORT  DoAdd           ; 外部モジュールで
                                ; 使用される
                                ; 関数名をエクスポートする
DoAdd   ADD     r0,r0,r1

エクスポートが重複する場合、シンボル可視性はオーバーライドされることがあります。以下の例では、最後の EXPORT のバインドと可視性が優先されます。

        EXPORT  SymA[WEAK]      ; 非表示の weak シンボルとしてエクスポートする
        EXPORT  SymA[DYNAMIC]   ; SymA はダイナミックな非 weak シンボルになる

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

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

Show/hide関連項目

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