ARM® コンパイラ armlinkユーザガイド

バージョン 5.04


目次

序章
本書について
本書の構成
表記規則
Feedback
本製品に関するフィードバック
内容に関するフィードバック
1 リンカの概要
1.1 リンカについて
1.2 リンカのコマンドライン構文
1.3 リンカで使用できる入力
1.4 リンカからの出力
1.5 実行可能イメージを作成するときにリンカによって実行される処理
2 armlink でサポートされているリンクモデル
2.1 リンクモデルの概要
2.2 ベアメタルリンクモデル
2.3 部分リンクモデル
2.4 ベースプラットフォームアプリケーションバイナリインタフェース(BPABI)リンクモデル
2.5 ベースプラットフォームリンクモデル
2.6 SysV リンクモデル
2.7 BPABI リンクモデルと SysV リンクモデルの両方に共通する概念
3 イメージの構造と生成
3.1 ARM ELF イメージの構造
3.2 入力セクション、出力セクション、領域、およびプログラムセグメント
3.3 イメージのロードビューと実行ビュー
3.4 リンカでイメージのメモリマップを指定する方法
3.5 単純イメージのタイプ
3.6 タイプ 1 のイメージ構造:1 つのロード領域と連続した実行領域
3.7 タイプ 2 のイメージ構造:1 つのロード領域と連続しない実行領域
3.8 タイプ 3 のイメージの構造:複数のロード領域と連続しない実行領域
3.9 イメージのエントリポイント
3.10 イメージの初期エントリポイント
3.11 Section placement with the linker
3.12 FIRST 属性と LAST 属性を使用したセクションの配置
3.13 リンカによるセクションの境界調整
3.14 リンカのデマンドページングファイルの作成に対するサポート
3.15 リンカの Thumb コードを含む実行領域の順序付け
3.16 ベニアの概要
3.17 ベニアの共有
3.18 ベニアのタイプ
3.19 位置非依存から絶対ベニアへの生成
3.20 スキャッタロード時のベニアの再利用
3.21 コマンドラインオプションを使用した C++ 例外テーブルの生成の制御
3.22 弱参照と定義
3.23 リンカによるライブラリの検索、選択、およびスキャンの実行方法
3.24 リンカによる ARM 標準ライブラリの検索方法
3.25 リンク時のユーザライブラリの指定
3.26 リンカによる参照の解決方法
3.27 リンカオプションの厳格なファミリ
3.28 ARM1176JZ-S または ARM1176JZF-S プロセッサでの BLX(イミディエート)命令発行の回避
4 リンカの最適化機能
4.1 共通デバッグセクションの削除
4.2 共通グループまたは共通セクションの削除
4.3 未使用セクションの削除
4.4 未使用仮想関数の削除
4.5 リンカフィードバックについて
4.6 リンカフィードバックの使用例
4.7 RW データ圧縮を使用した最適化
4.8 リンカによるコンプレッサの選択方法
4.9 リンカによって使用される圧縮アルゴリズムをオーバーライドするのに使用できるオプション
4.10 圧縮の適用方法
4.11 RW データ圧縮使用時の注意事項
4.12 リンカによる関数のインライン展開
4.13 関数のインライン化に影響を与える要因
4.14 NOP に最適化される分岐について
4.15 リンカの末尾呼び出しセクションの再順序付け
4.16 末尾呼び出しセクションの再順序付けに関する制限
4.17 リンカのコメントセクションのマージ
5 イメージに関する詳細の取得
5.1 リンカ生成ファイルに関する情報を取得するためのオプション
5.2 一部のリンクエラーの原因の特定
5.3 --info リンカオプションの使用例
5.4 リンク時のシンボルの場所を調べる方法
5.5 マップファイル内でのシンボルの場所を調べる方法
6 armlink によるシンボルのアクセスと管理
6.1 マッピングシンボルについて
6.2 リンカ定義のシンボル
6.3 領域関連シンボル
6.4 Image$$ 実行領域シンボル
6.5 Load$$ 実行領域シンボル
6.6 Load$$LR$$ ロード領域シンボル
6.7 スキャッタロード時以外の領域名の値
6.8 リンカ定義シンボルと分散ファイル
6.9 C および C++ でのリンカ定義シンボルのインポート方法
6.10 ARM アセンブリ言語でのリンカ定義シンボルのインポート方法
6.11 セクション関連シンボル
6.12 イメージシンボル
6.13 入力セクションのシンボル
6.14 別のイメージに含まれているシンボルへのアクセス
6.15 symdefs ファイルの作成
6.16 グローバルシンボルのサブセットの出力
6.17 symdefs ファイルの読み出し
6.18 symdefs ファイルの形式
6.19 ステアリングファイルとは
6.20 リンカコマンドラインでのステアリングファイルの指定
6.21 ステアリングファイルコマンドの概要
6.22 ステアリングファイルの形式
6.23 ステアリングファイルを使用したグローバルシンボルの非表示および名前の変更
6.24 $Super$$ と $Sub$$ を使用したシンボル定義へのパッチの適用
7 スキャッタロード機能
7.1 スキャッタロードについて
7.2 スキャッタロードが使用される状況
7.3 スキャッタロードのコマンドラインオプション
7.4 メモリマップが単純なスキャッタロードイメージ
7.5 メモリマップが複雑なスキャッタロードイメージ
7.6 スキャッタロード時に定義されないリンカ定義シンボル
7.7 スキャッタファイルを使用したスタックとヒープの指定
7.8 ルート実行領域
7.9 ルート実行領域と ABSOLUTE 属性
7.10 ルート実行領域と FIXED 属性
7.11 特定アドレスへの関数とデータの配置方法
7.12 スキャッタロードを使用して名前付きセクションを明示的に配置する方法の例
7.13 .ANY モジュールセレクタによる未割り当てセクションの配置
7.14 .ANY セクションの配置アルゴリズムの使用例
7.15 領域の割り当て、セレクタ、および優先度の動作を示す next_fit アルゴリズムの例
7.16 .ANY セクションのソートアルゴリズムの使用例
7.17 スキャッタファイルでのベニア入力セクションの配置
7.18 __attribute__((section("name"))) を使用したコードとデータの配置
7.19 特定のアドレスに __at セクションの配置
7.20 __at セクションの配置に関する制限
7.21 __at セクションの自動配置
7.22 __at セクションの手動配置
7.23 __at セクションを使用したフラッシュメモリでのキーの配置
7.24 __at セクションを使用したペリフェラルレジスタに対する構造のマッピング
7.25 オーバーレイを使用したセクションの配置
7.26 ARM C および C++ ライブラリコードの配置
7.27 ルート領域へのコードの配置例
7.28 ARM C ライブラリコードの配置例
7.29 ARM C++ ライブラリコードの配置例
7.30 ARM ライブラリヘルパ関数の配置例
7.31 空き領域の予約
7.32 ページ境界での領域の作成
7.33 実行領域と入力セクションのオーバーアライメント
7.34 スキャッタファイルの前処理
7.35 式の評価に使用可能な演算子
7.36 スキャッタファイル内の式の評価を使用したパディングの回避の例
7.37 等価なスキャッタロード記述を使用した単純イメージの生成
7.38 タイプ 1 のイメージ:1 つのロード領域と連続する実行領域
7.39 タイプ 2 のイメージ:1 つのロード領域と連続しない実行領域
7.40 タイプ 3 のイメージ:複数のロード領域と連続しない実行領域
7.41 スキャッタファイルを使用した ELF のマッピング
8 スキャッタファイル構文
8.1 スキャッタロード記述構文で使用される BNF 記法
8.2 スキャッタファイルの構文
8.3 ロード領域の記述
8.4 ロード領域記述の構文
8.5 ロード領域の属性
8.6 実行領域の記述
8.7 実行領域の記述に含まれている構文
8.8 実行領域の属性
8.9 ロード領域と実行領域のアドレス属性
8.10 ロード領域に相対アドレス +offset を使用する際の注意事項
8.11 実行領域に相対アドレス +offset を使用する際の注意事項
8.12 ロード領域のアドレス属性の継承規則
8.13 実行領域のアドレス属性の継承規則
8.14 RELOC アドレス属性の継承規則
8.15 入力セクションの記述
8.16 入力セクション記述の構文
8.17 スキャッタファイルの処理時の複数のマッチングをリンカが解決する方法
8.18 リンカによって生成されたコンテンツによって .ANY セクションがオーバーフローしたときの動作
8.19 スキャッタファイルの処理時にリンカがパス名を解決する方法
8.20 スキャッタファイル内の式の評価
8.21 スキャッタファイルでの式の使用
8.22 スキャッタファイル内の式の規則
8.23 スキャッタファイルで使用する実行アドレスの組み込み関数
8.24 相対ベースアドレスのロード領域と ZI 実行領域を含むスキャッタファイル
8.25 ScatterAssert 関数とロードアドレスに関連する関数
8.26 スキャッタファイル内のシンボルに関連する関数
8.27 ロード領域に厳密に配置した状態で、実行領域でベースアドレスに合わせる例
8.28 AlignExpr(expr, align) 関数
8.29 GetPageSize() 関数
8.30 SizeOfHeaders() 関数
9 armlink における GNU ld スクリプトのサポート
9.1 GNU ld スクリプトのサポートと制限について
9.2 armlink での ld スクリプトの一般的な使用事例
9.3 Armlink に実装されている重要な ld スクリプトコマンド
9.4 armlink での ld スクリプトの使用に固有の制限
9.5 armlink での ld スクリプトの使用に関する推奨事項
9.6 armlink によって使用されるデフォルトの GNU ld スクリプト
9.7 ARM Linux 実行可能ファイルをリンクするための GNU ld スクリプトの例
9.8 ARM Linux 共有オブジェクトをリンクするための GNU ld スクリプトの例
9.9 部分オブジェクトをリンクするための GNU ld スクリプトの例
10 BPABI および SysV の共有ライブラリと実行可能ファイル
10.1 ベースプラットフォームアプリケーションバイナリインタフェース(BPABI)について
10.2 BPABI がサポートしているプラットフォーム
10.3 すべての BPABI モデルに共通する機能
10.4 BPABI モデルのシンボルのインポートとエクスポートについて
10.5 BPABI モデルのシンボルの可視性
10.6 BPABI モデルの自動的なインポートとエクスポート
10.7 BPABI モデルの手動のインポートとエクスポート
10.8 BPABI モデルのシンボルバージョン管理
10.9 BPABI モデルの RW 圧縮
10.10 SysV モデルのリンカオプション
10.11 SysV メモリモデル
10.12 SysV メモリモデルにおけるダイナミックシンボルテーブルの自動規則
10.13 SysV メモリモデルのアドレシングモード
10.14 SysV メモリモデルのスレッドローカルストレージ
10.15 SysV メモリモデルのリンカコマンドラインオプション
10.16 SysV メモリモデルでのコマンドラインデフォルトへの変更
10.17 ベアメタルモデルと DLL 類似モデルのリンカオプション
10.18 ベアメタルメモリモデルと DLL 類似標準メモリモデル
10.19 BPABI DLL 類似モデルでの必須のシンボルバージョン管理
10.20 BPABI DLL 類似モデルにおけるダイナミックシンボルテーブルの自動規則
10.21 BPABI DLL 類似モデルのアドレシングモード
10.22 BPABI DLL 類似モデルでの C++ の初期化
10.23 シンボルバージョン管理
10.24 シンボルバージョン管理のスクリプトファイル
10.25 バージョン管理シンボルの作成例
10.26 組み込みシンボル
10.27 暗黙のシンボルバージョン管理を有効にするリンカオプション
10.28 BPABI DLL 類似モデルのリンカコマンドラインオプション
11 ベースプラットフォームリンクモデルの機能
11.1 ベースプラットフォームモデルでのスキャッタファイルの使用に関する制限
11.2 ベースプラットフォームリンクモデルのスキャッタファイルの例
11.3 ベースプラットフォームモデルを使用した PLT シーケンスの配置
12 リンカコマンドラインオプション
12.1 --add_needed、--no_add_needed
12.2 --add_shared_references、--no_add_shared_references
12.3 --any_contingency
12.4 --any_placement=algorithm
12.5 --any_sort_order=order
12.6 --api、--no_api
12.7 --arm_linux
12.8 --arm_only
12.9 --as_needed、--no_as_needed
12.10 --autoat、--no_autoat
12.11 --base_platform
12.12 --be8
12.13 --be32
12.14 --bestdebug、--no_bestdebug
12.15 --blx_arm_thumb、--no_blx_arm_thumb
12.16 --blx_thumb_arm、--no_blx_thumb_arm
12.17 --bpabi
12.18 --branchnop、--no_branchnop
12.19 --callgraph、--no_callgraph
12.20 --callgraph_file=filename
12.21 --callgraph_output=fmt
12.22 --cgfile=type
12.23 --cgsymbol=type
12.24 --cgundefined=type
12.25 --combreloc、--no_combreloc
12.26 --comment_section、--no_comment_section
12.27 --compress_debug、--no_compress_debug
12.28 --cppinit、--no_cppinit
12.29 --cpu=list
12.30 --cpu=name
12.31 --crosser_veneershare、--no_crosser_veneershare
12.32 --datacompressor=opt
12.33 --debug、--no_debug
12.34 --device=list
12.35 --device=name
12.36 --diag_error=tag[,tag,…]
12.37 --diag_remark=tag[,tag,…]
12.38 --diag_style=arm|ide|gnu
12.39 --diag_suppress=tag[,tag,…]
12.40 --diag_warning=tag[,tag,…]
12.41 --dll
12.42 --dynamic_debug
12.43 --dynamic_linker=name
12.44 --eager_load_debug、--no_eager_load_debug
12.45 --edit=file_list
12.46 --emit_debug_overlay_relocs
12.47 --emit_debug_overlay_section
12.48 --emit_non_debug_relocs
12.49 --emit_relocs
12.50 --entry=location
12.51 --errors=filename
12.52 --exceptions、--no_exceptions
12.53 --exceptions_tables=action
12.54 --execstack、--no_execstack
12.55 --export_all、--no_export_all
12.56 --export_dynamic、--no_export_dynamic
12.57 --feedback=filename
12.58 --feedback_image=option
12.59 --feedback_type=type
12.60 --filtercomment、--no_filtercomment
12.61 --fini=symbol
12.62 --first=section_id
12.63 --force_explicit_attr
12.64 --force_so_throw、--no_force_so_throw
12.65 --fpic
12.66 --fpu=list
12.67 --fpu=name
12.68 --gnu_linker_defined_syms
12.69 --help
12.70 --import_unresolved、--no_import_unresolved
12.71 --info=topic[,topic,…]
12.72 --info_lib_prefix=opt
12.73 --init=symbol
12.74 --inline、--no_inline
12.75 --inline_type=type
12.76 --inlineveneer、--no_inlineveneer
12.77 input-file-list
12.78 --keep=section_id
12.79 --keep_protected_symbols
12.80 --largeregions、--no_largeregions
12.81 --last=section_id
12.82 --ldpartial
12.83 --legacyalign、--no_legacyalign
12.84 --libpath=pathlist
12.85 --library=name
12.86 --library_type=lib
12.87 --licretry
12.88 --linker_script=ld_script
12.89 --linux_abitag=version_id
12.90 --list=filename
12.91 --list_mapping_symbols、--no_list_mapping_symbols
12.92 --load_addr_map_info、--no_load_addr_map_info
12.93 --locals、--no_locals
12.94 --mangled、--unmangled
12.95 --map、--no_map
12.96 --match=crossmangled
12.97 --max_er_extension=size
12.98 --max_veneer_passes=value
12.99 --max_visibility=type
12.100 --merge、--no_merge
12.101 --muldefweak、--no_muldefweak
12.102 --output=filename
12.103 --override_visibility
12.104 --pad=num
12.105 --paged
12.106 --pagesize=pagesize
12.107 --partial
12.108 --piveneer、--no_piveneer
12.109 --pltgot=type
12.110 --pltgot_opts=mode
12.111 --predefine="string"
12.112 --prelink_support、--no_prelink_support
12.113 --privacy
12.114 --reduce_paths、--no_reduce_paths
12.115 --ref_cpp_init、--no_ref_cpp_init
12.116 --reloc
12.117 --remarks
12.118 --remove、--no_remove
12.119 --ro_base=address
12.120 --ropi
12.121 --rosplit
12.122 --runpath=pathlist
12.123 --rw_base=address
12.124 --rwpi
12.125 --scanlib、--no_scanlib
12.126 --scatter=filename
12.127 --search_dynamic_libraries、--no_search_dynamic_libraries
12.128 --section_index_display=type
12.129 --shared
12.130 --show_cmdline
12.131 --show_full_path
12.132 --show_parent_lib
12.133 --show_sec_idx
12.134 --soname=name
12.135 --sort=algorithm
12.136 --split
12.137 --startup=symbol、--no_startup
12.138 --strict
12.139 --strict_enum_size、--no_strict_enum_size
12.140 --strict_flags、--no_strict_flags
12.141 --strict_ph、--no_strict_ph
12.142 --strict_relocations、--no_strict_relocations
12.143 --strict_symbols、--no_strict_symbols
12.144 --strict_visibility、--no_strict_visibility
12.145 --strict_wchar_size、--no_strict_wchar_size
12.146 --symbolic
12.147 --symbols、--no_symbols
12.148 --symdefs=filename
12.149 --symver_script=filename
12.150 --symver_soname
12.151 --sysroot=path
12.152 --sysv
12.153 --tailreorder、--no_tailreorder
12.154 --thumb2_library、--no_thumb2_library
12.155 --tiebreaker=option
12.156 --undefined=symbol
12.157 --undefined_and_export=symbol
12.158 --unresolved=symbol
12.159 --use_definition_visibility
12.160 --use_sysv_default_script、--no_use_sysv_default_script
12.161 --userlibpath=pathlist
12.162 --veneerinject、--no_veneerinject
12.163 --veneer_inject_type=type
12.164 --veneer_pool_size=size
12.165 --veneershare、--no_veneershare
12.166 --verbose
12.167 --version_number
12.168 --vfemode=mode
12.169 --via=filename
12.170 --vsn
12.171 --xo_base=address
12.172 --xref、--no_xref
12.173 --xrefdbg、--no_xrefdbg
12.174 --xref{from|to}=object(section)
12.175 --zi_base=address
13 リンカステアリングファイルコマンドリファレンス
13.1 EXPORT ステアリングファイルコマンド
13.2 HIDE ステアリングファイルコマンド
13.3 IMPORT ステアリングファイルコマンド
13.4 RENAME ステアリングファイルコマンド
13.5 REQUIRE ステアリングファイルコマンド
13.6 RESOLVE ステアリングファイルコマンド
13.7 SHOW ステアリングファイルコマンド
14 via ファイルの構文
14.1 via ファイルの概要
14.2 via ファイルの構文規則
A armlink ドキュメントに対する改訂
A.1 『armlink ユーザ ガイド』に対する改訂

図の一覧

3-1 セクション、領域、およびセグメントの関係
3-2 XO セクションがないイメージのロードメモリマップと実行メモリマップ
3-3 XO セクションがあるイメージのロードメモリマップと実行メモリマップ
3-4 単純タイプ 1 のイメージ
3-5 単純タイプ 2 のイメージ
3-6 単純タイプ 3 のイメージ
7-1 スキャッタロードを行った単純メモリマップ
7-2 複雑なメモリマップ
7-3 固定実行領域のメモリマップ
7-4 スタック用の領域の予約
8-1 スキャッタファイルのコンポーネント
8-2 ロード領域の記述に含まれているコンポーネント
8-3 実行領域の記述に含まれているコンポーネント
8-4 入力セクションの記述のコンポーネント
8-5 .ANY コンティンジェンシ
10-1 BPABI ツールの流れ

表の一覧

3-1 ロードビューと実行ビューの比較
3-2 スキャッタファイルおよび対応するコマンドラインオプションの比較
4-1 小さな関数のインライン化
6-1 Image$$ 実行領域シンボル
6-2 Load$$ 実行領域シンボル
6-3 Load$$LR$$ ロード領域シンボル
6-4 イメージシンボル
6-5 セクション関連シンボル
6-6 ステアリングファイルコマンドの概要
7-1 入力セクションのプロパティ(.ANY セクションの配置)
7-2 入力セクションのプロパティ(next_fit を使用したセクションの配置)
7-3 入力セクションのプロパティ(sections_a.o)
7-4 入力セクションのプロパティ(sections_b.o)
7-5 descending_size アルゴリズムのソート順序
7-6 cmdline アルゴリズムのソート順序
7-7 オーバーレイでの相対オフセットの使用
8-1 BNF 記法
8-2 実行アドレスに関連する関数
8-3 ロードアドレスに関連する関数
10-1 シンボルの可視性
10-2 SysV サポートの有効化
10-3 BPABI サポートの有効化
12-1 サポートされている ARM アーキテクチャ
12-2 データコンプレッサアルゴリズム
12-3 入力セクションに相当する GNU セクション
A-1 発行 I と発行 J の相違点
A-2 発行 H と発行 I の相違点
A-3 発行 G と発行 H の相違点
A-4 発行 F と発行 G の相違点
A-5 発行 E と発行 F の相違点
A-6 発行 D と発行 E の相違点
A-7 発行 C と発行 D の相違点
A-8 発行 B と発行 C の相違点
A-9 発行 A と発行 B の相違点

リリース情報

ドキュメント履歴
発行 日付 機密保持ステータス 変更点
A 28 5 月 2010 非機密扱い ARM コンパイラ v4.1 リリース
B 30 9 月 2010 非機密扱い ARM コンパイラ v4.1 のアップデート 1
C 28 1 月 2011 非機密扱い ARM コンパイラ v4.1 パッチ 3 のアップデート 2
D 30 4 月 2011 非機密扱い ARM コンパイラ v5.0 リリース
E 29 7 月 2011 非機密扱い ARM コンパイラ v5.0 のアップデート 1
F 30 9 月 2011 非機密扱い ARM コンパイラ v5.01 リリース
G 29 2 月 2012 非機密扱い ARM コンパイラ v5.01 リリースマニュアルの更新 1
H 27 7 月 2012 非機密扱い ARM コンパイラ v5.02 リリース
I 31 1 月 2013 非機密扱い ARM コンパイラ v5.03 リリース
J 16 12 月 2013 非機密扱い ARM コンパイラ v5.04 リリース

著作権

® または ™ のマークが付いた言葉およびロゴは、この著作権情報で別段に規定されている場合を除き、ARM® の EU またはその他の国における登録商標および商標です。本書に記載されている他の製品名は、各社の所有する商標です。

本書に記載されている情報の全部または一部、ならびに本書で紹介する製品は、著作権所有者の文書による事前の許可を得ない限り、転用・複製することを禁じます。

本書に記載されている製品は、今後も継続的に開発・改良の対象となります。本書に含まれる製品およびその利用方法についての情報は、ARM が利用者の利益のために提供するものです。したがって当社では、製品の市販性または利用の適切性を含め、暗示的・明示的に関係なく一切の責任を負いません。

本書は、本製品の利用者をサポートすることだけを目的としています。本書に記載されている情報の使用、情報の誤りまたは省略、あるいは本製品の誤使用によって発生したいかなる損失・損傷についても、ARM は一切責任を負いません。

ARM という用語が使用されている場合、"ARM または必要に応じてその子会社" を指します。

機密保持ステータス

本書は非機密扱いであり、本書を使用、複製、および開示する権利は、ARM および ARM が本書を提供した当事者との間で締結した契約の条項に基づいたライセンスの制限により異なります。

無制限アクセスは、ARM 社内による分類です。

製品ステータス

本書の情報は最終版であり、開発済み製品に対応しています。

Web アドレス

非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.