19.01.2015 Views

ARM コンパイラツールチェーン リンカの使用 - ARM Information Center

ARM コンパイラツールチェーン リンカの使用 - ARM Information Center

ARM コンパイラツールチェーン リンカの使用 - ARM Information Center

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

®<br />

<strong>ARM</strong><br />

コンパイラツールチェーン<br />

バージ ョ ン 5.0<br />

リ ン カの 使 用<br />

Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved.<br />

<strong>ARM</strong> DUI 0474FJ (ID 111311)


<strong>ARM</strong> コンパイラツールチェーン<br />

リ ン カの 使 用<br />

Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved.<br />

リリース 情 報<br />

本 書 には 以 下 の 変 更 が 加 え ら れています。<br />

変 更 履 歴<br />

日 付 発 行 機 密 保 持 ステー タ ス 変 更 点<br />

2010 年 5 月 28 日 A 非 機 密 扱 い <strong>ARM</strong> コンパイラツールチェーン v4.1 リリース<br />

2010 年 9 月 30 日 B 非 機 密 扱 い <strong>ARM</strong> コンパイラツールチェーン v4.1 のアップ<br />

デー ト 1<br />

2011 年 1 月 28 日 C 非 機 密 扱 い <strong>ARM</strong> コンパイラツールチェーン v4.1 パッチ 3 の<br />

アップデート 2<br />

2011 年 4 月 30 日 D 非 機 密 扱 い <strong>ARM</strong> コンパイラツールチェーン v5.0 リリース<br />

2011 年 7 月 29 日 E 非 機 密 扱 い <strong>ARM</strong> コンパイラツールチェーン v5.0 のアップ<br />

デー ト 1<br />

2011 年 9 月 30 日 F 非 機 密 扱 い <strong>ARM</strong> コンパイラツールチェーン v5.01 リリース<br />

著 作 権<br />

®<br />

または のマー ク が 付 いた 言 葉 およびロ ゴは、 こ の 著 作 権 情 報 で 別 段 に 規 定 さ れてい る 場 合 を 除 き、<br />

<strong>ARM</strong> の EU ま たはその 他 の 国 におけ る 登 録 商 標 および 商 標 です。 本 書 に 記 載 さ れてい る 他 の 製 品 名 は、 各<br />

社 の 所 有 する 商 標 です。<br />

本 書 に 記 載 さ れてい る 情 報 の 全 部 ま たは 一 部 、 な らびに 本 書 で 紹 介 する 製 品 は、 著 作 権 所 有 者 の 文 書 に よ<br />

る 事 前 の 許 可 を 得 ない 限 り 、 転 用 ・ 複 製 る こ と を 禁 じ ます。<br />

本 書 に 記 載 さ れてい る 製 品 は、 今 後 も 継 続 的 に 開 発 ・ 改 良 の 対 象 と な り ます。 本 書 に 含 まれる 製 品 および<br />

その 利 用 方 法 についての 情 報 は、 <strong>ARM</strong> が 利 用 者 の 利 益 のために 提 供 する ものです。 し たがって 当 社 では、<br />

製 品 の 市 販 性 ま たは 利 用 の 適 切 性 を 含 め、 暗 示 的 ・ 明 示 的 に 関 係 な く 一 切 の 責 任 を 負 いません。<br />

本 書 は、 本 製 品 の 利 用 者 をサポー ト する こ と だけを 目 的 と し ています。 本 書 に 記 載 さ れてい る 情 報 の 使<br />

用 、 情 報 の 誤 り ま たは 省 略 、 あ るいは 本 製 の 誤 使 用 に よ って 発 生 し たいかな る 損 失 ・ 損 傷 について も、<br />

<strong>ARM</strong> は 一 切 責 任 を 負 いません。<br />

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

機 密 保 持 ステー タ ス<br />

本 書 は 非 機 密 扱 いであ り 、 本 書 を 使 用 、 複 製 、 および 開 示 する 権 利 は、 <strong>ARM</strong> および <strong>ARM</strong> が 本 書 を 提 供 し<br />

た 当 事 者 と の 間 で 締 結 し た 契 約 の 条 項 に 基 づいた ラ イ セン スの 制 限 に よ り 異 な り ます。<br />

製 品 ステー タ ス<br />

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

Web アドレス<br />

http://www.arm.com<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. ii<br />

ID 111311<br />

Non-Confidential


目 次<br />

<strong>ARM</strong> コンパイラツールチェーン リ ン カの 使 用<br />

第 1 章<br />

第 2 章<br />

第 3 章<br />

第 4 章<br />

表 記 規 則 と フ ィ ー ド バ ッ ク<br />

リ ン カの 概 要<br />

2.1 リンカについて ....................................................................................................... 2-2<br />

2.2 リンカのコマンドライン 構 文 .................................................................................. 2-4<br />

2.3 リ ン カ コ マン ド ラ イ ンオプシ ョ ンの 目 的 別 一 覧 ..................................................... 2-5<br />

2.4 リ ン カ で 使 用 でき る 入 力 ....................................................................................... 2-10<br />

2.5 リ ン カからの 出 力 .................................................................................................. 2-11<br />

2.6 実 行 可 能 イ メ ージを 作 成 する と きに リ ン カによ っ て 実 行 される 処 理 ................... 2-12<br />

armlink でサポー ト されている リ ンクモデル<br />

3.1 リ ン ク モデルの 概 要 ................................................................................................ 3-2<br />

3.2 ベアメ タルリンクモデル ......................................................................................... 3-3<br />

3.3 部 分 リ ン ク モデル .................................................................................................... 3-5<br />

3.4 ベースプラ ッ ト フ ォームアプリケーシ ョ ンバイナリ インタ フ ェース<br />

(BPABI) リンクモデル ........................................................................................... 3-6<br />

3.5 ベースプラ ッ ト フ ォームリ ンクモデル ................................................................... 3-8<br />

3.6 SysV リンクモデル ................................................................................................ 3-10<br />

3.7 BPABI リンクモデルと SysV リ ン ク モデルの 両 方 に 共 通 する 概 念 ...................... 3-11<br />

イメージの 構 造 と 生 成<br />

4.1 イ メ ージの 構 造 ....................................................................................................... 4-3<br />

4.2 入 力 セ ク シ ョ ン、 出 力 セ ク シ ョ ン、 領 域 、 およびプ ログ ラムセグ メ ン ト ............. 4-5<br />

4.3 イ メ ージのロー ド ビ ュー と 実 行 ビ ュー ................................................................... 4-6<br />

4.4 リ ン カ で イ メ ージの メ モ リ マ ッ プ を 指 定 する 方 法 ................................................. 4-8<br />

4.5 単 純 イ メ ージのタ イ プ ........................................................................................... 4-10<br />

4.6 タイプ 1 のイ メージ : 1 つのロー ド 領 域 と 連 続 する 実 行 領 域 .............................. 4-12<br />

4.7 タイプ 2 のイ メージ : 1 つのロー ド 領 域 と 連 続 し ない 実 行 領 域 .......................... 4-14<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. iii<br />

ID 111311<br />

Non-Confidential


目 次<br />

4.8 タイプ 3 のイ メージ : 2 つのロー ド 領 域 と 連 続 し ない 実 行 領 域 .......................... 4-16<br />

4.9 イメージのエントリポイント ................................................................................ 4-18<br />

4.10 初 期 エン ト リ ポイ ン ト の 指 定 について ................................................................. 4-19<br />

4.11 リ ン カによ るセ ク シ ョ ンの 配 置 ............................................................................ 4-20<br />

4.12 FIRST 属 性 と LAST 属 性 を 使 用 し たセ ク シ ョ ンの 配 置 ....................................... 4-22<br />

4.13 リ ン カによ るセ ク シ ョ ンの 境 界 調 整 ..................................................................... 4-23<br />

4.14 デマン ドページング .............................................................................................. 4-24<br />

4.15 Thumb コー ド を 含 む 実 行 領 域 の 順 序 付 けについて .............................................. 4-26<br />

4.16 ベニアの 概 要 ......................................................................................................... 4-27<br />

4.17 ベニアの 共 有 ......................................................................................................... 4-28<br />

4.18 ベニアのタ イプ ..................................................................................................... 4-29<br />

4.19 位 置 非 依 存 から 絶 対 ベニアへの 生 成 ..................................................................... 4-31<br />

4.20 スキャ ッ タ ロー ド 時 のベニアの 再 利 用 ................................................................. 4-32<br />

4.21 コマンドラインオプションを 使 用 した C++ 例 外 テーブルの 生 成 の 制 御 ............. 4-33<br />

4.22 弱 参 照 と 定 義 について ........................................................................................... 4-35<br />

4.23 リ ン カによ る ラ イ ブ ラ リ の 検 索 、 選 択 、 およびスキャ ンの 実 行 方 法 ................... 4-38<br />

4.24 リンカによる <strong>ARM</strong> 標 準 ラ イ ブ ラ リ の 検 索 方 法 の 制 御 ......................................... 4-39<br />

4.25 リ ン ク 時 のユーザラ イ ブ ラ リ の 指 定 ..................................................................... 4-41<br />

4.26 リ ン カによ る 参 照 の 解 決 方 法 ................................................................................ 4-43<br />

4.27 リ ン カにおける 厳 格 なオプシ ョ ン フ ァ ミ リ の 使 用 ............................................... 4-45<br />

第 5 章<br />

第 6 章<br />

第 7 章<br />

リ ン カの 最 適 化 の 使 用<br />

5.1 共 通 デバ ッ グセ ク シ ョ ンの 削 除 .............................................................................. 5-3<br />

5.2 共 通 グループまたは 共 通 セ ク シ ョ ンの 削 除 ............................................................ 5-4<br />

5.3 未 使 用 セ ク シ ョ ンの 削 除 ......................................................................................... 5-6<br />

5.4 未 使 用 仮 想 関 数 の 削 除 ............................................................................................. 5-8<br />

5.5 リンカフィードバックについて .............................................................................. 5-9<br />

5.6 リ ン カ フ ィ ー ド バ ッ クの 使 用 例 ............................................................................ 5-11<br />

5.7 リンク 時 コード 生 成 について ................................................................................ 5-13<br />

5.8 RW デー タ 圧 縮 を 使 用 し た 最 適 化 ......................................................................... 5-16<br />

5.9 リ ン カによ る コ ン プ レ ッ サの 選 択 方 法 ................................................................. 5-17<br />

5.10 リンカによって 使 用 される 圧 縮 アルゴリズムのオーバーライド .......................... 5-18<br />

5.11 圧 縮 の 適 用 方 法 ..................................................................................................... 5-20<br />

5.12 RW デー タ 圧 縮 の 使 用 ........................................................................................... 5-21<br />

5.13 リ ン カによ る 関 数 のイ ン ラ イ ン 化 ......................................................................... 5-22<br />

5.14 関 数 のイ ン ラ イ ン 化 に 影 響 を 与 える 要 因 .............................................................. 5-23<br />

5.15 NOP に 最 適 化 される 分 岐 の 処 理 ........................................................................... 5-25<br />

5.16 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けについて ................................................... 5-26<br />

5.17 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けに 関 する 制 限 ............................................ 5-27<br />

5.18 コメントセクションのマージについて ................................................................. 5-28<br />

イ メ ージに 関 する 情 報 の 取 得<br />

6.1 イメージに 関 する 情 報 を 取 得 するためのリンカオプション ................................... 6-2<br />

6.2 一 部 の リ ン ク エ ラーの 原 因 の 特 定 ........................................................................... 6-3<br />

6.3 --info リ ン カオプシ ョ ンの 使 用 例 ....................................................................... 6-4<br />

6.4 リ ン ク 時 のシンボルの 場 所 を 調 べる 方 法 ................................................................ 6-6<br />

armlink によ るシンボルのア ク セス と 管 理<br />

7.1 マッピングシンボルについて .................................................................................. 7-3<br />

7.2 リ ン カ 定 義 シンボルへのア ク セス ........................................................................... 7-4<br />

7.3 領 域 関 連 シンボル .................................................................................................... 7-5<br />

7.4 Image$$ 実 行 領 域 シンボル ..................................................................................... 7-6<br />

7.5 Load$$ 実 行 領 域 シンボル ....................................................................................... 7-7<br />

7.6 Load$$LR$$ ロード 領 域 シンボル ........................................................................... 7-9<br />

7.7 スキャ ッ タ ロー ド 時 以 外 の 領 域 名 の 値 ................................................................. 7-10<br />

7.8 スキャ ッ タ フ ァ イルの 使 用 ................................................................................... 7-11<br />

7.9 C および C++ での リ ン カ 定 義 シンボルのイ ンポー ト .......................................... 7-12<br />

7.10 <strong>ARM</strong> アセンブラでのリンカ 定 義 シンボルのインポート ...................................... 7-13<br />

7.11 セクション 関 連 シンボル ....................................................................................... 7-14<br />

7.12 イメージシンボル .................................................................................................. 7-15<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. iv<br />

ID 111311<br />

Non-Confidential


目 次<br />

7.13 入 力 セ ク シ ョ ンのシンボル ................................................................................... 7-17<br />

7.14 別 のイ メ ージに 含 まれているシンボルへのア ク セス ............................................ 7-18<br />

7.15 symdefs フ ァ イルの 作 成 ....................................................................................... 7-19<br />

7.16 グローバルシンボルのサブセ ッ ト の 出 力 .............................................................. 7-20<br />

7.17 symdefs フ ァ イルの 読 み 出 し ................................................................................ 7-21<br />

7.18 symdefs フ ァ イルの 形 式 ....................................................................................... 7-22<br />

7.19 ステアリングファイルとは ................................................................................... 7-24<br />

7.20 リ ン カ コ マン ド ラ イ ンでのステア リ ング フ ァ イルの 指 定 ..................................... 7-25<br />

7.21 ステア リ ング フ ァ イルコ マン ド の 概 要 ................................................................. 7-26<br />

7.22 ステア リ ング フ ァ イルの 形 式 ................................................................................ 7-27<br />

7.23 ステア リ ング フ ァ イルを 使 用 し たグローバルシンボルの 非 表 示 お<br />

よび 名 前 の 変 更 ..................................................................................................... 7-29<br />

7.24 $Super$$ と $Sub$$ を 使 用 し たシンボル 定 義 へのパ ッ チの 適 用 ........................ 7-30<br />

第 8 章<br />

第 9 章<br />

スキャ ッ タ フ ァ イルの 使 用<br />

8.1 スキャ ッ タロードについて ..................................................................................... 8-3<br />

8.2 スキャ ッ タ ロー ド が 使 用 される 状 況 ....................................................................... 8-4<br />

8.3 スキャ ッ タロードのコマン ド ラインオプシ ョ ン ..................................................... 8-5<br />

8.4 メ モ リ マ ッ プが 単 純 な イ メ ージ .............................................................................. 8-7<br />

8.5 メ モ リ マ ッ プが 複 雑 な イ メ ージ .............................................................................. 8-9<br />

8.6 スキャ ッ タ ロー ド 時 に 定 義 されない リ ン カ 定 義 シンボル ..................................... 8-11<br />

8.7 スキャ ッ タ フ ァ イルを 使 用 し たス タ ッ ク と ヒ ープの 指 定 ..................................... 8-12<br />

8.8 ルー ト 領 域 とは ..................................................................................................... 8-13<br />

8.9 ルー ト 実 行 領 域 の 作 成 ........................................................................................... 8-14<br />

8.10 FIXED 属 性 を 使 用 し たルー ト 領 域 の 作 成 ............................................................. 8-17<br />

8.11 特 定 ア ド レ スへの 関 数 と デー タの 配 置 ................................................................. 8-18<br />

8.12 スキャ ッ タ ロー ド を 使 用 し た 名 前 付 きセ ク シ ョ ンの 明 示 的 な 配 置 ...................... 8-23<br />

8.13 .ANY モジ ュールセレ ク タ によ る 未 割 り 当 てセ ク シ ョ ンの 配 置 ........................... 8-25<br />

8.14 .ANY セ ク シ ョ ンの 配 置 アルゴ リ ズムの 使 用 例 .................................................... 8-29<br />

8.15 領 域 の 割 り 当 て、 セレ ク タ、 および 優 先 度 の 動 作 を 示 す next_fit<br />

アルゴ リズムの 例 .................................................................................................. 8-32<br />

8.16 .ANY セ ク シ ョ ンのソー ト アルゴ リ ズムの 使 用 例 ................................................. 8-34<br />

8.17 スキャ ッ タ ロー ド の 記 述 におけるベニア 入 力 セ ク シ ョ ンの 選 択 .......................... 8-36<br />

8.18 __attribute__((section("name"))) を 使 用 し た コー ド と デー タの 配 置 ..................... 8-37<br />

8.19 __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する .................. 8-39<br />

8.20 __at セ ク シ ョ ンの 配 置 に 関 する 制 限 .................................................................... 8-41<br />

8.21 __at セ ク シ ョ ンの 自 動 配 置 ................................................................................... 8-42<br />

8.22 __at セ ク シ ョ ンの 手 動 配 置 ................................................................................... 8-44<br />

8.23 __at を 使 用 し た フ ラ ッ シ ュ メ モ リ でのキーの 配 置 ............................................... 8-46<br />

8.24 __at を 使 用 し たペ リ フ ェ ラルレ ジス タ に 対 する 構 造 の 配 置 ................................ 8-48<br />

8.25 オーバーレ イ を 使 用 し たセ ク シ ョ ンの 配 置 .......................................................... 8-49<br />

8.26 <strong>ARM</strong> C および C++ ラ イ ブ ラ リ コー ド の 配 置 について 8-52<br />

8.27 ルー ト 領 域 へのコー ド の 配 置 例 ............................................................................ 8-53<br />

8.28 <strong>ARM</strong> C ラ イ ブ ラ リ コー ド の 配 置 例 ....................................................................... 8-54<br />

8.29 <strong>ARM</strong> C++ ラ イ ブ ラ リ コー ド の 配 置 例 ................................................................... 8-55<br />

8.30 <strong>ARM</strong> ラ イ ブ ラ リ ヘルパ 関 数 の 配 置 例 ................................................................... 8-56<br />

8.31 空 き 領 域 の 予 約 ..................................................................................................... 8-57<br />

8.32 ページ 境 界 での 領 域 の 作 成 について ..................................................................... 8-59<br />

8.33 実 行 領 域 と 入 力 セ ク シ ョ ンのオーバーア ラ イ メ ン ト ............................................ 8-61<br />

8.34 スキャ ッ タ フ ァ イルでのプ リ プ ロセ ッ シング コ マン ド の 使 用 ............................. 8-62<br />

8.35 スキャ ッ タ フ ァ イル 内 の 式 の 評 価 ......................................................................... 8-63<br />

8.36 スキャ ッ タ フ ァ イル 内 の 式 の 評 価 を 使 用 し たパデ ィ ングの 回 避 .......................... 8-64<br />

8.37 等 価 なスキャ ッ タ ロー ド 記 述 を 使 用 し た 単 純 イ メ ージの 生 成 ............................. 8-65<br />

8.38 タイプ 1 のイ メージ : 1 つのロー ド 領 域 と 連 続 する 実 行 領 域 .............................. 8-66<br />

8.39 タイプ 2 のイ メージ : 1 つのロー ド 領 域 と 連 続 し ない 実 行 領 域 .......................... 8-68<br />

8.40 タイプ 3 のイ メージ : 2 つのロー ド 領 域 と 連 続 し ない 実 行 領 域 .......................... 8-70<br />

8.41 スキャ ッ タ フ ァ イルを 使 用 した ELF のマッ ピング .............................................. 8-73<br />

armlink における GNU ld スクリプトのサポート<br />

9.1 GNU ld スクリプトのサポート と 制 限 について ....................................................... 9-2<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. v<br />

ID 111311<br />

Non-Confidential


目 次<br />

9.2 armlink での ld ス ク リ プ ト の 一 般 的 な 使 用 事 例 ...................................................... 9-4<br />

9.3 Armlink に 実 装 されている 重 要 な ld スクリプト コマンド ....................................... 9-6<br />

9.4 armlink での ld ス ク リ プ ト の 使 用 に 固 有 の 制 限 ...................................................... 9-8<br />

9.5 armlink での ld ス ク リ プ ト の 使 用 に 関 する 推 奨 事 項 .............................................. 9-9<br />

9.6 armlink によ っ て 使 用 されるデフ ォル ト の GNU ld スクリプト ............................ 9-10<br />

9.7 <strong>ARM</strong> Linux 実 行 可 能 フ ァ イルを リ ン クするための GNU ld スクリプトの 例 ........ 9-14<br />

9.8 <strong>ARM</strong> Linux 共 有 オブジ ェ ク ト を リ ン クするための GNU ld スクリプトの 例 ........ 9-16<br />

9.9 ld --ldpartial オブジェ ク ト をリンクするための GNU ld スクリプトの 例 .. 9-18<br />

第 10 章<br />

第 11 章<br />

Appendix A<br />

BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.1 ベースプラ ッ ト フ ォームアプリケーシ ョ ンバイナリ インタ フ ェース (BPABI) につい<br />

て ........................................................................................................................... 10-3<br />

10.2 BPABI がサポー ト し ている プ ラ ッ ト フ ォーム 10-4<br />

10.3 すべての BPABI モデルに 共 通 する 概 念 ................................................................ 10-5<br />

10.4 BPABI モデルのシンボルのイ ンポー ト と エ ク スポー ト について ......................... 10-6<br />

10.5 BPABI モデルのシンボルの 可 視 性 ........................................................................ 10-7<br />

10.6 BPABI モデルの 自 動 的 な イ ンポー ト と エ ク スポー ト ........................................... 10-9<br />

10.7 BPABI モデルの 手 動 のイ ンポー ト と エ ク スポー ト ............................................. 10-10<br />

10.8 BPABI モデルのシンボルバージ ョ ン 管 理 ........................................................... 10-11<br />

10.9 BPABI モデルの RW 圧 縮 .................................................................................... 10-12<br />

10.10 SysV モデルのリ ンカオプシ ョ ン ........................................................................ 10-13<br />

10.11 SysV メモリモデル .............................................................................................. 10-14<br />

10.12 SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則 ........... 10-15<br />

10.13 SysV メモリモデルのアドレシングモード .......................................................... 10-17<br />

10.14 SysV メモリモデルのスレッドローカルストレージ ........................................... 10-18<br />

10.15 SysV メモリモデルに 関 連 するリンカコマンドラインオプション ...................... 10-19<br />

10.16 SysV メ モ リ モデルでのコ マン ド ラ イ ンデフ ォル ト への 変 更 ............................. 10-20<br />

10.17 ベアメ タルモデルと DLL 類 似 モデルの リ ン カオプシ ョ ン ................................. 10-21<br />

10.18 ベアメ タルメモリモデルと DLL 類 似 メ モ リ モデル ............................................ 10-22<br />

10.19 BPABI DLL 類 似 モデルでの 必 須 のシンボルバージ ョ ン 管 理 .............................. 10-23<br />

10.20 BPABI DLL 類 似 モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則 ..... 10-24<br />

10.21 BPABI DLL 類 似 モデルのア ド レシングモー ド ................................................... 10-25<br />

10.22 BPABI DLL 類 似 モデルでの C++ の 初 期 化 ......................................................... 10-26<br />

10.23 シンボルバージョ ン 管 理 について ....................................................................... 10-27<br />

10.24 シンボルバージ ョ ン 管 理 のス ク リ プ ト フ ァ イル ................................................. 10-28<br />

10.25 バージ ョ ン 管 理 シンボルの 作 成 例 ....................................................................... 10-29<br />

10.26 組 み 込 みシンボルについて ................................................................................. 10-30<br />

10.27 暗 黙 のシンボルバージ ョ ン 管 理 を 有 効 にする リ ン カオプシ ョ ン ........................ 10-31<br />

10.28 BPABI DLL 類 似 モデルに 関 連 する リ ン カ コ マン ド ラ イ ンオプシ ョ ン ............... 10-32<br />

ベースプラッ ト フォームリンクモデルの 機 能<br />

11.1 ベースプ ラ ッ ト フ ォームモデルでのスキャ ッ タ フ ァ イルの 使 用 に 関 する 制 限 .... 11-2<br />

11.2 ベースプ ラ ッ ト フ ォーム リ ン ク モデルのスキャ ッ タ フ ァ イルの 例 ...................... 11-5<br />

11.3 ベースプラ ッ ト フ ォームモデルを 使 用 した PLT シーケンスの 配 置 ..................... 11-7<br />

『 リ ン カの 使 用 』 に 対 する 改 訂<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. vi<br />

ID 111311<br />

Non-Confidential


第 1 章<br />

表 記 規 則 と フ ィ ー ド バ ッ ク<br />

以 下 では、 表 記 規 則 と フ ィ ー ド バ ッ ク の 方 法 について 説 明 し ます。<br />

表 記 規 則<br />

以 下 の 表 記 規 則 を 使 用 し ています。<br />

monospace コマンド、 ファイル 名 、 プログラム 名 、 ソースコードなど、 キー<br />

ボード から 入 力 可 能 なテキス ト を 示 しています。<br />

monospace コ マン ド ま たはオプシ ョ ンに 使 用 可 能 な 略 語 を 示 し ます。 コ マン<br />

ド 名 またはオプシ ョ ン 名 をすべて 入 力 する 代 わ り に、 下 線 部 分 の<br />

文 字 だけを 入 力 する こ と がで き ます。<br />

monospace italic<br />

コ マン ド ま たは 関 数 の 引 数 で、 特 定 の 値 に 置 き 換 え る こ と が 可 能<br />

なものを 示 しています。<br />

monospace bold<br />

サンプルコード 以 外 に 使 用 される 言 語 キーワードを 示 していま<br />

す。<br />

italic 重 要 事 項 、 重 要 用 語 、 相 互 参 照 、 引 用 箇 所 を 斜 体 で 記 載 し ていま<br />

す。<br />

bold メ ニ ュー 名 な どのユーザ イ ン タ フ ェース 要 素 を 太 字 で 記 載 し てい<br />

ます。 ま た、 適 宜 記 述 リ ス ト 内 の 重 要 箇 所 と <strong>ARM</strong> ® プロセッサの<br />

信 号 名 にも 太 字 を 用 いています。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 1-1<br />

ID 111311<br />

Non-Confidential


表 記 規 則 と フ ィ ー ド バ ッ ク<br />

本 製 品 に 関 する フ ィ ー ド バ ッ ク<br />

本 製 品 についてのご 意 見 やご 提 案 がご ざいま し た ら、 以 下 の 情 報 を 添 え<br />

て 購 入 元 までお 寄 せ 下 さ い。<br />

• お 名 前 と 会 社 名<br />

• 製 品 のシ リ アル 番 号<br />

• 製 品 の リ リ ース 情 報<br />

• ご 使 用 のプラッ ト フォームの 詳 細 (ハードウェアプラッ ト フォー<br />

ム、 オペレーテ ィ ングシステムの 種 類 とバージ ョ ンなど)<br />

• 問 題 を 再 現 するサ イ ズの 小 さ な 独 立 し たサンプルコー ド<br />

• 操 作 の 目 的 と 実 際 の 動 作 に 関 する 詳 し い 説 明<br />

• 使 用 し た コ マン ド (コ マン ド ラ イ ンオプシ ョ ン を 含 む)<br />

• 問 題 を 例 示 するサンプル 出 力<br />

• ツールのバージ ョ ン 情 報 (バージ ョ ン 番 号 、 ビル ド 番 号 を 含 む)<br />

内 容 に 関 する フ ィ ー ド バ ッ ク<br />

内 容 に 関 するご 意 見 につきましては、 電 子 メールを errata@arm.com まで<br />

送 信 し て 下 さ い。 その 際 には、 以 下 の 内 容 を 記 載 し て 下 さ い。<br />

• タイトル<br />

• 文 書 番 号 (<strong>ARM</strong> DUI 0474FJ)<br />

• オン ラ イ ンでご 覧 の 場 合 は、 該 当 する ト ピ ッ ク 名<br />

• PDF 版 の 文 書 を ご 覧 の 場 合 は、 問 題 のあ るページ 番 号<br />

• 問 題 点 の 簡 潔 な 説 明<br />

ま た、 補 足 すべき 点 や 改 善 すべき 点 についての 全 般 的 なご 提 案 もお 待 ち<br />

しております。<br />

<strong>ARM</strong> では、 技 術 情 報 記 事 や FAQ の 拡 充 と 共 に、 ドキュメントに 対 する 更 新 と 訂 正 を<br />

<strong>ARM</strong> <strong>Information</strong> <strong>Center</strong> にて 定 期 的 に 行 ってお り ます。<br />

その 他 の 情 報<br />

• <strong>ARM</strong> <strong>Information</strong> <strong>Center</strong>, http://infocenter.arm.com/help/index.jsp<br />

• <strong>ARM</strong> Technical Support Knowledge Articles,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.faqs/index.html<br />

• <strong>ARM</strong> サポー ト およびメ ンテナンス , http://www.arm.com/support/services/support-maintenance.php<br />

• <strong>ARM</strong> 用 語 集 , http://infocenter.arm.com/help/topic/com.arm.doc.aeg0014-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 1-2<br />

ID 111311<br />

Non-Confidential


第 2 章<br />

リ ン カの 概 要<br />

以 下 の 各 ト ピ ッ ク では、 <strong>ARM</strong> リンカ armlink の 概 要 について 説 明 し ます。<br />

概 念<br />

• リンカについて (2-2 ページ)<br />

• リ ン カで 使 用 で き る 入 力 (2-10 ページ)<br />

• リンカからの 出 力 (2-11 ページ)<br />

• 実 行 可 能 イ メ ージを 作 成 する と きに リ ンカに よ って 実 行 さ れる 処 理 (2-12 ページ)<br />

.<br />

参 照<br />

• リンカのコマンドライン 構 文 (2-4 ページ)<br />

• リ ンカ コ マン ド ラ イ ンオプシ ョ ンの 目 的 別 一 覧 (2-5 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-1<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

2.1 リンカについて<br />

リンカ armlink は、 1 つ 以 上 のオブジ ェ ク ト フ ァ イルの 内 容 と 、 1 つ 以 上 のオブジ ェ ク<br />

ト ラ イ ブ ラ リ か ら 選 択 さ れた 部 分 と を 結 合 し て、 以 下 を 生 成 し ます。<br />

• <strong>ARM</strong> ELF イメージ<br />

• 次 の リ ン ク 手 順 で 入 力 と し て 使 用 でき る 部 分 的 に リ ン ク された ELF オブジェ ク<br />

ト<br />

• 効 率 的 にデマン ド ページングを 行 う こ と がで き る ELF ファイル<br />

• ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI)<br />

または System V リリース 4 (SysV) 仕 様 と 互 換 性 のあ る 共 有 オブジ ェ ク ト か、<br />

BPABI または SysV の 実 行 可 能 フ ァ イル<br />

リンカは 以 下 を 実 行 できます。<br />

• <strong>ARM</strong> コードおよび 16 ビッ ト Thumb ® コード と 32 ビッ ト Thumb コードを リ ンク<br />

します。<br />

• 必 要 に 応 じ てプ ロ セ ッ サ 状 態 を 切 り 替 え る ための イ ン ターワーキ ン グベニア を<br />

生 成 し ます。<br />

• 分 岐 命 令 の 範 囲 を 拡 張 する ために、 必 要 に 応 じ て、 イ ン ラ イ ンベニア ま たは 長<br />

分 岐 ベニア を 生 成 し ます。<br />

• リ ン ク 対 象 のオブジェ ク ト のビル ド 属 性 に 基 づいて、 リ ン ク に 適 し た 標 準 C ラ<br />

イブラ リ または C++ ラ イ ブ ラ リ のバ リ ア ン ト を 自 動 的 に 選 択 し ます<br />

• コマンド ラインオプショ ンまたはスキャッタファイルを 使 用 して、 システムメ<br />

モ リ マップ 内 のコード とデータの 位 置 を 指 定 でき る よ う にします。<br />

• 読 み 出 し / 書 き 込 みデータ 圧 縮 を 実 行 し て、 ROM サ イ ズを 最 小 化 し ます。<br />

• 未 使 用 セ ク シ ョ ン を 削 除 し て、 出 力 イ メ ージのサ イ ズ を 小 さ く し ます。<br />

• 出 力 フ ァ イ ルのデバ ッ グ 情 報 の 生 成 を 制 御 し ます。<br />

• 静 的 コールグ ラ フの 生 成 と そのス タ ッ ク 使 用 量 の 一 覧 の 出 力 を 行 います。<br />

• 出 力 イ メ ージにあ る シンボルテーブルの 内 容 を 制 御 し ます。<br />

• 出 力 に 含 まれる コー ド と データ のサ イ ズ を 表 示 し ます。<br />

• リ ンカ フ ィ ー ド バ ッ ク を 使 用 し て、 個 々の 未 使 用 の 関 数 を 削 除 し ます。<br />

• 制 限 付 き で GNU ld スクリプトを 受 け 入 れます。<br />

注<br />

64 ビ ッ ト オペレーテ ィ ングシ ス テム 上 のプ ロ セスが よ り 大 容 量 の メ モ リ を 使 用 可 能<br />

な armlink の 64 ビット 版 が 用 意 されています。 64 ビッ ト 版 は、 このリ リースの<br />

armlink の 32 ビ ッ ト 版 でサポー ト されているすべての 機 能 をサポー ト し ます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-2<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

2.1.1 関 連 項 目<br />

タスク<br />

『<strong>ARM</strong> コンパイラツールチェーンの 概 要 』:<br />

• 64 ビットのリンカへの 変 更 (2-8 ページ) .<br />

概 念<br />

• デマン ドページング (4-24 ページ)<br />

• リンカフィードバックについて (5-9 ページ)<br />

• 第 3 章 armlink でサポー ト されている リ ン クモデル<br />

• 第 4 章 イ メージの 構 造 と 生 成<br />

• 第 5 章 リンカの 最 適 化 の 使 用<br />

• 第 6 章 イ メ ージに 関 する 情 報 の 取 得<br />

• 第 7 章 armlink によるシンボルのアクセスと 管 理<br />

• 第 8 章 スキャッタファイルの 使 用<br />

• 第 9 章 armlink における GNU ld スクリプトのサポート<br />

• 第 10 章 BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

• 第 11 章 ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能 .<br />

その 他 の 情 報<br />

Base Platform ABI for the <strong>ARM</strong> Architecture,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0037-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-3<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

2.2 リンカのコマンドライン 構 文<br />

リ ンカ を 起 動 する コ マン ド は 以 下 の と お り です。<br />

armlink [options] [input-file-list]<br />

options<br />

リンカコマンドラインオプション<br />

input-file-list<br />

オブジェ ク ト 、 ラ イブラ リ 、 またはシンボル 定 義 (symdefs) ファイル<br />

の 空 白 で 区 切 られた リ ス ト<br />

2.2.1 関 連 項 目<br />

参 照<br />

• リ ンカ コ マン ド ラ イ ンオプシ ョ ンの 目 的 別 一 覧 (2-5 ページ) .<br />

『リンカリファレンス』:<br />

• input-file-list (2-87 ページ)<br />

• 第 2 章 リンカコマンドラインオプション.<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-4<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

2.3 リ ン カ コ マン ド ラ イ ンオプシ ョ ンの 目 的 別 一 覧<br />

『リンカリファレンス』 の 以 下 のコマン ド ラ イ ンオプシ ョ ンを 参 照 し て 下 さい。<br />

ライブラリファイルとパスの 制 御<br />

• --add_needed、 --no_add_needed (2-6 ページ)<br />

• --add_shared_references、 --no_add_shared_references (2-7 ペー<br />

ジ)<br />

• --libpath=pathlist (2-97 ページ)<br />

• --library=name (2-98 ページ)<br />

• --library_type=lib (2-99 ページ)<br />

• --reduce_paths、 --no_reduce_paths (2-131 ページ)<br />

• --runpath=pathlist (2-140 ページ)<br />

• --scanlib、 --no_scanlib (2-143 ページ)<br />

• --search_dynamic_libraries、 --no_search_dynamic_libraries<br />

(2-146 ページ)<br />

• --thumb2_library、 --no_thumb2_library (2-174 ページ)<br />

• --userlibpath=pathlist (2-182 ページ) .<br />

オブジェ ク ト フ ァ イルの リ ン クの 制 御<br />

• --match=crossmangled (2-110 ページ)<br />

• --strict (2-158 ページ)<br />

• --strict_ph、 --no_strict_ph (2-161 ページ)<br />

• --strict_relocations、 --no_strict_relocations (2-162 ページ)<br />

• --sysroot=path (2-171 ページ)<br />

• --unresolved=symbol (2-179 ページ) .<br />

出 力 の 制 御<br />

• --base_platform (2-18 ページ)<br />

• --bpabi (2-24 ページ)<br />

• --combreloc、 --no_combreloc (2-33 ページ)<br />

• --dll (2-49 ページ)<br />

• --ldpartial (2-95 ページ)<br />

• --output=file (2-115 ページ)<br />

• --partial (2-120 ページ)<br />

• --prelink_support、 --no_prelink_support (2-127 ページ)<br />

• --reloc (2-134 ページ)<br />

• --shared (2-148 ページ)<br />

• --sysv (2-172 ページ) .<br />

イメージのメモリマップの 指 定<br />

• --autoat、 --no_autoat (2-17 ページ)<br />

• --fpic (2-74 ページ)<br />

• --linker_script=ld_script (2-101 ページ)<br />

• --predefine="string" (2-125 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --ropi (2-138 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-5<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

• --rosplit (2-139 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ)<br />

• --scatter=file (2-144 ページ)<br />

• --split (2-156 ページ)<br />

• --use_sysv_default_script、 --no_use_sysv_default_script<br />

(2-181 ページ)<br />

• --zi_base=address (2-197 ページ) .<br />

イメージ 内 のデバッグ 情 報 の 制 御<br />

• --bestdebug、 --no_bestdebug (2-21 ページ)<br />

• --compress_debug、 --no_compress_debug (2-35 ページ)<br />

• --debug、 --no_debug (2-41 ページ)<br />

• --dynamic_debug (2-50 ページ)<br />

• --emit_debug_overlay_relocs (2-54 ページ)<br />

• --emit_debug_overlay_section (2-55 ページ)<br />

• --emit_non_debug_relocs (2-56 ページ)<br />

イメージの 内 容 の 制 御<br />

• --any_contingency (2-8 ページ)<br />

• --any_placement=algorithm (2-9 ページ)<br />

• --any_sort_order=order (2-11 ページ)<br />

• --api、 --no_api (2-12 ページ)<br />

• --arm_linux (2-13 ページ)<br />

• --arm_only (2-15 ページ)<br />

• --as_needed、 --no_as_needed (2-16 ページ)<br />

• --blx_arm_thumb、 --no_blx_arm_thumb (2-22 ページ)<br />

• --blx_thumb_arm、 --no_blx_thumb_arm (2-23 ページ)<br />

• --branchnop、 --no_branchnop (2-25 ページ)<br />

• --comment_section、 --no_comment_section (2-34 ページ)<br />

• --cppinit、 --no_cppinit (2-36 ページ)<br />

• --cpu=name (2-38 ページ)<br />

• --datacompressor=opt (2-40 ページ)<br />

• --device=list (2-42 ページ)<br />

• --device=name (2-43 ページ)<br />

• --dynamic_linker=name (2-51 ページ)<br />

• --edit=file_list (2-53 ページ)<br />

• --emit_relocs (2-57 ページ)<br />

• --entry=location (2-58 ページ)<br />

• --exceptions、 --no_exceptions (2-61 ページ)<br />

• --exceptions_tables=action (2-62 ページ)<br />

• --execstack、 --no_execstack (2-63 ページ)<br />

• --export_all、 --no_export_all (2-64 ページ)<br />

• --export_dynamic、 --no_export_dynamic (2-65 ページ)<br />

• --filtercomment、 --no_filtercomment (2-69 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-6<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

• --fini=symbol (2-70 ページ)<br />

• --first=section_id (2-71 ページ)<br />

• --force_explicit_attr (2-72 ページ)<br />

• --force_so_throw、 --no_force_so_throw (2-73 ページ)<br />

• --fpu=name (2-76 ページ)<br />

• --gnu_linker_defined_syms (2-77 ページ)<br />

• --import_unresolved、 --no_import_unresolved (2-79 ページ)<br />

• --init=symbol (2-84 ページ)<br />

• --inline、 --no_inline (2-85 ページ)<br />

• --keep=section_id (2-89 ページ)<br />

• --keep_protected_symbols (2-91 ページ)<br />

• --largeregions、 --no_largeregions (2-92 ページ)<br />

• --last=section_id (2-94 ページ)<br />

• --linux_abitag=version_id (2-102 ページ)<br />

• --locals、 --no_locals (2-106 ページ)<br />

• --ltcg (2-107 ページ)<br />

• --max_visibility=type (2-112 ページ)<br />

• --merge、 --no_merge (2-113 ページ)<br />

• --muldefweak、 --no_muldefweak (2-114 ページ)<br />

• --override_visibility (2-116 ページ)<br />

• --pad=num (2-117 ページ)<br />

• --paged (2-118 ページ)<br />

• --pagesize=pagesize (2-119 ページ)<br />

• --pltgot=type (2-122 ページ)<br />

• --pltgot_opts=mode (2-124 ページ)<br />

• --privacy (2-128 ページ)<br />

• --ref_cpp_init、 --no_ref_cpp_init (2-132 ページ)<br />

• --remove、 --no_remove (2-136 ページ)<br />

• --soname=name (2-153 ページ)<br />

• --sort=algorithm (2-154 ページ)<br />

• --startup=symbol、 --no_startup (2-157 ページ)<br />

• --strict_flags、 --no_strict_flags (2-160 ページ)<br />

• --symbolic (2-166 ページ)<br />

• --symver_script=file (2-169 ページ)<br />

• --symver_soname (2-170 ページ)<br />

• --tailreorder、 --no_tailreorder (2-173 ページ)<br />

• --tiebreaker=option (2-175 ページ)<br />

• --undefined=symbol (2-177 ページ)<br />

• --undefined_and_export=symbol (2-178 ページ)<br />

• --use_definition_visibility (2-180 ページ)<br />

• --vfemode=mode (2-189 ページ) .<br />

ベニア 生 成 の 制 御<br />

• --crosser_veneershare、 --no_crosser_veneershare (2-39 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-7<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

• --inlineveneer、 --no_inlineveneer (2-86 ページ)<br />

• --max_veneer_passess=value (2-111 ページ)<br />

• --piveneer、 --no_piveneer (2-121 ページ)<br />

• --veneerinject、 --no_veneerinject (2-183 ページ)<br />

• --veneer_inject_type=type (2-184 ページ)<br />

• --veneer_pool_size=size (2-185 ページ)<br />

• --veneershare、 --no_veneershare (2-186 ページ) .<br />

バイ ト アドレシングモードの 制 御<br />

• --be8 (2-19 ページ)<br />

• --be32 (2-20 ページ) .<br />

イ メ ージ 情 報 の 抽 出 および 表 示 の 制 御<br />

• --callgraph、 --no_callgraph (2-26 ページ)<br />

• --callgraph_file=filename (2-28 ページ)<br />

• --callgraph_output=fmt (2-29 ページ)<br />

• --cgfile=type (2-30 ページ)<br />

• --cgsymbol=type (2-31 ページ)<br />

• --cgundefined=type (2-32 ページ)<br />

• --feedback=file (2-66 ページ)<br />

• --feedback_image=option (2-67 ページ)<br />

• --feedback_type=type (2-68 ページ)<br />

• --info=topic[,topic,...] (2-80 ページ)<br />

• --info_lib_prefix=opt (2-83 ページ)<br />

• --list_mapping_symbols、 --no_list_mapping_symbols (2-104 ペー<br />

ジ)<br />

• --load_addr_map_info、 --no_load_addr_map_info (2-105 ページ)<br />

• --mangled、 --unmangled (2-108 ページ)<br />

• --map、 --no_map (2-109 ページ)<br />

• --section_index_display=type (2-147 ページ)<br />

• --symbols、 --no_symbols (2-167 ページ)<br />

• --symdefs=file (2-168 ページ)<br />

• --xref、 --no_xref (2-194 ページ)<br />

• --xrefdbg、 --no_xrefdbg (2-195 ページ)<br />

• --xref{from|to}=object(section) (2-196 ページ) .<br />

注<br />

--callgraph を 指 定 した 場 合 を 除 き、 リ ンカでは 要 求 された 情 報 がデフォル ト では 標<br />

準 出 力 ス ト リ ーム stdout に 出 力 されます。 --list コマンドラインオプショ ンを 使 用 す<br />

ると、 この 情 報 をテキストファイルに 転 送 できます。<br />

診 断 メ ッ セージの 制 御<br />

• --diag_error=tag[,tag,...] (2-44 ページ)<br />

• --diag_remark=tag[,tag,...] (2-45 ページ)<br />

• --diag_style=arm|ide|gnu (2-46 ページ)<br />

• --diag_suppress=tag[,tag,...] (2-47 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-8<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

• --diag_warning=tag[,tag,...] (2-48 ページ)<br />

• --errors=file (2-60 ページ)<br />

• --list=file (2-103 ページ)<br />

• --remarks (2-135 ページ)<br />

• --show_full_path (2-150 ページ)<br />

• --show_parent_lib (2-151 ページ)<br />

• --show_sec_idx (2-152 ページ)<br />

• --strict_enum_size、 --no_strict_enum_size (2-159 ページ)<br />

• --strict_symbols、 --no_strict_symbols (2-163 ページ)<br />

• --strict_visibility、 --no_strict_visibility (2-164 ページ)<br />

• --strict_wchar_size、 --no_strict_wchar_size (2-165 ページ)<br />

• --verbose (2-187 ページ) .<br />

従 来 の イ メ ージの 境 界 整 列 の 制 御<br />

• --legacyalign、 --no_legacyalign (2-96 ページ) .<br />

その 他<br />

• --cpu=list (2-37 ページ)<br />

• --eager_load_debug、 --no_eager_load_debug (2-52 ページ)<br />

• --fpu=list (2-75 ページ)<br />

• --licretry (2-100 ページ)<br />

• --project=filename、 --no_project (2-129 ページ)<br />

• --reinitialize_workdir (2-133 ページ)<br />

• --show_cmdline (2-149 ページ)<br />

• --version_number (2-188 ページ)<br />

• --via=file (2-191 ページ)<br />

• --vsn (2-192 ページ)<br />

• --workdir=directory (2-193 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-9<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

2.4 リ ン カ で 使 用 で き る 入 力<br />

armlink への 入 力 は、 <strong>ARM</strong> ELF の 1 つ 以 上 のオブジ ェ ク ト フ ァ イルで 構 成 さ れます。<br />

この 形 式 は、 『ELF for the <strong>ARM</strong> Architecture (<strong>ARM</strong> IHI 0044)』 に 記 載 されています。<br />

armlink への 入 力 と し て 以 下 のフ ァ イルをオプシ ョ ンで 使 用 でき ます。<br />

• ライブラリアン armar によって 作 成 された 1 つ 以 上 の ラ イ ブ ラ リ<br />

• シンボル 定 義 ファイル<br />

• スキャッタファイル<br />

• ステアリ ングファイル<br />

2.4.1 関 連 項 目<br />

タスク<br />

• 第 8 章 スキャッタファイルの 使 用 .<br />

『armar での 静 的 ソ フ ト ウ ェ ア ラ イ ブ ラ リ の 作 成 』 :<br />

• 新 しいオブジェク ト ライブラ リの 作 成 (3-2 ページ) .<br />

参 照<br />

• 別 のイ メ ージに 含 まれている シンボルへのア ク セス (7-18 ページ) .<br />

『リンカリファレンス』:<br />

• 第 3 章 リンカステアリングファイルコマンドリファレンス<br />

• 第 4 章 スキャッタファイルの 正 式 な 構 文 .<br />

その 他 の 情 報<br />

• 『ELF for the <strong>ARM</strong> Architecture (<strong>ARM</strong> IHI 0044)』 ,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-10<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

2.5 リ ン カからの 出 力<br />

armlink からは 以 下 が 出 力 されます。<br />

• ELF 実 行 可 能 イ メ ージ<br />

• ELF 共 有 オブジ ェ ク ト<br />

• 部 分 的 に リ ン ク さ れた ELF オブジェ ク ト<br />

• 再 配 置 可 能 な ELF オブジェ ク ト<br />

fromelf を 使 用 する と、 ELF 実 行 可 能 イ メ ージを 他 のフ ァ イル 形 式 に 変 換 し た り 、<br />

ELF 実 行 可 能 イ メ ージの 内 容 を 表 示 、 処 理 、 保 護 し た り する こ と がで き ます。<br />

2.5.1 関 連 項 目<br />

概 念<br />

• 部 分 リ ン ク モデル (3-5 ページ)<br />

• リンカによるセクションの 配 置 (4-20 ページ)<br />

• イメージの 構 造 (4-3 ページ) .<br />

『fromelf イ メ ージ 変 換 ユーテ ィ リ テ ィ の 使 用 』 :<br />

• 第 2 章 fromelf イメージ 変 換 ユーティリティの 概 要 .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-11<br />

ID 111311<br />

Non-Confidential


リンカの 概 要<br />

2.6 実 行 可 能 イ メ ージ を 作 成 する と きに リ ン カによ っ て 実 行 される 処 理<br />

リ ンカ を 使 用 し て 実 行 可 能 イ メ ージを 作 成 する と きは、 以 下 の 処 理 が 行 われます。<br />

• 複 数 の 入 力 オブジ ェ ク ト フ ァ イ ル 間 のシンボ リ ッ ク 参 照 を 解 決 し ます。<br />

• そのま までは 不 完 全 なシンボ リ ッ ク 参 照 を 解 決 する ために、 ラ イ ブ ラ リ か ら オ<br />

ブジェ ク ト モジュールを 抽 出 し ます。<br />

• 入 力 セ ク シ ョ ン を 属 性 と 名 前 で ソ ー ト し、 類 似 する 属 性 と 名 前 の 付 いたセ ク<br />

シ ョ ン を 連 続 するチャ ン ク にマージ し ます。<br />

• 未 使 用 セ ク シ ョ ン を 削 除 し ます。<br />

• 重 複 する 共 通 グループ、 共 通 コードセクシ ョ ン、 データセクシ ョ ン、 およびデ<br />

バッグセクショ ンを 削 除 します。<br />

• 指 定 されたグループ 化 と 配 置 の 情 報 に 基 づいて、 オブジェ ク ト の 断 片 を メ モ リ<br />

領 域 内 に 配 置 し ます。<br />

• 再 配 置 可 能 な 値 にア ド レ ス を 割 り 当 て ます。<br />

• 実 行 可 能 イ メ ージを 生 成 し ます。<br />

2.6.1 関 連 項 目<br />

タスク<br />

• 共 通 デバ ッ グセ ク シ ョ ンの 削 除 (5-3 ページ)<br />

• 未 使 用 セ ク シ ョ ンの 削 除 (5-6 ページ) .<br />

概 念<br />

• イメージの 構 造 (4-3 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 2-12<br />

ID 111311<br />

Non-Confidential


第 3 章<br />

armlink でサポートされているリンクモデル<br />

以 下 の 各 ト ピ ッ ク では、 <strong>ARM</strong> リンカ armlink でサポー ト されている リ ン クモデルについ<br />

て 説 明 し ます。<br />

概 念<br />

• リンクモデルの 概 要 (3-2 ページ)<br />

• ベア メ タル リ ン クモデル (3-3 ページ)<br />

• 部 分 リ ン ク モデル (3-5 ページ)<br />

• ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバイナ リ イ ン タ フ ェース (BPABI) リ ン<br />

クモデル (3-6 ページ)<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ)<br />

• SysV リンクモデル (3-10 ページ)<br />

• BPABI リンクモデルと SysV リ ン ク モデルの 両 方 に 共 通 する 概 念 (3-11 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-1<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

3.1 リ ン ク モデルの 概 要<br />

リ ン ク モデル と は、 リ ンカの 動 作 を 制 御 する、 コ マン ド ラ イ ンオプシ ョ ン と メ モ リ<br />

マップの 集 まりです。<br />

ベア メ タル このモデルの 対 象 は 特 定 のプラッ ト フォームではありません。 このモデ<br />

ルを 使 用 する と 、 独 自 のカ ス タ ムオペレーテ ィ ン グシ ス テム、 メ モ リ<br />

マ ッ 、 および 必 要 に 応 じ てアプ リ ケーシ ョ ン コー ド を 使 用 し て イ メ ージ<br />

を 作 成 できます。 一 部 の 制 限 されたダイナ ミ ッ ク リ ン ク もサポー ト され<br />

ています。 追 加 のオプシ ョ ンを 指 定 でき るかど う かは、 スキャ ッ タフ ァ<br />

イルが 使 用 されているかど うかによって 異 なり ます。<br />

部 分 リ ン ク<br />

BPABI<br />

このモデルは、 後 続 の リ ン ク 手 順 での リ ンカへの 入 力 に 適 し た、 プラ ッ<br />

ト フ ォームに 依 存 し ないオブジ ェ ク ト を 生 成 し ます。 こ のモデルを 開 発<br />

プセスの 中 間 手 順 と し て 使 用 し て、 入 力 オブジ ェ ク ト の 制 限 付 き 処 理 を<br />

実 行 し、 単 一 の 出 力 オブジ ェ ク ト を 生 成 で き ます。<br />

このモデルでは、 DLL 類 似 ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ<br />

イナリ インタフェース (BPABI) をサポー ト し ています。 複 雑 性 の 異 な<br />

るプラッ ト フォーム OS で 動 作 可 能 なアプ リ ケーシ ョ ン と DLL を 生 成 す<br />

るためのモデルです。 メモリデルは BPABI 仕 様 に 従 って 制 限 さ れます。<br />

ベースプ ラ ッ ト フ ォーム<br />

これは、 スキャッタロードをサポートするための BPABI モデルの 拡 張<br />

です。<br />

SysV<br />

このモデルでは、 <strong>ARM</strong> Linux が 使 用 する ELF で 指 定 される System V<br />

(SysV) モデルをサポート しています。 メモリモデルは ELF 仕 様 に 従 っ<br />

て 制 限 されます。<br />

各 モデルの 関 連 するオプシ ョ ンを 組 み 合 わせて 出 力 を 厳 密 に 制 御 できます。<br />

3.1.1 関 連 項 目<br />

概 念<br />

• ベア メ タル リ ン クモデル (3-3 ページ)<br />

• 部 分 リ ン ク モデル (3-5 ページ)<br />

• ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI)<br />

リンクモデル (3-6 ページ)<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ)<br />

• SysV リンクモデル (3-10 ページ)<br />

• BPABI リンクモデルと SysV リンクモデルの 両 方 に 共 通 する 概 念 (3-11 ページ)<br />

.<br />

参 照<br />

• 第 10 章 BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル .<br />

その 他 の 情 報<br />

• 『<strong>ARM</strong> アーキテクチャ 用 ベースプラ ッ ト フォーム ABI』 ,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0037-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-2<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

3.2 ベアメ タルリ ンクモデル<br />

ベア メ タルモデルは、 プログ ラ ム 全 体 ( リアルタイムオペレーティングシステム<br />

(RTOS) を 含 む 場 合 あ り ) がワ ンパスで リ ン ク さ れてい る 従 来 の 組 み 込 み 市 場 に 向<br />

けたモデルです。 ベア メ タルシステムの メ モ リ マ ッ プに 関 し て、 リ ンカで 想 定 でき<br />

る 内 容 はほ と んど あ り ません。 そのため、 厳 密 に 制 御 する 必 要 があ る 場 合 は、 ス<br />

キ ャ ッ タ ロー ド メ カニズム を 使 用 する 必 要 があ ます。<br />

デフ ォル ト では、 リ ンカはすべての 再 配 置 を 静 的 に 解 決 し よ う と し ます。 ただ し、<br />

位 置 非 依 存 イ メ ージ ま たは 再 配 置 可 能 な イ メ ージを 作 成 する こ も で き ます。 そ う し<br />

た イ メ ージは、 異 な る ア ド レ スか ら 実 行 し、 ロー ド 時 ま たは 実 行 時 に 再 配 置 を 解 決<br />

できます。 これは、 ダイナミ ッ クモデル 使 用 して 実 現 できます。<br />

こ の タ イ プのモデルでは、 以 下 の こ と がで き ます。<br />

• ス キ ャ ッ タ フ ァ イルま たはコ マン ド ラ イ ンオプシ ョ ン を 使 用 し て 再 配 置 可 能 な<br />

領 域 ま たは 位 置 非 依 存 の 領 域 を 識 別 し ます。<br />

• ステア リ ングファ イルを 使 用 してインポートおよびエクスポートできるシンボ<br />

ルを 識 別 します。<br />

• ステアリ ングファイルを 使 用 して ELF ファイルに 必 要 な 共 有 ライブラリを 識 別<br />

します。<br />

こ のモデルでは、 以 下 のオプシ ョ ン を 使 用 で き ます。<br />

• --edit=file_list<br />

• --scatter=file<br />

スキャ ッ タ ロード を 使 用 しない 場 合 は、 以 下 のオプシ ョ ンを 使 用 できます。<br />

• --reloc<br />

• --ro_base=address<br />

• --ropi<br />

• --rosplit<br />

• --rw_base=address<br />

• --rwpi<br />

• --split<br />

• --zi_base<br />

3.2.1 関 連 項 目<br />

概 念<br />

• リ ンカで イ メ ージの メ モ リ マ ッ プを 指 定 する 方 法 (4-8 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --edit=file_list (2-53 ページ)<br />

• --reloc (2-134 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --ropi (2-138 ページ)<br />

• --rosplit (2-139 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-3<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

• --scatter=file (2-144 ページ)<br />

• --split (2-156 ページ)<br />

• --zi_base=address (2-197 ページ)<br />

• 第 3 章 リンカステアリングファイルコマンドリファレンス.<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-4<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

3.3 部 分 リ ン ク モデル<br />

部 分 リ ン ク では、 以 下 の 処 理 が 行 われます。<br />

• デバ ッ グセ ク シ ョ ンの 重 複 する コ ピーを 削 除 し ます。<br />

• シンボルテーブルを 1 つにマージ し ます。<br />

• 未 解 決 の 参 照 を 未 解 決 のま まに し ます。<br />

• 共 通 データ (COMDAT) グループをマージします。<br />

• 次 の リ ン ク 手 順 への 入 力 と し て 使 用 可 能 なオブジ ェ ク ト を 生 成 し ます。<br />

こ れに よ り 、 次 の リ ン ク 手 順 への 入 力 と し て 使 用 可 能 な 1 つの 出 力 フ ァ イルが 生 成<br />

さ れます。 リ ンカが 入 力 フ ァ イル 内 に 複 数 のエン ト リ ポ イ ン ト 検 出 し た 場 合 、 出 力<br />

ファイルに 含 めることができるエント リポイントは 1 つのみであ るため、 エラーが<br />

生 成 さ れます。<br />

このモデルを 使 用 してリンクするには、--partial コマンド ラインオプショ ンを 使 用<br />

し ます。 こ のモデルでは、 以 下 の リ ン カ コ マン ド ラ イ ンオプシ ョ ン も サポー ト さ れ<br />

ています。<br />

• --edit=file_list<br />

• --exceptions_tables=action<br />

注<br />

部 分 リ ン ク を 使 用 する 場 合 、 ス キ ャ ッ タ フ ァ イルでは、 コ ンポーネン ト オブジ ェ ク<br />

ト を 名 前 で 参 照 する こ と はでき ません。 そのため、 スキ ャ ッ タ ァ イルのア ッ プデー<br />

トが 必 要 になる 場 合 があります。<br />

3.3.1 関 連 項 目<br />

概 念<br />

• ステアリ ングファイルとは (7-24 ページ) .<br />

参 照<br />

• ステアリ ングファイルの 形 式 (7-27 ページ) .<br />

『リンカリファレンス』:<br />

• --edit=file_list (2-53 ページ)<br />

• --exceptions_tables=action (2-62 ページ)<br />

• --partial (2-120 ページ)<br />

• 第 3 章 リンカステアリングファイルコマンドリファレンス.<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-5<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

3.4 ベースプラ ッ ト フ ォームアプ リケーシ ョ ンバイナリ イン タ フ ェース (BPABI) リン<br />

クモデル<br />

ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI) は、<br />

独 自 のプラ ッ ト フ ォーム 固 有 のイ メ ージ 形 式 を 生 成 するサード パーテ ィ 用 の メ タ 標<br />

準 です。 つま り 、 BPABI モデルはプ ラ ッ ト フ ォーム 特 定 せずにで き る だけ 多 く の 情<br />

報 を 生 成 し ます。<br />

以 下 の 点 に 注 意 し て 下 さい。<br />

• スキャッタロードを 使 用 できません。 ただし、 ベースプラッ ト フォームリンク<br />

モデルは、 スキ ャ ッ タ ロード をサポー ト する BPABI モデルの 拡 張 です。<br />

• このモデルは、 共 有 オブジェク トが C++ 例 外 を ス ローで き ない こ と を 前 提 と し<br />

ています。<br />

• --pltgot オプシ ョ ンのデフォル ト 値 は direct です。<br />

• 必 要 なすべてのシンボルが ロー ド 時 に 利 用 可 能 にな る よ う に、 シンボルバー<br />

ジ ョ ン 管 理 を 使 用 する 必 要 があ り ます。<br />

このモデルを 使 用 してリンクするには、--bpabi コマンド ラインオプショ ンを 使 用 し<br />

ます。 このモデルでは、 以 下 の リ ンカコマンド ラ インオプシ ョ ンもサポート されて<br />

います。<br />

• --dll<br />

• --force_so_throw、 --no_force_so_throw<br />

• --pltgot=type<br />

• --ro_base=address<br />

• --rosplit<br />

• --rw_base=address<br />

• --rwpi<br />

3.4.1 関 連 項 目<br />

概 念<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ)<br />

• BPABI リンクモデルと SysV リンクモデルの 両 方 に 共 通 する 概 念 (3-11 ページ)<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --bpabi (2-24 ページ)<br />

• --dll (2-49 ページ)<br />

• --force_so_throw、 --no_force_so_throw (2-73 ページ)<br />

• --pltgot=type (2-122 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --rosplit (2-139 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-6<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

その 他 の 情 報<br />

• 『<strong>ARM</strong> アーキテクチャ 用 ベースプラ ッ ト フォーム ABI』 ,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0037-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-7<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

3.5 ベースプラ ッ ト フ ォームリ ンクモデル<br />

ベースプ ラ ッ ト フ ォームでは、 System V (SysV) リ ンクモデルまたはベースプ ラ ッ ト<br />

フォームアプリケーションバイナリ インタフェイス (BPABI) リ ンクモデルで 強 制<br />

さ れる メ モ リ マ ッ プを 持 たない 動 的 に リ ン ク 可 能 な イ メ ージを 作 成 で き ます。 こ の<br />

モデルでは 以 下 を 実 行 でき ます。<br />

• ス キ ャ ッ タ フ ァ イ ルに 記 述 さ れてい る メ モ リ マ ッ プを 持 つイ メ ージ を 作 成 し ま<br />

す。<br />

• ダ イナ ミ ッ ク な 再 配 置 に よ って、 イ メ ージを 動 的 に リ ン ク で き る よ う に し ま<br />

す。 ダ イ ナ ミ ッ ク な 再 配 置 は、 同 じ イ メ ージ 内 を ターゲ ッ ト にする こ も で き ま<br />

す。<br />

注<br />

BPABI 仕 様 には、 ス キ ャ ッ タ ロー ド の 使 用 を 妨 げる 可 能 性 があ る、 メ モ リ モデルに<br />

対 する 制 約 があ り ます。 ただ し、 ベースプ ラ ッ ト フ ォームは BPABI のスーパーセッ<br />

トであるため、ベースプラットフォームを 使 用 して BPABI に 準 拠 し た イ メ ージを 作<br />

成 でき ます。<br />

ベースプ ラ ッ ト フ ォームモデルを 使 用 し て リ ン ク する には、 --base_platform コマンド<br />

ラインオプションを 使 用 します。<br />

こ のオプシ ョ ン を 指 定 する と 、 以 下 の 点 を 除 き、 リ ン カは --bpabi を 指 定 した 場 合 と<br />

同 様 に 動 作 し ます。<br />

• 以 下 のオプシ ョ ンに 加 え、 --scatter と 共 にス キ ャ ッ タ ロー ド を 利 用 で き ます。<br />

— --dll<br />

— --force_so_throw、 --no_force_so_throw<br />

— --pltgot=type (タイプは none または direct に 制 限 されます)<br />

— --ro_base=address<br />

— --rosplit<br />

— --rw_base=address<br />

— --rwpi<br />

• --pltgot オプシ ョ ンのデフォル ト 値 は、 --bpabi のデフ ォル ト 値 と は 異 な り ます。<br />

— --base_platform の 場 合 、 デフ ォル ト は --pltgot=none です。<br />

— --bpabi を 使 用 している 場 合 、 デフォル ト は --pltgot=direct です。<br />

• ス キ ャ ッ タ フ ァ イルを 使 用 し ない 場 合 、 リ ンカでは、 プロシージャ リ ンクテー<br />

ブル (PLT) セクシ ョ ンを 正 し く 配 置 し、 そこにインポート したシンボルのみ<br />

を 呼 び 出 すためのエン ト リ を 含 め る こ と がで き ます。 ス キ ャ ッ タ フ ァ イル 指 定<br />

した 場 合 、 リンカは PLT の 配 置 に 適 し た 場 所 を 見 つける こ と ができ ないこ と が<br />

あります。<br />

コー ド を 含 む 各 ロー ド 領 域 では、 静 的 リ ン ク 時 にア ド レ スが 不 明 な 場 合 に ロー<br />

ド 領 域 か ら 関 数 への 間 接 的 な 呼 び 出 し を 行 う ために、 PLT セクションが 必 要 な<br />

こ と があ り ます。 ロー ド 領 域 LR の PLT セクションは LR に 配 置 し、 LR 内 のコー<br />

ド か ら いつで も ア ク セスで き る 必 要 があ り ます。<br />

実 行 時 に 再 配 置 可 能 な ロー ド 領 域 間 で 確 実 に 呼 び 出 し を 行 う には、 以 下 の 操 作<br />

を 実 行 し ます。<br />

— --pltgot=direct オプシ ョ ン を 使 用 し て、 PLT の 生 成 を 有 効 にし ます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-8<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

— --pltgot_opts=crosslr オプシ ョ ンを 使 用 して、 RELOC ロー ド 領 域 間 での 呼 び<br />

出 しを 行 う ためのエン ト リ を PLT に 追 加 し ます。 リ ンカによ って ロード<br />

領 域 ご と に PLT が 生 成 されるため、 離 れている PLT にアクセスするのに<br />

呼 び 出 し を 拡 張 する 必 要 があ り ません。<br />

以 下 の 点 に 注 意 し て 下 さい。<br />

• このモデルは、 共 有 オブジェク トが C++ 例 外 を ス ローで き ない こ と を 前 提 と し<br />

ています。<br />

• 必 要 なすべてのシンボルが ロー ド 時 に 利 用 可 能 にな る よ う に、 シンボルバー<br />

ジ ョ ン 管 理 を 使 用 する 必 要 があ り ます。<br />

• 使 用 で き る ス キ ャ ッ タ フ ァ イルの タ イ プには 制 限 があ り ます。<br />

3.5.1 関 連 項 目<br />

概 念<br />

• ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI)<br />

リンクモデル (3-6 ページ)<br />

• BPABI リンクモデルと SysV リンクモデルの 両 方 に 共 通 する 概 念 (3-11 ページ)<br />

• リ ンカで イ メ ージの メ モ リ マ ッ プを 指 定 する 方 法 (4-8 ページ)<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ)<br />

• ベースプ ラ ッ ト フ ォームモデルでのス キ ャ ッ タ フ ァ イルの 使 用 に 関 する 制 限<br />

(11-2 ページ)<br />

• ベースプラ ッ ト フ ォーム リ ン ク モデルのスキ ャ ッ タ フ ァ イルの 例 (11-5 ペー<br />

ジ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --base_platform (2-18 ページ)<br />

• --dll (2-49 ページ)<br />

• --force_so_throw、 --no_force_so_throw (2-73 ページ)<br />

• --pltgot=type (2-122 ページ)<br />

• --pltgot_opts=mode (2-124 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --rosplit (2-139 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ)<br />

• --scatter=file (2-144 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-9<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

3.6 SysV リンクモデル<br />

System V (SysV) モデルでは、 SysV の 共 有 オブジ ェ ク ト および 実 行 可 能 フ ァ イルが<br />

生 成 さ れます。 こ のモデルを 使 用 し て、 <strong>ARM</strong> Linux と 互 換 性 のある 共 有 オブジェク<br />

ト や 実 行 可 能 フ ァ イルを 生 成 する こ と も で き ます。<br />

以 下 の 点 に 注 意 し て 下 さい。<br />

• スキャッタロードを 使 用 できません。<br />

• こ のモデルは、 共 有 オブジ ェ ク ト が 例 外 を ス ローで き る こ と を 前 提 と し ていま<br />

す。<br />

• スレ ッ ド ローカルス ト レージがサポー ト されています。<br />

このモデルを 使 用 してリンクするには、--sysv コマンド ラインオプショ ンを 使 用 しま<br />

す。 こ のモデルでは、 以 下 の リ ン カ コ マン ド ラ イ ンオプシ ョ ン も サポー ト さ れてい<br />

ます。<br />

• --force_so_throw、 --no_force_so_throw<br />

• --fpic<br />

• --linux_abitag=version_id<br />

• --shared<br />

3.6.1 関 連 項 目<br />

概 念<br />

• BPABI リンクモデルと SysV リンクモデルの 両 方 に 共 通 する 概 念 (3-11 ページ)<br />

.<br />

参 照<br />

『リンカリファレンス』:<br />

• --force_so_throw、 --no_force_so_throw (2-73 ページ)<br />

• --fpic (2-74 ページ)<br />

• --linux_abitag=version_id (2-102 ページ)<br />

• --shared (2-148 ページ)<br />

• --sysv (2-172 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-10<br />

ID 111311<br />

Non-Confidential


armlink でサポー ト されている リ ンクモデル<br />

3.7 BPABI リンクモデルと SysV リ ン ク モデルの 両 方 に 共 通 する 概 念<br />

ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI) リ ン<br />

クモデルと System V (SysV) リ ンクモデルのどちらも、 イ メージと 共 有 オブジェク<br />

トは 通 常 は 既 存 のオペレーティングプラットフォームで 実 行 されます。<br />

BPABI モデル と SysV モデルには 多 く の 類 似 点 があ り ます。 例 えば、 どち らのモデル<br />

も 例 外 テーブルをマ ッ プする プ ロ グ ラ ムヘ ッ ダを 生 成 し ます。 主 違 いは、 メ モ リ モ<br />

デル と 、 プロシージャ リ ンクテーブル (PLT) およびグローバルオフセッ トテーブル<br />

(GOT) 構 造 にあり ます。 これらはまとめて 「PLTGOT」 と 呼 ばれます。 両 方 のモデ<br />

ルに 共 通 する 多 く のオプシ ョ ンが 存 在 し ます。<br />

3.7.1 BPABI と SysV の 制 限<br />

BPABI と SysV の 両 方 のモデルには 以 下 の 制 限 があ り ます。<br />

• 共 有 ラ イ ブ ラ リ と DLL に 対 する 未 使 用 セ ク シ ョ ンの 削 除 は 無 効 になっていま<br />

す。<br />

• 仮 想 関 数 の 削 除 は 無 効 になっています。<br />

• 読 み 出 し / 書 き 込 みデータ 圧 縮 は 使 用 で き ません。<br />

• スキャッタロードは 使 用 できません。<br />

• __AT セクションは 使 用 できません。<br />

注<br />

スキャッタロードは、 ベースプラッ ト フォームリンクモデルではサポート されてい<br />

ます。<br />

3.7.2 関 連 項 目<br />

概 念<br />

• ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI)<br />

リンクモデル (3-6 ページ)<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ)<br />

• SysV リンクモデル (3-10 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --base_platform (2-18 ページ)<br />

• --bpabi (2-24 ページ)<br />

• --dynamic_debug (2-50 ページ)<br />

• --force_so_throw、 --no_force_so_throw (2-73 ページ)<br />

• --runpath=pathlist (2-140 ページ)<br />

• --soname=name (2-153 ページ)<br />

• --symver_script=file (2-169 ページ)<br />

• --symver_soname (2-170 ページ)<br />

• --sysv (2-172 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 3-11<br />

ID 111311<br />

Non-Confidential


第 4 章<br />

イメージの 構 造 と 生 成<br />

以 下 の 各 ト ピ ッ ク では、 イ メ ージの 構 造 と 、 イ メ ージを 生 成 する ために <strong>ARM</strong> リンカ<br />

armlink で 使 用 で き る 機 能 について 説 明 し ます。<br />

タスク<br />

• コマンド ラインオプショ ンを 使 用 した C++ 例 外 テーブルの 生 成 の 制 御 (4-33 ペー<br />

ジ)<br />

• リンカによる <strong>ARM</strong> 標 準 ラ イ ブ ラ リ の 検 索 方 法 の 制 御 (4-39 ページ)<br />

• リンク 時 のユーザライブラリの 指 定 (4-41 ページ) .<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セ ク シ ョ ン、 出 力 セ ク シ ョ ン、 領 域 、 およびプ ロ グ ラ ムセグ メ ン ト (4-5 ペー<br />

ジ)<br />

• イ メージのロードビューと 実 行 ビュー (4-6 ページ)<br />

• リンカでイメージのメモリマップを 指 定 する 方 法 (4-8 ページ)<br />

• 単 純 イ メ ージの タ イ プ (4-10 ページ)<br />

• タイプ 1 のイ メージ :1 つの ロー ド 領 域 と 連 続 する 実 行 領 域 (4-12 ページ)<br />

• タイプ 2 のイ メージ :1 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (4-14 ページ)<br />

• タイプ 3 のイ メージ :2 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (4-16 ページ)<br />

• イメージのエントリポイント (4-18 ページ)<br />

• 初 期 エン ト リ ポ イ ン ト の 指 定 について (4-19 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-1<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

• リンカによるセクションの 配 置 (4-20 ページ)<br />

• FIRST 属 性 と LAST 属 性 を 使 用 したセクシ ョ ンの 配 置 (4-22 ページ)<br />

• リ ンカに よ る セ ク シ ョ ンの 境 界 調 整 (4-23 ページ)<br />

• デマン ドページング (4-24 ページ)<br />

• Thumb コー ド を 含 む 実 行 領 域 の 順 序 付 けについて (4-26 ページ)<br />

• ベニアの 概 要 (4-27 ページ)<br />

• ベニアの 共 有 (4-28 ページ)<br />

• ベニアのタ イプ (4-29 ページ)<br />

• 位 置 非 依 存 か ら 絶 対 ベニアへの 生 成 (4-31 ページ)<br />

• スキャッタロード 時 のベニアの 再 利 用 (4-32 ページ)<br />

• 弱 参 照 と 定 義 について (4-35 ページ)<br />

• リ ンカに よ る ラ イ ブ ラ リ の 検 索 、 選 択 、 およびス キ ャ ンの 実 行 方 法 (4-38 ペー<br />

ジ)<br />

• リ ンカに よ る 参 照 の 解 決 方 法 (4-43 ページ)<br />

• リンカにおける 厳 格 なオプションファミリの 使 用 (4-45 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-2<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.1 イ メ ージの 構 造<br />

イ メ ージの 構 造 は 以 下 に よ って 定 義 さ れます。<br />

• イ メ ージを 構 成 する 領 域 と 出 力 セ ク シ ョ ンの 数<br />

• イ メ ージが ロー ド さ れる と き の、 上 記 領 域 と セ ク シ ョ ンの メ モ リ 内 におけ る 位<br />

置<br />

• イ メ ージが 実 行 さ れる と き の、 上 記 領 域 と セ ク シ ョ ンの メ モ リ 内 におけ る 位 置<br />

各 リ ン ク ステージには、 以 下 のさ まざまな イ メ ージのビ ューがあ り ます。<br />

ELF オブジ ェ ク ト フ ァ イルビ ュー ( リ ンカの 入 力 )<br />

ELF オブジェ ク ト フ ァ イルビューは、 入 力 セクシ ョ ンで 構 成 されます。<br />

ELF オブジェク トファイルには、 以 下 のファイルがあります。<br />

• 他 のオブジ ェ ク ト フ ァ イル と リ ン ク し て、 実 行 可 能 フ ァ イルま た<br />

は 共 有 オブジ ェ ク ト フ ァ イルを 作 成 するのに 適 し た コー ド と デー<br />

タ を 保 持 する 再 置 可 能 フ ァ イ ル<br />

• 実 行 に 適 し たプ ロ グ ラ ム を 保 持 する 実 行 可 能 フ ァ イル<br />

• 以 下 の 場 合 に コー ド およびデータ を 保 持 する 共 有 オブジ ェ ク ト<br />

ファイル<br />

— リ ンカが、 他 の 再 配 置 可 能 フ ァ イルおよび 共 有 オブジ ェ ク ト<br />

ファイルを 使 用 してファイルを 処 理 し、 別 のオブジェクト<br />

ファイルを 作 成 する。<br />

— ダイナミックリンカが、 ファイルを 実 行 可 能 ファイルおよび<br />

他 の 共 有 オブジェ ク ト フ ァ イル と 結 合 し て、 プロセス イ メ ー<br />

ジを 作 成 する。<br />

リンカビュー リ ン カには、 オーバーレ イ、 位 置 非 依 存 、 および 再 配 置 可 能 なプ ロ グ<br />

ラム 要 素 (コード またはデータ) の 有 無 が 異 なる、 プログラムのアドレ<br />

ス 空 のビューが 2 つあ り ます。<br />

• プログラム 要 素 のロードアドレスは、 プログラムローダ、 ダイナ<br />

ミックリンカ、デバッガなどの 外 部 エージェントによって ELF<br />

ファイルのプログム 要 素 がコピーされるときに、 そのコピー 先 と<br />

し て 想 定 さ れる ターゲ ッ ト ア ド レ スです。 こ れは、 そのプ ロ グ ラ<br />

ム 要 素 の 実 行 ア ド レ ス と 異 な る 場 合 があ り ます。<br />

• プログラム 要 素 の 実 行 アドレスは、 リ ンカがプログラムの 実 行 に<br />

参 加 する と き にそのプ ロ グ ラ ム 要 素 が 存 在 する と 想 定 さ れる ター<br />

ゲッ トアドレスす。<br />

プ ロ グ ラ ム 要 素 が 位 置 非 依 存 ま たは 再 配 置 可 能 であ る 場 合 、 実 行 ア ド レ<br />

スが 実 行 中 に 変 更 さ れる 可 能 性 があ り ます。<br />

ELF イメージファイルビュー (リンカの 出 力 )<br />

ELF イメージファイルビューは、 プログラムセグメント と 出 力 セクショ<br />

ンで 構 成 さ れます。<br />

• プ ロ グ ラ ムセグ メ ン ト に 対 応 する ロー ド 領 域<br />

• 最 大 で 3 つの 出 力 セ ク シ ョ ンに 対 応 する 実 行 領 域<br />

— RO セクション<br />

— RW セクション<br />

— ZI セクション<br />

ロード 領 域 は、 1 つ 以 上 の 実 行 領 域 で 構 成 さ れます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-3<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

注<br />

armlink では、 プロ グ ラ ムセグ メ ン ト の 最 大 サイズは 2GB です。<br />

メ モ リ ビ ューの 説 明 では、 以 下 の 用 語 に 注 意 し て 下 さ い。<br />

• ルー ト 領 域 と は、 ロー ド ア ド レ ス と 実 行 ア ド レ スが 同 一 の 領 域 を 意 味 し ます。<br />

• ロード 領 域 と ELF セグ メ ン ト は 同 じ ものです。<br />

以 下 の 図 には、 各 リ ン ク ス テージにおけ る ビ ューの 関 係 を 示 し ています。<br />

ELF <br />

<br />

ELF <br />

ELF <br />

ELF <br />

ELF <br />

<br />

1 ( 1)<br />

1.1<br />

1.2<br />

1.3<br />

2 ( 2)<br />

2.1<br />

...<br />

<br />

()<br />

<br />

1<br />

1<br />

2<br />

2<br />

...<br />

<br />

()<br />

<br />

()<br />

1.1.1<br />

1.1.2<br />

...<br />

1.2.1<br />

...<br />

1.3.1<br />

1.3.2<br />

...<br />

2.1.1<br />

2.1.2<br />

2.1.3<br />

...<br />

n<br />

<br />

図 4-1 セ ク シ ョ ン、 領 域 、 およびセグ メ ン ト の 関 係<br />

4.1.1 関 連 項 目<br />

タスク<br />

『<strong>ARM</strong> コンパイラツールチェーンの 概 要 』:<br />

• 64 ビットのリンカへの 変 更 (2-8 ページ) .<br />

概 念<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• イメージのロードビューと 実 行 ビュー (4-6 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-4<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.2 入 力 セ ク シ ョ ン、 出 力 セ ク シ ョ ン、 領 域 、 およびプ ログラムセグ メ ン ト<br />

オブジェ ク ト フ ァ イルまたはイ メージフ ァ イルは、 入 力 セクシ ョ ン、 出 力 セクシ ョ<br />

ン、 領 域 、 およびプログラムセグ メ ン ト の 階 層 から 構 成 されてます。<br />

入 力 セ ク シ ョ ン<br />

入 力 セ ク シ ョ ンは、 入 力 オブジ ェ ク ト フ ァ イルの 個 々のセ ク シ ョ ンで<br />

す。 入 力 セ ク シ ョ ンには、 コー ド や 初 期 化 さ れたデータ が 保 持 さ れてい<br />

た り 初 期 化 さ れていない メ モ リ 部 分 やイ メ ージ 実 行 前 にゼ ロ にする 必 要<br />

のあ る メ モ リ 部 分 の 情 報 が 記 述 さ れていた り し ます。 こ れら の 属 性 は、<br />

RO、 RWZI などの 属 性 によって 表 されます。armlink はこれらの 属 性 を 使<br />

用 し て 入 力 セ ク シ ョ ン を グループ 化 し、 出 力 セ ク シ ョ ン ま たは 出 力 領 域<br />

と 呼 ばれる 大 き な 構 成 要 素 を 作 成 し ます。<br />

出 力 セ ク シ ョ ン<br />

出 力 セ ク シ ョ ンは、 同 じ RO、 RW、 ZI 属 性 を 持 つ 入 力 セ ク シ ョ ンのグ<br />

ループで、 リ ンカによってメモリ 内 に 連 続 して 配 置 されます。 出 力 セク<br />

シ ョ ン、 それを 構 成 する 入 力 セ ク シ ョ ン と 同 じ 属 性 を 持 ち ます。 出 力 セ<br />

クションでは、 セクション 配 置 規 則 に 基 づいて 入 力 セクションがソート<br />

されます。<br />

領 域<br />

領 域 は、 異 な る 属 性 を 持 つセ ク シ ョ ン 数 の 内 訳 に 応 じ て 1 ~ 3 個 の 連 続<br />

する 出 力 セ ク シ ョ ンか ら 構 成 さ れます。 領 域 内 の 出 力 セ ク シ ョ ンは、 属<br />

性 ソート されます。 最 初 に RO 出 力 セ ク シ ョ ン、 次 に RW 出 力 セ ク シ ョ<br />

ン、 最 後 に ZI 出 力 セ ク シ ョ ンが 配 置 さ れます。 通 常 、 ROM、 RAM、 ペ<br />

リフェラルなどの 物 理 メモリデバイスにマップされます。<br />

プログラムセグメン ト<br />

プログラムセグメン トはロード 領 域 に 対 応 し、 出 力 セクショ ンで 構 成 さ<br />

れます。 プ ロ グ ラ ムセグ メ ン ト には、 テキ ス ト 、 データ な どの 情 報 が 保<br />

持 れます。<br />

注<br />

armlink では、 プロ グ ラ ムセグ メ ン ト の 最 大 サイズは 2GB です。<br />

4.2.1 関 連 項 目<br />

タスク<br />

『<strong>ARM</strong> コンパイラツールチェーンの 概 要 』:<br />

• 64 ビットのリンカへの 変 更 (2-8 ページ) .<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• リ ンカで イ メ ージの メ モ リ マ ッ プを 指 定 する 方 法 (4-8 ページ)<br />

• リンカによるセクションの 配 置 (4-20 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-5<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.3 イメージのロードビューと 実 行 ビュー<br />

イ メ ージの 領 域 は、 ロード 時 にシステムの メ モ リ マ ッ プ 内 に 配 置 されます。 イ メ ー<br />

ジを 実 行 する には、 その 前 にい く つかの 領 域 を 実 行 ア ド レ スへ 移 動 し、 ZI 属 性 を 持<br />

つ 出 力 セ ク シ ョ ン を 作 成 し なければな ら ない 場 合 があ り ます。 例 えば、 初 期 化 さ れ<br />

た RW データ を、 ROM 内 のロード ア ド レ スから RAM 内 の 実 行 ア ド レ スに コ ピーし<br />

なければな ら ない 場 合 があ り ます。<br />

イメージのメモリマップには、 以 下 の 2 つの 異 な る ビ ューがあ り ます。<br />

ロードビュー<br />

実 行 ビ ュー<br />

このビューは、 イメージがメモリにロードされるときの 各 領 域 と<br />

各 セ ク シ ョ ンのア ド レ ス、 つま り 、 イ メ ージの 実 行 が 開 始 される<br />

前 の 位 置 を 示 し ます。<br />

こ のビ ューは、 イ メ ージの 実 行 中 におけ る 各 領 域 と 各 セ ク シ ョ ン<br />

のアド レスを 示 します。<br />

以 下 の 図 に、 これらのビ ューを 示 し ます。<br />

<br />

0x0FFFF<br />

<br />

RAM<br />

<br />

<br />

0x0A000<br />

0x08000<br />

ZI <br />

RW <br />

ROM<br />

RW <br />

0x06000<br />

RO <br />

0x00000<br />

RO <br />

図 4-2 ロード メモリマップと 実 行 メモリマップ<br />

以 下 の 表 では、 ロー ド ビ ュー と 実 行 ビ ューを 比 較 説 明 し ています。<br />

表 4-1 ロードビューと 実 行 ビューの 比 較<br />

ロード<br />

ビュー<br />

説 明 実 行 ビ ュー 説 明<br />

ロードア<br />

ドレス<br />

イ メ ージの 実 行 開 始 前 まで、 その イ<br />

メージ 内 のセクションまたは 領 域 が<br />

ロード されている メモリ 内 のアドレ<br />

ス。 セクシ ョ ンまたは 非 ルート 領 域<br />

のードアドレスは、 実 行 アドレスと<br />

異 なっていても 構 いません。<br />

実 行 ア ド レ<br />

ス<br />

イメージの 実 行 中 に、そのイメージ 内<br />

のセ ク シ ョ ン ま たは 領 域 が 位 置 する ア<br />

ドレス。<br />

ロード 領<br />

域<br />

ロー ド ア ド レ ス 空 間 内 の 領 域 実 行 領 域 実 行 ア ド レ ス 空 間 内 の 領 域<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-6<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.3.1 関 連 項 目<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• リ ンカで イ メ ージの メ モ リ マ ッ プを 指 定 する 方 法 (4-8 ページ)<br />

• リンカによるセクションの 配 置 (4-20 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-7<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.4 リ ン カ で イ メ ージの メ モ リ マ ッ プ を 指 定 する 方 法<br />

1 つの イ メ ージを 構 成 する 領 域 の 数 と 出 力 セ ク シ ョ ンの 数 に 制 限 はあ り ません。 領 域<br />

には、 異 なるロードアドレスと 実 行 アドレスを 割 り 当 てることができます。 イメー<br />

ジの メ モ リ マ ッ プを 作 成 する には、 以 下 に 関 する 情 報 を armlink に 渡 す 必 要 があ り ま<br />

す。<br />

• 入 力 セ ク シ ョ ン を 出 力 セ ク シ ョ ン と 領 域 にグループ 化 する 方 法<br />

• メ モ リ マ ッ プ 内 における 領 域 の 位 置<br />

イ メ ージの メ モ リ マ ッ プの 複 雑 度 に 応 じ て、 こ の 情 報 は 以 下 の 2 つの 方 法 で armlink<br />

に 渡 すこ と ができ ます。<br />

コマンド ラインオプショ ンの 使 用<br />

イ メ ージ 内 のロード 領 域 が 1 つか 2 つで、 実 行 領 域 が 最 高 でも 3 つしか<br />

ない よ う な 単 純 な 場 合 は、 以 下 のオプシ ョ ン を 使 用 で き ます。<br />

• --first<br />

• --last<br />

• --ro_base<br />

• --rw_base<br />

• --ropi<br />

• --rwpi<br />

• --split<br />

• --rosplit<br />

• --zi_base<br />

単 純 イ メ ージについては、 こ れら のオプシ ョ ン を 使 用 し た 簡 単 な 表 記 に<br />

よ っ て、 ス キ ャ ッ タ ロー ド 記 述 と 同 じ 設 定 が 可 能 です。<br />

スキャッタファイルの 使 用<br />

スキャッタファイルは、 メモリ レイアウ トおよびコード とデータの 配 置<br />

を 記 述 したテキストです。 イメージコンポーネントのグループ 化 と 位 置<br />

を 密 に 制 御 する 必 要 があ る 複 雑 な 場 合 に、 スキ ャ ッ タ フ ァ イルを 使 用 し<br />

ます。 ス キ ャ ッ タ フ ァ イルを 使 用 する には、 コ マン ド ラ イ ンで<br />

--scatter=filename と 指 定 します。<br />

注<br />

--scatter は、 他 の メ モ リ マ ッ プ 関 連 の コ マン ド ラ イ ンオプシ ョ ン と 共 に 使 用 する こ<br />

とはできません。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-8<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

表 4-2 スキャ ッ タ フ ァ イルおよび 対 応 する コ マン ド ラ イ ンオプシ ョ ンの 比 較<br />

スキャ ッ タ フ ァ イル<br />

LR1 0x0000 0x20000<br />

{<br />

ER1 0x0 0x2000<br />

{<br />

init.o (INIT, +FIRST)<br />

*(+RO)<br />

}<br />

RAM 0x400000<br />

{<br />

*(+RW)<br />

}<br />

RAM 0x405000<br />

{<br />

*(+ZI)<br />

}<br />

}<br />

対 応 するコマン ド ラインオプシ ョ ン<br />

--ro_base=0x0<br />

--first=init.o(init)<br />

--rw_base=0x400000<br />

--zi_base=0x405000<br />

4.4.1 関 連 項 目<br />

タスク<br />

• 第 8 章 スキャッタファイルの 使 用 .<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• イメージのロードビューと 実 行 ビュー (4-6 ページ)<br />

• 単 純 イ メ ージの タ イ プ (4-10 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --first=section_id (2-71 ページ)<br />

• --last=section_id (2-94 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --ropi (2-138 ページ)<br />

• --rosplit (2-139 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ)<br />

• --scatter=file (2-144 ページ)<br />

• --split (2-156 ページ)<br />

• --zi_base=address (2-197 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-9<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.5 単 純 イ メ ージのタ イ プ<br />

単 純 イ メ ージは、 RO、 RW、 および ZI の 属 性 を 持 つ 数 多 く の 入 力 セ ク シ ョ ンか ら 構<br />

成 さ れます。 こ れら の 入 力 セ ク シ ョ ンが 照 合 さ れる こ と に よ り 、 RO、 RW、 および<br />

ZI の 各 出 力 セ ク シ ョ ンが 形 成 さ れます。 ロー ド 領 域 と 実 行 領 域 におけ る 出 力 セ ク<br />

シ ョ ンの 配 置 に よ り 、 単 純 イ メ ージは 以 下 の 3 つの 本 タ イプに 分 類 されます。<br />

タイプ 1<br />

タイプ 2<br />

タイプ 3<br />

ロードビューには 1 つの 領 域 、 実 行 ビ ューには 連 続 する 3 つの 領 域 が 存<br />

在 し ます。 こ の タ イ プの イ メ ージを 作 成 する 場 合 は、 --ro_base オプシ ョ<br />

ン を 使 用 し ます。<br />

ロードビューには 1 つの 領 域 、 実 行 ビ ューには 連 続 し ない 3 つの 領 域 が<br />

存 在 し ます。 こ の タ イ プの イ メ ージを 作 成 する 場 合 は、 --ro_base オプ<br />

ションおよび --rw_base オプシ ョ ン を 使 用 し ます。<br />

ロードビューには 2 つの 領 域 、 実 行 ビ ューには 連 続 し ない 3 つの 領 域 が<br />

存 在 し ます。 こ の タ イ プの イ メ ージを 作 成 する 場 合 は、 --ro_base オプ<br />

ション、--rw_base オプシ ョ ン、 および --split オプシ ョ ンを 使 用 し ます。<br />

どの タ イ プの 単 純 イ メ ージで も 、 以 下 の 構 成 にな り ます。<br />

• 最 初 の 実 行 領 域 には RO 出 力 セ ク シ ョ ンが 含 まれます。<br />

• 2 番 目 の 実 行 領 域 には RW 出 力 セ ク シ ョ ンが 含 まれます ( 存 在 する 場 合 )。<br />

• 3 番 目 の 実 行 領 域 には ZI 出 力 セ ク シ ョ ンが 含 まれます ( 存 在 する 場 合 )。<br />

こ れら の 実 行 領 域 は、 それぞれ RO 実 行 領 域 、 RW 実 行 領 域 、 ZI 実 行 領 域 と 呼 ばれま<br />

す。<br />

ただし、 タ イプ 3 のイ メージでは、--rosplit オプシ ョ ンを 使 用 する こ と もでき ます。<br />

このオプシ ョ ンは、 デフォル ト のロード 領 域 を、 コードに 1 つ、 データ に 1 つ、 合 計<br />

2 つの RO 出 力 セ ク シ ョ ンに 分 割 し ます。<br />

また、 タイプ 1 とタイプ 2 のイ メージでは、--zi_base コマンド ラインオプショ ンを 使<br />

用 して、 ZI 実 行 領 域 のベース ア ド レ ス を 指 定 で き ます。 タ イ プ 3 のイ メージに 必 要<br />

な --split コ マン ド ラ イ ンオプシ ョ ン も 使 用 し た 場 合 、 こ のオプシ ョ ンは 無 視 さ れま<br />

す。<br />

単 純 イ メ ージはス キ ャ ッ タ フ ァ イルを 使 用 し て 作 成 する こ と も で き ます。<br />

4.5.1 関 連 項 目<br />

概 念<br />

• タイプ 1 のイ メージ :1 つの ロー ド 領 域 と 連 続 する 実 行 領 域 (4-12 ページ)<br />

• タイプ 2 のイ メージ :1 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (4-14 ページ)<br />

• タイプ 3 のイ メージ :2 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (4-16 ページ)<br />

• 等 価 な ス キ ャ ッ タ ロー ド 記 述 を 使 用 し た 単 純 イ メ ージの 生 成 (8-65 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --ro_base=address (2-137 ページ)<br />

• --rosplit (2-139 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --scatter=file (2-144 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-10<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

• --split (2-156 ページ)<br />

• --zi_base=address (2-197 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-11<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.6 タイプ 1 のイ メージ : 1 つのロー ド 領 域 と 連 続 する 実 行 領 域<br />

タイプ 1 のイ メージは、 ロードビュー 内 の 1 つのロード 領 域 と メ モ リ マ ッ プ 内 で 連 続<br />

して 配 置 されている 3 つの 実 行 領 域 か ら 構 成 さ れます。 こ の 手 法 は、 OS のブー ト<br />

ローダやデスク ト ップシステムなど、 RAM にプログラ ムを ロードするシステムに 適<br />

しています。<br />

ZI <br />

ZI <br />

RAM<br />

RW <br />

RW <br />

RW <br />

<br />

<br />

--ro-base <br />

RO <br />

0x8000<br />

RO <br />

RO <br />

0x0000<br />

<br />

<br />

こ の タ イ プの イ メ ージを 作 成 する には 以 下 の コ マン ド を 使 用 し ます。<br />

armlink --ro_base 0x8000<br />

図 4-3 単 純 タ イ プ 1 のイ メージ<br />

注<br />

0x8000 はデフ ォル ト のア ド レ スであ る ため、 こ の 場 合 は --ro_base を 指 定 しな く ても<br />

かまいません。<br />

4.6.1 ロードビュー<br />

単 一 の ロー ド 領 域 は、 連 続 し て 配 置 さ れた RO 出 力 セ ク シ ョ ンおよび RW 出 力 セ ク<br />

ションから 構 成 されます。RO 実 行 領 域 と RW 実 行 領 域 はど ち ら も ル ト 領 域 と な り ま<br />

す。 ロー ド 時 には ZI 出 力 セ ク シ ョ ンは 存 在 し ません。 ZI 出 力 セ ク シ ョ ンは、 実 行 前<br />

にイ メ ージフ ァ イル 内 の 出 力 セ ク シ ョ ンの 記 を 使 用 し て 作 成 されます。<br />

4.6.2 実 行 ビ ュー<br />

RO、 RW、 および ZI の 各 出 力 セ ク シ ョ ンを 含 む 3 つの 実 行 領 域 は、 連 続 し て 配 置 さ<br />

れます。 RO 実 行 領 域 と RW 実 行 領 域 の 実 行 ア ド レ スはロー ド ア ド レ と 同 じ であ る た<br />

め、 ロードアドレスから 実 行 アドレスに 移 動 する 必 要 があるものはあり ません。 た<br />

だし、 ZI 出 力 セ ク シ ョ ン を 含 む ZI 実 行 領 域 は 実 行 時 に 作 成 さ れます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-12<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

RO 出 力 を 含 む 領 域 の ロー ド ア ド レ ス と 実 行 ア ド レ ス を 指 定 する には、 armlink オプ<br />

ション --ro_base address を 使 用 します。 デフォル ト のア ド レスは 0x8000 です。<br />

ZI 実 行 領 域 のベース ア ド レ ス を 指 定 する には、 --zi_base コマンド ラインオプショ ン<br />

を 使 用 し ます。<br />

4.6.3 関 連 項 目<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• イメージのロードビューと 実 行 ビュー (4-6 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --ro_base=address (2-137 ページ)<br />

• --zi_base=address (2-197 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-13<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.7 タイプ 2 のイ メージ : 1 つのロー ド 領 域 と 連 続 し ない 実 行 領 域<br />

タイプ 2 のイ メージは、 1 つのロード 領 域 と、 実 行 ビ ュー 内 の 3 つの 実 行 領 域 か ら 構<br />

成 されます。 RW 実 行 領 域 と RO 実 行 領 域 は 隣 接 し ていません。 こ の 方 法 は、 RW<br />

データ が 起 動 時 に ROM から RAM にコピーされる、ROM ベースの 組 み 込 みシ ス テム<br />

などに 使 用 されます。<br />

RAM<br />

ZI <br />

ZI <br />

0xA000<br />

RW <br />

RW <br />

--rw-base <br />

/<br />

RW <br />

ROM<br />

RO <br />

<br />

<br />

RO <br />

RO <br />

<br />

0x0000<br />

<br />

--ro-base <br />

こ の タ イ プの イ メ ージを 作 成 する には 以 下 の コ マン ド を 使 用 し ます。<br />

armlink --ro_base 0x0 --rw_base 0xA000<br />

図 4-4 単 純 タ イ プ 2 のイ メージ<br />

4.7.1 ロードビュー<br />

ロードビューでは、 ROM などに 連 続 して 配 置 された RO 出 力 セ ク シ ョ ンおよび RW<br />

出 力 セ ク シ ョ ンに よ って 1 つのロー ド 領 域 が 構 成 されます。 こ の 場 合 、 RO 領 域 は<br />

ルー ト 領 域 と な り ますが、 RW 領 域 はルー ト 領 域 ではあ り ません。 ロー ド 時 には ZI<br />

出 力 セ ク シ ョ ンは 存 在 し ません。 ZI 出 力 セ ク シ ョ ン 実 行 時 に 作 成 さ れます。<br />

4.7.2 実 行 ビ ュー<br />

実 行 ビ ューでは、 最 初 の 実 行 領 域 に RO 出 力 セ ク シ ョ ンが、 2 番 目 の 実 行 領 域 に RW<br />

出 力 セ ク シ ョ ン と ZI 出 力 セ ク シ ョ ンが 含 まれます。<br />

RO 出 力 セ ク シ ョ ン を 含 む 領 域 の 実 行 ア ド レ ス と ロー ド ア ド レ スは 同 じ であ る ため、<br />

RO 出 力 セ ク シ ョ ン を 移 動 する 必 要 はあ り ません。 つま り 、 こ の ク シ ョ ンはルー ト 領<br />

域 にな り ます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-14<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

RW 出 力 セ ク シ ョ ン を 含 む 領 域 の 実 行 ア ド レ ス と ロー ド ア ド レ スは 異 な る ため、 RW<br />

出 力 セクシ ョ ンはロードアドレスから 実 行 アドレスに ( 単 一 ロー 領 域 から 2 番 目 の<br />

実 行 領 域 に) 移 動 さ れます。 ZI 実 行 領 域 と その 出 力 セ ク シ ョ ンは、 RW 実 行 領 域 と<br />

隣 接 し て 配 置 さ れます。<br />

RO 出 力 セクシ ョ ンのロードアドレスおよび 実 行 アドレスを 指 定 するには、 armlink オ<br />

プシ ョ ン --ro_base address を 使 用 し ます。 また、 RW 出 力 セ ク シ ョ ンの 実 行 ア ド レ ス<br />

を 指 定 する には、 --rw_base exec_address を 使 用 し ます。 --ro_base オプシ ョ ンでア ド レ<br />

スが 指 定 さ れていない 場 合 、 armlink はデフ ォル ト 値 0x8000 を 使 用 し ます。 組 み 込 み<br />

システムの 場 合 、--ro_base の 値 には 0x0 を 指 定 するのが 一 般 的 です。 --rw_base オプ<br />

ションでアドレスが 指 定 されていない 場 合 、 通 常 は、RW 出 力 セ ク シ ョ ンが RO 出 力<br />

セクションのすぐ 上 に 配 置 されます (タイプ 1 の イ メ ージ 同 様 )。<br />

ZI 実 行 領 域 のベース ア ド レ ス を 指 定 する には、 --zi_base コマンド ラインオプショ ン<br />

を 使 用 し ます。<br />

注<br />

RW 出 力 セ ク シ ョ ン と ZI 出 力 セ ク シ ョ ンの 実 行 領 域 は、 ロー ド 領 域 のどの 部 分 と も<br />

重 ねる こ と はで き ません。<br />

4.7.3 関 連 項 目<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• イメージのロードビューと 実 行 ビュー (4-6 ページ)<br />

• タイプ 1 のイ メージ :1 つの ロー ド 領 域 と 連 続 する 実 行 領 域 (4-12 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --ro_base=address (2-137 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --zi_base=address (2-197 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-15<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.8 タイプ 3 のイ メージ : 2 つのロー ド 領 域 と 連 続 し ない 実 行 領 域<br />

タイプ 3 のイ メージはタイプ 2 のイ メージと 似 ていますが、 このイ メージでは 1 つの<br />

ロード 領 域 が 2 つのルー ト ロード 領 域 に 分 割 されます。<br />

ZI <br />

ZI <br />

--rw-base <br />

RAM<br />

RW <br />

2 <br />

<br />

0xE000<br />

RW <br />

RW <br />

--ro-base <br />

RO <br />

<br />

<br />

0x8000<br />

0x0000<br />

RO <br />

RO <br />

<br />

<br />

こ の タ イ プの イ メ ージを 作 成 する には 以 下 の コ マン ド を 使 用 し ます。<br />

armlink --split --ro_base 0x8000 --rw_base 0xE000<br />

図 4-5 単 純 タ イ プ 3 のイ メージ<br />

4.8.1 ロードビュー<br />

ロード ビ ューでは、 最 初 のロード 領 域 が RO 出 力 セ ク シ ョ ンで 構 成 さ れ、 2 番 目 の<br />

ロード 領 域 が RW 出 力 セ ク シ ョ ンで 構 成 さ れます。 ロー ド 時 には ZI 出 力 セ ク シ ョ ン<br />

は 存 在 し ません。 ZI 出 力 セ ク シ ョ ンは、 実 行 前 に イ メ ージ フ ァ イ ル 内 の 出 力 セ ク<br />

シ ョ ンの 記 述 を 使 用 し て 作 成 さ れます。<br />

4.8.2 実 行 ビ ュー<br />

実 行 ビ ューでは、 最 初 の 実 行 領 域 に RO 出 力 セ ク シ ョ ンが、 2 番 目 の 実 行 領 域 に RW<br />

出 力 セ ク シ ョ ン と ZI 出 力 セ ク シ ョ ンが 含 まれます。<br />

RO 領 域 の 実 行 ア ド レ スは ロー ド ア ド レ ス と 同 じ であ る ため、 RO 出 力 セ ク シ ョ ンの<br />

内 容 を ロー ド ア ド レ スか ら 実 行 ア ド レ スに 移 動 ま たはコ ピーする 要 はあ り ません。<br />

RO 領 域 と RW 領 域 はど ち ら も ルー ト 領 域 と な り ます。<br />

また、 RW 領 域 の 実 行 ア ド レ ス も ロー ド ア ド レ ス と 同 じ であ る ため、 RW 出 力 セ ク<br />

シ ョ ンの 内 容 はロー ド ア ド レ スか ら 実 行 ア ド レ スに 移 動 さ れませんただ し、 ZI 出 力<br />

セ ク シ ョ ンは 実 行 時 に 作 成 さ れ、 RW 領 域 と 隣 接 し て 配 置 さ れます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-16<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

ロー ド ア ド レ ス と 実 行 ア ド レ スは、 以 下 の リ ン カオプシ ョ ン を 使 用 し て 指 定 し ます。<br />

--split<br />

RO 出 力 セ ク シ ョ ンおよび RW 出 力 セ ク シ ョ ン を 含 むデフ ォル ト の 1 つ<br />

の ロー ド 領 域 が、 以 下 の 2 つのルー ト ロー ド 領 域 に 分 割 さ れます。<br />

• RO 出 力 セ ク シ ョ ン を 含 む 領 域<br />

• RW 出 力 セ ク シ ョ ン を 含 む 領 域<br />

これらの 領 域 は、--ro_base および --rw_base を 使 用 して 別 々に 配 置 でき<br />

ます。<br />

--ro_base address<br />

--rw_base address<br />

RO セ ク シ ョ ン を 含 む 領 域 の ロー ド ア ド レ ス と 実 行 ア ド レ スに、 4 バイ<br />

ト 境 界 で 整 列 された address ( 例 えば、 ROM の 最 初 の 場 所 のア ド レ ス)<br />

を 設 定 する よ う に armlink に 指 示 し ます。 --ro_base オプシ ョ ンでア ド レ<br />

スが 指 定 されていない 場 合 、 armlink はデフ ォル ト 値 0x8000 を 使 用 し ま<br />

す。<br />

RW 出 力 セ ク シ ョ ン を 含 む 領 域 の 実 行 ア ド レ スに、 4 バイ ト 境 界 で 整 列<br />

された address を 設 定 する よ う に armlink に 指 示 し ます。 --split と 共 にこ<br />

のオプシ ョ ン を 使 用 する と 、 RW 領 域 (ルー ト 領 域 など) の ロー ド ア ド<br />

レスと 実 行 アドレスの 両 方 が 指 定 されます。<br />

4.8.3 関 連 項 目<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セ ク シ ョ ン、 出 力 セ ク シ ョ ン、 領 域 、 およびプ ロ グ ラ ムセグ メ ン ト<br />

(4-5 ページ)<br />

• イメージのロードビューと 実 行 ビュー (4-6 ページ)<br />

• タイプ 2 のイ メージ :1 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (4-14 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --ro_base=address (2-137 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --split (2-156 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-17<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.9 イメージのエントリポイント<br />

4.9.1 関 連 項 目<br />

イ メ ージ 内 のエン ト リ ポ イ ン ト は、 プ ロ グ ラ ムの 実 行 開 始 位 置 です。 エン ト リ ポ イ<br />

ントには 以 下 の 2 つの 種 類 があ り ます。<br />

初 期 エン ト リ ポ イ ン ト<br />

イメージの 初 期 エン ト リ ポ イ ン ト は 1 つの 値 で 表 され、 ELF ヘッダファ<br />

イルに 格 納 されています。 オペレーティングシステムまたはブート ロー<br />

ダによって RAM にロード されるプログムの 場 合 、 ローダはイ メージ 内<br />

の 初 期 エン ト リ ポイ ン ト に 制 御 を 渡 すこ と によ って、 イ メ ージの 実 行 を<br />

開 始 し ます。<br />

1 つのイ メ ージ 内 で 使 用 でき る 初 期 エン ト リ ポイ ン ト は 1 つだけです。<br />

初 期 エン ト リ ポ イ ン ト と し て、 ENTRY ディレクティブによって 設 定 され<br />

たエン ト リ ポイン ト の 1 つを 使 用 で き ますが、 必 ずし も そ う する 必 要 は<br />

ありません。<br />

ENTRY ディレクティブによって 設 定 されたエント リポイント<br />

イメージにはエント リポイントに 設 定 できる 箇 所 は 数 多 くありますが、<br />

そこから 1 つを 選 択 し ます。 1 つのイ メ ージ 内 で 使 用 でき るエン ト リ ポ<br />

イントは 1 つだけです。<br />

アセンブラファ イルで ENTRY デ ィ レ ク テ ィ ブを 使 用 し て、 オブジ ェ ク ト<br />

内 にエントリポイントを 作 成 します。 組 み 込 みシステムの 場 合 、 一 般 的<br />

に、 こ のデ ィ レ ク テ ィ ブはプ ロ セ ッ サ 例 外 ベ ク タ (RESET、 IRQ、 FIQ<br />

など) 経 由 で 開 始 されるコードをマークするために 使 用 されます。<br />

このディレクティブでは、ENTRY キーワー ド を 使 用 し て、 リ ン カに よ っ<br />

て 未 使 用 セクションが 削 除 されるときに 残 しておく 出 力 コードセクショ<br />

ンをマークするこ とによ り、 そのセクショ ンを 残 しておく こ とができま<br />

す。<br />

C や C++ で 記 述 さ れたプ ロ グ ラ ムの 場 合 、 C ライブラリの __main() 関 数<br />

もエン ト リポイント となります。<br />

組 み 込 みイメージがローダによって 使 用 される 場 合 には、 そのイメージ<br />

のヘッ ダ 内 に 1 つの 初 期 エン ト リ ポ イ ン ト が 指 定 さ れてい る 必 要 があ り<br />

ます。 エン ト リ ポ イ ン ト を 選 択 する には、 --entry コマンドラインオプ<br />

ションを 使 用 します。<br />

タスク<br />

• 初 期 エン ト リ ポ イ ン ト の 指 定 について (4-19 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --entry=location (2-58 ページ) .<br />

『アセンブラ リ フ ァ レンス』 :<br />

• ENTRY (6-78 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-18<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.10 初 期 エン ト リ ポイ ン ト の 指 定 について<br />

プログラムには 少 なく と も 1 つの 初 期 エン ト リ ポ イ ン ト を 指 定 する 必 要 があ り ます。<br />

指 定 し ない と 、 リ ン カに よ って 警 告 が 生 成 さ れます。 ま た、 べての ソース フ ァ イル<br />

内 にエン ト リ ポ イ ン ト を 指 定 する 必 要 があ るわけではあ り ません。 1 つのソース フ ァ<br />

イル 内 に 複 数 のエン ト リ ポ イ ン ト を 指 定 する こ と はで き ません。<br />

アドレスのゼロに ROM が 配 置 される 組 み 込 みアプ リ ケーシ ョ ンの 場 合 には、--entry<br />

0x0 を 使 用 します (または 上 位 ベク タを 使 用 する CPU では、 オプシ ョ ン と して<br />

0xFFFF0000 を 使 用 し ます)。<br />

初 期 エン ト リ ポ イ ン ト は、 以 下 の 条 件 を 満 た し てい る 必 要 があ り ます。<br />

• イ メ ージのエン ト リ ポ イ ン ト が 常 に 実 行 領 域 内 に 存 在 し てい る こ と<br />

• 実 行 領 域 が 他 の 実 行 領 域 のオーバーレ イ を 行 っておらず、 ルー ト 実 行 領 域 であ<br />

る (ロードアドレスと 実 行 アドレスが 同 じである) こ と<br />

--entry オプシ ョ ン を 使 用 せずに 初 期 エン ト リ ポ イ ン ト を 指 定 する 場 合 は、 以 下 の よ<br />

うになります。<br />

• 入 力 オブジ ェ ク ト に、 ENTRY ディレクティブによって 設 定 された 1 つのエン ト リ<br />

ポイント しか 含 まれていない 場 合 には、 リンカはそのエント リポイントをイ<br />

メージの 初 期 エント リポイント として 使 用 します。<br />

• リ ンカは 以 下 のいずれかの 場 合 に、 初 期 エン ト リ ポ イ ン ト が 含 まれていない イ<br />

メ ージを 生 成 し ます。<br />

— ENTRY ディレクティブによって 複 数 のエント リポイントが 指 定 されている<br />

場 合<br />

— ENTRY ディレクティブによって 指 定 されているエント リポイントが 存 在 し<br />

ない 場 合<br />

4.10.1 関 連 項 目<br />

概 念<br />

• ルー ト 領 域 と は (8-13 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --entry=location (2-58 ページ) .<br />

『アセンブラ リ フ ァ レンス』 :<br />

• ENTRY (6-78 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-19<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.11 リ ン カによ るセ ク シ ョ ンの 配 置<br />

デフ ォル ト では、 イ メ ージ を 生 成 する と き、 リ ン カは 以 下 の 順 序 で 入 力 セ ク シ ョ ン<br />

を 配 置 し ます。<br />

1. 属 性 ( 以 下 の 順 序 )<br />

a. 読 み 出 し 専 用 コー ド<br />

b. 読 み 出 し 専 用 データ<br />

c. 読 み 出 し - 書 き 込 みコード<br />

d. 読 み 出 し - 書 き 込 みデータ<br />

e. ゼロで 初 期 化 されたデータ<br />

2. 入 力 セ ク シ ョ ンの 名 前 ( 属 性 が 同 じ 場 合 )。 名 前 は 大 文 字 と 小 文 字 が 区 別 さ れ、<br />

ASCII 文 字 照 合 シーケン ス を 使 用 し てアルフ ァベ ッ ト 順 で 比 較 さ れれます。<br />

3. 入 力 フ ァ イ ル 内 におけ る 各 セ ク シ ョ ンの 相 対 位 置 (FIRST または LAST によって<br />

オーバーラ イ ド さ れてい る 場 合 を 除 き、 属 性 と セ ク シ ョ ン 名 が 同 じ 場 合 )<br />

イ メ ージ 部 分 は、 数 を 最 小 限 に 抑 えた 連 続 領 域 にま と め られます。<br />

注<br />

このソート 順 序 は、 スキャッタファイル 内 またはオブジェク ト ファイル 名 での 順 序<br />

付 けの 影 響 は 受 けません。<br />

し たがって、 ラ イ ブ ラ リ か ら イ ン ク ルー ド さ れる、 同 じ 属 性 と 名 前 を 持 つ 入 力 セ ク<br />

シ ョ ンの 位 置 は 予 測 不 能 です。 厳 密 な 位 置 設 定 を 行 う 必 要 があ 場 合 には、 ス キ ャ ッ<br />

タファイルで 個 別 のモジュールを 明 示 的 に 指 定 して、armlink コマンドの 入 力 ファイ<br />

ル リ ス ト にそのモジ ュールを 組 み 込 みます。<br />

各 入 力 セ ク シ ョ ンのベース ア ド レ スは、 リ ン カに よ っ て 定 義 さ れる ソ ー ト 順 序 に<br />

よ って 決 定 され、 それを 含 む 出 力 セ ク シ ョ ン 内 でも 正 し く 整 列 でき ます。<br />

デフ ォル ト では、 リ ンカによ って 作 成 される イ メ ージは、 RO 出 力 セ ク シ ョ ン と RW<br />

出 力 セクション (オプションで ZI 出 力 セ ク シ ョ ン) か ら 構 成 で き ます。 メ モ リ マ<br />

ネージ メ ン ト ハード ウ ェアを 搭 載 したシステムでは、 実 行 時 に RO 出 力 セ ク シ ョ ン を<br />

保 護 で き ます。 ま た、 RO セクションはターゲッ トの ROM に 配 置 する こ と も 可 能 で<br />

す。<br />

--sort=algorithm コ マン ド ラ イ ンオプシ ョ ン を 使 用 する と 、 他 の ソー ト 順 序 を 使 用 で<br />

き ます。 アルゴ リ ズムが 選 択 さ れていない 場 合 は、 生 成 さ れるベニアの 数 を 最 小 限<br />

に 抑 え る ために、 リ ンカによ って algorithm が 変 更 される こ と があ り ます。<br />

4.11.1 未 割 り 当 てセ ク シ ョ ンの 処 理<br />

リ ン カが、 入 力 セ ク シ ョ ン を 実 行 領 域 に 配 置 で き ない 場 合 があ り ます。 こ の 場 合 は、<br />

リ ンカによってエラーメ ッセージが 生 成 されます。 これは、 定 されるモジュール 選<br />

択 パ ターン と 入 力 セ ク シ ョ ンセレ ク タ の う ち 一 部 が、 現 在 のス キ ャ ッ タ フ ァ イ ルで<br />

許 可 されていないために 起 こ り ます。 題 の 解 決 法 は、 これらのセクショ ンを 正 し く<br />

配 置 する こ と の 重 要 度 に よ って 異 な り ます。<br />

• セ ク シ ョ ン を 特 定 の 場 所 に 配 置 する 必 要 があ る 場 合 は、 特 定 のモジ ュールセレ<br />

ク タおよび 入 力 セ ク シ ョ ンセレ ク タ を 必 要 に 応 じ て 含 め る よ う にス ャ ッ タ フ ァ<br />

イルを 変 更 します。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-20<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

• 未 割 り 当 てセ ク シ ョ ンの 配 置 が 重 要 でない 場 合 は、 1 つま たは 複 数 の .ANY モ<br />

ジュールセレクタを、オプションの 入 力 セクションセレクタと 併 せて 使 用 しま<br />

す。<br />

リンカは、 入 力 オブジェクト 内 の 各 ELF セ ク シ ョ ンの 入 力 セ ク シ ョ ン を 作 成 する 際 、<br />

グローバルカウンタをインク リ メント します。 このカウンタ 値 は、 対 応 するセク<br />

シ ョ ンに 作 成 イ ンデ ッ ク ス と し て 格 納 さ れます。 同 一 のプ ロパテ ィ を 持 った 未 割 り<br />

当 てセ ク シ ョ ン を 配 置 する 際 は、 こ の 作 成 イ ンデ ッ ク スが 使 用 さ れます。<br />

4.11.2 例<br />

以 下 のス キ ャ ッ タ フ ァ イルには、 リ ンカに よ る セ ク シ ョ ンの 配 置 方 法 を 示 し ていま<br />

す。<br />

LoadRegion 0x8000<br />

{<br />

ExecRegion1 0x0000 0x4000<br />

{<br />

*(sections)<br />

*(moresections)<br />

}<br />

ExecRegion2 0x4000 0x2000<br />

{<br />

*(evenmoresections)<br />

}<br />

}<br />

ロー ド 領 域 内 の 実 行 領 域 の 順 序 が リ ンカに よ って 変 更 さ れる こ と はあ り ません。<br />

4.11.3 関 連 項 目<br />

タスク<br />

• FIRST 属 性 と LAST 属 性 を 使 用 したセクシ ョ ンの 配 置 (4-22 ページ)<br />

• 特 定 ア ド レ スへの 関 数 と データ の 配 置 (8-18 ページ)<br />

• ス キ ャ ッ タ ロー ド を 使 用 し た 名 前 付 き セ ク シ ョ ンの 明 示 的 な 配 置 (8-23 ペー<br />

ジ)<br />

• .ANY モジュールセレ ク タによ る 未 割 り 当 てセクシ ョ ンの 配 置 (8-25 ページ) .<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• イメージのロードビューと 実 行 ビュー (4-6 ページ)<br />

• Thumb コー ド を 含 む 実 行 領 域 の 順 序 付 けについて (4-26 ページ)<br />

• ベニアの 概 要 (4-27 ページ)<br />

• リ ンカに よ る セ ク シ ョ ンの 境 界 調 整 (4-23 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --sort=algorithm (2-154 ページ)<br />

• 入 力 セ ク シ ョ ン 記 述 の 構 文 (4-24 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-21<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.12 FIRST 属 性 と LAST 属 性 を 使 用 し たセ ク シ ョ ンの 配 置<br />

実 行 領 域 の 最 初 ま たは 最 後 にセ ク シ ョ ン を 確 実 に 配 置 で き ます。 例 えば、 ベ ク タ<br />

テーブルが 含 まれてい る セ ク シ ョ ン を イ メ ージの 最 初 に 配 置 する 要 があ る 場 合 があ<br />

り ます。 そのためには、 以 下 のいずれかの 方 法 を 使 用 し ます。<br />

• スキャッタロードを 使 用 しない 場 合 には、 リンカコマンドラインオプション<br />

--first および --last を 使 用 して 入 力 セクシ ョ ンを 配 置 します。<br />

• スキ ャ ッ タ ロード を 使 用 する と き、 配 置 順 序 が 重 要 な 場 合 には、 フ ァ イル 内 で<br />

属 性 FIRST および LAST を 使 用 し、 実 行 領 域 内 の 最 初 と 最 後 の 入 力 セ ク シ ョ ン を<br />

マーク し ます。<br />

ただし、 FIRST および LAST 属 性 の 用 法 は、 基 本 属 性 ソー ト 順 序 に 違 反 し ない よ う<br />

にする 必 要 があ り ます。 例 えば、 FIRST RW は 読 み 出 し 専 用 コー ド または 読 み 出 し<br />

専 用 データ の 後 に 配 置 し ます。<br />

4.12.1 関 連 項 目<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• イメージのロードビューと 実 行 ビュー (4-6 ページ)<br />

• リンカによるセクションの 配 置 (4-20 ページ)<br />

• スキャッタロードについて (8-3 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --first=section_id (2-71 ページ)<br />

• --last=section_id (2-94 ページ)<br />

• 入 力 セ ク シ ョ ン 記 述 の 構 文 (4-24 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-22<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.13 リ ン カによ るセ ク シ ョ ンの 境 界 調 整<br />

入 力 セ ク シ ョ ンの 順 序 付 けが 行 われた 後 、 armlink はベース ア ド レ スが 固 定 される 前<br />

に 必 要 に 応 じてパディ ングを 挿 入 し、 各 入 力 セクシ ョ ンをその 境 界 調 整 の 倍 数 にな<br />

るアドレスから 開 始 させます。<br />

リ ン カでは、 入 力 セ ク シ ョ ンの 最 大 の 境 界 調 整 に 関 係 な く 、 ELF プログラムのヘッ<br />

ダおよび 出 力 セク シ ョ ンを 4 バイ ト 境 界 で 整 列 させるこ とができます。 これによ り、<br />

armlink は、 イ メ ージに 挿 入 するパデ ィ ングを 最 小 限 に 抑 え る こ と がで き ます。<br />

ELF の 仕 様 に 厳 密 に 適 合 する 必 要 があ る 場 合 は、 --no_legacyalign オプシ ョ ンを 使 用<br />

し ます。 領 域 のベース ア ド レ スが 整 列 さ れていない 場 合 は リ ンカに よ り エ ラーが 発<br />

生 する ため、 ELF の 仕 様 に 準 拠 する ためにパ ィ ングが 挿 入 さ れる こ と があ り ます。<br />

--no_legacyalign が 使 用 さ れてい る 場 合 、 領 域 の 境 界 整 列 はその 領 域 に 含 まれてい る<br />

入 力 セ ク シ ョ ンの 最 大 長 の 境 界 で 整 列 さ れます。<br />

スキャッタロードを 使 用 する 場 合 は、ALIGN 属 性 を 使 用 し て、 ロー ド 領 域 ま たは 実 行<br />

領 域 のア ラ イ ン メ ン ト を 増 やす こ と がで き ます。 例 えば、 通 常 は 4 バイ ト 境 界 で 整<br />

列 さ れる 実 行 領 域 を 8 バイ ト 境 界 で 整 列 させる こ と ができ ます。 ただし、 自 然 のア<br />

ラ イ ン メ ン ト を 縮 小 する こ と はで き ません。 例 えば、 通 常 は 4 バイ ト 境 界 で 整 列 さ<br />

れ 領 域 を 2 バイ ト 境 界 で 整 列 させるこ とはできません。<br />

4.13.1 関 連 項 目<br />

タスク<br />

• ページ 境 界 での 領 域 の 作 成 について (8-59 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --legacyalign、 --no_legacyalign (2-96 ページ)<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

• ロー ド 領 域 に 厳 密 に 配 置 し た 状 態 で、 実 行 領 域 でベース ア ド レ スに 合 わせる 例<br />

(4-45 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-23<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.14 デマン ドページング<br />

仮 想 メ モ リ をサポー ト する オペレーテ ィ ン グシ ス テムでは、 ELF ファイルをファイ<br />

ルのロード 処 理 を 行 う ア ド レ ス 空 間 にマ ッ プする こ と で、 ELF ファイルをロードで<br />

き ます。 フ ァ イルにマ ッ プ さ れてい るページ 内 の 仮 想 ア ド レ スにア ク セスする と 、<br />

オペレーテ ィ ングシステムによ って、 そのページがデ ィ ス ク から ロード されます。<br />

こ の 方 法 で 使 用 する ELF フ ァ イルは、 特 定 の 形 式 に 準 拠 し てい る 必 要 があ り ます。<br />

デマン ドページングモード を 有 効 にするには、 --paged コマンド ラインオプショ ンを<br />

使 用 し ます。 こ れに よ り 、 効 率 的 にデマン ド ページン グ を 行 う こ と がで き る ELF<br />

ファイルが 生 成 されます。<br />

注<br />

--sysv オプシ ョ ンで 生 成 された ELF フ ァ イルは、 既 にデマン ド ページングに 準 拠 し<br />

ています。 --arm_linux を 使 用 しても、 --sysv を 指 定 したこ とにな り ます。<br />

ELF フ ァ イルの 基 本 的 な 制 約 を 以 下 に 示 し ます。<br />

• 出 力 セ ク シ ョ ンの ロー ド ア ド レ ス と 実 行 ア ド レ スに 違 いがない。<br />

• すべての PT_LOAD プログラムヘッダには、 オペレーティングシステムのペー<br />

ジサ イ ズの 最 小 境 界 整 列 pt_align が 存 在 する。<br />

• すべての PT_LOAD プログラムヘッダには、pt_align を 法 (モジュ ロ) と して 仮<br />

想 ア ド レス (pt_addr) と 合 同 であるファイルオフセッ ト pt_offset が 存 在 する。<br />

--paged をオンにする と、 以 下 のよ うにな り ます。<br />

• リ ンカに よ って、 実 行 領 域 のベース ア ド レ スか ら プ ロ グ ラ ムヘ ッ ダが 自 動 的 に<br />

生 成 さ れる。 1 つのロー ド 領 域 に 1 つのプロ グ ラ ムヘッ ダが 生 成 さ る と い う 通<br />

常 の 状 態 は 維 持 さ れな く な り ます。<br />

• オペレーテ ィ ングシステムのページサイ ズが --pagesize コマンド ラインオプ<br />

ションによって 制 御 される。<br />

• リンカが、 最 初 の PT_LOAD プログラムヘッダに ELF ヘッダとプログラムヘッ<br />

ダを 配 置 し よ う と する ( 空 間 が 使 用 で き る 場 合 )。<br />

4.14.1 例<br />

こ れは、 デマン ド ページングを 行 う ス キ ャ ッ タ フ ァ イルの 例 です。<br />

LR1 GetPageSize() + SizeOfHeaders()<br />

{<br />

ER_RO +0<br />

{<br />

*(+RO)<br />

}<br />

ER_RW +GetPageSize()<br />

{<br />

*(+RW)<br />

}<br />

ER_ZI +0<br />

{<br />

*(+ZI)<br />

}<br />

}<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-24<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.14.2 関 連 項 目<br />

概 念<br />

• スキャッタロードについて (8-3 ページ)<br />

参 照<br />

『リンカリファレンス』:<br />

• --arm_linux (2-13 ページ)<br />

• --paged (2-118 ページ)<br />

• --pagesize=pagesize (2-119 ページ)<br />

• --pagesize=pagesize (2-119 ページ)<br />

• --scatter=file (2-144 ページ)<br />

• --sysv (2-172 ページ)<br />

• GetPageSize() 関 数 (4-47 ページ)<br />

• SizeOfHeaders() 関 数 (4-48 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-25<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.15 Thumb コー ド を 含 む 実 行 領 域 の 順 序 付 けについて<br />

16 ビット Thumb 分 岐 の 範 囲 は 4MB. です。 実 行 領 域 に 4MB を 超 える Thumb コード<br />

が 含 まれている と 、 armlink は、 同 じ よ う な 平 均 コール 深 度 にあ る セ ク シ ョ ンの 順 序<br />

付 けを 行 い、 最 も よ く 呼 び 出 さ れる セ ク シ ョ ン を 中 央 に 配 置 し ます。 こ れに よ り 、<br />

生 成 さ れるベニアの 数 を 最 小 限 に 抑 え る こ と がで き ます。<br />

32 ビット Thumb 分 岐 の 範 囲 は 16MB. です。 こ の 範 囲 を 超 えた 場 合 にのみ、 セ ク シ ョ<br />

ン を 再 度 順 序 付 けする 必 要 があ り ます。<br />

セ ク シ ョ ンの 再 度 順 序 付 けを 無 効 にする には、 --no_largeregions コマンドラインオプ<br />

シ ョ ン を 使 用 し ます。<br />

4.15.1 関 連 項 目<br />

概 念<br />

• リンカによるセクションの 配 置 (4-20 ページ)<br />

• ベニアの 概 要 (4-27 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --largeregions、 --no_largeregions (2-92 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-26<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.16 ベニアの 概 要<br />

ベニアは、 リ ンカによって 生 成 され、 プログラムに 挿 入 される 小 さなコードセク<br />

ションです。BL 命 令 は PC 相 対 で、 分 岐 範 囲 に 制 限 があ り ます。 そのため、 分 岐 先<br />

が BL 命 令 の 分 岐 範 囲 外 にあ る 場 合 、 armlink はベニア を 生 成 する 必 要 があ り ます。<br />

BL 命 令 の 範 囲 は、 <strong>ARM</strong> の 場 合 は 32MB、 32 ビット Thumb の 場 合 は 16MB、 16 ビッ ト<br />

Thumb の 場 合 は 4MB です。 ベニアは、 分 岐 命 令 の 中 間 ターゲ ッ ト と な る こ と で、 分<br />

岐 範 囲 を 拡 張 し ます。 ベニアに よ って、 分 岐 先 ア ド レ スが PC に 設 定 されます。 これ<br />

によ り、 ベニアは 4 GB のアドレス 空 間 内 のどこへでも 分 岐 できるようになります。<br />

<strong>ARM</strong> と Thumb の 混 合 環 境 では、 ベニアはプ ロ セ ッ サ 状 態 の 変 更 も 処 理 し ます。<br />

リ ン カでは、 必 要 に 応 じ て、 以 下 の タ イ プのベニア を 生 成 で き ます。<br />

• インラインベニア<br />

• 短 分 岐 ベニア<br />

• 長 分 岐 ベニア<br />

armlink は、 ベニアご と に Veneer$$Code という 名 前 の 1 つの 入 力 セ ク シ ョ ンを 作 成 し ま<br />

す。 ベニアは、 他 に 要 件 を 満 たす こ と がで き る 既 存 のベニアが 存 在 し ない 場 合 にの<br />

み 生 成 さ れます。 2 つの 入 力 セ ク シ ョ ンに 同 じ 分 岐 先 への 長 分 岐 が 含 まれてい る 場<br />

合 、 生 成 さ れるベニアは 1 つだけで、 そのベニアを 両 方 の 命 令 で 共 有 し ます。 この<br />

よ う にベニアが 共 有 されるのは、 両 方 のセ ク シ ョ ンから 同 じ 分 岐 先 に 到 達 でき る 場<br />

合 のみです。<br />

<strong>ARM</strong>v4T を 使 用 している 場 合 、 分 岐 によって <strong>ARM</strong> ステート と Thumb ステートの 切<br />

り 替 えが 発 生 する と 、 armlink はベニアを 生 成 し ます。 <strong>ARM</strong>v5TE 以 降 で も、 条 件 分 岐<br />

を 使 用 し てい る 場 合 は、 イ ン ターワーキ ン グベニアが 生 成 さ れます。 こ れは、 条 件<br />

付 きの BL 命 令 が 存 在 し ないためです。 <strong>ARM</strong>v5 以 降 の B 命 令 には、 状 態 変 更 用 のベニ<br />

アも 必 要 です。<br />

4.16.1 関 連 項 目<br />

概 念<br />

• ベニアの 共 有 (4-28 ページ)<br />

• ベニアのタ イプ (4-29 ページ)<br />

• 位 置 非 依 存 か ら 絶 対 ベニアへの 生 成 (4-31 ページ)<br />

• スキャッタロード 時 のベニアの 再 利 用 (4-32 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-27<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.17 ベニアの 共 有<br />

複 数 のオブジ ェ ク ト で 同 じベニアが 作 成 さ れる 場 合 は、 リ ン カに よ っ て、 そのベニ<br />

アのインスタンスが 1 つ 作 成 さ れます。 そのベニアが、 こ れら オブジ ェ ク ト で 共 有<br />

されます。<br />

コマンド ラインオプショ ン --no_veneershare を 使 用 する と、 ベニアが 共 有 されないよ<br />

う に 指 定 で き ます。 こ れに よ り 、 作 成 さ れたベニアセ ク シ ョ ンの 所 有 権 がベニア を<br />

作 成 し たオブジ ェ ク ト に 割 り 当 て ら れる ため、 ス キ ャ ッ タ フ ァ イ ル 内 の 特 定 のオブ<br />

ジェ ク ト からベニアを 選 択 できます。 以 下 に 例 を 示 します。<br />

LR 0x8000<br />

{<br />

ER_ROOT +0<br />

{<br />

object1.o(Veneer$$Code)<br />

}<br />

}<br />

ベニア を 共 有 する と 、 所 有 する オブジ ェ ク ト を 割 り 当 て る こ と がで き な く な り ます。<br />

--no_veneershare を 使 用 する と 、 イ メ ージのレ イ ア ウ ト の 整 合 性 を 高 め る こ と がで き<br />

ます。 ただし、 リ ンカによって 追 加 のベニアが 生 成 されるため、 このオプシ ョ ンに<br />

はコー ド サ イ ズが 大 幅 に 増 加 する と い う 欠 点 があ り ます。<br />

4.17.1 関 連 項 目<br />

概 念<br />

• ベニアの 概 要 (4-27 ページ)<br />

• スキャッタロードについて (8-3 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --veneershare、 --no_veneershare (2-186 ページ)<br />

• 第 4 章 スキャッタファイルの 正 式 な 構 文 .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-28<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.18 ベニアのタ イプ<br />

ベニアは、 タ イ プご と に 機 能 や 使 用 する コー ド が 異 な り ます。 リ ン カでは、 分 岐 要<br />

件 に 応 じて、 最 も 適 した、 小 さ くて 高 速 なベニアを 選 択 します<br />

• インラインベニア :<br />

— 状 態 の 変 更 の 実 行 のみに 使 用 し ます。<br />

— ベニアは、 範 囲 内 に 収 ま る よ う に ターゲ ッ ト セ ク シ ョ ンの 直 前 に 挿 入 する<br />

必 要 があ り ます。<br />

— <strong>ARM</strong> から Thumb へのイ ン ターワーキングベニアの 範 囲 は 256 バイ トであ<br />

るため、 関 数 のエン ト リポイントはベニアの 256 バ イ ト の 範 囲 内 に 記 述 す<br />

る 必 要 があ り ます。<br />

— Thumb から <strong>ARM</strong> へのイ ン ターワーキングベニアの 範 囲 はゼロバイ ト であ<br />

る ため、 関 数 のエン ト リ ポ イ ン ト はベニアの 直 後 に 記 述 する 必 要 があ り ま<br />

す<br />

— イ ン ラ イ ンベニアは 常 に 位 置 非 依 存 です。<br />

• 短 分 岐 ベニア :<br />

— Thumb から <strong>ARM</strong> への イ ン ターワー ク を 行 う 短 分 岐 ベニアの 範 囲 は 32MB<br />

(<strong>ARM</strong> 命 令 の 範 囲 ) です。<br />

— 短 分 岐 ベニアは 常 に 位 置 非 依 存 です。<br />

• 長 分 岐 ベニア :<br />

— 4 GB のア ド レ ス 空 間 内 のど こ へで も 分 岐 で き ます。<br />

— すべての 長 分 岐 ベニアは イ ン ターワーキ ングベニアに も な り ます。<br />

— 絶 対 コー ド と 位 置 非 依 存 コー ド の 長 分 岐 ベニアは 異 な り ます。<br />

ベニア を 使 用 する 場 合 は、 以 下 の 点 に 注 意 し て 下 さ い。<br />

• インラインベニアの 制 限 は、 スキャッタファイルを 使 用 してインラインベニア<br />

を 実 行 領 域 の 範 囲 外 に 移 動 で き ない こ と を 意 味 し ます。 コ マン ド ラ イ ンオプ<br />

ション --no_inlineveneer を 使 用 する と、 インラ インベニアが 生 成 されな く な り<br />

ます。<br />

• すべてのベニア を 1 つの 入 力 セ ク シ ョ ンにま と める こ と はでき ません。 これは、<br />

結 果 として 生 じるベニア 入 力 セクションが 他 の 入 力 セクションの 囲 内 に 収 まら<br />

ない 可 能 性 があるためです。 セクシ ョ ンがア ド レス 範 囲 内 に 存 在 しない 場 合 、<br />

長 分 岐 は 不 可 能 です。<br />

• リ ンカに よ り 、 位 置 に 依 存 し ないベニアのバ リ アン ト が 自 動 的 に 生 成 さ れま<br />

す。 ただ し、 こ の よ う なベニアは 位 置 に 依 存 するバ リ ア ン ト よ り も 大 いため、<br />

必 要 な 場 合 ( 分 岐 元 および 分 岐 先 の 実 行 領 域 がど ち ら も 位 置 に 非 依 存 で 密 接 に<br />

関 連 し てい る 場 合 ) にのみ、 リ ン カが こ の 操 作 を 行 います。<br />

ベニアは、 コー ド サ イ ズを 最 適 化 する ために 生 成 さ れます。 そのため、 armlink は 以<br />

下 の 優 先 順 序 でバ リ アン ト を 選 択 し ます。<br />

1. インラインベニア<br />

2. 短 分 岐 ベニア<br />

3. 長 分 岐 ベニア<br />

4.18.1 関 連 項 目<br />

概 念<br />

• ベニアの 概 要 (4-27 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-29<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

参 照<br />

『リンカリファレンス』:<br />

• --inlineveneer、 --no_inlineveneer (2-86 ページ)<br />

• --max_veneer_passess=value (2-111 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-30<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.19 位 置 非 依 存 から 絶 対 ベニアへの 生 成<br />

通 常 の 呼 び 出 し 命 令 では、 呼 び 出 し ア ド レ ス か ら のオフセ ッ ト と し て ターゲ ッ ト の<br />

アドレスがエンコードされます。 位 置 非 依 存 (PI) コー ド か ら 絶 対 コー ド への 呼 び<br />

出 し が 行 われる と リ ン ク 時 にはオフセ ッ ト を 計 算 で き ないため、 リ ンカは 長 分 岐 ベ<br />

ニアを 挿 入 する 必 要 があます。<br />

PI か ら 絶 対 ベニアへの 生 成 は、 --piveneer オプシ ョ ン を 使 用 し て 制 御 で き ます。 こ れ<br />

はデフ ォル ト です。 こ のオプシ ョ ンを --no_piveneer を 使 用 してオフにする と、 PI<br />

コードから 絶 対 コードへの 呼 び 出 しが 検 出 されたと きにリ ンカによってエラーが 生<br />

成 されます。<br />

4.19.1 関 連 項 目<br />

概 念<br />

• ベニアの 概 要 (4-27 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --max_veneer_passess=value (2-111 ページ)<br />

• --piveneer、 --no_piveneer (2-121 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-31<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.20 スキャ ッ タ ロー ド 時 のベニアの 再 利 用<br />

リ ンカでは 可 能 な 限 り ベニアを 再 利 用 し ますが、 保 護 さ れてい る ロー ド 領 域 および<br />

オーバーレ イ 実 行 領 域 でのベニアの 再 利 用 にはい く つか 制 限 があ り ます。<br />

ス キ ャ ッ タ フ ァ イルを 使 用 する と 、 RAM の 同 じ 領 域 を 共 有 する 領 域 を 作 成 で き ま<br />

す。<br />

• ロード 領 域 に PROTECTED キーワー ド を 使 用 し た 場 合 、 以 下 の こ と がで き な く な り<br />

ます。<br />

— ロード 領 域 の 重 複<br />

— ベニアの 共 有<br />

— --merge オプシ ョ ン を 使 用 し た 文 字 列 の 共 有<br />

• 領 域 に OVERLAY キーワー ド を 使 用 し た 場 合 、 ベニア を 再 利 用 する には、 以 下 の 2<br />

つの 条 件 があ り ます。<br />

— オーバーレ イ 実 行 領 域 では、 他 のオーバーレ イ 実 行 領 域 内 にあ るベニアを<br />

再 利 用 する こ と はで き ません。<br />

— オーバーレ イ 実 行 領 域 内 にあ るベニア を、 他 の 実 行 領 域 内 で 再 利 用 する こ<br />

とはできません。<br />

これらの 条 件 が 満 たされない 場 合 は、 既 存 のベニアが 再 利 用 される 代 わりに、 新 し<br />

いベニアが 作 成 さ れます。 ス キ ャ ッ タ ロー ド を 使 用 し てベニア 特 定 の 位 置 に 配 置 す<br />

る よ う リ ンカに 指 示 する 場 合 を 除 き、 ベニアは 常 に、 ベニア を 必 要 と する 呼 び 出 し<br />

を 含 む 実 行 領 域 内 に 配 置 さ れます。 つま り 、 以 下 を 意 味 し ます。<br />

• オーバーレ イ 実 行 領 域 では、 すべてのベニアがその 実 行 領 域 内 に 配 置 さ れま<br />

す。<br />

• オーバーレ イ 実 行 領 域 では、 他 の 実 行 領 域 内 のベニアが 必 要 にな る こ と はあ り<br />

ません。<br />

4.20.1 関 連 項 目<br />

概 念<br />

• ベニアの 概 要 (4-27 ページ) .<br />

参 照<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• ロー ド 領 域 と 実 行 領 域 のア ド レ ス 属 性 (4-16 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-32<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.21 コマンドラインオプションを 使 用 した C++ 例 外 テーブルの 生 成 の 制 御<br />

デフォル ト 、 つま り、 オプシ ョ ン --exceptions が 指 定 さ れてい る 場 合 は、 イ メ ージに<br />

例 外 テーブルを 含 め る こ と がで き ます。 コー ド で 例 外 がス ローされない 場 合 、 例 外<br />

テーブルは 自 動 的 に 破 棄 さ れます。 ただ し、 オプシ ョ ン --no_exceptions を 指 定 する<br />

と 、 未 使 用 セ ク シ ョ ンの 削 除 後 に 例 外 セ ク シ ョ ンが 存 在 する 場 合 、 リ ン カに よ っ て<br />

エラーが 生 成 されます。<br />

--no_exceptions オプシ ョ ン を 使 用 する と 、 コー ド で 例 外 が 処 理 さ れない よ う にで き ま<br />

す。 リ ンカは、 エ ラー メ ッ セージを 生 成 し て 例 外 が 検 出 さ れた こ と を 通 知 し、 最 終<br />

イメージを 生 成 しません。<br />

ただし、 --no_exceptions オプシ ョ ンを --diag_warning オプシ ョ ン と 組 み 合 わせて 使 用<br />

する と、 エラーメ ッセージを 警 告 メ ッセージに 降 格 できます。 この 場 合 、 リ ンカは、<br />

最 終 イ メ ージを 生 成 し ますが、 例 外 が 検 出 さ れた こ と を 警 告 する メ ッ セージ も 生 成<br />

します。<br />

リ ンカは、 従 来 のオブジェ ク ト 用 に、 デバッ グフ レーム 情 報 を 含 む 例 外 テーブルを<br />

作 成 で き ます。 こ の 操 作 は、 C 言 語 ま たはアセンブ リ 言 語 のオジ ェ ク ト については<br />

支 障 な く 行 う こ と がで き ます。 デフ ォル ト では、 リ ン カは 例 外 テーブルを 作 成 し ま<br />

せん。 これは、 リ ンカオプシ ョ ン --exceptions_tables=nocreate を 使 用 した 場 合 と 同 じ<br />

です。<br />

リンカオプション --exceptions_tables=unwind を 使 用 する と、 リ ンカは、.debug_frame 情<br />

報 を 使 用 して、 例 外 テーブルを 含 んでいないイ メージのセク シ ョ ンご とに、 レジス<br />

タが 復 元 する unwind テーブルを 作 成 でき ます。 unwind テーブルを 作 成 できない 場<br />

合 、 リ ン カは 代 わ り に nounwind テーブルを 作 成 し ます。<br />

リンカオプション --exceptions_tables=cantunwind を 使 用 する と、 例 外 テーブルを 含 ん<br />

でいないイ メージのセクシ ョ ンご とに nounwind テーブルを 作 成 でき ます。<br />

注<br />

以 下 の 点 に 注 意 し て 下 さい。<br />

• デフォル ト (つま り、 --exceptions --exception_tables=nocreate) では、 C コード<br />

がオプシ ョ ン --exceptions でコンパイルされる 場 合 を 除 き、C コード またはアセ<br />

ンブ リ コー ド で 例 外 を ス ローする こ と は 安 全 ではあ り ません。<br />

• リンカは、.debug_frame 情 報 を 使 用 し て、 オブジ ェ ク ト か ら フ レーム 展 開 命 令 を<br />

生 成 で き ます。 フ レーム 展 開 は、 C およびアセンブラコードには 十 分 です。 し<br />

か し、 展 開 れる ス タ ッ ク 上 のオブジ ェ ク ト のデス ク ト ラ ク タ を 呼 び 出 さ ないた<br />

め、 C++ コー ド には 不 十 分 です。<br />

C++ のク リーンアップコードは、--exceptions オプシ ョ ン を 使 用 し て、 コ ンパ イ<br />

ラ に よ って 生 成 さ れる 必 要 があ り ます。<br />

4.21.1 関 連 項 目<br />

参 照<br />

『リンカリファレンス』:<br />

• --diag_warning=tag[,tag,...] (2-48 ページ)<br />

• --exceptions、 --no_exceptions (2-61 ページ)<br />

• --exceptions_tables=action (2-62 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-33<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

『コンパイ ラ リ ファレンス』 :<br />

• --exceptions、 --no_exceptions (3-94 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-34<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.22 弱 参 照 と 定 義 について<br />

弱 参 照 と 定 義 を 使 用 する こ と で、 リ ンカはよ り 柔 軟 な 方 法 でビル ド に さ ま ざ ま な 関<br />

数 や 変 数 を 含 め る こ と がで き ます。 通 常 、 こ れら は ラ イ ブ ラ リ 数 への 参 照 です。<br />

弱 参 照<br />

weak 定 義<br />

リ ンカでは、 通 常 の 非 弱 参 照 を リ ン ク に 含 まれてい る シンボルに 解 決 で<br />

き ない 場 合 、 ラ イ ブ ラ リ 内 のシンボルを 検 索 し て 解 決 を 試 みます。<br />

• そ う し た 参 照 を 見 つけ る こ と がで き なかった 場 合 、 リ ンカに よ っ<br />

てエラーが 報 告 されます。<br />

• そ う し た 参 照 が 解 決 さ れる と 、 解 決 先 のセ ク シ ョ ンは 使 用 済 み と<br />

マー ク さ れます。 こ う する こ と で、 こ のセ ク シ ョ ンが 未 使 用 のセ<br />

クションとしてンカによって 削 除 されることがなくなります。 各<br />

非 弱 参 照 は、 1 つの 定 義 によ ってのみ 解 決 される 必 要 があ り ます。<br />

複 数 の 定 義 が 存 在 する 場 合 、 リ ン カに よ ってエ ラーが 報 告 さ れま<br />

す。<br />

C ソ ース フ ァ イ ル 内 の 関 数 ま たは 変 数 の 宣 言 は、 __weak 修 飾 子 を 使 用 し<br />

てマークできます。 extern と 同 様 に、 こ の 修 飾 子 は、 関 数 ま たは 変 数 が<br />

別 のソース フ ァ イル 内 で 宣 言 されている こ と を コ ンパイ ラに 通 知 し ま<br />

す。 こ の 関 数 ま たは 変 数 の 定 義 を コ ンパイ ラ が 使 用 で き ない 可 能 性 があ<br />

る ため、 リ ン カに よ って 解 決 さ れる 弱 参 照 が 作 成 さ れます。<br />

弱 参 照 を 解 決 する ために、 リ ンカに よ って ラ イ ブ ラ リ か ら オブジ ェ ク ト<br />

が ロー ド さ れる こ と はあ り ません。 弱 参 照 は、 定 義 が 他 の 理 由 で イ メ ー<br />

ジ 含 まれてい る 場 合 にのみ 解 決 で き ます。 弱 参 照 に よ って、 リ ンカが 定<br />

義 を 含 むセクシ ョ ンを 使 用 済 みとマークする こ とはあ り ません。 そのた<br />

め 未 使 用 のセ ク シ ョ ン と し て リ ン カに よ って 削 除 さ れる 可 能 性 があ り ま<br />

す。 以 下 の さ ま ざ ま な 理 由 で、 定 義 が イ メ ージ 内 に 既 に 存 在 し てい る 場<br />

合 があ り ます。<br />

• シンボルがコード 内 の 他 の 場 所 から 厳 密 に 参 照 されている。<br />

• シンボル 定 義 が、 これらのいずれかの 理 由 で 含 まれているシンボ<br />

ル 定 義 と 同 じ ELF セクション 内 に 存 在 している。<br />

• シンボル 定 義 が、--keep を 使 用 して 指 定 されているセクシ ョ ン、 ま<br />

たは ENTRY ポイント を 含 むセクション 内 に 存 在 している。<br />

• シンボル 定 義 がリ ンクに 含 まれているオブジェク ト ファイル 内 に<br />

存 在 し、 --no_remove オプシ ョ ンが 使 用 されている。 ラ イブラ リ 内<br />

のオブジ ェ ク ト フ ァ イ ルが 明 示 的 に リ ン カ コ マン ド ラ イ ンに 含 ま<br />

れている 場 合 を 除 き、 オブジェ ク ト フ ァ イルはラ イブラ リ から 参<br />

照 されません。<br />

要 約 する と 、 弱 参 照 は 定 義 が イ メ ージに 既 に 含 まれてい る 場 合 に 解 決 さ<br />

れますが、 その 定 義 が 含 まれているかど う かの 確 認 は 行 いません。<br />

未 解 決 の weak 関 数 の 呼 び 出 しは、 以 下 のいずれかに 置 き 換 え られます。<br />

• 非 演 算 命 令 NOP<br />

• リンク 命 令 BL を 使 用 し た、 後 続 の 命 令 への 分 岐 (つま り 、 関 数 呼<br />

び 出 しは 行 われません)<br />

関 数 定 義 、 つま り アセンブ ラ のエ ク ス ポー ト さ れた ラベルは、 変 数 の 定<br />

義 と 同 じよ うに、 weak と し てマー クする こ と も で き ます。 こ の 場 合 、<br />

weak シンボル 定 義 がオブジェク ト ファイル 内 に 作 成 されます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-35<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

通 常 の 定 義 と 同 様 の 方 法 で、 weak 定 義 を 使 用 し て、 そのシンボルへの<br />

参 照 を 解 決 で き ます。 ただ し、 そのシンボルの non-weak 定 義 がビル ド<br />

内 に 存 在 る 場 合 、 リ ン カでは weak 定 義 の 代 わ り に、 その 定 義 を 使 用 し<br />

ます。 複 数 回 定 義 さ れたシンボルが 原 因 で、 エ ラーは 生 成 さ れません。<br />

4.22.1 弱 参 照 の 例<br />

ライブラリには、 関 数 foo() が 含 まれています。 この 関 数 は、 アプ リ ケーシ ョ ンの 一<br />

部 のビルドで 呼 び 出 され、 その 他 のビルドでは 呼 び 出 されません。 この 関 数 を 使 用<br />

する 場 合 は、 init_foo() を 最 初 に 呼 び 出 す 必 要 があ り ます。 弱 参 照 を 使 用 し て、<br />

init_foo() への 呼 び 出 し を 自 動 化 で き ます。<br />

ライブラリでは、init_foo() と foo() を 同 じ ELF セクション 内 に 定 義 できます。 アプ<br />

リ ケーシ ョ ンの 初 期 化 コー ド では、 init_foo() を weak で 呼 び 出 す 必 要 があ り ます。<br />

何 らかの 理 由 でアプリ ケーシ ョ ンに foo() が 含 まれている 場 合 は、 init_foo() も 含 ま<br />

れてお り 、 それが 初 期 化 コー ド か ら 呼 び 出 さ れます。 foo() が 含 まれていないビルド<br />

では、 init_foo() への 呼 び 出 し は リ ン カに よ っ て 削 除 さ れます。<br />

通 常 、 1 つのソース フ ァ イル 内 で 定 義 されている 複 数 の 関 数 のコード は、 コ ンパイ ラ<br />

によって、 1 つの ELF セクションに 配 置 されます。ただし、 特 のビルドオプションに<br />

よ って この 動 作 が 変 更 される 場 合 があ り ます。 そのため、 ビル ド が ELF セクション<br />

へのファ イルのグループ 化 に 依 存 している 場 合 は、 注 意 して 使 用 する 必 要 があ り ま<br />

す。<br />

• コンパイラコマンドラインオプション --split_sections を 指 定 する と 、 各 関 数 は<br />

独 自 のセ ク シ ョ ンに 配 置 さ れます。 こ の 例 では、 こ のオプシ ョ ン を 指 定 し て ラ<br />

イブラ リ をコンパイルすると、foo() と init_foo() は 別 々のセ ク シ ョ ンに 配 置 さ<br />

れます。 そのため、 foo() への 呼 び 出 しが 原 因 で、 init_foo() は 自 動 的 にはビル<br />

ドに 含 まれません。<br />

• リンカフィードバックメカニズム --feedback を 指 定 する と 、 リ ン ク 手 順 で<br />

init_foo() は 未 使 用 と 記 録 さ れます。 そのため、 その 後 のコ ンパ イルで<br />

init_foo() は 独 自 のセ ク シ ョ ンに 配 置 され、 削 除 でき る よ う にな り ます。<br />

• コンパイラディレクティブ #pragma arm section を 指 定 した 場 合 も、コンパイ ラに<br />

よ って、 一 部 の 関 数 に 対 し て 個 別 の ELF セクションが 生 成 されます。<br />

この 例 では、foo() を 含 むビルド と、 foo() を 含 まないビルト とで 初 期 化 コードをビル<br />

ド し 直 す 必 要 はあ り ません。 ま た、 init_foo() を 呼 び 出 さ ないバージ ョ ンの 初 期 化<br />

コード と、 アプ リ ケーシ ョ ンの 他 の 部 分 で foo() を 呼 び 出 すアプ リ ケーシ ョ ンが 誤 っ<br />

てビル ド さ れる 可 能 性 も あ り ません。<br />

通 常 、 ラ イ ブ ラ リ にビル ド さ れる foo.c ソースコードの 例 を 以 下 に 示 し ます。<br />

void init_foo()<br />

{<br />

// 初 期 化 コ ー ド<br />

}<br />

void foo()<br />

{<br />

// 一 部 の ビ ル ド に 含 ま れ<br />

// init_foo() を 最 初 に 呼 び 出 す 必 要 があ る 関 数<br />

}<br />

init.c の 例 を 以 下 に 示 し ます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-36<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

__weak void init_foo(void);<br />

int main(void)<br />

{<br />

init_foo();<br />

// foo() を 直 接 ま た は 間 接 的 に 呼 び 出 し た り す る 残 り の コ ー ド<br />

}<br />

アセンブ ラ に よ って 生 成 さ れる 弱 参 照 の 例 を 以 下 に 示 し ます。<br />

init.s:<br />

IMPORT init_foo WEAK<br />

AREA init, CODE, readonly<br />

BL init_foo<br />

; 残 りのコード<br />

END<br />

4.22.2 weak 定 義 の 例<br />

関 数 の 単 純 な 実 装 ま たはダ ミ ーの 実 装 を weak 定 義 と し て 使 用 で き ます。 こ れら を 使<br />

用 する と、 関 数 の 完 全 な 実 装 を 含 める こ と な く 動 作 が 定 義 されソ フ ト ウ ェ アをビル<br />

ド で き ます。 ま た、 必 要 に 応 じ て、 一 部 のビル ド に 完 全 な 実 装 を 含 め る こ と も で き<br />

ます。<br />

4.22.3 関 連 項 目<br />

概 念<br />

• リ ンカに よ る ラ イ ブ ラ リ の 検 索 、 選 択 、 およびス キ ャ ンの 実 行 方 法 (4-38 ペー<br />

ジ)<br />

• リ ンカに よ る 参 照 の 解 決 方 法 (4-43 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --feedback=file (2-66 ページ)<br />

• --keep=section_id (2-89 ページ)<br />

• --remove、 --no_remove (2-136 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• --split_sections (3-203 ページ)<br />

• __weak (5-24 ページ)<br />

• __attribute__((weak)) 関 数 属 性 (5-58 ページ)<br />

• __attribute__((weakref("target"))) 関 数 属 性 (5-59 ページ)<br />

• __attribute__((weak)) 変 数 属 性 (5-78 ページ)<br />

• __attribute__((weakref("target"))) 変 数 属 性 (5-79 ページ)<br />

• #pragma arm section [section_type_list] (5-84 ページ) .<br />

『アセンブラ リ フ ァ レンス』 :<br />

• NOP (3-154 ページ)<br />

• B、 BL、 BX、 BLX、 BXJ (3-124 ページ)<br />

• ENTRY (6-78 ページ)<br />

• EXPORT、 GLOBAL (6-80 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-37<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.23 リ ン カによ る ラ イ ブ ラ リの 検 索 、 選 択 、 およびスキャ ンの 実 行 方 法<br />

リンカは、 常 に <strong>ARM</strong> ライブラリの 前 にユーザライブラリを 検 索 します。--no_scanlib<br />

コマンド ラインオプショ ンを 指 定 した 場 合 、 リンカはデフォルトの <strong>ARM</strong> ライブラリ<br />

の 検 索 を 行 わず、 入 力 フ ァ イル リ ス ト に 指 定 されている ラ イブラ リ のみを 使 用 して<br />

参 照 を 解 決 し ます。<br />

リ ン カでは、 ラ イ ブ ラ リ の 内 部 リ ス ト を 以 下 の 方 法 で 作 成 し ます。<br />

1. 入 力 フ ァ イ ル リ ス ト 内 に 明 示 的 に 指 定 さ れてい るすべての ラ イ ブ ラ リ を リ ス ト<br />

に 追 加 し ます。<br />

2. 入 力 オブジ ェ ク ト 内 に 指 定 さ れてい る 要 求 を 満 たすために、 ユーザ 指 定 の 検 索<br />

パスを 検 証 し、 <strong>ARM</strong> 標 準 ラ イ ブ ラ リ を 識 別 し ます。<br />

検 証 し たデ ィ レ ク ト リ およびそのサブデ ィ レ ク ト リ か ら、 最 も 適 切 な ラ イ ブ ラ<br />

リのバリアントが 選 択 されます。<strong>ARM</strong> が 提 供 する ラ イ ブ ラ リ には、 その メ ン<br />

バの 属 性 に 基 づいて 命 名 さ れてい る 複 数 のバ リ アン ト があ り ます。<br />

リンカがオブジェクトファイルをイメージに 追 加 する 方 法 と、 ライブラリをイメー<br />

ジに 追 加 する 方 法 には、 以 下 の 違 いがあ り ます。<br />

• 入 力 リ ス ト 内 の 各 オブジ ェ ク ト フ ァ イ ルは、 それを 参 照 する も のがあ る かど う<br />

かに 関 係 な く 、 無 条 件 に 出 力 イ メ ージに 追 加 さ れます。 ただ し、 少 く と も 1 つ<br />

のオブジェ ク ト が 指 定 されている 必 要 があ り ます。<br />

• ラ イブラ リ の メ ンバは、 以 下 の 場 合 にのみ 出 力 にイ ン クルード されます。<br />

— オブジェ ク ト フ ァ イルまたは 既 にイン クルード されている ラ イブラ リ メ ン<br />

バから その メ ンバへの 非 弱 参 照 があ る。<br />

— リ ンカが 明 示 的 にその メ ンバを 追 加 する よ う 指 示 さ れてい る。<br />

注<br />

ラ イ ブ ラ リ の メ ンバは、 入 力 フ ァ イル リ ス ト 内 で 明 示 的 に 要 求 さ れる と 、 その<br />

メ ンバに よ って 現 在 の 参 照 が 解 決 さ れない 場 合 で も ロー ド さ れますこ の 場 合 、<br />

明 示 的 に 要 求 さ れた メ ンバは、 通 常 のオブジ ェ ク ト と 同 様 に 処 理 さ れます。<br />

weak 型 シンボルへの 未 解 決 の 参 照 があ る 場 合 、 ラ イ ブ ラ リ の メ ンバはロー ド さ れま<br />

せん。<br />

4.23.1 関 連 項 目<br />

タスク<br />

• 弱 参 照 と 定 義 について (4-35 ページ)<br />

• リンカによる <strong>ARM</strong> 標 準 ラ イ ブ ラ リ の 検 索 方 法 の 制 御 (4-39 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --keep=section_id (2-89 ページ)<br />

• --remove、 --no_remove (2-136 ページ)<br />

• --scanlib、 --no_scanlib (2-143 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-38<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.24 リンカによる <strong>ARM</strong> 標 準 ラ イ ブ ラ リの 検 索 方 法 の 制 御<br />

デフォル ト では、 リ ンカは <strong>ARM</strong> 標 準 ラ イ ブ ラ リ を ../lib 内 で 検 索 し ます。 こ の 場 所<br />

は armlink 実 行 可 能 フ ァ イルの 場 所 に 対 し て 相 対 的 です。 ま た、 --libpath コマンドラ<br />

インオプションか、 あるいは <strong>ARM</strong>LIB 環 境 変 数 ま たは <strong>ARM</strong>CCnLIB 環 境 変 数 のいずれかを<br />

使 用 し て、 リ ン カに よ る <strong>ARM</strong> 標 準 ラ イ ブ ラ リ の 検 索 方 法 を 制 御 する こ と も で き ま<br />

す。<br />

一 部 の ラ イ ブ ラ リ はサブデ ィ レ ク ト リ に 格 納 さ れます。 コ ンパ イ ラ では、 特 定 のサ<br />

ブデ ィ レ ク ト リ の ラ イ ブ ラ リ が 必 要 な 場 合 、 サブデ ィ レ ク ト リ 識 別 する ための 特 別<br />

なシンボルの イ ンポー ト を リ ンカに 追 加 し ます。 サブデ ィ レ ク ト リ の 名 前 は、<br />

Lib$$Request$$sub_dir_name 形 式 のシンボルを 使 用 し て、 コ ンパイル 済 みの 各 オブジ ェ<br />

クト 内 に 配 置 されます。<br />

4.24.1 --libpath コ マン ド ラ イ ンオプシ ョ ンの 使 用<br />

--libpath コマンド ラインオプショ ンは、 親 ディレク ト リのコンマ 区 切 り リ ス ト と 共<br />

に 使 用 し ます。 この リ ス ト は、 <strong>ARM</strong> のライブラ リディレク ト リ armlib および cpplib<br />

の 親 デ ィ レ ク ト リ で 終 わ る 必 要 があ り ます。<br />

ラ イ ブ ラ リ パスの 末 尾 に 以 下 のパスの 区 切 り 文 字 を 含 めた 場 合 、 リ ンカでは、 シン<br />

ボル Lib$$Request$$sub_dir_name で 指 定 されたサブデ ィ レ ク ト リ を 検 索 し ます。<br />

• \ (Windows の 場 合 )<br />

• / (Red Hat Linux の 場 合 )<br />

例 えば、 --libpath=mylibs\ とシンボル Lib$$Request$$armlib を 使 用 した 場 合 、 リ ンカで<br />

は 以 下 のデ ィ レ ク ト リ を 検 索 し ます。<br />

mylibs<br />

mylibs\armlib<br />

注<br />

リンカコマンドラインオプション --libpath を 使 用 した 場 合 、 <strong>ARM</strong>CCnLIB 変 数 で 指 定 さ<br />

れたパスは 検 索 されません。<br />

複 数 の ラ イ ブ ラ リ で 同 じ シンボルが 定 義 さ れてい る 場 合 、 検 索 は 先 頭 か ら 順 番 に 実<br />

行 されるため、 リ ス ト 内 で 最 初 に 出 てく るライブラ リがリ ンカよって 選 択 されます。<br />

4.24.2 <strong>ARM</strong>CCnLIB または <strong>ARM</strong>LIB 環 境 変 数 の 使 用<br />

<strong>ARM</strong>LIB かまたは <strong>ARM</strong>CCnLIB 環 境 変 数 のいずれかを 使 用 し て、 ラ イ ブ ラ リ のパス を 指 定<br />

する こ とができます。<br />

<strong>ARM</strong>CCnLIB に 指 定 さ れたパスの 末 尾 に 以 下 のパスの 区 切 り 文 字 を 含 めた 場 合 、 リ ンカ<br />

では、 シンボル Lib$$Request$$sub_dir_name で 指 定 されたサブデ ィ レ ク ト リ を 検 索 し ま<br />

す。<br />

• \ (Windows の 場 合 )<br />

• / (Red Hat Linux の 場 合 )<br />

例 えば、<strong>ARM</strong>CC5LIB が install_directory\lib\ に 設 定 さ れてい る 場 合 、 リ ンカでは 以 下 の<br />

ディレク ト リを 検 索 します。<br />

lib<br />

lib\armlib<br />

lib\cpplib<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-39<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.24.3 ラ イ ブ ラ リ 検 索 順 序<br />

リ ンカは ラ イ ブ ラ リ を 次 に 示 す 順 序 で 検 索 し ます。<br />

1. 現 在 のパスの 相 対 パス<br />

2. コマンド ラインオプショ ン --libpath で 指 定 された 場 所<br />

3. <strong>ARM</strong>CCnLIB で 指 定 された 場 所<br />

4. <strong>ARM</strong>LIB で 指 定 された 場 所<br />

5. ../lib で 指 定 された 場 所<br />

4.24.4 リンカによる <strong>ARM</strong> ラ イ ブ ラ リのバ リ アン ト の 選 択 方 法<br />

<strong>ARM</strong> コンパイラツールチェーンには、 さまざまなビルドオプションを 使 用 してビル<br />

ド さ れた、 各 ラ イ ブ ラ リ のバ リ アン ト がい く つか 含 まれています。 例 えば、 アーキ<br />

テクチャバージョン、 エンディアン、 命 令 セッ トがあります。 <strong>ARM</strong> ライブラリのバ<br />

リ アン ト は、 そのラ イ ブ ラ リ の 名 前 で 符 号 化 されます。 リ ンカは、 ラ イ ブ ラ リ の 検<br />

索 時 に 識 別 さ れた 各 デ ィ レ ク ト リ か ら、 最 も 適 切 なバ リ ア ン ト を 選 択 する 必 要 があ<br />

ります。<br />

リ ンカは、 各 入 力 オブジェク トの 属 性 を 蓄 積 し、 それらの 属 性 に 最 も 適 したライブ<br />

ラ リ のバ リ アン ト を 選 択 し ます。 選 択 さ れた 複 数 の ラ イ ブ ラ リ 同 様 に 適 し てい る 場<br />

合 には、 最 初 に 選 択 さ れた ラ イ ブ ラ リ が 採 用 さ れ、 残 り の ラ イ ブ ラ リ は 採 用 さ れま<br />

せん。<br />

4.24.5 関 連 項 目<br />

概 念<br />

• リ ンカに よ る ラ イ ブ ラ リ の 検 索 、 選 択 、 およびス キ ャ ンの 実 行 方 法 (4-38 ペー<br />

ジ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --libpath=pathlist (2-97 ページ) .<br />

『<strong>ARM</strong> ® C および C++ ラ イ ブ ラ リ と 浮 動 小 数 点 サポー ト の 使 用 』 :<br />

• C および C++ ラ イ ブ ラ リ の 命 名 規 則 (2-130 ページ) .<br />

『<strong>ARM</strong> ® C ライブラリ、C++ ラ イ ブ ラ リ 、 および 浮 動 小 数 点 サポー ト リ フ ァ レ ン ス』 :<br />

• 第 2 章 C ライブラリと C++ ライブラリ .<br />

『<strong>ARM</strong> コンパイラツールチェーンの 概 要 』:<br />

• ツールチェーンの 環 境 変 数 (2-16 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-40<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.25 リ ン ク 時 のユーザラ イ ブ ラ リの 指 定<br />

ユーザ ラ イ ブ ラ リ を 指 定 する には、 以 下 の 手 順 を 実 行 し ます。<br />

• パス 情 報 を 使 用 し て、 ユーザ ラ イ ブ ラ リ を 入 力 フ ァ イル リ ス ト に 明 示 的 に 含 め<br />

ます。<br />

• armlink コマンド ラインに --userlibpath オプシ ョ ンを、 ディ レ ク ト リ のコンマ 区<br />

切 り リ ス ト と 共 に 追 加 し、 ラ イブラ リ の 名 前 を 入 力 フ ァ イルと して 指 定 しま<br />

す。<br />

--library=name オプシ ョ ンを 使 用 して、 静 的 ラ イブラ リ libname.a、 ま たは 動 的 共 有 オ<br />

ブジェ ク ト libname.so を 指 定 で き ます。 ダ イ ナ ミ ッ ク 検 索 は<br />

--search_dynamic_libraries オプシ ョ ンに よ っ て 制 御 さ れます。 例 えば、 以 下 の コ マン<br />

ドでは、libfoo.so の 後 に libfoo.a を 検 索 します。<br />

armlink --arm_linux --shared --fpic --search_dynamic_libraries --library=foo<br />

コ マン ド ラ イ ンで ラ イ ブ ラ リ の 完 全 パス 名 を 指 定 し ない 場 合 、 リ ン カでは、<br />

--userlibpath オプシ ョ ンで 指 定 されたディ レ ク ト リ 内 でラ イブラ リ を 検 索 し ます。 例<br />

えば、 ディ レ ク ト リ /mylib に my_lib.a および other_lib.a が 含 まれる 場 合 、<br />

/mylib/my_lib.a を 入 力 フ ァ イル リ ス ト に 追 加 する には、 以 下 の コ マン ド を 使 用 し ま<br />

す。<br />

armlink --userlibpath /mylib my_lib.a *.o<br />

ラ イ ブ ラ リ か ら 特 定 の メ ンバを 追 加 する 場 合 、 こ のコ マン ド では、 リ ンカで 使 用 さ<br />

れる 検 索 可 能 な ラ イ ブ ラ リ の リ ス ト に ラ イ ブ ラ リ が 追 加 さ れまん。 特 定 の メ ンバを<br />

ロードし、 検 索 可 能 なライブラリのリストにライブラリを 追 加 するには、 ライブラ<br />

リ filename を 単 独 でインクルードするだけでな く、 library(member) も 指 定 します。 例<br />

えば、 strcmp.o をロードして、 検 索 可 能 なライブラ リのリストに mystring.lib を 配 置<br />

するには、 入 力 ファ イルリ ス ト に 以 下 の 行 を 追 加 します。<br />

mystring.lib(strcmp.o) mystring.lib<br />

注<br />

リンカコマンドラインオプション --libpath あるいは <strong>ARM</strong>LIB 環 境 変 数 ま たは <strong>ARM</strong>CCnLIB<br />

環 境 変 数 のいずれかに よ って 指 定 さ れる <strong>ARM</strong> 標 準 ラ イ ブ ラ リ に 使 用 さ れる 検 索 パス<br />

では、 ユーザラ イブラ リ は 検 索 されません。<br />

4.25.1 関 連 項 目<br />

タスク<br />

• リンカによる <strong>ARM</strong> 標 準 ラ イ ブ ラ リ の 検 索 方 法 の 制 御 (4-39 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --libpath=pathlist (2-97 ページ)<br />

• --library=name (2-98 ページ)<br />

• --search_dynamic_libraries、 --no_search_dynamic_libraries<br />

(2-146 ページ)<br />

• --userlibpath=pathlist (2-182 ページ) .<br />

『<strong>ARM</strong> ® C ライブラリ、C++ ラ イ ブ ラ リ 、 および 浮 動 小 数 点 サポー ト リ フ ァ レ ン ス』 :<br />

• 第 2 章 C ライブラリと C++ ライブラリ .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-41<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

『<strong>ARM</strong> コンパイラツールチェーンの 概 要 』:<br />

• ツールチェーンの 環 境 変 数 (2-16 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-42<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.26 リ ン カによ る 参 照 の 解 決 方 法<br />

リ ンカは、 ラ イブラ リ の リ ス ト を 構 成 する と、 参 照 を 解 決 するために リ ス ト 内 の 各<br />

ライブラリを 繰 り 返 しスキャンします。 保 持 されるファイルの 2 つの 別 々の リ ス ト<br />

があ り ます。 すべての 依 存 関 係 を 解 決 する ために、 その 2 つの リ ス ト は 以 下 の 順 序<br />

でスキャンされます。<br />

1. ../lib にあるシステムラ イブラ リ、 あるいは --libpath、 <strong>ARM</strong>CCnLIB、 または <strong>ARM</strong>LIB<br />

によって 指 定 されるディレク ト リにあるシステムライブラ リのリ ス ト。<br />

-Jdir[,dir,...] コ ンパ イ ラ オプシ ョ ンで も 指 定 で き ます。<br />

2. ロード されたその 他 のすべてのファ イルのリ ス ト。-Idir[,dir,...] コンパイラ<br />

オプシ ョ ンでも 指 定 でき ます。<br />

各 リ ス ト は、 以 下 の 手 順 でス キ ャ ン さ れます。<br />

1. 指 定 さ れたすべてのデ ィ レ ク ト リ を 検 索 し て、 最 も 互 換 性 のあ る ラ イ ブ ラ リ の<br />

バリアントを 選 択 します。<br />

2. そのバ リ アン ト を ラ イブラ リ の リ ス ト に 追 加 し ます。<br />

3. 各 ラ イ ブ ラ リ を ス キ ャ ン し て、 必 要 な メ ンバを ロー ド し ます。<br />

a. その 時 点 で 解 決 さ れていない 非 弱 参 照 について、 リ ス ト 内 の ラ イ ブ ラ リ を<br />

順 に 検 索 し て、 一 致 する 定 義 を 探 し ます。 検 出 さ れた 最 初 の 定 義 が 手 順 b<br />

のためにマーク されます。<br />

複 数 の ラ イ ブ ラ リ で 同 じ シンボルが 定 義 さ れてい る 場 合 、 検 索 は 先 頭 か ら<br />

順 番 に 実 行 さ れる ため、 リ ス ト 内 で 最 初 に 出 て く る ラ イ ブ ラ リ が リ ン カ<br />

よって 選 択 されます。 このため、 入 力 ファイルリストにライブラ リを 追 加<br />

する こ とによ り、 <strong>ARM</strong> C ライブラリなどの 他 のライブラリの 関 数 定 義<br />

をーバーライドできます。 ただし、 ライブラリのメンバのすべてのシンボ<br />

ルを 一 貫 し てオーバーラ イ ド し ない と、 動 作 が 予 測 でき な く な るので 注 意<br />

して 下 さい。<br />

b. 手 順 3a でマーク されたラ イブラ リ のメ ンバをロード し ます。 メ ンバを<br />

ロー ド する と 、 弱 参 照 を 含 む、 未 解 決 の 参 照 が 解 決 さ れる 可 能 性 があ り ま<br />

す。 ま た、 ラ イ ブ ラ リ メ ンバの ロー ド に よ っ て、 新 たに 未 解 決 の 弱 参 照 お<br />

よび 非 弱 参 照 が 生 じ る 可 能 性 も あ り ます。<br />

c. こ れら の 手 順 の 処 理 は、 すべての 非 弱 参 照 が 解 決 さ れる か、 どの ラ イ ブ ラ<br />

リ で も 解 決 で き ない こ と が 判 明 する まで 続 け ら れます。<br />

4. ス キ ャ ン 処 理 が 完 了 し て も 非 弱 参 照 が 解 決 さ れない 場 合 は、 エ ラー メ ッ セージ<br />

が 生 成 されます。<br />

4.26.1 関 連 項 目<br />

概 念<br />

• 弱 参 照 と 定 義 について (4-35 ページ)<br />

• リ ンカに よ る ラ イ ブ ラ リ の 検 索 、 選 択 、 およびス キ ャ ンの 実 行 方 法 (4-38 ペー<br />

ジ)<br />

• リンカによる <strong>ARM</strong> 標 準 ラ イ ブ ラ リ の 検 索 方 法 の 制 御 (4-39 ページ)<br />

• リンク 時 のユーザライブラリの 指 定 (4-41 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --libpath=pathlist (2-97 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-43<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

『コンパイ ラ リ ファレンス』 :<br />

• -Idir[,dir,...] (3-121 ページ)<br />

• -Jdir[,dir,...] (3-132 ページ) .<br />

『<strong>ARM</strong> コンパイラツールチェーンの 概 要 』:<br />

• ツールチェーンの 環 境 変 数 (2-16 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-44<br />

ID 111311<br />

Non-Confidential


イメージの 構 造 と 生 成<br />

4.27 リ ン カにおける 厳 格 なオプシ ョ ン フ ァ ミ リの 使 用<br />

厳 格 なオプシ ョ ンフ ァ ミ リ は、 エラーの 重 大 度 と 直 接 には 関 係 し ません。 一 般 に、<br />

厳 格 なオプシ ョ ン を 追 加 する のは、 標 準 の リ ン カチェ ッ ク が 十 には 正 確 でないか、<br />

またはレガシーオブジェ ク ト の ノ イ ズを 伴 う 可 能 性 があ るためです。<br />

厳 格 なオプシ ョ ン フ ァ ミ リ は 次 の と お り です。<br />

• --strict<br />

• --[no_]strict_enum_size<br />

• --[no_]strict_flags<br />

• --[no_]strict_ph<br />

• --[no_]strict_relocations<br />

• --[no_]strict_symbols<br />

• --[no_]strict_visibility<br />

• --[no_]strict_wchar_size.<br />

4.27.1 関 連 項 目<br />

参 照<br />

『リンカリファレンス』:<br />

• --strict (2-158 ページ)<br />

• --strict_enum_size、 --no_strict_enum_size (2-159 ページ)<br />

• --strict_flags、 --no_strict_flags (2-160 ページ)<br />

• --strict_ph、 --no_strict_ph (2-161 ページ)<br />

• --strict_relocations、 --no_strict_relocations (2-162 ページ)<br />

• --strict_symbols、 --no_strict_symbols (2-163 ページ)<br />

• --strict_visibility、 --no_strict_visibility (2-164 ページ)<br />

• --strict_wchar_size、 --no_strict_wchar_size (2-165 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 4-45<br />

ID 111311<br />

Non-Confidential


第 5 章<br />

リ ン カの 最 適 化 の 使 用<br />

以 下 の ト ピ ッ ク では、 リ ンカ armlink で 使 用 でき る 最 適 化 について 説 明 し ます。<br />

タスク<br />

• リンカによって 使 用 される 圧 縮 アルゴリズムのオーバーライド (5-18 ページ)<br />

• RW データ 圧 縮 の 使 用 (5-21 ページ)<br />

• リンカによる 関 数 のインライン 化 (5-22 ページ)<br />

• NOP に 最 適 化 さ れる 分 岐 の 処 理 (5-25 ページ)<br />

概 念<br />

• 共 通 デバ ッ グセ ク シ ョ ンの 削 除 (5-3 ページ)<br />

• 共 通 グループま たは 共 通 セ ク シ ョ ンの 削 除 (5-4 ページ)<br />

• 未 使 用 セ ク シ ョ ンの 削 除 (5-6 ページ)<br />

• 未 使 用 仮 想 関 数 の 削 除 (5-8 ページ)<br />

• リンカフィードバックについて (5-9 ページ)<br />

• リ ンカ フ ィ ー ド バ ッ ク の 使 用 例 (5-11 ページ)<br />

• リンク 時 コード 生 成 について (5-13 ページ)<br />

• RW データ 圧 縮 を 使 用 し た 最 適 化 (5-16 ページ)<br />

• リ ンカに よ る コ ンプレ ッ サの 選 択 方 法 (5-17 ページ)<br />

• 圧 縮 の 適 用 方 法 (5-20 ページ)<br />

• 関 数 のインラ イン 化 に 影 響 を 与 える 要 因 (5-23 ページ)<br />

• 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けについて (5-26 ページ)<br />

• 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けに 関 する 制 限 (5-27 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-1<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

• コメントセクションのマージについて (5-28 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-2<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.1 共 通 デバ ッ グセ ク シ ョ ンの 削 除<br />

DWARF 2 では、 コ ンパイ ラ と アセンブラは、 コ ンパイル 単 位 のソースフ ァ イルご と<br />

にデバッグセクシ ョ ン 群 を 生 成 します。 armlink は、 特 定 の ソ ース フ ァ イルに 関 連 す<br />

る 複 数 のデバッ グセ ク シ ョ ンを 検 出 し、 最 終 イ メ ージ 内 に 残 す 1 つのコ ピーを 除 き、<br />

残 り すべてのデバ ッ グセ ク シ ョ ン を 削 除 し ます。 こ の 結 果 、 イ メ ージのデバ ッ グサ<br />

イ ズが 大 幅 に 縮 小 さ れます。<br />

DWARF 3 では、 共 通 のデバッ グセ ク シ ョ ンは 共 通 グループに 配 置 されます。 armlink<br />

は、 同 一 の 署 名 を 持 つ 各 グループについて、 1 つのコ ピーを 除 き、 残 り すべてを 削 除<br />

します。<br />

5.1.1 関 連 項 目<br />

概 念<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ) .<br />

• 共 通 グループま たは 共 通 セ ク シ ョ ンの 削 除 (5-4 ページ)<br />

• 未 使 用 セ ク シ ョ ンの 削 除 (5-6 ページ)<br />

• 未 使 用 仮 想 関 数 の 削 除 (5-8 ページ) .<br />

参 照<br />

『コンパイ ラ リ ファレンス』 :<br />

• --debug、 --no_debug (3-63 ページ) .<br />

『アセンブラ リ フ ァ レンス』 :<br />

• --debug (2-9 ページ) .<br />

その 他 の 情 報<br />

• The DWARF Debugging Standard web site, http://www.dwarfstd.org/<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-3<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.2 共 通 グループまたは 共 通 セ ク シ ョ ンの 削 除<br />

<strong>ARM</strong> コ ンパイ ラ は、 リ ン ク 用 の 完 全 なオブジ ェ ク ト を 生 成 し ます。 そのため、<br />

• C および C++ ソースに イ ン ラ イ ン 関 数 が 含 まれてい る 場 合 、 各 オブジ ェ ク ト に<br />

それぞれが 必 要 とする イ ン ラ イ ン 関 数 のア ウ ト オブラ イ ン コ ピーが 保 持 されま<br />

す。<br />

• C++ ソース 内 でテンプレートが 使 用 されている 場 合 、 各 オブジェクトにそれぞ<br />

れが 必 要 と する テンプレー ト 関 数 が 保 持 さ れます。<br />

こ の よ う な 関 数 が 共 通 ヘ ッ ダフ ァ イルで 宣 言 さ れてい る 場 合 、 関 数 は、 その 後 リ ン<br />

ク する 各 オブジ ェ ク ト 内 で 何 度 も 定 義 さ れる 可 能 性 があ り ますコ ンパ イ ラ では、 重<br />

複 を 回 避 する ために、 こ れら の 関 数 を 共 通 コー ド セ ク シ ョ ン ま たは 共 通 グループの<br />

個 々の イ ン ス タ ン スに コ ンパ イ ルし ます<br />

共 通 コー ド セ ク シ ョ ン ま たは 共 通 グループの 個 々の イ ン ス タ ン スが 同 一 でない 場 合<br />

も あ り ます。 例 えば、 コ ピーの 一 部 は、 異 な る (ただ し 互 換 性 あ る) ビル ド オプ<br />

ション、 最 適 化 、 またはデバッグオプションを 使 用 してビルドされたライブラリ 内<br />

で 検 出 さ れる 場 合 があ り ます。<br />

コ ピーが 同 一 でない 場 合 、 armlink は、 入 力 オブジ ェ ク ト の 属 性 に 基 づき、 各 共 通<br />

コード セ ク シ ョ ン または 各 共 通 グループの 最 も 可 用 性 の 高 いバ リ アン ト を 保 持 し、<br />

それ 以 外 のバ リ アン ト を 破 棄 し ます。<br />

コ ピーが 同 一 であ る 場 合 、 armlink は、 最 初 に 検 出 し たセ ク シ ョ ン またはグループを<br />

保 持 し ます。<br />

この 最 適 化 は、 以 下 のリ ンカオプシ ョ ンを 使 用 して 制 御 します。<br />

• --bestdebug オプシ ョ ン を 使 用 する と 、 最 大 の 共 通 データ (COMDAT) グループ<br />

を 使 用 でき ます ( 最 適 なデバッ グビ ューが 提 供 される 可 能 性 が 高 く な り ます)。<br />

• --no_bestdebug オプシ ョ ン を 使 用 する と 、 最 小 の COMDAT グループを 使 用 でき<br />

ます (コードサイズを 最 も 小 さ くできる 可 能 性 が 高 くなり ます)。 これがデ<br />

フォルトす。<br />

--no_bestdebug がデフ ォル ト なので、 --debug を 使 用 してコンパイル 中 にデバッグ<br />

テーブルを 生 成 するかど うかに 関 係 なく、 最 終 イ メージは 同 じになり ます。<br />

5.2.1 関 連 項 目<br />

概 念<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ) .<br />

• 共 通 デバ ッ グセ ク シ ョ ンの 削 除 (5-3 ページ)<br />

• 未 使 用 セ ク シ ョ ンの 削 除 (5-6 ページ)<br />

• 未 使 用 仮 想 関 数 の 削 除 (5-8 ページ) .<br />

『コンパイ ラの 使 用 』 :<br />

• インライン 関 数 (6-31 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --bestdebug、 --no_bestdebug (2-21 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-4<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

『コンパイ ラ リ ファレンス』 :<br />

• --debug、 --no_debug (3-63 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-5<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.3 未 使 用 セ ク シ ョ ンの 削 除<br />

未 使 用 セ ク シ ョ ンの 削 除 は、 リ ン カに よ って 実 行 さ れる、 イ メ ージサ イ ズに 対 する<br />

最 も 重 要 な 最 適 化 です。 リ ン カに よ っ て、 ア ク セス さ れない コー ド と データ が 最 終<br />

イ メ ージか ら 削 除 さ れます。<br />

未 使 用 セ ク シ ョ ンの 削 除 は、 結 果 と し てすべてのセ ク シ ョ ンが 削 除 さ れる よ う な 場<br />

合 には 実 行 されません。<br />

この 最 適 を 制 御 するには、--remove、 --no_remove、 --first、 --last、 および --keep リン<br />

カオプシ ョ ンを 使 用 します。<br />

未 使 用 セ ク シ ョ ンを 削 除 するには、 エン ト リ ポイ ン ト が 必 要 です。 そのため、 未 使<br />

用 セ ク シ ョ ンの 削 除 が 有 効 な 場 合 に、 イ メ ージにエン ト リ ポイ ン ト が 指 定 されてい<br />

ないと きは、 --entry リ ンカオプシ ョ ンを 使 用 して、 エン ト リ ポイン ト を 指 定 し、 未<br />

使 用 セ ク シ ョ ン を 削 除 で き る よ う に し ます。<br />

注<br />

デフォル ト では、 --dll を 使 用 して DLL を ビル ド する 場 合 、 ま たは --shared を 使 用 し<br />

て 共 有 ラ イ ブ ラ リ を ビル ド する 場 合 、 未 使 用 セ ク シ ョ ンの 削 除 は 無 効 にな り ます。<br />

そのため、 未 使 用 セ ク シ ョ ンの 削 除 を 再 度 有 効 にする には、 --remove を 明 示 的 に 含 め<br />

る 必 要 があ り ます。<br />

--info unused リンカオプションを 使 用 すると、 削 除 された 未 使 用 セクションのリスト<br />

を 生 成 でき ます。<br />

入 力 セ ク シ ョ ンは、 以 下 の 場 合 に 最 終 イ メ ージに 保 持 さ れます。<br />

• エン ト リ ポイン ト が 含 まれている 場 合<br />

• エン ト リ ポ イ ン ト を 含 む 入 力 セ ク シ ョ ンか ら 非 弱 参 照 に よ って、 直 接 的 ま たは<br />

間 接 的 に 参 照 さ れる 場 合<br />

• --first オプシ ョ ンまたは --last オプシ ョ ン (あるいはこれと 同 じ 意 味 を 持 つス<br />

キ ャ ッ タ ロー ド の 記 述 ) を 使 用 し て、 最 初 ま たは 最 後 の 入 力 セ ク シ ョ ン と し て<br />

指 定 さ れてい る 場 合<br />

• --keep オプシ ョ ンによ って 削 除 不 可 と してマーク されている 場 合<br />

注<br />

通 常 、 コ ンパ イ ラ は 関 数 と データ を 一 緒 にま と め、 カテゴ リ ご と に 1 つのセ ク シ ョ<br />

ン を 生 成 し ます。 リ ンカでは、 セ ク シ ョ ン 全 体 が 未 使 用 の 場 合 のみ、 そのセ ク シ ョ<br />

ンを 削 除 できます。<br />

ソースコード 内 の 関 数 または 変 数 は、__attribute__((used)) 属 性 を 使 用 し てマーク で<br />

きます。 そうすると、armcc に よ って 各 関 数 および 変 数 に 対 し てシンボル<br />

__tagsym$$used が 生 成 され、 関 数 や 変 数 がリ ンカによって 削 除 されるこ とがなくなり<br />

ます。<br />

また、--split_sections コンパイラコマンドラインオプションを 使 用 して、 ソース<br />

フ ァ イ ル 内 の 関 数 ご と に 1 つの ELF セ ク シ ョ ン を 生 成 する よ う にコ ンパ イ ラ に 指 示<br />

する と もできます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-6<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.3.1 関 連 項 目<br />

概 念<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• 弱 参 照 と 定 義 について (4-35 ページ)<br />

• 共 通 デバ ッ グセ ク シ ョ ンの 削 除 (5-3 ページ)<br />

• 共 通 グループま たは 共 通 セ ク シ ョ ンの 削 除 (5-4 ページ)<br />

• 未 使 用 仮 想 関 数 の 削 除 (5-8 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --entry=location (2-58 ページ)<br />

• --first=section_id (2-71 ページ)<br />

• --info=topic[,topic,...] (2-80 ページ)<br />

• --keep=section_id (2-89 ページ)<br />

• --last=section_id (2-94 ページ)<br />

• --remove、 --no_remove (2-136 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• --split_sections (3-203 ページ)<br />

• __attribute__((used)) 関 数 属 性 (5-56 ページ)<br />

• __attribute__((used)) 変 数 属 性 (5-76 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-7<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.4 未 使 用 仮 想 関 数 の 削 除<br />

未 使 用 セ ク シ ョ ンの 削 除 を 使 用 する と 、 未 使 用 関 数 を 効 率 的 に C コードから 削 除 で<br />

きます。 C++ アプ リ ケーシ ョ ンでは、 仮 想 関 数 やランタイム 型 情 報 (RTTI) オブ<br />

ジェク トが、 vtable と 呼 ばれる ポ イ ン タ テーブルに よ って 参 照 さ れています。 追 加 の<br />

情 報 がない と 、 リ ン カではどの vtable エン ト リ が 実 行 時 にア ク セ ス さ れる のか 判 断 で<br />

き ません。 つま り 、 リ ン カで 使 用 さ れてい る 標 準 の 未 使 用 セ ク シ ョ ン 削 除 アルゴ リ<br />

ズムでは、 未 使 用 の 仮 想 関 数 RTTI オブジ ェ ク ト を 確 実 に 削 除 する こ と を 保 証 で き ま<br />

せん。<br />

仮 想 関 数 の 削 除 (VFE) は、 C++ コードから 生 成 されたイ メージの ROM サイズを 縮<br />

小 するために 未 使 用 セクシ ョ ンの 削 除 を 改 良 したものです。 この 最 適 化 を 使 用 する、<br />

未 使 用 の 仮 想 関 数 および RTTI オブジェ ク ト をコードから 削 除 でき ます。<br />

複 数 の 関 数 が 含 まれる 入 力 セ ク シ ョ ンについては、 すべての 関 数 が 未 使 用 の 場 合 に<br />

のみ 削 除 さ れます。 リ ンカは、 未 使 用 関 数 を 含 むセ ク シ ョ ン 内 ら、 未 使 用 関 数 を 削<br />

除 する こ と はで き ません。<br />

VFE は <strong>ARM</strong> コ ンパイ ラ と リ ン カに よ る 連 携 です。 コ ンパイ ラ が 未 使 用 の 仮 想 関 数 に<br />

関 する 追 加 情 報 を リ ンカに 提 供 し、 リ ン カがその 情 報 を 使 用 し ます。 コ ンパイ ラ に<br />

よ る 分 析 に 基 づき、 リ ンカは 未 使 用 の 仮 想 関 数 および RTTI オブジェ ク ト を 確 実 に 削<br />

除 でき ます。<br />

注<br />

VFE を 使 用 する 場 合 は、 C++ を 使 用 するすべてのオブジ ェ ク ト に VFE の 注 釈 が 含 ま<br />

れてい る 必 要 があ り ます。 リ ンカがオブジ ェ ク ト のシンボルテーブル 内 で 符 号 化 さ<br />

れた C++ シンボル 名 を 検 出 し、 VFE 情 報 が 存 在 し ない 場 合 、 こ の 最 適 化 は 無 効 にな<br />

ります。<br />

コンパイラは、.arm_vfe と い う 名 前 で 始 ま る セ ク シ ョ ンに 追 加 情 報 を 配 置 し ます。 こ<br />

れらのセクショ ンは VFE に 対 応 し ていない 場 合 、 リ ン カに よ っ て 無 視 さ れます。<br />

5.4.1 関 連 項 目<br />

概 念<br />

• 共 通 デバ ッ グセ ク シ ョ ンの 削 除 (5-3 ページ)<br />

• 共 通 グループま たは 共 通 セ ク シ ョ ンの 削 除 (5-4 ページ)<br />

• 未 使 用 セ ク シ ョ ンの 削 除 (5-6 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --vfemode=mode (2-189 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• --rtti、 --no_rtti (3-195 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-8<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.5 リンカフィードバックについて<br />

リンカフィードバックはコンパイラとリンカによる 連 携 です。それによって、ELF<br />

イ メ ージか ら 削 除 で き る 未 使 用 コー ド の 量 を 増 やす こ と がで き ます。<br />

フ ィ ー ド バ ッ ク オプシ ョ ン を 使 用 する と 、 未 使 用 の 関 数 と 、 リ ンカに よ って イ ン ラ<br />

イ ン 化 さ れた 関 数 の リ ス ト を 含 むテキ ス ト フ ァ イ ルが 生 成 さ れます。 こ の 情 報 を コ<br />

ンパイ ラにフ ィ ード バッ ク し て、 これらの 関 数 が 独 自 のセ ク シ ョ ンに 配 置 されたオ<br />

ブジ ェ ク ト を 再 度 ビル ド で き ます。 そ う す と 、 通 常 の 未 使 用 セ ク シ ョ ンの 削 除 中 に、<br />

リンカはこれらのセクションを 削 除 することができます。<br />

フィードバックファイルの 形 式 は 以 下 のとおりです。<br />

;## <strong>ARM</strong> Linker, RVCTN.n [Build num]:Last Updated:day mmm dd hh:mm:ss yyyy<br />

;VERSION 0.2<br />

;FILE filename.o unused_function


リ ン カの 最 適 化 の 使 用<br />

参 照<br />

『リンカリファレンス』:<br />

• --feedback=file (2-66 ページ)<br />

• --feedback_image=option (2-67 ページ)<br />

• --feedback_type=type (2-68 ページ)<br />

• --inline、 --no_inline (2-85 ページ)<br />

• --scatter=file (2-144 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• --feedback=filename (3-100 ページ) .<br />

『<strong>ARM</strong> ® プ ロ セ ッ サを ターゲ ッ ト と し た ソ フ ト ウ ェ ア 開 発 』 :<br />

• 第 5 章 <strong>ARM</strong> と Thumb のインターワーク .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-10<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.6 リ ン カ フ ィ ー ド バ ッ クの 使 用 例<br />

リンカフィードバックの 動 作 を 確 認 するには<br />

1. こ の 例 に 示 すコー ド を 含 む fb.c という 名 前 のファイルを 作 成 します。<br />

例 5-1 フ ィードバックの 例<br />

#include <br />

void legacy()<br />

{<br />

printf("This is a legacy function that is no longer used.\n");<br />

}<br />

int cubed(int i)<br />

{<br />

return i*i*i;<br />

}<br />

void main()<br />

{<br />

int n = 3;<br />

printf("%d cubed = %d\n",n,cubed(n));<br />

}<br />

2. 以 下 の コ マン ド ラ イ ン を 実 行 し て、 プ ロ グ ラ ム を コ ンパ イ ルし、 フ ィ ー ド バ ッ<br />

ク フ ァ イルが 存 在 し ない こ と を 示 す 警 告 メ ッ セージは 無 視 し ます。<br />

armcc --asm -c --feedback fb.txt fb.c<br />

これによ り、 デフォルトでは cubed() 関 数 が イ ン ラ イ ン 化 さ れます。 ま た、 アセ<br />

ンブラファ イル fb.s とオブジェク トファイル fb.o が 作 成 されます。 アセンブラ<br />

ファイルには、legacy() と cubed() のコードが 残 っていますが、 インライン 化 に<br />

より、main から cubed() を 呼 び 出 すこ と はあ り ません。<br />

cubed() のアウ ト オブラ インコピーは、 static と して 宣 言 されていないため、 保<br />

持 されています。<br />

3. 以 下 の コ マン ド ラ イ ン を 実 行 し て、 オブジ ェ ク ト フ ァ イ ルを リ ン ク し、 リ ン カ<br />

フィードバックファイルを 作 成 します。<br />

armlink --info sizes --list fbout1.txt --feedback fb.txt fb.o -o fb.axf<br />

リ ンカに よ る 診 断 結 果 がフ ァ イル fbout1.txt に 出 力 されます。<br />

リンカフィードバックファイルは、(コンパイラで 使 用 されない) コメントと<br />

し て 未 使 用 の 関 数 を 含 み、 かつ legacy() 関 数 と cubed() 関 数 のエン ト リ を 含 んで<br />

い る ソ ース フ ァ イルを 特 定 し ます。 以 下 に 例 を 示 し ます。<br />

;## <strong>ARM</strong> Linker, RVCT ver [Build num]:Last Updated:Date<br />

;VERSION 0.2<br />

;FILE fb.o<br />

cubed


リ ン カの 最 適 化 の 使 用<br />

armlink --info sizes --list fbout2.txt fb.o -o fb.axf<br />

5. 2 つの 診 断 フ ァ イル fbout1.txt と fbout2.txt を 比 較 し、 イ メージのコンポーネン<br />

ト ( 例 えば、 Code、 RO Data、 RW Data、 ZI Data) のサ イ ズを 確 認 し ます。 Code<br />

コンポーネントが 小 さ くなります。<br />

アセンブラファ イル fb.s には、 legacy() 関 数 と cubed() 関 数 が メ イ ンの .text 領<br />

域 に 存 在 し ません。 こ れら の 関 数 は 関 数 独 自 の ELF セクションにコンパイルさ<br />

れます。 そのため、armlink は 最 終 イ メ ージか ら legacy() 関 数 と cubed() 関 数 を 削<br />

除 でき ます。<br />

注<br />

リ ンカ フ ィ ー ド バ ッ ク を 最 大 限 に 活 用 する には、 完 全 な コ ンパイル と リ ン ク を 2 回<br />

以 上 実 行 する 必 要 があ り ます。 ただ し、 通 常 は、 前 回 のビル ド フ ィ ー ド バ ッ ク を 使<br />

用 して 1 回 コ ンパ イ ル し て リ ン ク すれば 十 分 です。<br />

5.6.1 関 連 項 目<br />

概 念<br />

• リンカフィードバックについて (5-9 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --feedback=file (2-66 ページ)<br />

• --feedback_image=option (2-67 ページ)<br />

• --feedback_type=type (2-68 ページ)<br />

• --info=topic[,topic,...] (2-80 ページ)<br />

• --list=file (2-103 ページ)<br />

• --scatter=file (2-144 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• --asm (3-27 ページ)<br />

• -c (3-36 ページ)<br />

• --feedback=filename (3-100 ページ) .<br />

• --inline、 --no_inline (3-129 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-12<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.7 リンク 時 コード 生 成 について<br />

リンク 時 コード 生 成 (LTCG) を 使 用 する と 、 リ ン ク 段 階 まで コー ド 生 成 を 遅 らせる<br />

こ と で、 ク ロ ス ソース フ ァ イル 最 適 化 を 実 行 で き ます。 こ れに よ り 、 コー ド サ イ ズ<br />

を 大 幅 に 縮 小 でき ます。 LTCG を 有 効 にするには、 -c --ltcg を 使 用 してソースをコン<br />

パ イルし て、 オブジ ェ ク ト を 中 間 形 式 で 作 成 し ます。 コー ド 生 成 を 実 行 する よ う に<br />

リ ンカに 指 示 する には、 --ltcg を 使 用 してこれらのオブジェ ク ト フ ァ イルを リ ンクす<br />

る 必 要 があ り ます。<br />

armcc と armlink のどちらにも、 LTCG を 有 効 にする --ltcg コマンド ラインオプショ ン<br />

が 用 意 されています。<br />

注<br />

LTCG は 廃 止 予 定 の 機 能 です。 代 替 の <strong>ARM</strong> コマンド として、--multifile コンパイラ<br />

オプシ ョ ンを 使 用 し ます。<br />

5.7.1 LTCG 使 用 時 の 注 意 事 項<br />

LTCG を 使 用 する 際 は、 以 下 の 点 に 注 意 し て 下 さ い。<br />

• 入 力 オブジ ェ ク ト が --ltcg を 使 用 し て コ ンパ イル さ れていない 場 合 、 最 終 オブ<br />

ジェク トは、 LTCG を 使 用 しないで 生 成 された 最 終 オブジェ ク ト と 同 じにな り<br />

ます。<br />

• --ltcg を 使 用 してコンパイルされたオブジェ ク ト ファ イルには、 デバッグ 情 報<br />

は 保 持 されません。 ただし、 --ltcg を 使 用 してコンパイルされていないオブ<br />

ジ ェ ク ト フ ァ イ ルには、 デバ ッ グ 情 報 は 保 持 さ れます。<br />

• LTCG では、 リ ン ク 用 に 一 時 的 なオブジ ェ ク ト フ ァ イルを 作 成 し て 使 用 する た<br />

め、 スキャ ッ タフ ァ イルで 特 定 のオブジェ ク ト フ ァ イル 名 を 使 用 できせん。 ス<br />

キ ャ ッ タ フ ァ イルを 使 用 する 場 合 、 ワ イル ド カー ド * を 使 用 してフ ァ イルを 一<br />

致 させる 必 要 があ り ます。 そ う し ない と 、 一 時 フ ァ イル と 一 致 し ません。<br />

• リ ンカに 渡 す 入 力 オブジ ェ ク ト フ ァ イルに 複 数 のエン ト リ ポ イ ン ト があ る 場<br />

合 、 リ ン カに よ っ てすべてのエン ト リ ポ イ ン ト が ク リ ア さ れます。 そため、 以<br />

下 のオプシ ョ ンを 使 用 し て、 リ ンカ コマン ド ラ イ ンでエン ト リ ポ イ ン ト を 1 つ<br />

指 定 する 必 要 があ り ます。<br />

--entry=symbol<br />

エン ト リ ポ イ ン ト を 含 む 入 力 セ ク シ ョ ンは 削 除 さ れません。 例 えば、 --ltcg を<br />

使 用 し ないでオブジ ェ ク ト を ビル ド し た 場 合 は 削 除 さ れません。<br />

注<br />

リンカオプション --entry=object(symbol) は、 LTCG 使 用 時 はサポー ト さ れませ<br />

ん。<br />

5.7.2 例<br />

以 下 の 例 では、 LTCG の 一 般 的 な 使 用 方 法 を 示 し ています。<br />

1. --ltcg を 使 用 して、ELF オブジェ ク ト フ ァ イル one.o および two.o を 作 成 し ます。<br />

armcc -c --ltcg one.c -o one.o<br />

armcc -c --ltcg two.c -o two.o<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-13<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

コ ンパイ ラ に よ って、 オブジ ェ ク ト フ ァ イルへの 中 間 コー ド が 生 成 さ れます。<br />

2. 以 下 の コ マン ド を 使 用 し て、 フ ァ イ ルを リ ン ク し ます。<br />

armlink --ltcg one.o two.o -o ltcg_image.axf<br />

リ ンカによ って、 以 下 の 処 理 が 行 われます。<br />

1. すべての 中 間 コー ド を 結 合 し ます。 それに よ って、 元 のオブジ ェ ク ト フ ァ イル<br />

名 への リ ン ク が 失 われます。<br />

2. 中 間 コー ド に 対 し て コー ド 生 成 を 実 行 し ます。<br />

3. 出 力 イ メ ージ を 作 成 し ます。<br />

5.7.3 リンク 時 コード 生 成 によって 生 成 される 中 間 オブジェクトファイルについて<br />

リンク 時 コード 生 成 (LTCG) によって 生 成 される 中 間 ELF オブジェ ク ト フ ァ イルに<br />

は、 .il という 名 前 のセクションが 含 まれます。 このセクションは、 フラグ<br />

SHF_EXECINSTR および SHF_ALLOC でマーク されます。<br />

上 記 の 例 の 中 間 オブジェ ク ト フ ァ イル one.o では、 fromelf コマンドを 使 用 して、 これ<br />

らのセクシ ョ ンを 表 示 できます。 以 下 に 例 を 示 します。<br />

fromelf --text -v one.o<br />

...<br />

====================================<br />

** Section #1<br />

Name :.il<br />

Type :SHT_PROGBITS (0x00000001)<br />

Flags :SHF_ALLOC + SHF_EXECINSTR (0x00000006)<br />

...<br />

Link :SHN_UNDEF<br />

...<br />

====================================<br />

** Section #3<br />

Name :.rel.il<br />

Type :SHT_REL (0x00000009)<br />

Flags :None (0x00000000)<br />

...<br />

Link :Section 2 (.symtab)<br />

Info :Section 1 (.il)<br />

...<br />

====================================<br />

...<br />

5.7.4 関 連 項 目<br />

参 照<br />

『リンカリファレンス』:<br />

• --entry=location (2-58 ページ)<br />

• --ltcg (2-107 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• -c (3-36 ページ)<br />

• --ltcg (3-152 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-14<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

• --multifile, --no_multifile (3-159 ページ) .<br />

『fromelf イ メ ージ 変 換 ユーテ ィ リ テ ィ の 使 用 』 :<br />

• --text (4-76 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-15<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.8 RW デー タ 圧 縮 を 使 用 し た 最 適 化<br />

通 常 、 RW データ 領 域 には、 ゼ ロ な どの 繰 り 返 し の 値 が 多 数 含 まれる ため、 こ の 領 域<br />

は 圧 縮 に 適 し ています。 ROM サイズを 小 さ くするため、 RW データ 圧 縮 はデフ ォル<br />

ト で 有 効 になっています。<br />

データは、 リ ン カに よ っ て 圧 縮 さ れます。 こ のデータ が、 実 行 時 に ターゲ ッ ト 上 で<br />

伸 張 さ れます。<br />

<strong>ARM</strong> ラ イ ブ ラ リ にはい く つかの 伸 張 アルゴ リ ズムがあ り 、 リ ン カは、 イ メ ージの 実<br />

行 時 にデータ 領 域 を 伸 張 するのに 最 適 なアルゴ リ ズムを 選 択 し て、 イ メ ージに 追 加<br />

します。 リンカによって 選 択 されたアルゴリズムはオーバーライドできます。<br />

5.8.1 関 連 項 目<br />

概 念<br />

• 圧 縮 の 適 用 方 法 (5-20 ページ) .<br />

タスク<br />

• リンカによって 使 用 される 圧 縮 アルゴリズムのオーバーライド (5-18 ページ)<br />

• RW データ 圧 縮 の 使 用 (5-21 ページ) .<br />

概 念<br />

• リ ンカに よ る コ ンプレ ッ サの 選 択 方 法 (5-17 ページ)<br />

• 圧 縮 の 適 用 方 法 (5-20 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-16<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.9 リ ン カによ る コ ン プ レ ッ サの 選 択 方 法<br />

armlink は、 データ セ ク シ ョ ンの 内 容 に 関 する 情 報 を 収 集 し てか ら、 イ メ ージを 最 も<br />

小 さ く する のに 最 適 な 圧 縮 アルゴ リ ズム を 選 択 し ます。 圧 縮 が 適 し てい る 場 合 、 リ<br />

ンカは、 イ メ ージ 内 の 圧 縮 可 能 なすべてのデータ セ ク シ ョ ンに 対 し て 1 つのデータ<br />

コンプレッサしか 使 用 できません。 そのため、 全 のサイズが 最 適 になるよ うに、 こ<br />

れら のセ ク シ ョ ンに 対 し て さ ま ざ ま な 圧 縮 アルゴ リ ズム を 試 す 場 合 があ り ます。 以<br />

下 の 場 合 は、 圧 縮 が 自 動 的 適 用 さ れます。<br />

圧 縮 さ れ た デ ー タ サ イ ズ + デコンプレッサのサイズ < 未 圧 縮 のデータサイズ<br />

コンプレッサが 選 択 されると、armlink によってイ メージのコード 領 域 にデコンプ<br />

レ ッ サが 追 加 さ れます。 最 終 イ メ ージに 圧 縮 さ れたデータ が 含 まれていない 場 合 、<br />

デコンプレッサは 追 加 されません。<br />

5.9.1 関 連 項 目<br />

概 念<br />

• RW データ 圧 縮 を 使 用 した 最 適 化 (5-16 ページ)<br />

• 圧 縮 の 適 用 方 法 (5-20 ページ) .<br />

タスク<br />

• リンカによって 使 用 される 圧 縮 アルゴリズムのオーバーライド (5-18 ページ)<br />

• RW データ 圧 縮 の 使 用 (5-21 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-17<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.10 リンカによって 使 用 される 圧 縮 アルゴリズムのオーバーライド<br />

リ ン カに よ っ て 使 用 さ れる 圧 縮 アルゴ リ ズムは、 以 下 のいずれかでオーバーラ イ ド<br />

できます。<br />

• --datacompressor off オプシ ョ ン を 使 用 し て 圧 縮 を 無 効 に し ます。<br />

• 圧 縮 アルゴ リ ズム を 指 定 し ます。<br />

圧 縮 アルゴ リ ズム を 指 定 する には、 リ ン カ コ マン ド ラ イ ンで 必 要 な コ ンプレ ッ サの<br />

数 を 指 定 し ます。 以 下 に 例 を 示 し ます。<br />

armlink --datacompressor 2 ...<br />

リ ンカで 使 用 で き る 圧 縮 アルゴ リ ズムの 一 覧 を 取 得 する には、 コ マン ド ラ イ ンオプ<br />

ション --datacompressor list を 使 用 します。<br />

armlink --datacompressor list<br />

...<br />

Num Compression algorithm<br />

========================================================<br />

0 Run-length encoding<br />

1 Run-length encoding, with LZ77 on small-repeats<br />

2 Complex LZ77 compression<br />

圧 縮 アルゴ リ ズムを 選 択 する と きは、 以 下 の 点 に 注 意 し て 下 さい。<br />

• コンプレッサ 0 は、 値 がゼロの 領 域 が 大 き く 、 値 がゼロ 以 外 のバイ ト が 少 ない<br />

データ に 対 し て う ま く 機 能 し ます。<br />

• コンプレッサ 1 は、 ゼロ 以 外 の 値 が 繰 り 返 されるデータに 対 し て う ま く 機 能 し<br />

ます。<br />

• コンプレッサ 2 は、 同 じ 値 が 繰 り 返 さ れるバ イ ト を 含 むデータ に 対 し て う ま く<br />

機 能 し ます。<br />

リ ンカでは、 データ の 大 部 分 でゼ ロ が 繰 り 返 さ れる 場 合 (75% を 超 え る 場 合 ) は、<br />

コンプレッサ 0 または 1 が 選 択 されます。 ゼロが 繰 り 返 されるバイ ト がほ と んどデー<br />

タに 含 まれない 場 合 (10% 未 満 の 場 合 ) は、 コ ンプレ ッ サ 2 が 選 択 されます。 イ<br />

メージが <strong>ARM</strong> コードのみで 構 成 されている 場 合 、 <strong>ARM</strong> デコ ンプレ ッ サが 自 動 的 に<br />

使 用 さ れます。 イ メ ージに Thumb コードが 含 まれる 場 合 は、 Thumb デコンプレッサ<br />

が 使 用 さ れます。 選 択 すべき コ ンプレ ッ サが 明 確 でない 場 合 は、 すべての コ ンプ<br />

レッサをテス ト して、 全 体 のサイズが 最 適 になるものが 選 択 されます。<br />

注<br />

独 自 の コ ンプレ ッ サを リ ン カに 追 加 する こ と はで き ません。 使 用 可 能 なアルゴ リ ズ<br />

ム、 および リ ンカに よ る アルゴ リ ズムの 選 択 方 法 は、 今 後 変 更 れる 可 能 性 があ り ま<br />

す。<br />

5.10.1 関 連 項 目<br />

概 念<br />

• RW データ 圧 縮 を 使 用 した 最 適 化 (5-16 ページ)<br />

• リ ンカに よ る コ ンプレ ッ サの 選 択 方 法 (5-17 ページ)<br />

• 圧 縮 の 適 用 方 法 (5-20 ページ) .<br />

タスク<br />

• RW データ 圧 縮 の 使 用 (5-21 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-18<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

参 照<br />

『リンカリファレンス』:<br />

• --datacompressor=opt (2-40 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-19<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.11 圧 縮 の 適 用 方 法<br />

連 長 圧 縮 に よ り 、 データは 同 じ 値 が 繰 り 返 さ れないバイ ト およびゼ ロ が 繰 り 返 さ れ<br />

るバイ ト 数 の 組 み 合 わせ と し てエン コード されます。 同 じ 値 が り 返 されないバイ ト<br />

はそのまま 出 力 され、 その 後 、 ゼロが 繰 り 返 されるバイ ト 数 が 続 きます。 Limpel-Ziv<br />

1977 (LZ77) 圧 縮 では、 読 み 込 まれたデータ 最 後 か ら n バイ トが 追 跡 されます。 既<br />

に 読 み 込 まれたデータ に 存 在 する フ レーズが 検 出 さ れる と 、 既 に 読 み 込 まれたバ ッ<br />

フ ァデータ 内 のフ レーの 位 置 と そのフ レーズの 長 さ と に 相 当 する 値 のペアが 出 力 さ<br />

れます。<br />

5.11.1 関 連 項 目<br />

概 念<br />

• RW データ 圧 縮 を 使 用 した 最 適 化 (5-16 ページ)<br />

• リ ンカに よ る コ ンプレ ッ サの 選 択 方 法 (5-17 ページ) .<br />

タスク<br />

• リンカによって 使 用 される 圧 縮 アルゴリズムのオーバーライド (5-18 ページ)<br />

• RW データ 圧 縮 の 使 用 (5-21 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --datacompressor=opt (2-40 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-20<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.12 RW デー タ 圧 縮 の 使 用<br />

RW データ 圧 縮 を 使 用 する と きは、 以 下 の 点 に 注 意 し て 下 さ い。<br />

• リンカオプション --map を 使 用 する と 、 コー ド 内 の 領 域 で 圧 縮 が 適 用 さ れてい<br />

る 場 所 を 表 示 できます。<br />

• RealView Compilation Tools (RVCT) v4.0 以 降 の リ ンカでは、 圧 縮 領 域 か ら、<br />

ロー ド 領 域 を 使 用 する リ ン カ 定 義 シンボルへの 参 照 が 存 在 する 場 合 、 RW 圧 縮<br />

は 無 効 にな り ます。<br />

• オンチップキャ ッシュを 搭 載 した <strong>ARM</strong> プロセッサを 使 用 している 場 合 は、<br />

コー ド コ ヒ ーレ ンシの 問 題 を 回 避 する ために、 伸 張 後 にキ ャ ッ シ ュ を 有 効 に し<br />

ます。<br />

<strong>ARM</strong> ライブラリのコードを 使 用 して、__main を 実 行 する と 、 圧 縮 さ れたデータ セ ク<br />

シ ョ ンは 実 行 時 に 自 動 的 に 伸 張 さ れます。 こ の コー ド はルー ト 領 域 に 配 置 する 必 要<br />

があ り ます。 これにはスキャ ッ タファ イル 内 で InRoot$$Sections を 使 用 する のが 最 適<br />

です。<br />

ス キ ャ ッ タ フ ァ イルを 使 用 する 場 合 は、 NOCOMPRESS 属 性 を 追 加 し て、 ロー ド 領 域 およ<br />

び 実 行 領 域 を 圧 縮 し ない よ う に 指 定 で き ます。<br />

5.12.1 関 連 項 目<br />

概 念<br />

• RW データ 圧 縮 を 使 用 した 最 適 化 (5-16 ページ)<br />

• リ ンカに よ る コ ンプレ ッ サの 選 択 方 法 (5-17 ページ)<br />

• 圧 縮 の 適 用 方 法 (5-20 ページ)<br />

• Load$$ 実 行 領 域 シンボル (7-7 ページ)<br />

• 第 8 章 スキャッタファイルの 使 用 .<br />

『<strong>ARM</strong> ® プ ロ セ ッ サを ターゲ ッ ト と し た ソ フ ト ウ ェ ア 開 発 』 :<br />

• 第 3 章 組 み 込 みソ フ ト ウ ェ アの 開 発 .<br />

タスク<br />

• リンカによって 使 用 される 圧 縮 アルゴリズムのオーバーライド (5-18 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --map、 --no_map (2-109 ページ)<br />

• 第 4 章 スキャッタファイルの 正 式 な 構 文 .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-21<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.13 リ ン カによ る 関 数 のイ ン ラ イ ン 化<br />

リ ンカは 関 数 への 分 岐 命 令 を 使 用 する 代 わ り に、 小 さ な 関 数 を イ ン ラ イ ン 化 で き ま<br />

す。 リ ン カが こ れを 行 う には、 関 数 ( 復 帰 命 令 は 含 ま ない) が 岐 命 令 の 4 バイ ト 以<br />

内 に 収 ま る 必 要 があ り ます。<br />

分 岐 の イ ン ラ イ ン 化 を 制 御 するには、 --inline コマンド ラインオプショ ンと<br />

--no_inline コマンド ラインオプショ ンを 使 用 します。<br />

分 岐 の イ ン ラ イ ン 化 の 最 適 化 を 有 効 にする と 、 リ ンカは イ メ ージ 内 の 各 関 数 呼 び 出<br />

しをスキャンして、 必 要 に 応 じてインライン 化 します。 リンカ、 インライン 化 に 適<br />

し た 関 数 を 検 出 する と 、 その 関 数 呼 び 出 し を 呼 び 出 し 先 関 数 の 命 令 に 置 き 換 え ます。<br />

リ ンカは、 未 使 用 セ ク シ ョ ンが 削 除 さ れる 前 に 分 岐 の イ ン ラ イ ン 化 の 最 適 化 を 適 用<br />

する ので、 呼 び 出 さ れな く なった イ ン ラ イ ン 化 セ ク シ ョ ン も 削 で き ます。<br />

注<br />

リンカは 32 ビッ ト Thumb BL 命 令 の 代 わ り に、2 つの 16 ビッ ト 命 令 をインライン 化 で<br />

きます。<br />

インラ イン 化 関 数 をすべて リ ス ト 表 示 するには、 --info=inline コマンド ラインオプ<br />

シ ョ ン を 使 用 し ます。<br />

5.13.1 関 連 項 目<br />

参 照<br />

• 関 数 の イ ン ラ イ ン 化 に 影 響 を 与 え る 要 因 (5-23 ページ)<br />

• 未 使 用 セ ク シ ョ ンの 削 除 (5-6 ページ) .<br />

『リンカリファレンス』:<br />

• --info=topic[,topic,...] (2-80 ページ)<br />

• --inline、 --no_inline (2-85 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-22<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.14 関 数 のインライン 化 に 影 響 を 与 える 要 因<br />

関 数 が イ ン ラ イ ン 化 さ れる 方 法 に 影 響 を 与 え る 要 因 は 以 下 の と お り です。<br />

• リ ン カは、 最 も 単 純 な 命 令 だけを 処 理 し、 PC への 読 み 出 し または 書 き 込 みを 行<br />

う 命 令 をインライン 化 しません。 これは、 PC への 読 み 出 しや 書 き 込 が 関 数 の 位<br />

置 に 依 存 し ている ためです。<br />

• イメージに <strong>ARM</strong> コード と Thumb コードの 両 方 が 含 まれている 場 合 、 も う 一 方<br />

の 状 態 から 呼 び 出 される 関 数 はインターワーク 用 にビルド される 必 要 があ り ま<br />

す。 リ ン カは 16 ビッ ト Thumb 命 令 を 2 つまで 含 む 関 数 を イ ン ラ イ ン 化 で き ま<br />

すが、<strong>ARM</strong> の 呼 び 出 し 元 関 数 では、1 つの 16 ビッ ト Thumb 命 令 ま た 32 ビッ ト<br />

Thumb 命 令 を 含 む 関 数 し か イ ン ラ イ ン 化 で き ません。<br />

• リ ンカの 動 作 は、 呼 び 出 し 先 関 数 のサイ ズによ って 異 な り ます。 以 下 の 表 に、<br />

呼 び 出 し 元 関 数 と 呼 び 出 し 先 関 数 の 両 方 の 状 態 を 示 し ます。<br />

表 5-1 小 さ な 関 数 のイ ン ラ イ ン 化<br />

呼 び 出 し 元 関 数<br />

の 状 態<br />

呼 び 出 し 先 関 数 の<br />

状 態<br />

呼 び 出 し 先 関 数 のサ<br />

イズ<br />

<strong>ARM</strong> <strong>ARM</strong> 4 ~ 8 バイ ト<br />

<strong>ARM</strong> Thumb 2 ~ 6 バイ ト<br />

Thumb Thumb 2 ~ 6 バイ ト<br />

等 価 の 命 令 が 存 在 する 場 合 は、 異 な る 状 態 で も イ ン ラ イ ン 化 で き ます。 例 え<br />

ば、 adds r0, r0 という Thumb 命 令 の 場 合 、 等 価 の <strong>ARM</strong> 命 令 を イ ン ラ イ ン 化 で<br />

きます。<strong>ARM</strong> 命 令 と 等 価 な Thumb 命 令 はほ と んど ないため、 <strong>ARM</strong> から Thumb<br />

にインライン 化 るこ とはできません。<br />

• 関 数 を イ ン ラ イ ン 化 するには、 関 数 の 最 後 の 命 令 が 以 下 のいずれかであ る 必 要<br />

があ り ます。<br />

MOV pc, lr<br />

または<br />

BX lr<br />

復 帰 のシーケ ン スだけで 構 成 さ れる 関 数 は、 NOP としてインライン 化 できます。<br />

• 条 件 付 き <strong>ARM</strong> 命 令 は、 以 下 の 場 合 にのみイ ン ラ イ ン 化 で き ます。<br />

— BL の 条 件 が、 イ ン ラ イ ン 化 する 命 令 の 条 件 と 一 致 する 場 合 。 例 えば、 BLEQ<br />

でインライン 化 できるのは、ADDEQ の よ う な 条 件 が 一 致 する 命 令 だけです。<br />

— BL 命 令 ま たは イ ン ラ イ ン 化 する 命 令 が 無 条 件 の 場 合 。 無 条 件 の <strong>ARM</strong> BL で<br />

は、 他 のすべての 条 件 を 満 たす 任 意 の 条 件 付 き 命 令 ま たは 無 条 件 命 令 を イ<br />

ンライン 化 できます。BL 命 令 が 条 件 付 きの 場 合 、 条 件 付 き では 実 行 で き な<br />

い 命 令 はイ ン ラ イ ン 化 でき ません。<br />

• 32 ビット Thumb If-Then (IT) ブロッ クの 最 後 の 命 令 である BL では、 16 ビッ ト<br />

Thumb 命 令 、 あ る いは 32 ビッ ト MRS、 MSR、 または CPS 命 令 を イ ン ラ イ ン 化 で き<br />

ません。 これは、 IT ブ ロ ッ ク に よ り その 有 効 範 囲 内 の 命 令 の 動 作 が 変 更 さ れる<br />

ため、 命 令 をインラ イン 化 する と、 プログラムの 動 作 が 変 更 されるからです。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-23<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.14.1 関 連 項 目<br />

概 念<br />

• NOP に 最 適 化 される 分 岐 の 処 理 (5-25 ページ) .<br />

『アセンブラの 使 用 』 :<br />

• 条 件 付 き 命 令 (6-2 ページ) .<br />

参 照<br />

『アセンブラ リ フ ァ レンス』 :<br />

• ADD、 SUB、 RSB、 ADC、 SBC、 RSC (3-55 ページ)<br />

• B、 BL、 BX、 BLX、 BXJ (3-124 ページ)<br />

• CPS (3-151 ページ)<br />

• MOV、 MVN (3-67 ページ)<br />

• MRS (3-146 ページ)<br />

• MSR (3-148 ページ)<br />

• IT (3-128 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-24<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.15 NOP に 最 適 化 される 分 岐 の 処 理<br />

デフ ォル ト では、 リ ンカは 次 の 命 令 に 解 決 する 再 配 置 のあ る 分 岐 を NOP 命 令 に 置 き 換<br />

え ます。 リ ン カが 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けを 行 う 場 合 は、 こ の 最 適 化<br />

も 適 用 できます。<br />

ただ し、 検 証 やパ イ プ ラ イ ンのフ ラ ッ シ ュ を 実 行 する 場 合 な ど、 こ のオプシ ョ ン を<br />

無 効 にする こ と が 必 要 にな る 場 合 も あ り ます。<br />

こ の 最 適 化 を 制 御 する には、 --branchnop コマンドラインオプショ ンと --no_branchnop<br />

コマンド ラインオプショ ンを 使 用 します。<br />

5.15.1 関 連 項 目<br />

概 念<br />

• 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けについて (5-26 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --branchnop、 --no_branchnop (2-25 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-25<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.16 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けについて<br />

Tail の 呼 び 出 しセクションとは、 セクションの 終 わりに 分 岐 命 令 を 含 むセクションで<br />

す。 分 岐 命 令 に 別 のセ ク シ ョ ンの 先 頭 にあ る 関 数 を ターゲ ッ と する 再 配 置 が 含 まれ<br />

てい る 場 合 、 リ ンカは 呼 び 出 し 先 セ ク シ ョ ンの 直 前 に 末 尾 呼 び 出 し セ ク シ ョ ン を 配<br />

置 で き ます。 そ う する と 、 末 尾 呼 び 出 し セ ク シ ョ ンの 終 わ り にあ る 分 岐 命 令 を NOP 命<br />

令 に 最 適 化 で き ます。<br />

コマンド ラインオプショ ン --tailreorder を 使 用 し て 末 尾 呼 び 出 し セ ク シ ョ ン を ター<br />

ゲ ッ ト の 直 前 に 移 動 する と 、 こ の 動 作 を 利 用 で き ます。<br />

リ ンカに よ って 実 行 さ れる 末 尾 呼 び 出 し の 最 適 化 に 関 する 情 報 を 表 示 する には、<br />

--info=tailreorder コマンド ラインオプショ ンを 使 用 します。<br />

5.16.1 関 連 項 目<br />

概 念<br />

• ベニアのタ イプ (4-29 ページ)<br />

• NOP に 最 適 化 される 分 岐 の 処 理 (5-25 ページ)<br />

• 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けに 関 する 制 限 (5-27 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --info=topic[,topic,...] (2-80 ページ)<br />

• --tailreorder、 --no_tailreorder (2-173 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-26<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.17 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けに 関 する 制 限<br />

リ ンカによ って、 以 下 の 処 理 が 行 われます。<br />

• 移 動 で き る のは、 末 尾 呼 び 出 し ターゲ ッ ト 1 つにつき 1 つの 末 尾 呼 び 出 し セ ク<br />

ションのみです。1 つのセ ク シ ョ ンに 対 し て 複 数 の Tail 呼 び 出 し があ る 場 合 、<br />

同 じセクシ ョ ン 名 の 付 いた Tail の 呼 び 出 しセ ク シ ョ ンがターゲ ッ ト の 前 に 移 動<br />

さ れます。 末 尾 呼 び 出 し セ ク シ ョ ンで 名 前 が 一 致 する セ ク シ ョ ン 名 が 見 つか ら<br />

ない 場 合 、 リ ンカは、 最 初 に 検 出 し たセ ク シ ョ ン を 移 動 し ます。<br />

• 末 尾 呼 び 出 し セ ク シ ョ ン をその 実 行 領 域 外 に 移 動 で き ません。<br />

• 末 尾 呼 び 出 し セ ク シ ョ ン を イ ン ラ イ ンベニアの 前 には 移 動 し ません。<br />

5.17.1 関 連 項 目<br />

概 念<br />

• 末 尾 呼 び 出 し セ ク シ ョ ンの 再 順 序 付 けについて (5-26 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-27<br />

ID 111311<br />

Non-Confidential


リ ン カの 最 適 化 の 使 用<br />

5.18 コメントセクションのマージについて<br />

入 力 オブジ ェ ク ト フ ァ イ ルに 同 一 の .comment セ ク シ ョ ンが 含 まれてい る 場 合 、 リ ンカ<br />

は 有 益 な 情 報 をすべて 保 持 したまま、 それらのセクシ ョ ンをマージして、 最 も 小 さ<br />

い .common セ ク シ ョ ン を 生 成 し ます。<br />

リンカは 各 .comment 入 力 セ ク シ ョ ン を 対 応 する 入 力 オブジ ェ ク ト のフ ァ イル 名 と 関 連<br />

付 けます。 同 一 の .comment セ ク シ ョ ン をマージ し た 場 合 、 セ ク シ ョ ンの 内 容 の 前 に、<br />

共 通 のセ ク シ ョ ン を 含 むすべてのフ ァ イル 名 が リ ス ト さ れます。 以 下 に 例 を 示 し ま<br />

す。<br />

file1.o<br />

file2.o<br />

.comment セクショ ンの 内 容<br />

デフォル ト では、 リ ンカはこ う したセクシ ョ ンをマージします。 同 一 の .comment セク<br />

ションがマージされないようにするには、--no_filtercomment コマンド ラインオプショ<br />

ンを 使 用 します。<br />

注<br />

.comment セクシ ョ ン 内 の 情 報 を 保 持 する 必 要 がない 場 合 は、 --no_comment_section オプ<br />

ションを 使 用 して、 イメージにこのセクションが 含 まれないようにできます。<br />

5.18.1 関 連 項 目<br />

参 照<br />

『リンカリファレンス』:<br />

• --comment_section、 --no_comment_section (2-34 ページ)<br />

• --filtercomment、 --no_filtercomment (2-69 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 5-28<br />

ID 111311<br />

Non-Confidential


第 6 章<br />

イ メ ージに 関 する 情 報 の 取 得<br />

以 下 の 各 ト ピ ッ ク では、 armlink か ら イ メ ージ 情 報 を 取 得 する 方 法 について 説 明 し ます。<br />

タスク<br />

• 一 部 の リ ン ク エ ラーの 原 因 の 特 定 (6-3 ページ)<br />

• リ ンク 時 のシンボルの 場 所 を 調 べる 方 法 (6-6 ページ) .<br />

概 念<br />

• イ メ ージに 関 する 情 報 を 取 得 する ための リ ンカオプシ ョ ン (6-2 ページ)<br />

• --info リ ン カオプシ ョ ンの 使 用 例 (6-4 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 6-1<br />

ID 111311<br />

Non-Confidential


イ メ ージに 関 する 情 報 の 取 得<br />

6.1 イメージに 関 する 情 報 を 取 得 するためのリンカオプション<br />

以 下 のオプシ ョ ン を 使 用 し て、 リ ン カで イ メ ージがどの よ う に 生 成 さ れたのかに 関<br />

する 情 報 を 取 得 で き ます。<br />

--info=topic[,topic,...]<br />

さ ま ざ ま な ト ピ ッ ク に 関 する 情 報 が 表 示 さ れます。<br />

--map<br />

イメージのメモリマップを 表 示 します。 このマップには、 イメージの 各<br />

ロー ド 領 域 、 実 行 領 域 、 および 入 力 セ ク シ ョ ン ( リ ン カに よ って 生 成 さ<br />

れ 入 力 セ ク シ ョ ン を 含 む) のア ド レ ス と サ イ ズが 含 まれます。 ま た、<br />

RW データ 圧 縮 の 適 用 方 法 も 表 示 さ れます。<br />

--section_index_display<br />

--map と 組 み 合 わせて 使 用 して、 インデクス 列 の 表 示 を 変 更 します。<br />

--show_cmdline<br />

リンカによって 使 用 されたコマンドラインを 出 力 します。<br />

--symbols<br />

--verbose<br />

--xref<br />

--xrefdbg<br />

リ ンク 手 順 で 使 用 される 各 ローカルシンボルとグローバルシンボル、 お<br />

よびその 値 を 一 覧 表 示 し ます。<br />

含 まれるオブジェ ク トやそれらを 含 むラ イブラ リ など、 リ ンク 操 作 につ<br />

いての 詳 細 情 報 を 表 示 し ます。<br />

入 力 セ ク シ ョ ン 間 のすべての 相 互 参 照 を 一 覧 表 示 し ます。<br />

入 力 デバ ッ グセ ク シ ョ ン 間 のすべての 相 互 参 照 を 一 覧 表 示 し ます。<br />

--list=file オプシ ョ ン を 使 用 する と 、 情 報 を フ ァ イ ルに 書 き 出 す こ と がで き ます。<br />

6.1.1 関 連 項 目<br />

概 念<br />

• リ ンカに よ る セ ク シ ョ ンの 境 界 調 整 (4-23 ページ)<br />

• RW データ 圧 縮 を 使 用 した 最 適 化 (5-16 ページ) .<br />

• 一 部 の リ ン ク エ ラーの 原 因 の 特 定 (6-3 ページ)<br />

• --info リンカオプションの 使 用 例 (6-4 ページ)<br />

参 照<br />

『リンカリファレンス』:<br />

• --info=topic[,topic,...] (2-80 ページ)<br />

• --list=file (2-103 ページ)<br />

• --map、 --no_map (2-109 ページ)<br />

• --section_index_display=type (2-147 ページ)<br />

• --show_cmdline (2-149 ページ)<br />

• --symbols、 --no_symbols (2-167 ページ)<br />

• --verbose (2-187 ページ)<br />

• --xref、 --no_xref (2-194 ページ)<br />

• --xrefdbg、 --no_xrefdbg (2-195 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 6-2<br />

ID 111311<br />

Non-Confidential


イ メ ージに 関 する 情 報 の 取 得<br />

6.2 一 部 のリ ン ク エ ラーの 原 因 の 特 定<br />

--info inputs を 使 用 する と 、 い く つかの リ ン ク エ ラーの 原 因 を 特 定 で き ます。 例 え<br />

ば、 出 力 を 検 索 する と 、 ラ イ ブ ラ リ オブジ ェ ク ト か ら 未 定 義 の 参 照 を 探 し た り 、 ラ<br />

イ ブ ラ リ 関 数 を 再 びターゲ ッ ト にする こ と で 定 義 さ れる シンボルやその 他 のシンボ<br />

ルを 増 加 させた り する こ と がで き ます。 リ ン ク エ ラーをつけて 解 決 するには、 こ の<br />

出 力 の 最 後 か ら 逆 方 向 に 検 索 し ます。<br />

--verbose オプシ ョ ン を 使 用 する と 、 同 様 の 内 容 に 加 えて、 リ ンカ 処 理 についての 追<br />

加 情 報 を 出 力 する こ と も で き ます。<br />

6.2.1 関 連 項 目<br />

概 念<br />

• イメージに 関 する 情 報 を 取 得 するためのリンカオプション (6-2 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --info=topic[,topic,...] (2-80 ページ)<br />

• --verbose (2-187 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 6-3<br />

ID 111311<br />

Non-Confidential


イ メ ージに 関 する 情 報 の 取 得<br />

6.3 --info リ ン カオプシ ョ ンの 使 用 例<br />

リ ン ク 時 の コ ンポーネン ト サ イ ズを 表 示 するには、 以 下 のコ マン ド を 入 力 し ます。<br />

armlink --info sizes ...<br />

ここでは、sizes によって、 イ メージ 内 の 入 力 オブジェク トおよびライブラ リのメン<br />

バご と にコー ド と データ のサ イ ズが 一 覧 表 示 さ れます。 こ のオプシ ョ ン を 使 用 する<br />

と、--info sizes,totals を 指 定 したこ とにな り ます。<br />

以 下 の 例 では、 出 力 が 表 形 式 で 示 さ れ、 合 計 は 読 みやす く する ために 区 別 さ れてい<br />

ます。<br />

例 6-1 イメージコンポーネントのサイズ 情 報<br />

Code (inc. data) RO Data RW Data ZI Data Debug<br />

3712 1580 19 44 10200 7436 Object Totals<br />

0 0 16 0 0 0 (incl. Generated)<br />

0 0 3 0 0 0 (incl. Padding)<br />

21376 648 805 4 300 10216 Library Totals<br />

0 0 6 0 0 0 (incl. Padding)<br />

===============================================================================<br />

Code (inc. data) RO Data RW Data ZI Data Debug<br />

25088 2228 824 48 10500 17652 Grand Totals<br />

25088 2228 824 48 10500 17652 ELF Image Totals<br />

25088 2228 824 48 0 0 ROM Totals<br />

===============================================================================<br />

Total RO Size (Code + RO Data)<br />

Total RW Size (RW Data + ZI Data)<br />

Total ROM Size (Code + RO Data + RW Data)<br />

25912 ( 25.30kB)<br />

10548 ( 10.30kB)<br />

25960 ( 25.35kB)<br />

こ の 例 では、 以 下 の よ う にな り ます。<br />

Code (inc. Data)<br />

コードで 使 用 されるバイ ト 数 を 示 します。 このイ メージには、 3712 バ<br />

イ ト の コー ド があ り ます。 こ れには、 リ テ ラ ルプールや 短 い 文 字 列 な<br />

ど、 1580 バイ トのインラインデータ (inc. data) が 含 まれています。<br />

RO Data<br />

RW Data<br />

ZI Data<br />

Debug<br />

読 み 出 し 専 用 データ で 使 用 さ れるバ イ ト 数 を 示 し ます。 こ れは、 Code<br />

(inc. data) 列 内 の イ ン ラ イ ンデータ と は 別 です。<br />

読 み 出 し - 書 き 込 みデータ で 使 用 さ れるバイ ト 数 を 示 し ます。<br />

ゼ ロ で 初 期 化 さ れたデータ で 使 用 さ れるバ イ ト 数 を 示 し ます。<br />

デバッ グ 入 力 セク シ ョ ン、 シンボルテーブル、 ス ト リ ングテーブルな<br />

ど、 デバ ッ グデータ で 使 用 さ れるバ イ ト 数 を 示 し ます。<br />

Object Totals<br />

イメージを 生 成 するためにリンクされているオブジェクトで 使 用 される<br />

バイ ト 数 を 示 し ます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 6-4<br />

ID 111311<br />

Non-Confidential


イ メ ージに 関 する 情 報 の 取 得<br />

(incl. Generated)<br />

armlink は、 イ ン ターワーキングベニアな どの イ メ ージの 内 容 や 領 域<br />

テーブルなどの 入 力 セク シ ョ ンを 生 成 する 場 合 があ り ます。 Object<br />

Totals 行 に こ の タ イ プのデータ が 含 まれてい る 場 合 、 こ の 行 にそのデー<br />

タ が 表 示 さ れます。<br />

この 例 では、 RO データ の 合 計 は 19 バイ トで、 そのうち 16 バイ トがリ<br />

ンカで 生 成 された RO データ です。<br />

Library Totals<br />

個 別 のオブジ ェ ク ト と し て 抽 出 さ れ、 イ メ ージに 追 加 さ れた ラ イ ブ ラ リ<br />

のメ ンバで 使 用 されるバイ ト 数 を 示 します。<br />

(incl. Padding)<br />

armlink は、 必 要 に 応 じ てパデ ィ ングを 挿 入 し、 セ ク シ ョ ンの 境 界 調 整<br />

を 強 制 実 行 し ます。 Object Totals 行 に こ の タ イ プのデータ が 含 まれてい<br />

る 場 合 、 関 連 する (incl. Padding) 行 にそのデータ が 表 示 さ れます。 同 様<br />

に、 Library Totals 行 に こ の タ イ プのデータ が 含 まれてい る 場 合 、 その<br />

データは 関 連 する 行 に 示 さ れます。<br />

この 例 では、RO データ のオブジ ェ ク ト の 合 計 は 19 バイ トで、 そのうち<br />

3 バ イ ト が リ ン カで 生 成 さ れたパデ ィ ン グにな り ます。 ま た、 RO デー<br />

タのライブラ リの 合 計 は 805 バイ トで、 そのうち 6 バイ トがパディング<br />

にな り ます。<br />

Grand Totals<br />

イメージの 実 際 のサイズを 示 します。 この 例 では、10200 バイ トの ZI<br />

データ (Object Totals) と 300 バイ トの ZI データ (Library Totals) があ<br />

るため、 合 計 は 10500 バイ トになり ます。<br />

ELF Image Totals<br />

RW データ 圧 縮 (デフ ォル ト ) を 使 用 し て ROM サ イ ズを 最 適 化 する 場<br />

合 、 最 終 イ メ ージのサ イ ズが 変 更 さ れ、 こ のサ イ ズ 変 更 は --info による<br />

出 力 に 反 映 さ れます。 Grand Totals と ELF Image Totals のバイ ト 数 を 比 較<br />

する と 、 圧 縮 の 効 果 を 確 認 で き ます。<br />

この 例 では、 RW データ 圧 縮 が 有 効 になっていません。 データ が 圧 縮 さ<br />

れる と、 RW 値 が 変 更 されます。<br />

ROM Totals<br />

イメージを 含 むために 必 要 な ROM の 最 小 サイ ズを 示 し ます。 ROM に 保<br />

存 されない ZI データやデバ ッ グ 情 報 は 含 まれません。<br />

6.3.1 関 連 項 目<br />

概 念<br />

• イメージに 関 する 情 報 を 取 得 するためのリンカオプション (6-2 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --info=topic[,topic,...] (2-80 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 6-5<br />

ID 111311<br />

Non-Confidential


イ メ ージに 関 する 情 報 の 取 得<br />

6.4 リ ン ク 時 のシンボルの 場 所 を 調 べる 方 法<br />

リンク 時 の ELF イ メージフ ァ イル 内 のシンボルの 場 所 を 調 べるには、<br />

--keep=section_id オプシ ョ ン と --map オプシ ョ ン を 使 用 し て、 イ メ ージの メ モ リ マ ッ<br />

プを 表 示 し ます。 例 えば、 object(section) がシンボルを 含 むセ ク シ ョ ンの 場 合 は、 以<br />

下 のコマン ド を 入 力 し ます。<br />

armlink --keep=object(section) --map s.o --output=s.axf<br />

メ モ リ マ ッ プには、 シンボルを 含 むセ ク シ ョ ンの 場 所 が 表 示 さ れます。<br />

6.4.1 例<br />

以 下 の 手 順 に 従 います。<br />

1. 以 下 の ソ ース コー ド を 含 む s.c という 名 前 のファイルを 作 成 します。<br />

long long altstack[10] __attribute__ ((section ("STACK"), zero_init));<br />

int main()<br />

{<br />

return sizeof(altstack);<br />

}<br />

2. ソースをコンパイルします。<br />

armcc -c s.c -o s.o<br />

3. オブジェ ク ト s.o を リンクして、STACK シンボルを 保 持 し、 イ メージのメモリ<br />

マ ッ プを 表 示 し ます。<br />

armlink --keep=s.o(STACK) --map s.o --output=s.axf<br />

4. 出 力 か ら STACK シンボルを 検 索 します。 以 下 に 例 を 示 し ます。<br />

...<br />

Execution Region ER_RW (Base:0x000081c8, Size:0x00000000, Max:0xffffffff, ABSOLUTE)<br />

**** こ の 実 行 領 域 に 割 り 当 て ら れ た セ ク シ ョ ン は あ り ま せ ん ****<br />

Execution Region ER_ZI (Base:0x000081c8, Size:0x000000b0, Max:0xffffffff, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

0x000081c8 0x00000060 Zero RW 42 .bss libspace.o(c_4.l)<br />

0x00008228 0x00000050 Zero RW 2 STACK s.o<br />

以 上 の 結 果 か ら、 ス タ ッ ク が ER_ZI 実 行 領 域 に 存 在 する こ と がわか り ます。<br />

6.4.2 関 連 項 目<br />

タスク<br />

• 実 行 可 能 な ELF イメージ 内 のシンボルの 場 所 を fromelf を 使 用 して 調 べる 方 法<br />

(3-14 ページ) .<br />

参 照<br />

『コンパイ ラ リ ファレンス』 :<br />

• -c (3-36 ページ)<br />

• -o filename (3-163 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 6-6<br />

ID 111311<br />

Non-Confidential


イ メ ージに 関 する 情 報 の 取 得<br />

『リンカリファレンス』:<br />

• --keep=section_id (2-89 ページ)<br />

• --map、 --no_map (2-109 ページ)<br />

• --output=file (2-115 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 6-7<br />

ID 111311<br />

Non-Confidential


第 7 章<br />

armlink によるシンボルのアクセスと 管 理<br />

以 下 の 各 ト ピ ッ ク では、 リ ン カ armlink でシンボルにア ク セス し、 管 理 する 方 法 につい<br />

て 説 明 し ます。<br />

タスク<br />

• マッピングシンボルについて (7-3 ページ)<br />

• リンカ 定 義 シンボルへのアクセス (7-4 ページ)<br />

• スキャッタファイルの 使 用 (7-11 ページ)<br />

• C および C++ での リ ンカ 定 義 シンボルのインポー ト (7-12 ページ)<br />

• <strong>ARM</strong> アセンブラでの リ ンカ 定 義 シンボルのインポート (7-13 ページ)<br />

• 別 のイ メ ージに 含 まれている シンボルへのア ク セス (7-18 ページ)<br />

• symdefs ファイルの 作 成 (7-19 ページ)<br />

• グローバルシンボルのサブセッ トの 出 力 (7-20 ページ)<br />

• symdefs フ ァ イルの 読 み 出 し (7-21 ページ)<br />

• リンカコマンドラインでのステアリングファイルの 指 定 (7-25 ページ)<br />

• ステア リ ングフ ァ イルを 使 用 し たグ ローバルシンボルの 非 表 示 および 名 前 の 変 更<br />

(7-29 ページ)<br />

• $Super$$ と $Sub$$ を 使 用 し たシンボル 定 義 へのパ ッ チの 適 用 (7-30 ページ) .<br />

概 念<br />

• 領 域 関 連 シンボル (7-5 ページ)<br />

• ス キ ャ ッ タ ロー ド 時 以 外 の 領 域 名 の 値 (7-10 ページ)<br />

• セクション 関 連 シンボル (7-14 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-1<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

• ステアリ ングファイルとは (7-24 ページ) .<br />

参 照<br />

• Image$$ 実 行 領 域 シンボル (7-6 ページ)<br />

• Load$$ 実 行 領 域 シンボル (7-7 ページ)<br />

• Load$$LR$$ ロード 領 域 シンボル (7-9 ページ)<br />

• イメージシンボル (7-15 ページ)<br />

• 入 力 セ ク シ ョ ンのシンボル (7-17 ページ)<br />

• symdefs ファイルの 形 式 (7-22 ページ)<br />

• ステアリ ングファイルコマンドの 概 要 (7-26 ページ)<br />

• ステアリ ングファイルの 形 式 (7-27 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-2<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.1 マッピングシンボルについて<br />

マ ッ ピングシンボルは、 次 に 示 し た よ う な イ ン ラ イ ンの 遷 移 を 識 別 する ために、<br />

armcc および armasm に よ っ て 生 成 さ れます。<br />

• リ テ ラ ルプールの 境 界 におけ る コー ド と データ<br />

• <strong>ARM</strong> コード と Thumb コード (<strong>ARM</strong>/Thumb インターワークベニアなど)<br />

マッピングシンボルを 次 に 示 します。<br />

$a <strong>ARM</strong> 命 令 シーケ ン スの 開 始<br />

$t Thumb 命 令 シーケン スの 開 始<br />

$t.x ThumbEE 命 令 シーケ ン スの 開 始<br />

$d データ 項 目 ( リ テ ラ ルプールな ど) シーケ ン スの 開 始<br />

armlink は、 $d.realdata マ ッ ピ ン グシンボルを 生 成 する こ と に よ っ て、 そのデータ が<br />

実 行 不 可 能 なセ ク シ ョ ンに 属 し てい る こ と を fromelf に 伝 えます。 し たがって、<br />

fromelf -z によって 出 力 されるコード とデータのサイズは、armlink --info sizes の 出<br />

力 と 同 じです。 その 例 を 次 に 示 します。<br />

Code (inc. data) RO Data<br />

x y z<br />

この 例 で、y は $d でマーク され、 RO Data は $d.realdata でマーク されています。<br />

注<br />

$v で 文 字 で 始 ま るシンボルは、 VFP に 関 連 し たマ ッ ピ ングシンボルです。 通 常 、<br />

VFP を 備 えたターゲッ ト 向 けのビルド 時 に 出 力 されます。 $v で 始 ま るシンボルを<br />

ソース コー ド で 使 用 するのは 避 けて 下 さ い。<br />

fromelf --elf --strip=localsymbols コ マン ド で 実 行 可 能 イ メ ージを 変 更 する と 、 すべて<br />

のマッ ピングシンボルがイ メージから 削 除 されるので 注 意 して 下 さい。<br />

7.1.1 関 連 項 目<br />

概 念<br />

『アセンブラの 使 用 』 :<br />

• シンボルの 命 名 規 則 (8-3 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --list_mapping_symbols、 --no_list_mapping_symbols (2-104 ペー<br />

ジ)<br />

• --strict_symbols、 --no_strict_symbols (2-163 ページ) .<br />

『fromelf イ メ ージ 変 換 ユーテ ィ リ テ ィ の 使 用 』 :<br />

• --strip=option[,option,...] (4-73 ページ)<br />

• --text (4-76 ページ) .<br />

その 他 の 情 報<br />

• ELF for the <strong>ARM</strong> Architecture, http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-3<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.2 リ ン カ 定 義 シンボルへのア ク セス<br />

リ ンカで 定 義 さ れる シンボルには、 文 字 シーケン ス $$ が 含 まれている ものがあ り ま<br />

す。 こ の よ う なシンボル と 、 文 字 シーケ ン ス $$ が 含 まれているその 他 の 外 部 名 は、<br />

<strong>ARM</strong> で 予 約 されている 名 前 です。<br />

このよ うなシンボリ ックアドレスは、 アセンブリ 言 語 で 記 述 されたプログラムでは<br />

再 配 置 可 能 なア ド レ ス と し て イ ンポー ト し て 使 用 で き ます。 ま たは、 C または C++<br />

で 記 述 された ソース コード からは extern シンボルと して 参 照 できます。<br />

以 下 の 点 に 注 意 し て 下 さい。<br />

• --strict コ ンパ イ ラ コ マン ド ラ イ ンオプシ ョ ン を 使 用 する 場 合 、 コ ンパ イ ラ は<br />

ド ル 記 号 を 含 むシンボル 名 を 認 識 し ません。 認 識 さ れる よ う にする には、 コ ン<br />

パイラコマンド ラインに --dollar オプシ ョ ンを 含 めます。<br />

• リ ンカ 定 義 シンボルは、 コー ド か ら 参 照 さ れる 場 合 にのみ 生 成 さ れます。<br />

7.2.1 関 連 項 目<br />

概 念<br />

• C および C++ での リ ンカ 定 義 シンボルのイ ンポー ト (7-12 ページ)<br />

• <strong>ARM</strong> アセンブラでの リ ンカ 定 義 シンボルのインポート (7-13 ページ) .<br />

参 照<br />

『コンパイ ラ リ ファレンス』 :<br />

• --dollar、 --no_dollar (3-86 ページ)<br />

• --strict、 --no_strict (3-204 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-4<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.3 領 域 関 連 シンボル<br />

リ ンカに よ って、 イ メ ージ 内 の 領 域 ご と に 以 下 の タ イ プの 領 域 関 連 シンボルが 生 成<br />

されます。<br />

• Image$$<br />

• Load$$<br />

• Load$$LR$$<br />

ス キ ャ ッ タ フ ァ イルを 使 用 する 場 合 は、 ス キ ャ ッ タ フ ァ イル 内 の 領 域 ご と に こ れら<br />

のシンボルが 生 成 さ れます。<br />

スキャ ッ タ ロード を 使 用 しない 場 合 は、 デフォル ト の 領 域 名 に 対 してシンボルが 生<br />

成 さ れます。 つま り 、 領 域 名 が 固 定 さ れ、 同 じ タ イ プのシンボが 生 成 さ れます。<br />

7.3.1 関 連 項 目<br />

概 念<br />

• Image$$ 実 行 領 域 シンボル (7-6 ページ)<br />

• Load$$ 実 行 領 域 シンボル (7-7 ページ)<br />

• Load$$LR$$ ロード 領 域 シンボル (7-9 ページ)<br />

• スキ ャ ッ タ ロード 時 以 外 の 領 域 名 の 値 (7-10 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-5<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.4 Image$$ 実 行 領 域 シンボル<br />

以 下 の 表 には、 イ メ ージ 内 に 存 在 する 実 行 領 域 ご と に リ ンカが 生 成 する シンボルを<br />

示 しています。 シンボルはすべて、 C ライブラリが 初 期 化 され 後 の 実 行 アドレスを<br />

参 照 し ます。<br />

表 7-1 Image$$ 実 行 領 域 シンボル<br />

シンボル<br />

Image$$region_name$$Base<br />

Image$$region_name$$Length<br />

Image$$region_name$$Limit<br />

Image$$region_name$$RO$$Base<br />

Image$$region_name$$RO$$Length<br />

Image$$region_name$$RO$$Limit<br />

Image$$region_name$$RW$$Base<br />

Image$$region_name$$RW$$Length<br />

Image$$region_name$$RW$$Limit<br />

Image$$region_name$$ZI$$Base<br />

Image$$region_name$$ZI$$Length<br />

Image$$region_name$$ZI$$Limit<br />

説 明<br />

領 域 の 実 行 ア ド レ ス<br />

ZI の 長 さ を 除 く 、 バイ ト 単 位 の 実 行 領 域 の 長 さ<br />

実 行 領 域 内 の ZI 部 分 以 外 の 出 力 セ ク シ ョ ン 末 尾<br />

の 次 にあ るバイ ト のア ド レ ス<br />

指 定 領 域 内 の RO 出 力 セ ク シ ョ ンの 実 行 ア ド レ<br />

ス<br />

バイ ト 単 位 の RO 出 力 セ ク シ ョ ンの 長 さ<br />

実 行 領 域 内 の RO 出 力 セ ク シ ョ ン 末 尾 の 次 にあ<br />

るバイ トのアドレス<br />

指 定 領 域 内 の RW 出 力 セ ク シ ョ ンの 実 行 ア ド レ<br />

ス<br />

バイ ト 単 位 の RW 出 力 セ ク シ ョ ンの 長 さ<br />

実 行 領 域 内 の RW 出 力 セ ク シ ョ ン 末 尾 の 次 にあ<br />

るバイ トのアドレス<br />

指 定 領 域 内 の ZI 出 力 セ ク シ ョ ンの 実 行 ア ド レ ス<br />

バイ ト 単 位 の ZI 出 力 セ ク シ ョ ンの 長 さ<br />

実 行 領 域 内 の ZI 出 力 セ ク シ ョ ン 末 尾 の 次 にあ る<br />

バイ トのアドレス<br />

7.4.1 関 連 項 目<br />

タスク<br />

• C および C++ での リ ンカ 定 義 シンボルのイ ンポー ト (7-12 ページ)<br />

• <strong>ARM</strong> アセンブラでの リ ンカ 定 義 シンボルのインポート (7-13 ページ) .<br />

概 念<br />

• 領 域 関 連 シンボル (7-5 ページ)<br />

• スキ ャ ッ タ ロード 時 以 外 の 領 域 名 の 値 (7-10 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-6<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.5 Load$$ 実 行 領 域 シンボル<br />

リンカは、RW 圧 縮 後 にロード ア ド レ ス を 参 照 する 再 配 置 に 対 し、 追 加 のア ド レ ス 割<br />

り 当 て と 再 配 置 パス を 実 行 し ます。 こ の 遅 延 再 配 置 に よ り 、 ロー ド ア ド レ スに 関 す<br />

る よ り 多 く の 情 報 を リ ン カ 定 義 シンボルで 使 用 で き る よ う にな り ます。<br />

注<br />

Load$$region_name シンボルは 実 行 領 域 にのみ 適 用 さ れ、 Load$$LR$$load_region_name シン<br />

ボルはロー ド 領 域 にのみ 適 用 さ れます。<br />

以 下 の 表 には、 イ メ ージ 内 に 存 在 する Load$$ 実 行 領 域 ご と に リ ンカが 生 成 する シン<br />

ボルを 示 しています。 シンボルはすべて、 C ラ イ ブ ラ リ が 初 期 化 さ れた 後 の 実 行 ア<br />

ド レ ス を 参 照 し ます。<br />

表 7-2 Load$$ 実 行 領 域 シンボル<br />

シンボル<br />

Load$$region_name$$Base<br />

Load$$region_name$$Length<br />

Load$$region_name$$Limit<br />

Load$$region_name$$RO$$Base<br />

Load$$region_name$$RO$$Length<br />

Load$$region_name$$RO$$Limit<br />

Load$$region_name$$RW$$Base<br />

Load$$region_name$$RW$$Length<br />

Load$$region_name$$RW$$Limit<br />

Load$$region_name$$ZI$$Base<br />

Load$$region_name$$ZI$$Length<br />

Load$$region_name$$ZI$$Limit<br />

説 明<br />

領 域 の ロー ド ア ド レ ス<br />

バイ ト 単 位 の 領 域 の 長 さ<br />

実 行 領 域 出 力 セ ク シ ョ ン 末 尾 の 次 にあ るバイ ト<br />

のア ド レス<br />

指 定 実 行 領 域 内 の RO 出 力 セ ク シ ョ ンのア ド レ<br />

ス<br />

バイ ト 単 位 の RO 出 力 セ ク シ ョ ンの 長 さ<br />

実 行 領 域 内 の RO 出 力 セ ク シ ョ ン 末 尾 の 次 にあ<br />

るバイ トのアドレス<br />

指 定 実 行 領 域 内 の RW 出 力 セ ク シ ョ ンのア ド レ<br />

ス<br />

バイ ト 単 位 の RW 出 力 セ ク シ ョ ンの 長 さ<br />

実 行 領 域 内 の RW 出 力 セ ク シ ョ ン 末 尾 の 次 にあ<br />

るバイ トのアドレス<br />

指 定 実 行 領 域 内 の ZI 出 力 セ ク シ ョ ンの ロー ド ア<br />

ドレス<br />

バイ ト 単 位 の ZI 出 力 セ ク シ ョ ンの ロー ド 長<br />

region_name に ZEROPAD スキャッタロードキーワー<br />

ド が 設 定 さ れない 限 り 、 ZI のロード 長 はゼロで<br />

す。 ZEROPAD が 設 定 されている 場 合 は、 次 のよ う<br />

にな り ます。<br />

ロード 長 = Image$$region_name$$ZI$$Length<br />

実 行 領 域 内 の ZI 出 力 セ ク シ ョ ン 末 尾 の 次 にあ る<br />

バイ トのロードアドレス<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-7<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

こ の 表 内 のシンボルはすべて、 C ライブラリが 初 期 化 される 前 のロードアドレスを<br />

参 照 し ます。 以 下 の 点 に 注 意 し て 下 さ い。<br />

• セクシ ョ ン 相 対 シンボルは 実 行 ア ド レスのみを 持 つこ とができ るため、 シンボ<br />

ルは 絶 対 シンボルです。<br />

• シンボルでは RW 圧 縮 を 考 慮 し ます。<br />

• ZI 出 力 セ ク シ ョ ンは C ラ イ ブ ラ リ を 初 期 化 する 前 は 存 在 し ないので、 シンボル<br />

には 含 まれません。<br />

• RW 圧 縮 実 行 領 域 か ら のすべての 再 配 置 は 圧 縮 前 に 実 行 する 必 要 があ り ます。<br />

リ ン カでは 圧 縮 データ での 遅 延 再 配 置 を 解 決 で き ないためです。<br />

• リンカによって、RW 圧 縮 領 域 か ら、 RW 圧 縮 に 依 存 する リ ンカ 定 義 シンボル<br />

への 再 配 置 が 検 出 さ れた 場 合 、 その 領 域 の 圧 縮 は 無 効 にな り ます。<br />

• ファイルに 書 き 込 まれるゼロバイトはすべて 認 識 されます。 したがって、 制 限<br />

値 と 長 さの 値 はファ イルに 書 き 込 まれるゼロバイ ト を 考 慮 する 必 要 あ り ます。<br />

7.5.1 関 連 項 目<br />

概 念<br />

• RW データ 圧 縮 を 使 用 した 最 適 化 (5-16 ページ)<br />

• 領 域 関 連 シンボル (7-5 ページ)<br />

• Image$$ 実 行 領 域 シンボル (7-6 ページ)<br />

• Load$$LR$$ ロード 領 域 シンボル (7-9 ページ)<br />

• スキ ャ ッ タ ロード 時 以 外 の 領 域 名 の 値 (7-10 ページ) .<br />

参 照 :<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-8<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.6 Load$$LR$$ ロード 領 域 シンボル<br />

Load$$LR$$ ロード 領 域 には 多 く の 実 行 領 域 を 含 める こ とができ るので、 個 別 の $$RO コ<br />

ンポーネン トや $$RW コ ンポーネン ト は 存 在 し ません。<br />

注<br />

Load$$LR$$load_region_name シンボルはロー ド 領 域 にのみ 適 用 さ れ、 Load$$region_name シ<br />

ンボルは 実 行 領 域 にのみ 適 用 さ れます。<br />

以 下 の 表 には、 イ メ ージ 内 に 存 在 する Load$$ ロード 領 域 ごとにリ ンカが 生 成 するシ<br />

ンボルを 示 しています。<br />

表 7-3 Load$$LR$$ ロード 領 域 シンボル<br />

シンボル<br />

Load$$LR$$load_region_name$$Base<br />

Load$$LR$$load_region_name$$Length<br />

Load$$LR$$load_region_name$$Limit<br />

説 明<br />

ロード 領 域 のアドレス<br />

ロード 領 域 の 長 さ<br />

ロー ド 領 域 の 末 尾 の 次 にあ るバイ ト のア ド レ ス<br />

7.6.1 関 連 項 目<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ)<br />

• イメージのロードビューと 実 行 ビュー (4-6 ページ)<br />

• 領 域 関 連 シンボル (7-5 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-9<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.7 スキャ ッ タ ロー ド 時 以 外 の 領 域 名 の 値<br />

ス キ ャ ッ タ ロー ド を 使 用 し ない 場 合 、 リ ンカでは 以 下 の 領 域 名 の 値 を 使 用 し ます。<br />

• ER_RO ( 読 み 出 し 専 用 の 実 行 領 域 の 場 合 )<br />

• ER_RW ( 読 み 出 し - 書 き 込 み 実 行 領 域 の 場 合 )<br />

• ER_ZI (ゼ ロ で 初 期 化 さ れた 実 行 領 域 の 場 合 )<br />

必 要 なア ド レ ス を 取 得 する ために、 こ れら の 名 前 を 以 下 のシンボルに 挿 入 で き ます。<br />

• Image$$ 実 行 領 域 シンボル<br />

• Load$$ 実 行 領 域 シンボル<br />

例 えば、 Load$$ER_RO$$Base の よ う に 記 述 し ます。<br />

注<br />

• イメージの ZI 出 力 セ ク シ ョ ンは 静 的 に 作 成 さ れるのではな く 、 実 行 時 に 動 的 に<br />

自 動 生 成 さ れます。 そのため、 ZI 出 力 セ ク シ ョ ンにはロー ド ア ド レ ス シンボル<br />

はあ り ません。<br />

• セ ク シ ョ ン 関 連 シンボルよ り も 領 域 関 連 シンボルを 使 用 する こ と を 推 奨 し ま<br />

す。<br />

7.7.1 関 連 項 目<br />

概 念<br />

• 領 域 関 連 シンボル (7-5 ページ)<br />

• Image$$ 実 行 領 域 シンボル (7-6 ページ)<br />

• Load$$ 実 行 領 域 シンボル (7-7 ページ)<br />

• セクション 関 連 シンボル (7-14 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-10<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.8 スキャ ッ タ フ ァ イルの 使 用<br />

ス キ ャ ッ タ ロー ド を 使 用 する 場 合 、 ス キ ャ ッ タ フ ァ イルにあ る 名 前 が リ ンカ 定 義 シ<br />

ンボルに 使 用 されます。 スキャ ッ タファ イルは、 次 のこ と を 行 ます。<br />

• イ メ ージ 内 のすべての 実 行 領 域 を 命 名 し、 各 領 域 の ロー ド ア ド レ ス と 実 行 ア ド<br />

レスを 指 定 する。<br />

• スタックと ヒープの 両 方 を 定 義 する。 また、 リンカによってスタックやヒープ<br />

の 特 殊 なシンボルが 生 成 されます。<br />

7.8.1 関 連 項 目<br />

タスク<br />

• 第 8 章 スキャッタファイルの 使 用 .<br />

参 照<br />

『リンカリファレンス』:<br />

• --scatter=file (2-144 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-11<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.9 C および C++ でのリ ン カ 定 義 シンボルのイ ンポー ト<br />

リンカ 定 義 シンボルを C または C++ のソースコードにインポートするには、 値 また<br />

は 参 照 を 使 用 し ます。<br />

値 でのイ ンポー ト<br />

参 照 での イ ンポー ト<br />

extern unsigned int symbol_name;<br />

extern void *symbol_name;<br />

シンボルを int で 宣 言 する 場 合 は、 こ れ ら の 例 に 示 すよ う に、 ア ド レ ス 演 算 子 (&)<br />

を 使 用 し て 適 切 な 値 を 取 得 する 必 要 があ り ます。<br />

例 7-1 リ ン カ 定 義 シンボルのイ ンポー ト<br />

extern unsigned int Image$$ZI$$Limit;<br />

config.heap_base = (unsigned int) &Image$$ZI$$Limit;<br />

例 7-2 ZI 出 力 セ ク シ ョ ン を 定 義 するシンボルのイ ンポー ト<br />

extern unsigned int Image$$ZI$$Length;<br />

extern char Image$$ZI$$Base[];<br />

memset(Image$$ZI$$Base,0,(unsigned int)&Image$$Length);<br />

7.9.1 関 連 項 目<br />

概 念<br />

• Image$$ 実 行 領 域 シンボル (7-6 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-12<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.10 <strong>ARM</strong> アセンブラでのリンカ 定 義 シンボルのインポート<br />

アセンブラのソースコードに リ ンカ 定 義 シンボルをインポートするには、 IMPORT ディ<br />

レ ク テ ィ ブを 使 用 し、 シンボルの 値 を 保 持 する 32 ビッ トデータワードを 作 成 しま<br />

す。 その 例 を 次 に 示 し ます。<br />

IMPORT |Image$$ZI$$Limit|<br />

...<br />

zi_limit DCD |Image$$ZI$$Limit|<br />

レジスタ (r1 など) に 値 をロードするには、LDR 命 令 を 使 用 します。<br />

LDR r1, zi_limit<br />

LDR 命 令 は、 32 ビ ッ ト データ ワー ド に 到 達 で き る 必 要 があ り ます。 ア ク セスでき る メ<br />

モリ 範 囲 は、<strong>ARM</strong> と Thumb 間 、 さ ら には、 使 用 し てい る アーキテ ク チャ に よ って も<br />

異 な り ます。<br />

7.10.1 関 連 項 目<br />

概 念<br />

• Image$$ 実 行 領 域 シンボル (7-6 ページ) .<br />

参 照<br />

『アセンブラ リ フ ァ レンス』 :<br />

• メモリアクセス 命 令 (3-12 ページ)<br />

• IMPORT、 EXTERN (6-84 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-13<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.11 セクション 関 連 シンボル<br />

セ ク シ ョ ン 関 連 シンボルは、 ス キ ャ ッ タ ロー ド を 使 用 し ないで イ メ ージを 作 成 する<br />

ときに、 リンカによって 生 成 されるシンボルです。<br />

リ ンカに よ って、 以 下 の タ イ プのセ ク シ ョ ン 関 連 シンボルが 生 成 さ れます。<br />

• イ メ ージシンボル (コ マン ド ラ イ ンオプシ ョ ン を 使 用 し て 単 純 イ メ ージを 作 成<br />

する 場 合 )。 単 純 イ メ ージには、 3 つの 実 行 領 域 を 生 成 する 3 つの 力 セ ク シ ョ ン<br />

(RO、 RW、 ZI) があり ます。<br />

• 入 力 セ ク シ ョ ンのシンボル (イ メ ージ 内 に 存 在 する 入 力 セ ク シ ョ ン ご と )。<br />

リ ンカでは、 実 行 領 域 内 のセ ク シ ョ ン を まず RO、 RW、 ZI の 属 性 で ソー ト し、 次 に<br />

名 前 で ソ ー ト し ます。 し たがっ て、 例 えば、 .text セクションはすべて 連 続 して 1 つ<br />

のブ ロ ッ ク 内 に 配 置 さ れます。 同 じ 属 性 と 名 前 を 持 つセ ク シ ョ ンが 隣 接 する ブ ロ ッ<br />

クを、 統 合 セ ク シ ョ ン と 呼 びます。<br />

7.11.1 関 連 項 目<br />

概 念<br />

• イメージシンボル (7-15 ページ)<br />

• 入 力 セ ク シ ョ ンのシンボル (7-17 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-14<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.12 イメージシンボル<br />

イ メ ージシンボルは、 コ マン ド ラ イ ンオプシ ョ ン を 使 用 し て 単 純 イ メ ージを 作 成 す<br />

る 場 合 にリ ンカによって 生 成 されます。<br />

以 下 の 表 に イ メ ージシンボルを 示 し ます。<br />

表 7-4 イメージシンボル<br />

シンボル<br />

セクションの<br />

種 類<br />

説 明<br />

Image$$RO$$Base 出 力 RO 出 力 セ ク シ ョ ンの 開 始 ア ド レ ス<br />

Image$$RO$$Limit 出 力 RO 出 力 セ ク シ ョ ン 末 尾 の 次 にあ るバイ ト<br />

のア ド レス<br />

Image$$RW$$Base 出 力 RW 出 力 セ ク シ ョ ンの 開 始 ア ド レ ス<br />

Image$$RW$$Limit 出 力 ZI 出 力 セ ク シ ョ ン 末 尾 の 次 にあ るバイ ト の<br />

アドレス (RW 領 域 の 末 尾 ではな く 、 ZI 領<br />

域 の 末 尾 を 選 択 し てい る のは、 従 来 の コー<br />

ド と の 互 換 性 を 維 持 る ためです)<br />

Image$$ZI$$Base 出 力 ZI 出 力 セ ク シ ョ ンの 開 始 ア ド レ ス<br />

Image$$ZI$$Limit 出 力 ZI 出 力 セ ク シ ョ ン 末 尾 の 次 にあ るバイ ト の<br />

アドレス<br />

ス キ ャ ッ タ フ ァ イルを 使 用 する 場 合 、 イ メ ージシンボルは 定 義 さ れません。 コー ド<br />

か ら こ う し たシンボルのいずれかを 参 照 する 場 合 は、 弱 参 照 と し て 処 理 する 必 要 が<br />

あります。<br />

__user_setup_stackheap() の 標 準 実 装 では、 Image$$ZI$$Limit の 値 が 使 用 されます。 し た<br />

がって、 ス キ ャ ッ タ フ ァ イルを 使 用 する 場 合 は、 ス タ ッ ク と ヒ ープを 手 動 で 配 置 す<br />

る 必 要 があ り ます。 次 のいずれかの 方 法 で 行 います。<br />

• スキャッタファイルで 行 う。 次 のいずれかの 方 法 を 使 用 します。<br />

— 独 立 し た ス タ ッ ク 領 域 と ヒ ープ 領 域 を <strong>ARM</strong>_LIB_STACK および <strong>ARM</strong>_LIB_HEAP と<br />

して 定 義 します。<br />

— スタ ッ ク と ヒープの 両 方 を 組 み 合 わせた 領 域 を <strong>ARM</strong>_LIB_STACKHEAP として 定<br />

義 します。<br />

• __user_setup_stackheap() を 再 実 装 して、 ヒープと スタ ッ クの 境 界 を 設 定 する。<br />

7.12.1 関 連 項 目<br />

タスク<br />

• スキャッタロード 時 に 定 義 されないリンカ 定 義 シンボル (8-11 ページ)<br />

• スキャッタファイルを 使 用 したスタック と ヒープの 指 定 (8-12 ページ) .<br />

概 念<br />

• 単 純 イ メ ージの タ イ プ (4-10 ページ)<br />

• 弱 参 照 と 定 義 について (4-35 ページ) .<br />

『コンパイ ラの 使 用 』 :<br />

• C および C++ のスタ ッ クの 使 用 (6-18 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-15<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

『 移 行 と 互 換 性 』 :<br />

• RVCT v2.2 と RVCT v3.0 の 間 での C および C++ ライブラリの 変 更 点 (9-5 ペー<br />

ジ) .<br />

参 照<br />

『<strong>ARM</strong> ® C および C++ ラ イ ブ ラ リ と 浮 動 小 数 点 サポー ト の 使 用 』 :<br />

• __user_setup_stackheap() (2-61 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-16<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.13 入 力 セ ク シ ョ ンのシンボル<br />

入 力 セ ク シ ョ ンのシンボルは、 イ メ ージ 内 に 存 在 する 入 力 セ ク シ ョ ン ご と に リ ン カ<br />

によって 生 成 されます。<br />

以 下 の 表 に 入 力 セ ク シ ョ ンのシンボルを 示 し ます。<br />

表 7-5 セクション 関 連 シンボル<br />

シンボル<br />

セクションの<br />

種 類<br />

説 明<br />

SectionName$$Base 入 力 SectionName という 名 前 の 統 合 セクションの<br />

開 始 ア ド レ ス<br />

SectionName$$Length 入 力 SectionName という 名 前 の 統 合 セクションの<br />

長 さ (バイ ト 単 位 )<br />

SectionName$$Limit 入 力 SectionName という 名 前 の 統 合 セクション 末<br />

尾 の 次 にあ るバイ ト のア ド レ ス<br />

コー ド か ら 入 力 セ ク シ ョ ンのシンボルを 参 照 する 場 合 、 イ メ ージ 内 の 同 じ 名 前 のす<br />

べての 入 力 セ ク シ ョ ンは、 イ メ ージ メ モ リ マ ッ プ 内 に 連 続 し て 置 さ れる と 想 定 で き<br />

ます。<br />

ス キ ャ ッ タ フ ァ イルで 入 力 セ ク シ ョ ンが 連 続 し て 配 置 さ れない 場 合 、 リ ンカに よ っ<br />

てエ ラーが 生 成 さ れます。 こ れは、 ベース シンボル と リ ミ ッ ト ンボルが 不 連 続 な メ<br />

モ リ 上 で 使 用 さ れる と 、 通 常 、 不 定 の 望 ま し く ない 結 果 が 生 じ る ためです。<br />

7.13.1 関 連 項 目<br />

タスク<br />

• 第 8 章 スキャッタファイルの 使 用 .<br />

概 念<br />

• 入 力 セクション、 出 力 セクション、 領 域 、 およびプログラムセグメント<br />

(4-5 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-17<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.14 別 のイ メ ージに 含 まれているシンボルへのア ク セス<br />

ある イ メージから 別 のイ メージに 含 まれているグローバルシンボルの 値 を 参 照 する<br />

場 合 は、 シンボル 定 義 (symdefs) ファイルを 使 用 できます。<br />

例 えば、 ROM に 常 駐 する イ メ ージが 1 つ、 RAM に ロー ド さ れる イ メ ージが 複 数 存 在<br />

する 場 合 に、 こ のフ ァ イルを 使 用 で き ます。 こ の 場 合 、 RAM にローされるイ メージ<br />

から、 ROM 内 に 存 在 する イ メ ージのグ ローバル 関 数 やグ ローバルデータ にア ク セス<br />

できます。<br />

7.14.1 関 連 項 目<br />

タスク<br />

• symdefs ファイルの 作 成 (7-19 ページ)<br />

• symdefs フ ァ イルの 読 み 出 し (7-21 ページ) .<br />

参 照<br />

• symdefs ファイルの 形 式 (7-22 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-18<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.15 symdefs フ ァ イルの 作 成<br />

symdefs ファイルを 生 成 するには、armlink オプシ ョ ン --symdefs=filename を 使 用 し ま<br />

す。<br />

リンクの 最 終 段 階 が 正 常 に 処 理 されたときに、 リンカによって symdefs ファイルが 作<br />

成 さ れます。 部 分 的 な リ ン ク の 場 合 、 ま たは リ ン ク の 最 終 段 階 正 常 に 処 理 さ れな<br />

かった 場 合 、 ファ イルは 作 成 されません。<br />

注<br />

filename が 存 在 し ない 場 合 は、 すべてのグ ローバルシンボルを 含 んでいる フ ァ イルが<br />

作 成 さ れます。 filename が 存 在 する 場 合 は、 既 存 の filename の 内 容 を 使 用 して、 リ ン<br />

カか ら のフ ァ イルの 再 書 き 込 み 時 に 出 力 する シンボルを 選 択 し ます。 つま り 、 フ ァ<br />

イル 名 に 既 存 のシンボルのみが 更 新 さ れ、 新 し いシンボル ( 存 在 する 場 合 ) は 追 加<br />

さ れません。 こ の 処 理 が 必 要 ない 場 合 は、 リ ン ク 手 順 の 前 に 既 存 の symdefs ファイル<br />

をすべて 削 除 して く ださい。<br />

7.15.1 関 連 項 目<br />

概 念<br />

• 別 のイ メ ージに 含 まれている シンボルへのア ク セス (7-18 ページ) .<br />

参 照<br />

• symdefs ファイルの 形 式 (7-22 ページ) .<br />

『リンカリファレンス』:<br />

• --symdefs=file (2-168 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-19<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.16 グローバルシンボルのサブセ ッ ト の 出 力<br />

デフォル ト では、 すべてのグローバルシンボルが symdefs ファイルに 書 き 込 まれま<br />

す。 symdefs フ ァ イルが 存 在 する 場 合 、 リ ンカではそのフ ァ イルの 容 を 使 用 し て、 出<br />

力 をグローバルシンボルのサブセッ ト に 限 定 し ます。<br />

symdefs ファイルを 使 用 して、 アプリケーション image1 に 含 まれている シンボルを 別<br />

のアプ リ ケーシ ョ ンに 公 開 するには、 以 下 の 手 順 を 実 行 し ます。<br />

1. image1 の リ ン ク の 最 終 段 階 で --symdefs=filename を 指 定 し ます。 リ ンカによって<br />

symdefs ファイル filename が 作 成 されます。<br />

2. テキス ト エディ タで filename を 開 き、 最 終 リ ス ト に 不 要 なシンボルエン ト リ を<br />

削 除 し てか ら フ ァ イルを 保 存 し ます。<br />

3. image1 の リ ン ク の 最 終 段 階 で --symdefs=filename を 指 定 し ます。<br />

image1 の 作 成 に 使 用 し ていたオブジ ェ ク ト が 1 つ 以 上 変 更 さ れた と き にシンボ<br />

ル 定 義 を 更 新 する 場 合 な ど、 いつで も filename を 編 集 してコ メ ン ト を 追 加 し、<br />

image1 を 再 リ ンクできます。<br />

これで、 symdefs フ ァ イルを 使 用 し て、 追 加 のアプ リ ケーシ ョ ン を リ ン ク で き ます。<br />

7.16.1 関 連 項 目<br />

概 念<br />

• 別 のイ メ ージに 含 まれている シンボルへのア ク セス (7-18 ページ) .<br />

参 照<br />

• symdefs ファイルの 形 式 (7-22 ページ) .<br />

『リンカリファレンス』:<br />

• --symdefs=file (2-168 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-20<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.17 symdefs フ ァ イルの 読 み 出 し<br />

symdefs フ ァ イルは、 コードやデータ を 含 んでいない、 シンボル 情 報 だけを 含 んでい<br />

るオブジェク ト ファイルと 考 えるこ とができます。 symdefs フ ァ イルを 読 み 出 すに<br />

は、 オブジェク トファイルを 追 加 するのと 同 様 にこのファイルをファイルリストに<br />

追 加 し ます。 リ ンカでは、 こ のフ ァ イルを 読 みし、 シンボル と その 値 を 出 力 シンボ<br />

ルテーブルに 追 加 し ます。 追 加 さ れる シンボルには、 ABSOLUTE 属 性 と GLOBAL 属 性 があ<br />

ります。<br />

部 分 的 な リ ン ク が 実 行 さ れる 場 合 、 シンボルは 出 力 オブジ ェ ク ト のシンボルテーブ<br />

ルに 追 加 さ れます。 完 全 な リ ン ク が 実 行 さ れる 場 合 、 シンボルイ メ ージのシンボル<br />

テーブルに 追 加 されます。<br />

フ ァ イル 内 に 無 効 な 行 があ る 場 合 、 リ ン カに よ ってエ ラー メ ッ セージが 生 成 さ れま<br />

す。 行 は、 以 下 の 場 合 に 無 効 にな り ます。<br />

• 不 足 し てい る 列 があ る 場 合<br />

• 無 効 な 値 を 含 んでい る 列 があ る 場 合<br />

symdefs ファイルから 抽 出 されるシンボルは、 オブジェクトのシンボルテーブルから<br />

抽 出 さ れる シンボル と ま った く 同 じ 方 法 で 処 理 さ れます。 複 数 シンボル 定 義 に 関 し<br />

ても、 同 じ 制 限 が 適 用 されます。<br />

注<br />

<strong>ARM</strong> コード と Thumb コー ド 内 で 同 じ 関 数 名 ま たはシンボル 名 を 定 義 する こ と はで き<br />

ません。<br />

7.17.1 関 連 項 目<br />

参 照<br />

• symdefs ファイルの 形 式 (7-22 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-21<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.18 symdefs フ ァ イルの 形 式<br />

symdefs ファイルにはシンボルとその 値 が 定 義 されています。 ファイルは 以 下 で 構 成<br />

されます。<br />

識 別 行<br />

コメント<br />

symdefs フ ァ イルの 識 別 行 は 以 下 で 構 成 さ れます。<br />

• 識 別 文 字 列 ## (フ ァ イルが symdefs ファイルとしてリンカ<br />

に 認 識 されるには、 そのフ ァ イル 内 の 最 初 の 11 文 字 が こ の 文 字 列<br />

である 必 要 があ り ます)<br />

• 以 下 の 形 式 の リ ンカのバージ ョ ン 情 報<br />

<strong>ARM</strong> Linker, <strong>ARM</strong>CCver [Build num]:<br />

• 以 下 の 形 式 の、 symdefs フ ァ イルを 最 後 に 更 新 し た 日 付 と 時 刻<br />

Last Updated:Date<br />

バージ ョ ン 情 報 と 更 新 情 報 は、 識 別 文 字 列 の 一 部 ではあ り ません。<br />

コメントは、テキストエディタを 使 用 して 手 動 で 挿 入 できます。 コメン<br />

トには、 以 下 の 特 性 があります。<br />

• 先 頭 行 は、 特 殊 な 識 別 コ メ ン ト ## で 始 ま る 必 要 があ り ま<br />

す。 こ のコ メ ン ト は、 フ ァ イル 作 成 時 に リ ンカに よ って 挿 入 さ れ<br />

ます。 このコ メ ン ト を 手 動 で 削 除 しないで 下 さい。<br />

• ホ ワ イ ト スペース 以 外 の 最 初 の 文 字 がセ ミ コ ロ ン (;) またはハッ<br />

シュ (#) の 行 は、 すべてコ メン トです。<br />

• ホ ワ イ ト スペース 以 外 の 最 初 の 文 字 の 後 にセ ミ コ ロ ン (;) または<br />

ハッシュ (#) がある 行 は、 コ メン トではあり ません。<br />

• 空 白 行 は 無 視 さ れる ので、 読 みやす く する ために 空 白 行 を 挿 入 で<br />

きます。<br />

シンボル 情 報<br />

シンボル 情 報 は 1 行 に 記 述 さ れ、 以 下 で 構 成 さ れます。<br />

シンボルの 値 リンカでは、シンボルの 絶 対 アドレスを 固 定 長 の 16<br />

進 形 式 ( 例 0x00008000) で 書 き 込 みます。 このファイ<br />

ルを 編 集 する 場 合 、 ア ド レ ス 値 には 16 進 形 式 と 10<br />

進 形 式 のどち ら も 使 用 で き ます。<br />

タイプフラグ シンボルのタイプは 1 文 字 で 以 下 の よ う に 表 さ れま<br />

す。<br />

A <strong>ARM</strong> コード<br />

T Thumb コード<br />

D データ<br />

N 数 値<br />

シンボル 名 シンボルの 名 前 です。<br />

7.18.1 symdefs フ ァ イルの 例<br />

この 例 では、 一 般 的 な symdefs ファイルの 形 式 を 示 しています。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-22<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

例 7-3 symdefs フ ァ イルの 形 式<br />

## <strong>ARM</strong> Linker, <strong>ARM</strong>CC501 [Build num]:Last Updated:Date<br />

; 値 の 型 名 、 こ れは 追 加 さ れ た コ メ ン ト<br />

0x00008000 A __main<br />

0x00008004 A __scatterload<br />

0x000080E0 T main<br />

0x0000814D T _main_arg<br />

0x0000814D T __argv_alloc<br />

0x00008199 T __rt_get_argv<br />

...<br />

# これもまたコメントであり、 空 白 行 は 無 視 される<br />

...<br />

0x0000A4FC D __stdin<br />

0x0000A540 D __stdout<br />

0x0000A584 D __stderr<br />

0xFFFFFFFD N __SIG_IGN<br />

7.18.2 関 連 項 目<br />

概 念<br />

• 別 のイ メ ージに 含 まれている シンボルへのア ク セス (7-18 ページ)<br />

• symdefs ファイルの 作 成 (7-19 ページ)<br />

• グローバルシンボルのサブセッ トの 出 力 (7-20 ページ)<br />

• symdefs フ ァ イルの 読 み 出 し (7-21 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-23<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.19 ステアリングファイルとは<br />

ス テア リ ン グ フ ァ イルは、 出 力 オブジ ェ ク ト のシンボルテーブルおよびイ メ ージの<br />

ダイナミ ックセクションを 編 集 するための 一 連 のコマンドが 含 れているテキス ト<br />

ファイルです。 ステアリングファイルのコマンドでは、 以 下 のことが 可 能 です。<br />

• シンボルテーブル 内 のシンボルを 管 理 する。<br />

• 静 的 シンボルテーブルか ら 動 的 シンボルテーブルへのシンボルの コ ピーを 制 御<br />

する。<br />

• リ ン ク ユニ ッ ト が 依 存 する ラ イ ブ ラ リ に 関 する 情 報 を 保 存 する。<br />

例 えば、 ス テア リ ング フ ァ イルを 使 用 し て、 知 的 所 有 権 を 保 護 し た り 、 ネーム ス<br />

ペースの 衝 突 を 回 避 し た り する こ と がで き ます。<br />

7.19.1 関 連 項 目<br />

タスク<br />

• リンカコマンドラインでのステアリングファイルの 指 定 (7-25 ページ) .<br />

参 照<br />

• ステアリ ングファイルコマンドの 概 要 (7-26 ページ)<br />

• ステアリ ングファイルの 形 式 (7-27 ページ) .<br />

『リンカリファレンス』:<br />

• --edit=file_list (2-53 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-24<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.20 リ ン カ コ マン ド ラ イ ンでのステア リ ング フ ァ イルの 指 定<br />

リンカコマンドラインで 1 つ 以 上 のス テア リ ン グ フ ァ イ ルを 指 定 する には、 オプ<br />

ション --edit file-list を 使 用 し ます。<br />

複 数 のス テア リ ン グ フ ァ イルを 指 定 する 場 合 は、 以 下 のいずれかの コ マン ド ラ イ ン<br />

の 形 式 を 使 用 でき ます。<br />

armlink --edit file1 --edit file2 --edit file3<br />

armlink --edit file1,file2,file3<br />

コ ンマ 区 切 り リ ス ト を 使 用 する 場 合 は、 コ ンマ と フ ァ イル 名 の 間 にスペース を 含 め<br />

ないで 下 さい。<br />

7.20.1 関 連 項 目<br />

概 念<br />

• ステアリ ングファイルとは (7-24 ページ) .<br />

参 照<br />

• ステアリ ングファイルコマンドの 概 要 (7-26 ページ)<br />

• ステアリ ングファイルの 形 式 (7-27 ページ) .<br />

『リンカリファレンス』:<br />

• EXPORT (3-2 ページ)<br />

• HIDE (3-4 ページ)<br />

• IMPORT (3-5 ページ)<br />

• RENAME (3-7 ページ)<br />

• REQUIRE (3-9 ページ)<br />

• RESOLVE (3-10 ページ)<br />

• SHOW (3-12 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-25<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.21 ステア リ ング フ ァ イルコ マン ド の 概 要<br />

以 下 のス テア リ ン グ フ ァ イルコ マン ド があ り ます。<br />

表 7-6 ステア リ ング フ ァ イルコ マン ド の 概 要<br />

コマンド<br />

EXPORT<br />

HIDE<br />

IMPORT<br />

RENAME<br />

REQUIRE<br />

RESOLVE<br />

SHOW<br />

説 明<br />

他 の 共 有 オブジ ェ ク ト ま たは 実 行 可 能 フ ァ イルか ら シン<br />

ボルにア クセスでき る よ う に 指 定 し ます。<br />

シンボルテーブル 内 の 定 義 済 みグ ローバルシンボルを 匿<br />

名 にし ます。<br />

シンボルが 実 行 時 に 共 有 オブジ ェ ク ト で 定 義 さ れる よ う<br />

に 指 定 し ます。<br />

定 義 済 みあ る いは 未 定 義 のグ ローバルシンボルの 名 前 を<br />

変 更 し ます。<br />

動 的 配 列 内 に DT_NEEDED タグを 作 成 します。DT_NEEDED タグ<br />

では、 アプ リ ケーシ ョ ンで 使 用 さ れてい る 共 有 ラ イ ブ ラ<br />

リ などの 他 の 共 有 オブジ ェ ク ト と の 依 存 関 係 を 指 定 し ま<br />

す。<br />

特 定 の 未 定 義 の 参 照 と 、 定 義 済 みのグ ローバルシンボル<br />

とのマッチングを 行 います。<br />

グ ローバルシンボルを 表 示 し ます。 こ のコ マン ド は、 ワ<br />

イルドカードを 指 定 した HIDE コ マン ド を 使 用 し て 非 表 示<br />

に し た 特 定 のシンボルを 表 示 する 場 合 に 便 利 です。<br />

注<br />

ステアリ ングファイルコマンドでは、 グローバルシンボルのみを 制 御 します。 ロー<br />

カルシンボルはどのコマン ドの 影 響 も 受 けません。<br />

7.21.1 関 連 項 目<br />

タスク<br />

• リンカコマンドラインでのステアリングファイルの 指 定 (7-25 ページ) .<br />

概 念<br />

• ステアリ ングファイルとは (7-24 ページ) .<br />

参 照<br />

• ステアリ ングファイルの 形 式 (7-27 ページ) .<br />

『リンカリファレンス』:<br />

• EXPORT (3-2 ページ)<br />

• HIDE (3-4 ページ)<br />

• IMPORT (3-5 ページ)<br />

• RENAME (3-7 ページ)<br />

• REQUIRE (3-9 ページ)<br />

• RESOLVE (3-10 ページ)<br />

• SHOW (3-12 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-26<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.22 ステア リ ング フ ァ イルの 形 式<br />

ス テア リ ン グ フ ァ イルは、 以 下 の 形 式 で 記 述 さ れる プレーンテキ ス ト フ ァ イ ルです。<br />

• ホ ワ イ ト スペース 以 外 の 最 初 の 文 字 がセ ミ コ ロ ン (;) またはハッシュ (#) 文<br />

字 の 行 は、 コメント 行 として 解 釈 されます。 コメントは 空 白 行 として 処 理 され<br />

ます。<br />

• 空 白 行 は 無 視 さ れます。<br />

• 空 白 行 で も コ メ ン ト 行 で も ない 行 は、 コ マン ド か、 連 続 する 空 白 以 外 の 行 に 分<br />

割 されたコマンドの 一 部 です。<br />

• ホ ワ イ ト スペース 以 外 の 最 後 の 文 字 がコ ンマ (,) で 終 わるコマンド ラインは、<br />

次 の 空 白 行 以 外 の 行 に 続 き ます。<br />

各 コ マン ド ラ イ ンは、 コ マン ド と それに 続 く コ ンマで 区 切 ら れたオペラ ン ド グルー<br />

プか ら 構 成 さ れます ( 複 数 可 )。 各 オペラ ン ド グループは、 コ マン ド に よ って 1 つま<br />

たは 2 つのオペランドで 構 成 されます。 コマンドは、 そのコマンドの 各 オペランド<br />

グループに 適 用 されます。 以 下 の 規 則 が 用 されます。<br />

• コ マン ド では 大 文 字 と 小 文 字 が 区 別 さ れませんが、 通 常 は 大 文 字 で 表 記 さ れま<br />

す。<br />

• オペランドは 大 文 字 と 小 文 字 が 区 別 されるシンボル 名 とマッチングする 必 要 が<br />

あ る ため、 大 文 字 と 小 文 字 が 区 別 さ れます。 オペラ ン ド にはワ イ ルカー ド 文 字<br />

を 使 用 でき ます。<br />

コマン ドは、 グローバルシンボルのみに 適 用 されます。 ローカルシンボルなどのそ<br />

の 他 のシンボルは 影 響 を 受 けません。<br />

以 下 の 例 には、 サンプルのス テア リ ン グ フ ァ イルを 示 し ています。<br />

例 7-4 ステア リ ング フ ァ イルの 例<br />

; my_func1 を func1 としてインポートする<br />

IMPORT my_func1 AS func1<br />

# 非 常 に 長 い 関 数 名 を 短 い 名 前 に 変 更 す る<br />

RENAME a_very_long_function_name AS,<br />

short_func_name<br />

7.22.1 関 連 項 目<br />

タスク<br />

• リンカコマンドラインでのステアリングファイルの 指 定 (7-25 ページ) .<br />

概 念<br />

• ステアリ ングファイルとは (7-24 ページ) .<br />

参 照<br />

• ステアリ ングファイルコマンドの 概 要 (7-26 ページ) .<br />

『リンカリファレンス』:<br />

• EXPORT (3-2 ページ)<br />

• HIDE (3-4 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-27<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

• IMPORT (3-5 ページ)<br />

• RENAME (3-7 ページ)<br />

• REQUIRE (3-9 ページ)<br />

• RESOLVE (3-10 ページ)<br />

• SHOW (3-12 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-28<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.23 ステア リ ング フ ァ イルを 使 用 し たグローバルシンボルの 非 表 示 および 名 前 の 変 更<br />

ステアリングファイルを 使 用 して、 出 力 ファイル 内 のグローバルシンボル 名 を 非 表<br />

示 にしたり、 変 更 したりすることができます。 それぞれ、HIDE コマンドおよび RENAME<br />

コマンドを 使 用 します。<br />

例 えば、 ス テア リ ング フ ァ イルを 使 用 し て、 知 的 所 有 権 を 保 護 し た り 、 ネーム ス<br />

ペースの 衝 突 を 回 避 し た り する こ と がで き ます。<br />

シンボルの 名 前 を 変 更 する 例 を 以 下 に 示 し ます。<br />

例 7-5 RENAME ステアリングコマンドの 例<br />

RENAME func1 AS my_func1<br />

シンボルを 非 表 示 にする 例 を 以 下 に 示 し ます。<br />

例 7-6 HIDE ステアリングコマンドの 例<br />

; 接 頭 文 字 ‘internal’ が 付 いてい るすべてのグ ロ ーバルシ ン ボル を 非 表 示 にする<br />

HIDE internal*<br />

7.23.1 関 連 項 目<br />

タスク<br />

• リンカコマンドラインでのステアリングファイルの 指 定 (7-25 ページ) .<br />

概 念<br />

• ステアリ ングファイルとは (7-24 ページ)<br />

• ステアリ ングファイルコマンドの 概 要 (7-26 ページ) .<br />

参 照<br />

• ステアリ ングファイルの 形 式 (7-27 ページ) .<br />

『リンカリファレンス』:<br />

• --edit=file_list (2-53 ページ)<br />

• HIDE (3-4 ページ)<br />

• RENAME (3-7 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-29<br />

ID 111311<br />

Non-Confidential


armlink によ るシンボルのア ク セス と 管 理<br />

7.24 $Super$$ と $Sub$$ を 使 用 し たシンボル 定 義 へのパ ッ チの 適 用<br />

外 部 ラ イ ブ ラ リ や ROM コー ド 内 に 含 まれてい る な どの 理 由 で、 既 存 のシンボルを 変<br />

更 でき ない 場 合 があ り ます。 このよ う な 場 合 は、 $Super$$ パターンと $Sub$$ パターン<br />

を 使 用 し て、 既 存 のシンボルにパ ッ チを 適 用 で き ます。<br />

関 数 foo() の 定 義 にパ ッ チを 適 用 するには、 以 下 を 使 用 し ます。<br />

$Super$$foo パッチを 適 用 していない 元 の 関 数 foo() を 識 別 し ます。 このパターンを<br />

使 用 し て、 元 の 関 数 を 直 接 呼 び 出 し ます。<br />

$Sub$$foo<br />

元 の 関 数 foo() の 代 わ り に 呼 び 出 す 新 し い 関 数 を 識 別 し ます。 こ のパ<br />

ターン を 使 用 し て、 元 の 関 数 の 前 ま たは 後 に 処 理 を 追 加 し ます。<br />

注<br />

$Sub$$ と $Super$$ の メ カニズムは 静 的 な リ ン ク 時 にのみ 機 能 し ます。 $Super$$ の 参 照<br />

をダイナミ ッ クシンボルテーブルにインポート またはエクスポートするこ とはでき<br />

ません。<br />

以 下 の 例 では、 既 存 の 関 数 foo() への 呼 び 出 しの 前 に、 関 数 ExtraFunc() への 呼 び 出 し<br />

を 挿 入 する 方 法 を 示 し ています。<br />

例 7-7 $Super$$ と $Sub$$ の 使 用<br />

extern void ExtraFunc(void); extern void $Super$$foo(void):<br />

/* この 関 数 が 元 の 関 数 foo() の 代 わ り に 呼 び 出 される */<br />

void $Sub$$foo(void)<br />

{<br />

ExtraFunc(); /* 追 加 の セ ッ ト ア ッ プ 作 業 を 行 う */<br />

$Super$$foo(); /* 元 の 関 数 foo() を 呼 び 出 す */<br />

/* 元 の 関 数 foo() の 呼 び 出 し を 回 避 する には<br />

* $Super$$foo(); 関 数 の 呼 び 出 し を 省 略 す る。<br />

*/<br />

}<br />

7.24.1 関 連 項 目<br />

その 他 の 情 報<br />

• ELF for the <strong>ARM</strong> Architecture, http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 7-30<br />

ID 111311<br />

Non-Confidential


第 8 章<br />

スキャ ッ タ フ ァ イルの 使 用<br />

以 下 の ト ピ ッ ク では、 ス キ ャ ッ タ フ ァ イル と armlink を 使 用 した 複 雑 なイ メージの 作 成<br />

方 法 について 説 明 し ます。<br />

タスク<br />

• ス キ ャ ッ タ フ ァ イ ルを 使 用 し た ス タ ッ ク と ヒ ープの 指 定 (8-12 ページ)<br />

• ルー ト 実 行 領 域 の 作 成 (8-14 ページ)<br />

• FIXED 属 性 を 使 用 したルー ト 領 域 の 作 成 (8-17 ページ)<br />

• 特 定 ア ド レ スへの 関 数 と データ の 配 置 (8-18 ページ)<br />

• ス キ ャ ッ タ ロー ド を 使 用 し た 名 前 付 き セ ク シ ョ ンの 明 示 的 な 配 置 (8-23 ページ)<br />

• .ANY モジ ュールセレ ク タ に よ る 未 割 り 当 てセ ク シ ョ ンの 配 置 (8-25 ページ)<br />

• ス キ ャ ッ タ ロー ド の 記 述 におけ るベニア 入 力 セ ク シ ョ ンの 選 択 (8-36 ページ)<br />

• __attribute__((section("name"))) を 使 用 したコード とデータの 配 置 (8-37 ページ)<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ページ)<br />

• __at を 使 用 したフ ラ ッシュ メ モ リ でのキーの 配 置 (8-46 ページ)<br />

• __at を 使 用 し たペ リ フ ェ ラ ルレ ジ ス タ に 対 する 構 造 の 配 置 (8-48 ページ)<br />

• 空 き 領 域 の 予 約 (8-57 ページ)<br />

• スキャッタファイルでのプリプロセッシングコマンドの 使 用 (8-62 ページ)<br />

• スキ ャ ッ タ フ ァ イル 内 の 式 の 評 価 を 使 用 し たパデ ィ ングの 回 避 (8-64 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-1<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

概 念<br />

• スキャッタロードについて (8-3 ページ)<br />

• スキャッタロードが 使 用 される 状 況 (8-4 ページ)<br />

• スキャッタロードのコマンドラインオプション (8-5 ページ)<br />

• メモリマップが 単 純 なイメージ (8-7 ページ)<br />

• メモリマップが 複 雑 なイメージ (8-9 ページ)<br />

• スキャッタロード 時 に 定 義 されないリンカ 定 義 シンボル (8-11 ページ)<br />

• ルー ト 領 域 と は (8-13 ページ)<br />

• .ANY セ ク シ ョ ンの 配 置 アルゴ リ ズムの 使 用 例 (8-29 ページ)<br />

• 領 域 の 割 り 当 て、 セレ ク タ、 および 優 先 度 の 動 作 を 示 す next_fit アルゴ リ ズ<br />

ムの 例 (8-32 ページ)<br />

• .ANY セクシ ョ ンのソート アルゴ リ ズムの 使 用 例 (8-34 ページ)<br />

• __at セ ク シ ョ ンの 配 置 に 関 する 制 限 (8-41 ページ)<br />

• __at セ ク シ ョ ンの 自 動 配 置 (8-42 ページ)<br />

• __at セ ク シ ョ ンの 手 動 配 置 (8-44 ページ)<br />

• オーバーレ イ を 使 用 し たセ ク シ ョ ンの 配 置 (8-49 ページ)<br />

• <strong>ARM</strong> C および C++ ライブラリコードの 配 置 について (8-52 ページ)<br />

• ルー ト 領 域 へのコー ド の 配 置 例 (8-53 ページ)<br />

• <strong>ARM</strong> C ラ イ ブ ラ リ コー ド の 配 置 例 (8-54 ページ)<br />

• <strong>ARM</strong> C++ ラ イ ブ ラ リ コー ド の 配 置 例 (8-55 ページ)<br />

• <strong>ARM</strong> ライブラリヘルパ 関 数 の 配 置 例 (8-56 ページ)<br />

• ページ 境 界 での 領 域 の 作 成 について (8-59 ページ)<br />

• 実 行 領 域 と 入 力 セ ク シ ョ ンのオーバーア ラ イ メ ン ト (8-61 ページ)<br />

• スキ ャ ッ タ フ ァ イル 内 の 式 の 評 価 (8-63 ページ)<br />

• 等 価 な ス キ ャ ッ タ ロー ド 記 述 を 使 用 し た 単 純 イ メ ージの 生 成 (8-65 ページ)<br />

• タイプ 1 のイ メージ :1 つの ロー ド 領 域 と 連 続 する 実 行 領 域 (8-66 ページ)<br />

• タイプ 2 のイ メージ :1 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (8-68 ページ)<br />

• タイプ 3 のイ メージ :2 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (8-70 ページ)<br />

• スキャッタファイルを 使 用 した ELF のマッ ピング (8-73 ページ) .<br />

『<strong>ARM</strong> ® プ ロ セ ッ サを ターゲ ッ ト と し た ソ フ ト ウ ェ ア 開 発 』 :<br />

• ビッ トバンドオブジェク トへのリンクを 含 むスキャッタロードファイル<br />

(3-17 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-2<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.1 スキャ ッ タロードについて<br />

スキャッタロードを 使 用 するこ とで、 リンカに 渡 すイ メージのメモリマップをテキ<br />

ス ト 形 式 の 記 述 フ ァ イルに よ って 指 定 で き ます。 ス キ ャ ッ タ ロー ド では、 イ メ ージ<br />

を 構 成 する コ ンポーネン ト のグループ 化 と 配 置 を 完 全 に 制 御 で き ます。 ス キ ャ ッ タ<br />

ロー ド は 単 純 な イ メ ージの 作 成 に も 使 用 でますが、 一 般 的 には メ モ リ マ ッ プが 複 雑<br />

な イ メ ージ、 つま り ロー ド 時 と 実 行 時 に 複 数 の メ モ リ 領 域 が メ モ リ マ ッ プ 内 に 分 散<br />

したイメージのみに 使 用 します。<br />

イ メ ージの メ モ リ マ ッ プは 領 域 と 出 力 セ ク シ ョ ンか ら 構 成 さ れます。 メ モ リ マ ッ プ<br />

内 の 領 域 ご と に、 ロー ド ア ド レ ス と 実 行 ア ド レ スがあ り ます。<br />

イ メ ージの メ モ リ マ ッ プを 作 成 する には、 以 下 の 情 報 を リ ン カに 渡 す 必 要 があ り ま<br />

す。<br />

• 入 力 セ ク シ ョ ン を 出 力 セ ク シ ョ ン と 領 域 にグループ 化 する 方 法 が 記 述 さ れた、<br />

グループ 化 に 関 する 情 報<br />

• メ モ リ マ ッ プ 内 に 領 域 を 配 置 する ア ド レ スが 記 述 さ れた、 配 置 に 関 する 情 報<br />

リ ン カは、 ス キ ャ ッ タ フ ァ イ ルを 使 用 し て イ メ ージを 作 成 する と き に、 い く つかの<br />

領 域 関 連 シンボルを 作 成 し ます。 これらの 特 殊 なシンボルは、 コード によ って 参 照<br />

さ れる 場 合 にのみ 作 成 さ れます。<br />

8.1.1 関 連 項 目<br />

概 念<br />

• イメージの 構 造 (4-3 ページ)<br />

• 領 域 関 連 シンボル (7-5 ページ)<br />

• スキャッタロードが 使 用 される 状 況 (8-4 ページ)<br />

• スキャッタファイルを 使 用 した ELF のマッ ピング (8-73 ページ) .<br />

『<strong>ARM</strong> ® プ ロ セ ッ サを ターゲ ッ ト と し た ソ フ ト ウ ェ ア 開 発 』 :<br />

• ビッ トバンドオブジェク トへのリンクを 含 むスキャッタロードファイル<br />

(3-17 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-3<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.2 スキャ ッ タ ロー ド が 使 用 される 状 況<br />

リ ン カへの コ マン ド ラ イ ンオプシ ョ ン を 使 用 する こ と でデータ と コー ド の 配 置 を あ<br />

る 程 度 制 御 で き ますが、 配 置 を 完 全 に 制 御 する には、 コ マン ド ラ イ ンか ら 入 力 可 能<br />

な 指 示 よ り も さ らに 詳 細 な 指 示 を 必 要 と し ます。<br />

以 下 に、 ス キ ャ ッ タ フ ァ イルが 必 要 なケース ま たは 非 常 に 有 効 なケース を 挙 げます。<br />

メモリマップが 複 雑 な 場 合<br />

数 多 くの 異 なるメモリエリアに 配 置 しなければならないコードとデータ<br />

には、 対 応 する セ ク シ ョ ン を どの メ モ リ 空 間 に 配 置 する かについて 詳 細<br />

な 示 が 必 要 と な り ます。<br />

メモリタイプが 異 なる 場 合<br />

多 くのシステムには、 フラッシュ、 ROM、 SDRAM、 高 速 SRAM など、<br />

さまざまな 物 理 メモリデバイスが 組 み 込 まれています。 スキャッタロー<br />

ド 記 述 ファルによって、 コード とデータを 最 も 適 切 なメモリ タイプに 対<br />

応 付 け る こ と がで き ます。 例 えば、 割 り 込 みコー ド を 高 速 SRAM に 配<br />

置 して 割 り 込 み 応 答 時 間 を 向 上 させ、 あまり 使 用 されないコンフィギュ<br />

レーシ ョ ン 情 報 はそれよ り も 遅 いフラ ッシュ メモ リ に 配 置 する といった<br />

ことが 考 えられます<br />

メモリマップされたペリフェラル<br />

ス キ ャ ッ タ ロー ド 記 述 フ ァ イルを 使 用 し て、 データ セ ク シ ョ ン を メ モ リ<br />

マップ 内 の 正 確 なアドレスに 配 置 して、 メモリマップされたペリフェラ<br />

ルアクセスでき ます。<br />

関 数 の 位 置 を 固 定 する 場 合<br />

ある 関 数 を 含 んでいるアプ リ ケーシ ョ ンが 修 正 され、 再 コンパイルされ<br />

た 場 合 でも、 その 関 数 を メ モ リ 内 の 同 じ 位 置 に 配 置 し てお く こ と ができ<br />

ます。 これはジャンプテーブルの 実 装 に 役 立 ちます。<br />

ヒ ープ と ス タ ッ ク の 識 別 にシンボルを 使 用 する 場 合<br />

アプ リ ケーシ ョ ンを リ ンクする と きのヒープと スタ ッ クの 位 置 を 示 すシ<br />

ンボルを 定 義 できます。<br />

組 み 込 みシ ス テムでは ROM、 RAM、 およびメモリマップされたペリフェラルが 使 用<br />

さ れる ため、 通 常 、 組 み 込 みシ ス テムの 実 装 ではス キ ャ ッ タ ロー ド が 必 要 と な り ま<br />

す。<br />

8.2.1 関 連 項 目<br />

概 念<br />

• スキャッタロードについて (8-3 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-4<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.3 スキャ ッ タロードのコマン ド ラインオプシ ョ ン<br />

以 下 に、 ス キ ャ ッ タ ロー ド を 使 用 する ための armlink コマンドラインオプショ ンを 示<br />

します。<br />

--scatter=description_file<br />

このコマンドは、description_file に 記 述 されている とお り にイ メ ージの メ モ リ マ ッ<br />

プを 構 成 するよ うにリ ンカに 指 示 します。<br />

ベースプ ラ ッ ト フ ォーム リ ン ク モデルでは、 ス キ ャ ッ タ ロー ド をサポー ト し ていま<br />

す。 こ のモデルを 有 効 にする には、 --base_platform コマンド ラインオプショ ンを 使 用<br />

します。<br />

--scatter は、 以 下 の メ モ リ マ ッ プ 関 連 のコ マン ド ラ イ ンオプシ ョ ン と 共 に 使 用 する<br />

ことはできません。<br />

• --bpabi<br />

• --dll<br />

• --partial<br />

• --ro_base<br />

• --rw_base<br />

• --ropi<br />

• --rwpi<br />

• --rosplit<br />

• --split<br />

• --reloc<br />

• --shared<br />

• --startup<br />

• --sysv<br />

• --zi_base<br />

8.3.1 関 連 項 目<br />

概 念<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ)<br />

• スキャッタロードについて (8-3 ページ)<br />

• スキャッタロードが 使 用 される 状 況 (8-4 ページ)<br />

• 等 価 な ス キ ャ ッ タ ロー ド 記 述 を 使 用 し た 単 純 イ メ ージの 生 成 (8-65 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --base_platform (2-18 ページ)<br />

• --bpabi (2-24 ページ)<br />

• --dll (2-49 ページ)<br />

• --partial (2-120 ページ)<br />

• --reloc (2-134 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --ropi (2-138 ページ)<br />

• --rosplit (2-139 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-5<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ)<br />

• --scatter=file (2-144 ページ)<br />

• --shared (2-148 ページ)<br />

• --split (2-156 ページ)<br />

• --startup=symbol、 --no_startup (2-157 ページ)<br />

• --sysv (2-172 ページ)<br />

• --zi_base=address (2-197 ページ)<br />

• 第 4 章 スキャッタファイルの 正 式 な 構 文 .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-6<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.4 メ モ リ マ ッ プが 単 純 な イ メ ージ<br />

イ メージの メ モ リ マップが 単 純 な 場 合 には、 以 下 のいずれかの 方 法 を 使 用 でき ます。<br />

• ス キ ャ ッ タ フ ァ イルを 使 用 し ます。<br />

• 基 本 的 な リ ン カ コ マン ド ラ イ ンオプシ ョ ン を 使 用 し て、 メ モ リ マ ッ プを 指 定 し<br />

ます。<br />

以 下 の 図 には、 単 純 な メ モ リ マ ッ プを 示 し ています。<br />

<br />

<br />

0x16000<br />

<br />

ZI <br />

RW <br />

SRAM<br />

0x10000<br />

/<br />

0x8000<br />

RW <br />

RO <br />

RO <br />

ROM<br />

0x0000<br />

図 8-1 スキャ ッ タロード を 行 った 単 純 メモリマップ<br />

以 下 の 例 では、 セグ メ ン ト をオブジ ェ ク ト フ ァ イ ルか ら メ モ リ に ロー ド する、 対 応<br />

するスキャ ッ タロード 記 述 を 示 しています。<br />

例 8-1 スキャ ッ タ フ ァ イルにおける 単 純 メモリマップ<br />

LOAD_ROM 0x0000 0x8000<br />

{<br />

EXEC_ROM 0x0000 0x8000<br />

{<br />

}<br />

; ロード 領 域 の 名 前 (LOAD_ROM)、<br />

; ロード 領 域 の 開 始 アドレス (0x0000)、<br />

; ロード 領 域 の 最 大 サイズ (0x8000)<br />

; 最 初 の 実 行 領 域 の 名 前 (EXEC_ROM)、<br />

; 実 行 領 域 の 開 始 ア ド レ ス (0x0000)、<br />

; 最 初 の 実 行 領 域 の 最 大 サ イ ズ (0x8000)<br />

* (+RO) ; すべてのコード と RO データを<br />

; こ の 実 行 領 域 に 配 置 す る<br />

}<br />

SRAM 0x10000 0x6000<br />

{<br />

}<br />

; 2 番 目 の 実 行 領 域 の 名 前 (RAM)、<br />

; 2 番 目 の 実 行 領 域 の 開 始 ア ド レ ス (0x10000)、<br />

; 2 番 目 の 実 行 領 域 の 最 大 サ イ ズ (0x6000)<br />

* (+RW, +ZI) ; すべての RW データ と ZI データを<br />

; こ の 実 行 領 域 に 配 置 す る<br />

領 域 の 最 大 サ イ ズ を 指 定 する かど う かは 任 意 です。 ただ し、 指 定 する こ と に よ っ て、<br />

その 領 域 が 境 界 からオーバーフ ローしないかど う かをチェ ッでき ます。<br />

こ の 例 では、 以 下 の リ ン カ コ マン ド ラ イ ン を 使 用 する こ と に よ り 、 制 限 のチェ ッ ク<br />

以 外 は 同 じ 結 果 を 得 る こ と がで き ます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-7<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

armlink --ro_base 0x0 --rw_base 0x10000<br />

8.4.1 関 連 項 目<br />

概 念<br />

• スキャッタロードについて (8-3 ページ)<br />

• スキャッタロードが 使 用 される 状 況 (8-4 ページ)<br />

• スキャッタファイルを 使 用 した ELF のマッ ピング (8-73 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --ro_base=address (2-137 ページ)<br />

• --rw_base=address (2-141 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-8<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.5 メ モ リ マ ッ プが 複 雑 な イ メ ージ<br />

メ モ リ マップが 複 雑 なイ メージの 場 合 、 基 本 的 な リ ンカコマン ド ラ イ ンオプシ ョ ン<br />

を 使 用 して、 メモ リ マップを 指 定 できません。 そ う したイ メーには、 スキャ ッ タ<br />

フ ァ イ ルを 使 用 する 必 要 があ り ます。<br />

以 下 の 図 には、 複 雑 な メ モ リ マ ッ プを 示 し ています。<br />

<br />

<br />

0x20000<br />

<br />

ZI #2<br />

RW #1<br />

DRAM<br />

0x18000<br />

0x10000<br />

ZI #1<br />

RW #2<br />

SRAM<br />

0x08000<br />

0x4000<br />

RW #2<br />

RO #2<br />

RO #2<br />

ROM2<br />

RW #1<br />

ROM1<br />

0x0000<br />

RO #1<br />

RO #1<br />

0x00000<br />

図 8-2 複 雑 な メ モ リ マ ッ プ<br />

以 下 の 例 では、 セグ メ ン ト を program1.o ファイルおよび program2.o ファイルからメモ<br />

リ に ロー ド する、 対 応 する ス キ ャ ッ タ ロー ド 記 述 を 示 し ています。<br />

例 8-2 スキャ ッ タ フ ァ イルにおける 複 雑 なメモリマップ<br />

LOAD_ROM_1 0x0000<br />

{<br />

EXEC_ROM_1 0x0000<br />

{<br />

program1.o (+RO)<br />

}<br />

; 最 初 のロード 領 域 の 開 始 アドレス (0x0000)<br />

; 最 初 の 実 行 領 域 の 開 始 ア ド レ ス (0x0000)<br />

; program1.o のすべてのコード と<br />

; RO デ ー タ を こ の 実 行 領 域 に 配 置 す る<br />

}<br />

DRAM 0x18000 0x8000<br />

{<br />

}<br />

; こ の 実 行 領 域 の 開 始 ア ド レ ス (0x18000)、<br />

; こ の 実 行 領 域 の 最 大 サ イ ズ (0x8000)<br />

program1.o (+RW, +ZI) ; program1.o のすべての RW データ と<br />

; ZI デ ー タ を こ の 実 行 領 域 に 配 置 す る<br />

LOAD_ROM_2 0x4000<br />

{<br />

EXEC_ROM_2 0x4000<br />

{<br />

; 2 番 目 のロード 領 域 の 開 始 アドレス (0x4000)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-9<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

}<br />

program2.o (+RO)<br />

; program2.o のすべてのコード と<br />

; RO デ ー タ を こ の 実 行 領 域 に 配 置 す る<br />

}<br />

SRAM 0x8000 0x8000<br />

{<br />

program2.o (+RW, +ZI) ; program2.o のすべての RW データ と<br />

; ZI デ ー タ を こ の 実 行 領 域 に 配 置 す る<br />

}<br />

注 意<br />

こ の 例 に 示 すス キ ャ ッ タ ロー ド 記 述 では、 program1.o と program2.o のみのコード およ<br />

びデータ の 位 置 を 指 定 し ています。 し たがって、 例 えば program3.o という 別 のモ<br />

ジュールをリンクさせるときにこの 記 述 ファイルを 使 用 しても、program3.o のコード<br />

とデータの 位 置 は 指 定 されません。<br />

コー ド と データ の 配 置 をかな り 厳 密 に 指 定 する 必 要 があ る 箇 所 を 除 き、 * または .ANY<br />

指 定 子 を 使 用 し て 残 り のコー ド と データ を 配 置 する こ と を 推 奨 し ます。<br />

8.5.1 関 連 項 目<br />

タスク<br />

• ルー ト 実 行 領 域 の 作 成 (8-14 ページ)<br />

• FIXED 属 性 を 使 用 し たルー ト 領 域 の 作 成 (8-17 ページ) .<br />

概 念<br />

• スキャッタロードについて (8-3 ページ)<br />

• スキャッタロードが 使 用 される 状 況 (8-4 ページ)<br />

• スキャッタファイルを 使 用 した ELF のマッ ピング (8-73 ページ) .<br />

『リンカリファレンス』:<br />

• 相 対 ベース ア ド レ スの ロー ド 領 域 と ZI 実 行 領 域 を 含 んだス キ ャ ッ タ フ ァ イル<br />

(4-40 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-10<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.6 スキャ ッ タ ロー ド 時 に 定 義 されない リ ン カ 定 義 シンボル<br />

ス キ ャ ッ タ フ ァ イルを 使 用 する 場 合 、 以 下 のシンボルは 定 義 さ れません。<br />

• Image$$RW$$Base<br />

• Image$$RW$$Limit<br />

• Image$$RO$$Base<br />

• Image$$RO$$Limit<br />

• Image$$ZI$$Base<br />

• Image$$ZI$$Limit<br />

ス キ ャ ッ タ フ ァ イルを 使 用 するが、 ス タ ッ ク と ヒ ープに 特 別 な 領 域 名 を 使 用 し ない<br />

場 合 、 ま たは __user_setup_stackheap() を 再 実 装 し ない 場 合 、 エ ラー メ ッ セージが 生 成<br />

されます。<br />

8.6.1 関 連 項 目<br />

タスク<br />

• リンカ 定 義 シンボルへのアクセス (7-4 ページ)<br />

• スキャッタファイルを 使 用 したスタック と ヒープの 指 定 (8-12 ページ) .<br />

『<strong>ARM</strong> ® プ ロ セ ッ サを ターゲ ッ ト と し た ソ フ ト ウ ェ ア 開 発 』 :<br />

• スタックと ヒープの 配 置 (3-14 ページ) .<br />

概 念<br />

『 移 行 と 互 換 性 』 :<br />

• RVCT v2.2 と RVCT v3.0 の 間 での C および C++ ライブラリの 変 更 点 (9-5 ペー<br />

ジ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-11<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.7 スキャ ッ タ フ ァ イルを 使 用 し たス タ ッ ク と ヒ ープの 指 定<br />

<strong>ARM</strong> C ライブラリには、 関 数 __user_setup_stackheap() の 複 数 の 実 装 があ り 、 ス<br />

キ ャ ッ タ フ ァ イルの 情 報 に 基 づいて 適 切 な 実 装 が 自 動 的 に 選 択 さ れます。<br />

2 つの 領 域 に よ る メ モ リ モデルを 選 択 する には、 ス キ ャ ッ タ フ ァ イ ルに <strong>ARM</strong>_LIB_HEAP<br />

および <strong>ARM</strong>_LIB_STACK という 名 前 の 2 つの 特 殊 な 実 行 領 域 を 定 義 し ます。 こ れら の 領<br />

域 には EMPTY 属 性 があ り ます。 そのため、 ラ イ ブ ラ リ では、 以 下 のシンボルの 値 を 使<br />

用 する、 __user_setup_stackheap() のデフ ォル ト ではない 実 装 が 選 択 されます。<br />

• Image$$<strong>ARM</strong>_LIB_STACK$$Base<br />

• Image$$<strong>ARM</strong>_LIB_STACK$$ZI$$Limit<br />

• Image$$<strong>ARM</strong>_LIB_HEAP$$Base<br />

• Image$$<strong>ARM</strong>_LIB_HEAP$$ZI$$Limit<br />

<strong>ARM</strong>_LIB_STACK 領 域 と <strong>ARM</strong>_LIB_HEAP 領 域 のど ち ら か 1 つを 指 定 できます。 その 際 、 サイ<br />

ズを 割 り 当 て る 必 要 があ り ます。 以 下 に 例 を 示 し ます。<br />

<strong>ARM</strong>_LIB_HEAP 0x20100000 EMPTY 0x100000-0x8000<br />

<strong>ARM</strong>_LIB_STACK 0x20200000 EMPTY -0x8000<br />

; ヒープは 1 MB の 位 置 か ら<br />

; 上 位 ア ド レ ス に 向 か っ て 展 開 さ れ る<br />

; スタック 空 間 は 2MB の RAM の 末 尾 か ら<br />

; 下 位 ア ド レ ス に 向 か っ て<br />

; 32KB 展 開 さ れ る<br />

EMPTY 属 性 が 定 義 さ れた <strong>ARM</strong>_LIB_STACKHEAP と い う 単 一 の 実 行 領 域 を 定 義 する こ と に よ<br />

り 、 ス タ ッ ク と ヒ ープの 結 合 領 域 を 使 用 で き ます。 その 結 果 、<br />

__user_setup_stackheap() では、 シンボル Image$$<strong>ARM</strong>_LIB_STACKHEAP$$Base および<br />

Image$$<strong>ARM</strong>_LIB_STACKHEAP$$ZI$$Limit の 値 が 使 用 されます。<br />

注<br />

__user_setup_stackheap() を 再 実 装 する と 、 すべての ラ イ ブ ラ リ 実 装 がオーバーラ イ ド<br />

されます。<br />

8.7.1 関 連 項 目<br />

タスク<br />

『<strong>ARM</strong> ® プ ロ セ ッ サを ターゲ ッ ト と し た ソ フ ト ウ ェ ア 開 発 』 :<br />

• スタックと ヒープの 配 置 (3-14 ページ) .<br />

概 念<br />

『 移 行 と 互 換 性 』 :<br />

• RVCT v2.2 と RVCT v3.0 の 間 での C および C++ ライブラリの 変 更 点 (9-5 ペー<br />

ジ) .<br />

参 照<br />

• 領 域 関 連 シンボル (7-5 ページ) .<br />

『<strong>ARM</strong> ® C および C++ ラ イ ブ ラ リ と 浮 動 小 数 点 サポー ト の 使 用 』 :<br />

• __user_setup_stackheap() (2-61 ページ)<br />

• 古 い 関 数 __user_initial_stackheap() (2-72 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-12<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.8 ルー ト 領 域 とは<br />

ルー ト 領 域 と は、 ロー ド ア ド レ ス と 実 行 ア ド レ スが 同 一 の 領 域 です。 イ メ ージの 初<br />

期 エン ト リ ポ イ ン ト は、 ルー ト 領 域 に 存 在 する 必 要 があ り ます 初 期 エン ト リ ポ イ ン<br />

ト がルー ト 領 域 内 にない 場 合 、 その リ ン ク は 失 敗 し、 リ ン カに よ っ てエ ラー メ ッ<br />

セージが 生 成 されます。<br />

例 8-3 ロー ド ア ド レス と 実 行 ア ド レスが 同 一 のルー ト 領 域<br />

LR_1 0x040000<br />

; ロード 領 域 を 0x40000 から 開 始 する<br />

{ ; 実 行 領 域 の 開 始 位 置 の 記 述<br />

ER_RO 0x040000 ; load address = execution address<br />

{<br />

* (+RO) ; すべての RO セクショ ン ( 初 期 エントリポイントが 指 定 されている<br />

; セクショ ンが 含 まれている 必 要 がある)<br />

}<br />

... ; 残 りのスキャ ッ タロード 記 述<br />

}<br />

8.8.1 関 連 項 目<br />

タスク<br />

• ルー ト 実 行 領 域 の 作 成 (8-14 ページ)<br />

• FIXED 属 性 を 使 用 し たルー ト 領 域 の 作 成 (8-17 ページ)<br />

• <strong>ARM</strong> C および C++ ライブラリコードの 配 置 について (8-52 ページ) .<br />

概 念<br />

• イメージの 構 造 (4-3 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-13<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.9 ルー ト 実 行 領 域 の 作 成<br />

ス キ ャ ッ タ フ ァ イル 内 で、 あ る 領 域 をルー ト 領 域 と し て 指 定 する 場 合 には、 以 下 の<br />

方 法 を 使 用 できます。<br />

• 実 行 領 域 の 属 性 と し て、 明 示 的 にま たはデフ ォル ト のま まで ABSOLUTE を 指 定 し、<br />

最 初 の 実 行 領 域 と それを 含 むロー ド 領 域 に 同 じ ア ド レ ス を 使 用 し ます。 実 行 領<br />

域 のア ド レ スに ロー ド 領 域 と 同 じ ア ド レ ス を 指 定 する には、 以 下 のいずれかの<br />

方 法 を 使 用 し ます。<br />

— 実 行 領 域 と ロー ド 領 域 のベース ア ド レ スに 同 じ 数 値 を 指 定 し ます。<br />

— ロー ド 領 域 内 の 最 初 の 実 行 領 域 のオフセ ッ ト に +0 を 指 定 します。<br />

ロード 領 域 内 の 2 番 目 以 降 のすべての 実 行 領 域 のオフセ ッ ト にゼ ロ (+0)<br />

が 指 定 されている 場 合 には、 ZI を 含 む 実 行 領 域 の 後 に 続 かないすべての<br />

実 行 領 域 も ルー ト 領 域 にな り ます。<br />

以 下 の 例 では、 暗 黙 的 に 定 義 さ れたルー ト 領 域 を 示 し ています。<br />

例 8-4 ロー ド ア ド レス と 実 行 ア ド レスが 同 一 の 暗 黙 的 なルー ト 領 域<br />

LR_1 0x040000<br />

; ロード 領 域 を 0x40000 から 開 始 する<br />

{ ; 実 行 領 域 の 開 始 位 置 の 記 述<br />

ER_RO 0x040000 ; load address = execution address<br />

{<br />

* (+RO) ; すべての RO セクショ ン ( 初 期 エントリポイントが 指 定 されている<br />

; セクショ ンが 含 まれている 必 要 がある)<br />

}<br />

... ; 残 りのスキャ ッ タロード 記 述<br />

}<br />

• FIXED 実 行 領 域 属 性 を 使 用 し て、 特 定 の 領 域 の ロー ド ア ド レ ス と 実 行 ア ド レ スに<br />

同 じアドレスを 指 定 します。<br />

FIXED 属 性 を 使 用 し て、 ROM 内 の 特 定 のア ド レ スに 任 意 の 実 行 領 域 を 配 置 で き<br />

ます。<br />

例 えば、 以 下 の メ モ リ マ ッ プは 固 定 実 行 領 域 を 示 し ています。<br />

–pad<br />

<br />

init.o<br />

init.o<br />

<br />

<br />

<br />

<br />

0x80000<br />

()<br />

()<br />

*(RO)<br />

0x4000<br />

*(RO)<br />

<br />

<br />

図 8-3 固 定 実 行 領 域 の メ モ リ マ ッ プ<br />

以 下 の 例 では、 対 応 する ス キ ャ ッ タ ロー ド 記 述 を 示 し ています。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-14<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

例 8-5 FIXED 属 性 の 使 用<br />

LR_1 0x040000<br />

; ロード 領 域 を 0x40000 から 開 始 する<br />

{ ; 実 行 領 域 の 開 始 位 置 の 記 述<br />

ER_RO 0x040000<br />

; load address = execution address<br />

{<br />

* (+RO) ; init.o 以 外 の RO セクショ ン<br />

}<br />

ER_INIT 0x080000 FIXED ; こ の 実 行 領 域 の ロ ー ド ア ド レ ス と<br />

; 実 行 ア ド レ ス が 0x80000 に 固 定 される<br />

{<br />

init.o(+RO) ; init.o のすべての RO セクション<br />

}<br />

... ; 残 りのスキャ ッ タロード 記 述<br />

}<br />

8.9.1 FIXED 属 性 の 誤 っ た 使 用 例<br />

以 下 の 例 では、 FIXED 実 行 領 域 属 性 の 誤 った 使 用 の 一 般 的 な 事 例 を 示 し ています。<br />

例 8-6 FIXED 属 性 の 誤 っ た 使 用<br />

LR1 0x8000<br />

{<br />

ER_LOW +0 0x1000<br />

{<br />

*(+RO)<br />

}<br />

; こ の 時 点 で、 次 の 使 用 可 能 な ロ ー ド ア ド レ ス と 実 行 ア ド レ ス が 0x8000 +<br />

; ER_LOW の 内 容 のサ イ ズにな り ます。 最 大 サ イ ズは 0x1000 に 制 限 さ れ て い る た め、 次 の 使 用 可 能 な ロ ー ド ア ド<br />

レスと<br />

; 実 行 ア ド レ ス は 最 大 で 0x9000 になります。<br />

ER_HIGH 0xF0000000 FIXED<br />

{<br />

*(+RW+ZI)<br />

}<br />

; 必 要 な 実 行 アドレスとロードアドレスは 0xF0000000 です。 ロードアドレス と<br />

; 実 行 ア ド レ ス が 一 致 す る よ う に、 リ ン カ に よ っ て 0xF0000000 - (0x8000 + (ER_LOW) のサイズ ) バイトの<br />

; パデ ィ ングが 挿 入 されます。<br />

}<br />

; その 他 の FIXED の 誤 っ た 使 用 の 一 般 的 な 事 例 と し て、 次 の 使 用 可 能 なロ ー ド ア ド レ ス よ り も<br />

; 下 位 の 実 行 ア ド レ ス を 指 定 す る こ と が あ り ま す。<br />

LR_HIGH 0x100000000<br />

{<br />

ER_LOW 0x1000 FIXED<br />

{<br />

*(+RO)<br />

}<br />

; LR_HIGH の 次 の 使 用 可 能 なロードアドレスは 0x10000000 です。 必 要 な 実 行<br />

; アドレスは 0x1000 です。 LR_HIGH の 次 の 使 用 可 能 な ロ ー ド ア ド レ ス は 単 調 に<br />

; 増 加 さ せ る 必 要 が あ る た め、 リ ン カ は ER_LOW に 0x10000000 よりも 下 位 のロードアドレスを 指 定 できませ<br />

ん。<br />

}<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-15<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.9.2 関 連 項 目<br />

タスク<br />

• FIXED 属 性 を 使 用 し たルー ト 領 域 の 作 成 (8-17 ページ) .<br />

概 念<br />

• ルー ト 領 域 と は (8-13 ページ) .<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 記 述 について (4-5 ページ)<br />

• 実 行 領 域 の 記 述 について (4-10 ページ)<br />

• ロード 領 域 に 相 対 アドレス +offset を 使 用 する 際 の 注 意 事 項 (4-18 ページ)<br />

• 実 行 領 域 に 相 対 ア ド レ ス +offset を 使 用 する 際 の 注 意 事 項 (4-19 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

• ロー ド 領 域 と 実 行 領 域 のア ド レ ス 属 性 (4-16 ページ) .<br />

『アセンブラ リ フ ァ レンス』 :<br />

• ENTRY (6-78 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-16<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.10 FIXED 属 性 を 使 用 し たルー ト 領 域 の 作 成<br />

実 行 領 域 のス キ ャ ッ タ フ ァ イルで FIXED 属 性 を 使 用 して、 ロードア ド レス と 実 行 ア ド<br />

レスを 固 定 したルート 領 域 を 作 成 できます。<br />

FIXED 属 性 は、 1 つのロード 領 域 内 に 複 数 のルー ト 領 域 を 作 成 する 場 合 に 使 用 され、<br />

通 常 は 1 つの ROM デバイ スに 使 用 さ れます。 例 えば、 こ の 属 性 を 使 し て、 関 数 ま た<br />

は 定 数 テーブルやチェ ッ ク サムなどのデータブロ ッ ク を ROM 内 の 固 定 ア ド レ スに 配<br />

置 する こ と で、 ポ イ ン タ を 使 用 し て 容 易 にア ク スで き ます。<br />

初 期 化 コー ド を ROM の 最 初 に 配 置 し、 チェ ッ ク サム を ROM の 最 後 に 配 置 する よ う<br />

な 場 合 には、 メ モ リ の 一 部 が 使 用 さ れない 可 能 性 があ り ます。 * または .ANY モジュー<br />

ルセレ ク タ を 使 用 する こ と で、 初 期 化 ブ ロ ッ ク の 最 後 と データ ブ ロ ッ ク の 最 初 の 間<br />

にある 領 域 を 充 填 できます。<br />

コー ド の 保 守 と デバ ッ グ を 容 易 にするには、 ス キ ャ ッ タ フ ァ イル 内 での 配 置 に 関 す<br />

る 指 定 を 最 小 限 に 抑 え、 関 数 と データ の 詳 細 な 配 置 は リ ンカにねる こ と を 推 奨 し ま<br />

す。<br />

部 分 的 に リ ン ク さ れた コ ンポーネン ト オブジ ェ ク ト は 指 定 で き ません。 例 えば、<br />

obj1.o、 obj2.o、 および obj3.o の 3 つのオブジ ェ ク ト を 部 分 的 に リ ン ク し て obj_all.o<br />

を 生 成 する 場 合 、 結 果 と し て 得 ら れたオブジ ェ ク ト 内 ではコ ンポーネン ト オブジ ェ<br />

クトの 名 前 は 破 棄 されます。したがって、いずれのオブジェクトも obj1.o などの 名<br />

前 で 参 照 する こ と はでき ません。 参 照 でき るのは、 結 合 されたオブジェ ク ト<br />

obj_all.o のみです。<br />

注<br />

FIXED 属 性 と 1 つのロード 領 域 を 使 用 する こ と が 適 切 ではない 場 合 があ り ます。 固 定<br />

位 置 の 指 定 に 関 し ては 以 下 の よ う な 方 法 も あ り ます。<br />

• ローダで 複 数 の ロー ド 領 域 を 処 理 で き る 場 合 には、 RO コード またはデータを<br />

専 用 の ロー ド 領 域 内 に 配 置 し ます。<br />

• 関 数 ま たはデータ を ROM 内 の 固 定 位 置 に 配 置 する 必 要 がない 場 合 には、 FIXED<br />

属 性 の 代 わ り に ABSOLUTE 属 性 を 使 用 し ます。 こ の 属 性 を 使 用 する と 、 ローダは<br />

ロード 領 域 から RAM 内 の 指 定 さ れたア ド レ スにデータ を コ ピーし ます。<br />

ABSOLUTE がデフ ォル ト の 属 性 です。<br />

• メモリマップされた I/O の 位 置 にデータ 構 造 を 配 置 するには、2 つのロード 領 域<br />

を 使 用 して UNINIT 属 性 を 指 定 し ます。 UNINIT を 指 定 する と 、 その メ モ リ 位 置 は<br />

ゼロで 初 期 化 されません。<br />

8.10.1 関 連 項 目<br />

概 念<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 記 述 について (4-10 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

• ロー ド 領 域 と 実 行 領 域 のア ド レ ス 属 性 (4-16 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-17<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.11 特 定 ア ド レスへの 関 数 と デー タの 配 置<br />

通 常 、 コ ンパ イ ラ は 1 つのソース フ ァ イルから RO、 RW、 ZI の 3 つのセ ク シ ョ ンを<br />

生 成 し ます。 こ れら の 領 域 には、 ソース フ ァ イルのすべての コー と データ が 保 持 さ<br />

れます。 1 つの 関 数 項 目 ま たはデータ 項 目 を 固 定 ア ド レ スに 配 置 する には、 その 関 数<br />

ま たはデータ を、 入 力 フ ァ イルの 他 の 部 分 は 別 に リ ン カに 処 理 させる 必 要 があ り ま<br />

す。<br />

リンカでセクションを 特 定 のアドレスに 配 置 できるようにするには、 方 法 が 2 つあ<br />

ります。<br />

• 目 的 のア ド レ スに 実 行 領 域 を 定 義 する ス キ ャ ッ タ フ ァ イルは、 1 つのセ ク シ ョ<br />

ンだけを 選 択 する セ ク シ ョ ン 記 述 を 使 用 し て 作 成 で き ます。<br />

• 特 別 な 名 前 付 き セ ク シ ョ ンの 場 合 、 リ ン カはセ ク シ ョ ン 名 か ら 配 置 ア ド レ ス を<br />

取 得 で き ます。 こ れ ら の 特 別 な 名 前 付 き セ ク シ ョ ンは、 __at セクションと 呼 ば<br />

れます。<br />

関 数 ま たは 変 数 を 特 定 のア ド レ スに 配 置 するには、 その 固 有 のセ ク シ ョ ンに 配 置 す<br />

る 必 要 があ り ます。 それを 実 行 するには、 方 法 がい く つかあ り ます。<br />

• 関 数 ま たはデータ 項 目 を、 その 関 数 やデータ 項 目 し かない 個 別 の ソース フ ァ イ<br />

ル 内 に 配 置 する。<br />

• __attribute__((at(address))) を 使 用 して、 別 個 のセクシ ョ ンの 特 定 のア ド レスに<br />

変 数 を 配 置 する。<br />

• __attribute__((section("name"))) を 使 用 し て、 名 前 付 き セ ク シ ョ ンに 関 数 や 変 数<br />

を 配 置 する。<br />

• アセンブ リ 言 語 から AREA ディレクティブを 使 用 します。 アセンブリ コードで 配<br />

置 可 能 な 最 小 単 位 は AREA です。<br />

• --split_sections コンパイラオプションを 使 用 して、 ソースファイルの 関 数 ごと<br />

に 1 つの ELF セクションを 生 成 します。<br />

こ のオプシ ョ ン を 指 定 する と 、 関 数 間 でア ド レ ス、 データ、 および 文 字 列 リ テ<br />

ラ ルを 共 有 する 可 能 性 が 減 る ため、 一 部 の 関 数 で コー ド のサ イ ズがずかに 増 加<br />

します。 ただし、armlink --remove を 指 定 する こ とによって、 リ ンカは 使 用 され<br />

ていない 関 数 を 削 除 でき るため、 最 終 イ メージの 合 計 サイズを 小 さ くする こ と<br />

ができ ます。<br />

8.11.1 スキャ ッ タ ロー ド を 使 用 せずに 特 定 のア ド レスに 変 数 を 配 置 する 例<br />

こ の 例 では、 コー ド と データ を 特 定 のア ド レ スに 配 置 する よ う に ソース コー ド を 変<br />

更 する 方 法 を 紹 介 し ています。 なお、 ス キ ャ ッ タ フ ァ イ ルは 必 と し ません。<br />

1. 以 下 の コー ド を 含 む main.c という 名 前 のソースファイルを 作 成 します。<br />

#include <br />

extern int sqr(int n1);<br />

int gSquared __attribute__((at(0x5000))); // 0x5000 に 配 置<br />

int main()<br />

{<br />

gSquared=sqr(3);<br />

printf("Value squared is:%d\n", gSquared);<br />

}<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-18<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

2. 以 下 の コー ド を 含 む function.c という 名 前 のソースファイルを 作 成 します。<br />

int sqr(int n1)<br />

{<br />

return n1*n1;<br />

}<br />

3. ソースをコンパイルし、 リ ンクします。<br />

armcc -c -g function.c<br />

armcc -c -g main.c<br />

armlink --map function.o main.o -o squared.axf<br />

--map オプシ ョ ン を 指 定 する と 、 イ メ ージの メ モ リ マ ッ プが 表 示 さ れます。 ま<br />

た、 --autoat はデフ ォル ト です。<br />

この 例 では、__attribute__((at(0x5000))) によって、 グローバル 変 数 gSquared が 絶 対 ア<br />

ドレス 0x20000 に 配 置 されます。 gSquared は、 実 行 領 域 ER$$.<strong>ARM</strong>.__AT_0x00005000 および<br />

ロード 領 域 LR$$.<strong>ARM</strong>.__AT_0x00005000 に 配 置 されます。<br />

メ モ リ マ ッ プは 次 の よ う に 表 示 さ れます。<br />

...<br />

Load Region LR$$.<strong>ARM</strong>.__AT_0x00005000 (Base:0x00005000, Size:0x00000000, Max:0x00000004, ABSOLUTE)<br />

Execution Region ER$$.<strong>ARM</strong>.__AT_0x00005000 (Base:0x00005000, Size:0x00000004, Max:0x00000004, ABSOLUTE,<br />

UNINIT)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

0x00005000 0x00000004 Zero RW 15 .<strong>ARM</strong>.__AT_0x00005000 main.o<br />

8.11.2 スキャ ッ タロード を 使 用 して 名 前 付 きセクシ ョ ンに 変 数 を 配 置 する 例<br />

この 例 では、 スキ ャ ッ タ フ ァ イルを 使 用 し て、 コード とデータ を 特 定 のセ ク シ ョ ン<br />

に 配 置 する よ う に ソ ース コー ド を 変 更 する 方 法 を 紹 介 し ています。<br />

1. 以 下 の コー ド を 含 む main.c という 名 前 のソースファイルを 作 成 します。<br />

#include <br />

extern int sqr(int n1);<br />

int gSquared __attribute__((section("foo"))); // セクショ ン foo に 配 置<br />

int main()<br />

{<br />

gSquared=sqr(3);<br />

printf("Value squared is:%d\n", gSquared);<br />

}<br />

2. 以 下 の コー ド を 含 む function.c という 名 前 のソースファイルを 作 成 します。<br />

int sqr(int n1)<br />

{<br />

return n1*n1;<br />

}<br />

3. 以 下 の ロー ド 領 域 を 含 んだ scatter.scat という 名 前 のスキャッタファイルを 作<br />

成 します。<br />

LR1 0x0000 0x20000<br />

{<br />

ER1 0x0 0x2000<br />

{<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-19<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

}<br />

*(+RO)<br />

; 残 りのコード と 読 み 出 し 専 用 データ<br />

}<br />

ER2 0x8000 0x2000<br />

{<br />

main.o<br />

}<br />

ER3 0x10000 0x2000<br />

{<br />

function.o<br />

*(foo)<br />

; gSquared を ER3 に 配 置 する<br />

}<br />

RAM 0x200000 (0x1FF00-0x2000) ; RW データ と ZI データを 0x200000 に 配 置 する<br />

{<br />

*(+RW, +ZI)<br />

}<br />

<strong>ARM</strong>_LIB_STACK 0x800000 EMPTY -0x10000<br />

{<br />

}<br />

<strong>ARM</strong>_LIB_HEAP +0 EMPTY 0x10000<br />

{<br />

}<br />

このプログラムは、 セミホスティングライブラ リ と リンクされるため、<br />

<strong>ARM</strong>_LIB_STACK 領 域 と <strong>ARM</strong>_LIB_HEAP 領 域 が 必 要 です。<br />

4. ソースをコンパイルし、 リ ンクします。<br />

armcc -c -g function.c<br />

armcc -c -g main.c<br />

aarmlink --map --scatter=scatter.scat function.o main.o -o squared.axf<br />

--map オプシ ョ ン を 指 定 する と 、 イ メ ージの メ モ リ マ ッ プが 表 示 さ れます。 ま<br />

た、 --autoat はデフ ォル ト です。<br />

この 例 では、__attribute__((section("foo"))) によって、グローバル 変 数 gSquared が foo<br />

というセクションに 配 置 されます。 セクション foo は、 ER3 実 行 領 域 に 配 置 さ れます。<br />

メ モ リ マ ッ プは 次 の よ う に 表 示 さ れます。<br />

Load Region LR1 (Base:0x00000000, Size:0x00001778, Max:0x00020000, ABSOLUTE)<br />

...<br />

Execution Region ER3 (Base:0x00010000, Size:0x00000004, Max:0x00002000, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

...<br />

0x00010000 0x00000004 Data RW 15 foo main.o<br />

注<br />

スキャッタファイルから *(foo) を 省 略 した 場 合 、 セクシ ョ ンは 同 じ 種 類 の 領 域 に 配<br />

置 されます。 この 例 では RAM という ことになります。<br />

8.11.3 スキャ ッ タ ロー ド を 使 用 し て 特 定 のア ド レスに 変 数 を 配 置 する 例<br />

この 例 では、 スキ ャ ッ タ フ ァ イルを 使 用 し て、 コード とデータ を 特 定 のア ド レ スに<br />

配 置 するよ うにソースコードを 変 更 する 方 法 を 紹 介 しています<br />

1. 以 下 の コー ド を 含 む main.c という 名 前 のソースファイルを 作 成 します。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-20<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

#include <br />

extern int sqr(int n1);<br />

// アドレス 0x10000 に 配 置 する<br />

const int gValue __attribute__((section(".<strong>ARM</strong>.__at_0x10000"))) = 3;<br />

int main()<br />

{<br />

int squared;<br />

squared=sqr(gValue);<br />

printf("Value squared is:%d\n", squared);<br />

}<br />

2. 以 下 の コー ド を 含 む function.c という 名 前 のソースファイルを 作 成 します。<br />

int sqr(int n1)<br />

{<br />

return n1*n1;<br />

}<br />

3. 以 下 の ロー ド 領 域 を 含 んだ scatter.scat という 名 前 のスキャッタファイルを 作<br />

成 します。<br />

LR1 0x0<br />

{<br />

ER1 0x0<br />

{<br />

*(+RO)<br />

; 残 りのコード と 読 み 出 し 専 用 データ<br />

}<br />

ER2 +0<br />

{<br />

function.o<br />

*(.<strong>ARM</strong>.__at_0x10000)<br />

; gValue を 0x10000 に 配 置 する<br />

}<br />

RAM 0x200000 (0x1FF00-0x2000) ; RW データ と ZI データを 0x200000 に 配 置 する<br />

{<br />

*(+RW, +ZI)<br />

}<br />

<strong>ARM</strong>_LIB_STACK 0x800000 EMPTY -0x10000<br />

{<br />

}<br />

<strong>ARM</strong>_LIB_HEAP +0 EMPTY 0x10000<br />

{<br />

}<br />

}<br />

このプログラムは、 セミホスティングライブラ リ と リンクされるため、<br />

<strong>ARM</strong>_LIB_STACK 領 域 と <strong>ARM</strong>_LIB_HEAP 領 域 が 必 要 です。<br />

4. ソースをコンパイルし、 リ ンクします。<br />

armcc -c -g function.c<br />

armcc -c -g main.c<br />

armlink --no_autoat --scatter=scatter.scat --map function.o main.o -o squared.axf<br />

--map オプシ ョ ン を 指 定 する と 、 イ メ ージの メ モ リ マ ッ プが 表 示 さ れます。<br />

メモリマップを 見 ると、 アドレス 0x11000 の ER2 実 行 領 域 に 変 数 が 配 置 さ れてい る こ<br />

とがわかります。<br />

...<br />

Execution Region ER2 (Base:0x00001598, Size:0x0000ea6c, Max:0xffffffff, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-21<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

0x00001598 0x0000000c Code RO 3 .text function.o<br />

0x000015a4 0x0000ea5c PAD<br />

0x00010000 0x00000004 Data RO 15 .<strong>ARM</strong>.__at_0x10000 main.o...<br />

この 例 では、ER1 のサイズが 不 明 です。 そのため、 gValue は、 ER1 または ER2 に 配 置 さ<br />

れる 可 能 性 があ り ます。 gValue を 確 実 に ER2 へ と 配 置 する には、 対 応 する セレ ク タ を<br />

ER2 に 含 めた う えで、 --no_autoat コマンドラインオプショ ンでリンクする 必 要 があり<br />

ます。 --no_autoat を 省 略 した 場 合 、 gValue は、 実 行 領 域 ER$$.<strong>ARM</strong>.__AT_0x00020000 を 含<br />

んだ 別 個 の ロー ド 領 域 LR$$.<strong>ARM</strong>.__AT_0x00010000 に 配 置 されます。<br />

8.11.4 関 連 項 目<br />

タスク<br />

• ス キ ャ ッ タ ロー ド を 使 用 し た 名 前 付 き セ ク シ ョ ンの 明 示 的 な 配 置 (8-23 ペー<br />

ジ)<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ペー<br />

ジ) .<br />

概 念<br />

• __at セ ク シ ョ ンの 配 置 に 関 する 制 限 (8-41 ページ) .<br />

参 照<br />

『コンパイ ラ リ ファレンス』 :<br />

• --split_sections (3-203 ページ)<br />

• __attribute__((section("name"))) 関 数 属 性 (5-54 ページ)<br />

• __attribute__((at(address))) 変 数 属 性 (5-68 ページ)<br />

• __attribute__((section("name"))) 変 数 属 性 (5-73 ページ)<br />

• #pragma arm section [section_type_list] (5-84 ページ) .<br />

『リンカリファレンス』:<br />

• --autoat、 --no_autoat (2-17 ページ)<br />

• --map、 --no_map (2-109 ページ)<br />

• --scatter=file (2-144 ページ) .<br />

『アセンブラ リ フ ァ レンス』 :<br />

• AREA (6-72 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-22<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.12 スキャ ッ タ ロー ド を 使 用 し た 名 前 付 きセ ク シ ョ ンの 明 示 的 な 配 置<br />

以 下 の 例 では、 ス キ ャ ッ タ ロー ド を 使 用 し て 名 前 付 き セ ク シ ョ ン を 明 示 的 に 配 置 す<br />

る 方 法 を 示 しています。<br />

例 8-7 セ ク シ ョ ンの 明 示 的 な 配 置<br />

LR1 0x0 0x10000<br />

{<br />

ER1 0x0 0x2000<br />

; 初 期 化 コ ー ド を 含 む ル ー ト 領 域<br />

{<br />

init.o (INIT, +FIRST) ; 初 期 化 コ ー ド を 0x0 に 正 確 に 配 置 する<br />

*(+RO)<br />

; 残 りのコード と 読 み 出 し 専 用 データ<br />

}<br />

RAM_RW 0x400000 (0x1FF00-0x2000) ; RW データ と ZI データを 0x400000 に 配 置 する<br />

{<br />

*(+RW)<br />

}<br />

RAM_ZI +0<br />

{<br />

*(+ZI)<br />

}<br />

DATABLOCK 0x1FF00 0xFF<br />

; 0x1FF00 の 実 行 領 域<br />

{ ; テ ー ブ ル に 使 用 可 能 な 最 大 空 間 は 0xFF<br />

data.o(+RO-DATA)<br />

; RO データを 0x1FF00 と 0x1FFFF の 間 に 配 置 する<br />

}<br />

}<br />

この 例 では、 スキ ャ ッ タ ロード 記 述 によ って、 以 下 のよ う に 配 置 が 行 われます。<br />

• 初 期 化 コー ド は、 init.o ファイルの INIT セクションに 配 置 されます。 この 例 で<br />

は、 INIT セ ク シ ョ ンの コー ド が 最 初 にア ド レ ス 0x0 に 配 置 され、 その 後 に、 RO<br />

コードの 残 り と、 オブジェ ク ト data.o 内 の RO データ を 除 く すべての RO デー<br />

タが 配 置 されます。<br />

• すべてのグ ローバル RW 変 数 は RAM 内 の 0x400000 に 配 置 されます。<br />

• data.o 内 の RO-DATA テーブルはア ド レス 0x1FF00 に 配 置 されます。<br />

8.12.1 関 連 項 目<br />

タスク<br />

• FIXED 属 性 を 使 用 し たルー ト 領 域 の 作 成 (8-17 ページ) .<br />

概 念<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 記 述 について (4-5 ページ)<br />

• 実 行 領 域 の 記 述 について (4-10 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

• ロー ド 領 域 と 実 行 領 域 のア ド レ ス 属 性 (4-16 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-23<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

『アセンブラ リ フ ァ レンス』 :<br />

• ENTRY (6-78 ページ) .<br />

『<strong>ARM</strong> ® プ ロ セ ッ サを ターゲ ッ ト と し た ソ フ ト ウ ェ ア 開 発 』 :<br />

• ビッ トバンドオブジェク トへのリンクを 含 むスキャッタロードファイル<br />

(3-17 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-24<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.13 .ANY モジ ュールセレ ク タ によ る 未 割 り 当 てセ ク シ ョ ンの 配 置<br />

リ ンカは、 特 定 の 実 行 領 域 に 対 し て 入 力 セ ク シ ョ ンの 配 置 を 試 みます。 解 決 で き な<br />

い 入 力 セクションが 存 在 し、そうしたセクションの 配 置 が 重 要 ない 場 合 は、 ス<br />

キャッタファイルで .ANY モジュールセレ ク タを 使 用 できます。<br />

ほとんどの 場 合 、 1 つの .ANY セレクタを 使 用 しても、* モジ ュールセレ ク タ を 使 用 し<br />

ても、 同 じ 結 果 が 得 られます。 ただし、 * とは 異 なり、.ANY は 複 数 の 実 行 領 域 に 指 定<br />

できます。<br />

8.13.1 未 割 り 当 てセ ク シ ョ ンのデフ ォル ト の 配 置 規 則<br />

リンカが 未 割 り 当 てセクションを 割 り 当 てる 際 のデフォルトの 規 則 を 次 に 示 します。<br />

• 現 在 最 も 空 き スペースのあ る 実 行 領 域 に 未 割 り 当 てセ ク シ ョ ン を 配 置 し ます。<br />

未 割 り 当 てセ ク シ ョ ンに 使 用 する 最 大 スペースサ イ ズ を 実 行 領 域 属 ANY_SIZE で<br />

指 定 で き ます。<br />

• セクションをサイズの 降 順 にソート します。<br />

8.13.2 複 数 の .ANY セレ ク タ を 使 用 し た 場 合 の 配 置 規 則<br />

スキャッタファイルに 複 数 の .ANY セレクタが 存 在 している 場 合 、 リ ンカは、 未 割 り<br />

当 てセクションのうち、 サイズが 最 大 のセクションを 取 得 し、 それを 最 も 限 定 的 で<br />

空 きスペースが 十 分 ある .ANY 実 行 領 域 に 割 り 当 て ます。 例 えば、 .ANY(.text) は、<br />

.ANY(+RO) よ り も 限 定 的 だ と 判 断 さ れます。<br />

複 数 の 実 行 領 域 が 等 し く 限 定 的 であ る 場 合 、 空 き スペースが 最 も 大 きい 実 行 領 域 に<br />

セクションが 割 り 当 てられます。<br />

以 下 に 例 を 示 し ます。<br />

• 2 つの 実 行 領 域 が 同 じ く ら い 限 定 的 であ り 、 1 つはサ イ ズ 制 限 が 0x2000 で、 も う<br />

1 つは 制 限 がない 場 合 、 後 者 の 無 制 限 の .ANY 領 域 にすべてのセ ク シ ョ ンが 割 り<br />

当 てられます。<br />

• 2 つの 実 行 領 域 が 同 じ く ら い 限 定 的 であ り 、 1 つはサ イ ズ 制 限 が 0x2000 で、 も う<br />

1 つはサイ ズ 制 限 が 0x3000 であ る 場 合 、 配 置 さ れる セ ク シ ョ ンはまず、 サ イ ズ<br />

制 限 が 0x3000 である 後 者 の .ANY 領 域 に、 .ANY の 残 り サイ ズが 0x2000 になるまで<br />

割 り 当 てられていきます。 その 後 は、 両 方 の .ANY 実 行 領 域 に 交 互 にセ ク シ ョ ン<br />

が 割 り 当 て られます。<br />

8.13.3 .ANY セ ク シ ョ ンの 優 先 順 位<br />

複 数 の .ANY セクションがある 場 合 は、.ANYnum セレクタ (num は、 ゼロ またはそれよ り<br />

大 き い 正 の 整 数 ) で 優 先 順 位 を 指 定 で き ます。 最 も 大 きい 整 数 を 持 ったセレ ク タ に、<br />

最 も 高 い 優 先 順 位 が 設 定 さ れます。<br />

以 下 に、 .ANYnum の 使 用 例 を 示 し ます。<br />

lr1 0x8000 1024<br />

{<br />

er1 +0 512<br />

{<br />

.ANY1(+RO) ; er3 と 均 等 に 分 散<br />

}<br />

er2 +0 256<br />

{<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-25<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

}<br />

.ANY2(+RO) ; 最 も 優 先 順 位 が 高 い た め、 最 初 に 処 理 さ れ る<br />

}<br />

er3 +0 256<br />

{<br />

.ANY1(+RO) ; er1 と 均 等 に 分 散<br />

}<br />

8.13.4 複 数 の .ANY セレ ク タがある 場 合 の 入 力 セ ク シ ョ ン 配 置 の 制 御<br />

複 数 の .ANY セレク タを 使 用 している 場 合 、 リ ンカによる 未 割 り 当 て 入 力 セクシ ョ ン<br />

の 配 置 動 作 は、 配 置 アルゴ リ ズム ま たは ソー ト 順 序 を 変 え る こ と に よ って 制 御 で き<br />

ます。 以 下 のコマン ド ラ インオプシ ョ ンが 利 用 できます。<br />

• --any_placement=algorithm。 algorithm には、 first_fit、 worst_fit、 best_fit、<br />

next_fit のいずれかを 指 定 し ます。<br />

• --any_sort_order=order。 order には、 cmdline または descending_size を 指 定 し ます。<br />

領 域 を 順 に 埋 めてい く には、 first_fit を 使 用 します。<br />

領 域 をその 上 限 まで 埋 め る には、 best_fit を 使 用 し ます。<br />

領 域 を 均 等 に 埋 めるには、 worst_fit を 使 用 し ます。 同 じ サ イ ズの 領 域 およびセ ク<br />

シ ョ ンの 場 合 、 worst_fit は、 領 域 を 循 環 的 に 埋 めてい き ます。<br />

よ り 確 定 的 なパターンで 埋 めてい く 必 要 があ る 場 合 は、 next_fit を 使 用 し ます。<br />

first_fit や best_fit で、 領 域 の 上 限 まで 埋 めてい く と、 領 域 が 一 杯 になって し ま う<br />

可 能 性 があ り ます。 こ れは、 リ ン カに よ って 生 成 さ れる コ ンテン ツ (パデ ィ ン グ、<br />

ベニアなど) は、 セク シ ョ ンが .ANY セレ ク タ に 割 り 当 て ら れる まで 判 明 し ないため<br />

です。 その 場 合 は、 次 のエラーが 表 示 されます。<br />

エラー:L6220E: 実 行 領 域 regionname のサイズ (size バイト ) が 制 限 (limit バイト ) を 超 えています。<br />

--any_contingency は、 領 域 が 埋 め 尽 く されるのを 防 ぐ ためのオプシ ョ ンです。 リ ンカ<br />

に よ って 生 成 さ れる コ ンテン ツのために、 領 域 の 全 体 の う ち 一 部 のサ イ ズが 確 保 さ<br />

れます。 この 非 常 用 (contingency) のエリ アは、 他 に 空 きのある 領 域 がない 場 合 に<br />

しか 使 用 されません。 この 動 作 が 最 も 起 きやすい first_fit および best_fit のアルゴ<br />

リ ズムでは、 このオプシ ョ ンがデフォルト で 有 効 になっています。<br />

8.13.5 未 割 り 当 てセ ク シ ョ ンの 配 置 に 使 用 で き る 最 大 サイズの 指 定<br />

実 行 領 域 属 性 ANY_SIZE max_size を 使 用 する と 、armlink が 未 割 り 当 てセ ク シ ョ ンで 満 た<br />

すこ と がで き る 領 域 の 最 大 サ イ ズを 指 定 で き ます。<br />

こ のキーワー ド を 使 用 する 場 合 は、 以 下 の 制 限 事 項 に 注 意 し て 下 さ い。<br />

• max_size は、 領 域 サ イ ズ 以 下 であ る 必 要 があ り ます。<br />

• .ANY セレクタなしで ANY_SIZE を 領 域 上 で 使 用 でき ますが、 これは armlink によっ<br />

て 無 視 されます。<br />

ANY_SIZE が 存 在 する 場 合 、 armlink は 以 下 のよ う にな り ます。<br />

• 所 定 の .ANY サ イ ズをオーバーラ イ ド し ません。 つま り 、 優 先 順 位 を 下 げずに、<br />

後 でよ り 多 く のセ ク シ ョ ンをフ ィ ッ ト させよ う と し ます。<br />

• コ ンテ ィ ンジ ェ ンシーを 再 計 算 し ません。<br />

• コンティンジェンシースペースにセクションを 割 り 当 てません。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-26<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

ANY_SIZE では、 --any_contingency の 指 定 は 必 要 あ り ません。 ただし、 --any_contingency<br />

が 指 定 されて も ANY_SIZE は 指 定 されない 場 合 、 armlink はコンティンジェンシーを 調<br />

整 し よ う と し ます。 目 的 は 以 下 の と お り です。<br />

• .ANY 領 域 をオーバーフ ローし ない<br />

• セ ク シ ョ ン を コ ンテ ィ ンジ ェ ンシー 予 約 済 みスペースに 配 置 する こ と を 拒 否 し<br />

ない<br />

コマンド ラインで --any_contingency を 指 定 しても、 ANY_SIZE を 指 定 した 領 域 では 無 視<br />

されます。ANY_SIZE が 指 定 されていない 領 域 では、 通 常 どおり 使 用 されます。<br />

以 下 に、 ANY_SIZE の 使 用 例 を 示 し ます。<br />

LOAD_REGION 0x0 0x3000<br />

{<br />

ER_1 0x0 ANY_SIZE 0xF00 0x1000<br />

{<br />

.ANY<br />

}<br />

ER_2 0x0 ANY_SIZE 0xFB0 0x1000<br />

{<br />

.ANY<br />

}<br />

ER_3 0x0 ANY_SIZE 0x1000 0x1000<br />

{<br />

.ANY<br />

}<br />

}<br />

こ の 例 では、 以 下 の よ う にな り ます。<br />

• ER_1 には、 リ ンカ 生 成 コ ンテンツのために 予 約 された 0x100 があ り ます。<br />

• ER_2 には、 リ ンカ 生 成 コ ンテンツのために 予 約 された 0x50 があ り ます。 これ<br />

は、 --any_contingency の 自 動 コ ンテ ィ ンジ ェ ンシー と ほ と んど 同 じです。<br />

• ER_3 には、 予 約 済 みスペースはあ り ません。 し たがって、 領 域 は 100% 満 たさ<br />

れ、 ベニア 用 のコンティンジェンシーは 残 り ません。ANY_SIZE パラ メーターを<br />

省 略 する と 、 領 域 の 98% が 満 た され、 2% はベニア 用 コンティンジェンシーと<br />

なります。<br />

8.13.6 関 連 項 目<br />

概 念<br />

• .ANY セ ク シ ョ ンの 配 置 アルゴ リ ズムの 使 用 例 (8-29 ページ)<br />

• 領 域 の 割 り 当 て、 セレ ク タ、 および 優 先 度 の 動 作 を 示 す next_fit アルゴ リ ズ<br />

ムの 例 (8-32 ページ)<br />

• .ANY セクシ ョ ンのソート アルゴ リ ズムの 使 用 例 (8-34 ページ) .<br />

『リンカリファレンス』:<br />

• ス キ ャ ッ タ フ ァ イルの 処 理 時 の 複 数 のマ ッ チングを リ ンカが 解 決 する 方 法<br />

(4-28 ページ)<br />

• リンカによって 生 成 されたコンテンツによって .ANY セクションがオーバーフ<br />

ローしたと きの 動 作 (4-31 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-27<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

参 照<br />

『リンカリファレンス』:<br />

• --any_contingency (2-8 ページ)<br />

• --any_placement=algorithm (2-9 ページ)<br />

• --any_sort_order=order (2-11 ページ)<br />

• --info=topic[,topic,...] (2-80 ページ)<br />

• --map、 --no_map (2-109 ページ)<br />

• --section_index_display=type (2-147 ページ)<br />

• --tiebreaker=option (2-175 ページ)<br />

• 入 力 セ ク シ ョ ン 記 述 の 構 文 (4-24 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-28<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.14 .ANY セ ク シ ョ ンの 配 置 アルゴ リ ズムの 使 用 例<br />

ここでは、sections.o の RO-CODE セクションを 例 に、 配 置 アルゴリズムの 動 作 を 説 明 し<br />

ます。<br />

入 力 セ ク シ ョ ンのプロパテ ィ と 順 序 を 以 下 の 表 に 示 し ます。<br />

表 8-1 入 力 セ ク シ ョ ンのプロパテ ィ<br />

名 前<br />

sec1<br />

sec2<br />

sec3<br />

sec4<br />

sec5<br />

sec6<br />

サイ<br />

ズ<br />

0x4<br />

0x4<br />

0x4<br />

0x4<br />

0x4<br />

0x4<br />

こ の 例 で 使 用 する ス キ ャ ッ タ フ ァ イルは 次 の と お り です。<br />

LR 0x100<br />

{<br />

ER_1 0x100 0x10<br />

{<br />

.ANY<br />

}<br />

ER_2 0x200 0x10<br />

{<br />

.ANY<br />

}<br />

}<br />

注<br />

例 では、 --any_contingency を 無 効 にしています。<br />

8.14.1 first_fit、 next_fit、 best_fit の 例<br />

こ の 例 では、 同 じ サ イ ズの 複 数 のセ ク シ ョ ン を、 同 じ セレ ク タ で 2 つの 領 域 に 割 り<br />

当 てる 状 況 を 考 えます。 セレ ク タは 等 し く 限 定 的 で、 .ANY(+R0) に 相 当 し ます。 優 先<br />

順 位 は 設 定 さ れていません。<br />

Execution Region ER_1 (Base:0x00000100, Size:0x00000010, Max:0x00000010, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

0x00000100 0x00000004 Code RO 1 sec1 sections.o<br />

0x00000104 0x00000004 Code RO 2 sec2 sections.o<br />

0x00000108 0x00000004 Code RO 3 sec3 sections.o<br />

0x0000010c 0x00000004 Code RO 4 sec4 sections.o<br />

Execution Region ER_2 (Base:0x00000200, Size:0x00000008, Max:0x00000010, ABSOLUTE)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-29<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

0x00000200 0x00000004 Code RO 5 sec5 sections.o<br />

0x00000204 0x00000004 Code RO 6 sec6 sections.o<br />

こ の 例 では、 以 下 の よ う にな り ます。<br />

• first_fit の 場 合 、 リ ンカはまず、 すべてのセ ク シ ョ ン を ER_1 に 割 り 当 ててか<br />

ら、 次 に 利 用 可 能 な 領 域 であ る ER_2 に 移 り ます。<br />

• next_fit の 場 合 も、 リ ンカの 動 作 は 基 本 的 には first_fit と 同 じです。 ただし、<br />

ER_1 が 一 杯 にな る と 、 こ の 実 行 領 域 は FULL としてマークされ、それ 以 降 、 考 慮<br />

されるこ とはあり ません。 この 例 では、ER_1 は 一 杯 です。 そのため、 ER_2 が 考<br />

慮 されます。<br />

• best_fit の 場 合 、 リ ンカは、 sec1 を ER_1 に 割 り 当 て ます。 こ の 時 点 で 優 先 順 位<br />

も 限 定 性 も 等 し い 2 つの 領 域 が 存 在 し ますが、 残 っている スペースは ER_1 の 方<br />

が 少 な く な り ま し た。 この と き、 リ ンカは、 sec2 を ER_1 に 割 り 当 て、 ER_1 が 一<br />

杯 にな る までセ ク シ ョ ンを 割 り 当 て 続 けます。<br />

8.14.2 worst_fit の 例<br />

この 例 は、worst_fit アルゴ リ ズムを 使 用 した 場 合 のイ メージのメモリマップを 示 し<br />

ています。<br />

Execution Region ER_1 (Base:0x00000100, Size:0x0000000c, Max:0x00000010, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

0x00000100 0x00000004 Code RO 1 sec1 sections.o<br />

0x00000104 0x00000004 Code RO 3 sec3 sections.o<br />

0x00000108 0x00000004 Code RO 5 sec5 sections.o<br />

Execution Region ER_2 (Base:0x00000200, Size:0x0000000c, Max:0x00000010, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

0x00000200 0x00000004 Code RO 2 sec2 sections.o<br />

0x00000204 0x00000004 Code RO 4 sec4 sections.o<br />

0x00000208 0x00000004 Code RO 6 sec6 sections.o<br />

リンカはまず、sec1 を ER_1 に 割 り 当 て ます。 こ の 時 点 で、 優 先 順 位 も 限 定 性 も 等 し<br />

い 2 つの 領 域 が 存 在 し ます。 リ ンカは、 空 き スペースに 最 も 余 裕 のあ る 領 域 (この<br />

例 では ER_2) に sec2 を 割 り 当 てます。 今 度 は、 2 つの 領 域 の 空 き スペースが 等 し く な<br />

り ま し た。 こ の と き、 リ ンカは、 スキ ャ ッ タ フ ァ イル 内 で 先 に 出 現 する 領 域 (ER_1)<br />

に sec3 を 割 り 当 てます。<br />

注<br />

worst_fit の 動 作 は、 現 バージ ョ ンの リ ン カのデフ ォル ト の 動 作 であ り 、 以 前 のバー<br />

ジ ョ ンの リ ン カで 唯 一 利 用 で き る アルゴ リ ズムです。<br />

8.14.3 関 連 項 目<br />

概 念<br />

• .ANY モジュールセレ ク タによ る 未 割 り 当 てセクシ ョ ンの 配 置 (8-25 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-30<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

• 領 域 の 割 り 当 て、 セレ ク タ、 および 優 先 度 の 動 作 を 示 す next_fit アルゴ リ ズ<br />

ムの 例 (8-32 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --any_placement=algorithm (2-9 ページ)<br />

• --scatter=file (2-144 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-31<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.15 領 域 の 割 り 当 て、 セレ ク タ、 および 優 先 度 の 動 作 を 示 す next_fit アルゴ リズムの 例<br />

ここでは、sections.o の RO-CODE セクションを 例 に、next_fit の 配 置 アルゴ リ ズムを 説<br />

明 します。<br />

入 力 セ ク シ ョ ンのプロパテ ィ と 順 序 を 以 下 の 表 に 示 し ます。<br />

表 8-2 入 力 セ ク シ ョ ンのプロパテ ィ<br />

名 前<br />

sec1<br />

sec2<br />

sec3<br />

sec4<br />

sec5<br />

sec6<br />

サイ<br />

ズ<br />

0x4<br />

0x4<br />

0x4<br />

0x4<br />

0x4<br />

0x4<br />

こ の 例 で 使 用 する ス キ ャ ッ タ フ ァ イルは 次 の と お り です。<br />

LR 0x100<br />

{<br />

ER_1 0x100 0x20<br />

{<br />

.ANY1(+RO-CODE)<br />

}<br />

ER_2 0x200 0x20<br />

{<br />

.ANY2(+RO)<br />

}<br />

ER_3 0x300 0x20<br />

{<br />

.ANY3(+RO)<br />

}<br />

}<br />

注<br />

この 例 では、--any_contingency を 無 効 にしています。<br />

next_fit が 他 のアルゴ リ ズム と 異 な る のは、 一 杯 であ る と 見 な さ れた 領 域 が 再 度 考 慮<br />

されない と い う 点 です。 こ の 例 からは、 セレ ク タの 優 先 順 位 と 限 定 性 の 相 互 作 用 も<br />

確 認 で き ます。 こ の 点 はすべてのアルゴ リ ズムに 共 通 です。<br />

Execution Region ER_1 (Base:0x00000100, Size:0x00000014, Max:0x00000020, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

0x00000100 0x00000014 Code RO 1 sec1 sections.o<br />

Execution Region ER_2 (Base:0x00000200, Size:0x0000001c, Max:0x00000020, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-32<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

0x00000200 0x00000010 Code RO 3 sec3 sections.o<br />

0x00000210 0x00000004 Code RO 4 sec4 sections.o<br />

0x00000214 0x00000004 Code RO 5 sec5 sections.o<br />

0x00000218 0x00000004 Code RO 6 sec6 sections.o<br />

Execution Region ER_3 (Base:0x00000300, Size:0x00000014, Max:0x00000020, ABSOLUTE)<br />

Base Addr Size Type Attr Idx E Section Name Object<br />

0x00000300 0x00000014 Code RO 2 sec2 sections.o<br />

こ の 例 では、 以 下 の よ う にな り ます。<br />

• ER_1 には、 最 も 限 定 的 なセレ ク タ が 存 在 する ため、 リ ン カは、 sec1 を ER_1 に 配<br />

置 します。 これで、 ER_1 に 残 っている スペースは 0x6 バイ トです。<br />

• 次 に、 リ ンカは、 最 も 限 定 的 なセレ ク タ を 持 ってい る ER_1 に sec2 を 配 置 し よ う<br />

と 試 みますが、 そこには 十 分 なスペースが 存 在 しません。 したがって、ER_1 は<br />

一 杯 であ る と マーク され、 その 後 の 配 置 手 順 では 考 慮 されません。 sec2 の 配 置<br />

先 として、 リンカは、ER_2 よ り も 優 先 順 位 の 高 い ER_3 を 選 択 します。<br />

• 次 に、 リ ンカは、 sec3 を ER_3 に 配 置 し よ う と 試 みます。 十 分 な スペースがない<br />

ので、 ER_3 は 一 杯 であ る と し てマーク されます。 リ ンカは、 sec3 を ER_2 に 配 置<br />

します。<br />

• 次 の 処 理 対 象 は、 sec4 です。 これは 0x4 バイ トのセクシ ョ ンなので、ER_1 と ER_3<br />

のどちらにでも 収 まります。 しかし、 どちらも 既 に 一 杯 としてマークされてい<br />

る ため、 こ れら は 考 慮 か ら 外 さ れます。 リ ンカは、 残 ってい るすべてのセ ク<br />

ションを ER_2 に 配 置 し ます。<br />

• さらにもう 1 つ、 0x8 というサイズのセクション sec7 が 存 在 し、 sec6 の 後 に 処 理<br />

さ れた 場 合 、 リ ン ク は 失 敗 し ます。 既 に ER_1 と ER_3 は 一 杯 と し てマーク されて<br />

い る ので、 こ のアルゴ リ ズムでは、 こ れら の 領 域 にセ ク シ ョ ンの 配 置 が 試 みら<br />

れるこ とはあ り ません。<br />

8.15.1 関 連 項 目<br />

概 念<br />

• .ANY モジュールセレ ク タによ る 未 割 り 当 てセクシ ョ ンの 配 置 (8-25 ページ)<br />

• .ANY セ ク シ ョ ンの 配 置 アルゴ リ ズムの 使 用 例 (8-29 ページ) .<br />

『リンカリファレンス』:<br />

• ス キ ャ ッ タ フ ァ イルの 処 理 時 の 複 数 のマ ッ チングを リ ンカが 解 決 する 方 法<br />

(4-28 ページ)<br />

• リンカによって 生 成 されたコンテンツによって .ANY セクションがオーバーフ<br />

ローしたと きの 動 作 (4-31 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --any_placement=algorithm (2-9 ページ)<br />

• --scatter=file (2-144 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-33<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.16 .ANY セ ク シ ョ ンのソー ト アルゴ リ ズムの 使 用 例<br />

ここでは、sections_a.o および sections_b.o の RO-CODE セクションを 例 に、 ソートアル<br />

ゴリズムの 動 作 を 説 明 します。<br />

入 力 セ ク シ ョ ンのプロパテ ィ と 順 序 を 以 下 の 表 に 示 し ます。<br />

表 8-3 入 力 セ ク シ ョ ンのプ ロパテ ィ (sections_a.o)<br />

名 前<br />

seca_1<br />

seca_2<br />

seca_3<br />

seca_4<br />

サイ<br />

ズ<br />

0x4<br />

0x4<br />

0x10<br />

0x14<br />

表 8-4 入 力 セ ク シ ョ ンのプ ロパテ ィ (sections_b.o)<br />

名 前<br />

secb_1<br />

secb_2<br />

secb_3<br />

secb_4<br />

サイ<br />

ズ<br />

0x4<br />

0x4<br />

0x10<br />

0x14<br />

8.16.1 サイズの 降 順 の 例<br />

この 例 では、 次 の リ ンカ コマン ド ラ イ ンオプシ ョ ンが 使 用 されています。<br />

--any_sort_order=descending_size sections_a.o sections_b.o --scatter scatter.txt<br />

.ANY の 割 り 当 てアルゴリズムによって、 セクションが 次 の 順 序 で 処 理 されます。<br />

表 8-5 descending_size アルゴ リズムのソー ト 順 序<br />

名 前<br />

seca_4<br />

secb_4<br />

seca_3<br />

secb_3<br />

seca_1<br />

seca_2<br />

secb_1<br />

secb_2<br />

サイ<br />

ズ<br />

0x14<br />

0x14<br />

0x10<br />

0x10<br />

0x4<br />

0x4<br />

0x4<br />

0x4<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-34<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

同 じサイズのセクシ ョ ンには、 --tiebreaker で 指 定 さ れた 序 列 決 定 基 準 が 使 用 さ れま<br />

す。<br />

8.16.2 コマンドラインの 例<br />

この 例 では、 次 の リ ンカ コマン ド ラ イ ンオプシ ョ ンが 使 用 されています。<br />

--any_sort_order=cmdline sections_a.o sections_b.o --scatter scatter.txt<br />

.ANY の 割 り 当 てアルゴリズムによって、 セクションが 次 の 順 序 で 処 理 されます。<br />

表 8-6 cmdline アルゴ リズムのソー ト 順 序<br />

名 前<br />

seca_1<br />

secb_1<br />

seca_2<br />

secb_2<br />

seca_3<br />

secb_3<br />

seca_4<br />

secb_4<br />

サイ<br />

ズ<br />

0x4<br />

0x4<br />

0x4<br />

0x4<br />

0x10<br />

0x10<br />

0x14<br />

0x14<br />

同 じコマンド ラインインデッ クスのセクシ ョ ンには、--tiebreaker で 指 定 された 序 列<br />

決 定 基 準 が 使 用 さ れます。<br />

8.16.3 関 連 項 目<br />

概 念<br />

• .ANY モジュールセレ ク タによ る 未 割 り 当 てセクシ ョ ンの 配 置 (8-25 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --any_sort_order=order (2-11 ページ)<br />

• --scatter=file (2-144 ページ)<br />

• --tiebreaker=option (2-175 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-35<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.17 スキャ ッ タ ロー ド の 記 述 におけるベニア 入 力 セ ク シ ョ ンの 選 択<br />

ベニアは、 <strong>ARM</strong> コード と Thumb コードの 切 り 替 えや、 1 つの 命 令 で 指 定 でき る ジ ャ<br />

ンプ よ り も 長 いジ ャ ンプを 実 行 する 場 合 に 使 用 し ます。 ス キ ャ ッ タ フ ァ イルに リ ン<br />

カで 生 成 されたシンボル Veneer$$Code を 含 め る こ と で、 ベニア を 指 定 し た 位 置 に 配 置<br />

できます。 スキャッタファイル 内 で *(Veneer$$Code) セクションセレクタを 使 用 でき<br />

る 実 行 領 域 は 1 つだけです。<br />

リンカにより、*(Veneer$$Code) セクションセレクタによって 識 別 される 領 域 にベニア<br />

入 力 セ ク シ ョ ン を 配 置 する のが 安 全 だ と 判 断 さ れた 場 合 、 その 配 置 が 実 行 さ れます。<br />

ただ し、 ア ド レ ス 範 囲 の 問 題 や、 実 行 領 域 のサ イ ズ 制 限 などに よ り 、 ベニア 入 力 セ<br />

ク シ ョ ンがその 領 域 に 割 り 当 て ら れない 場 合 も あ り ます。 指 定 し た 領 にベニア を 追<br />

加 で き ない 場 合 は、 ベニア を 生 成 し た、 再 配 置 さ れた 入 力 セ ク シ ョ ン を 含 んでい る<br />

実 行 領 域 にそのベニアが 追 加 さ れます。<br />

注<br />

旧 バージ ョ ンの <strong>ARM</strong> ツールで 作 成 さ れた ス キ ャ ッ タ フ ァ イル 内 に 登 場 する<br />

*(IWV$$Code) のインスタンスは、*(Veneer$$Code) に 自 動 的 に 変 換 されます。 新 しい 記<br />

述 フ ァ イルでは *(Veneer$$Code) を 使 用 して 下 さい。<br />

実 行 領 域 内 のコード の 量 が、 Thumb コードの 場 合 は 4Mb、 32 ビッ ト Thumb コードの<br />

場 合 は 16Mb、 <strong>ARM</strong> コー ド の 場 合 は 32Mb を 超 える と、 *(Veneer$$Code) は 無 視 されま<br />

す。<br />

8.17.1 関 連 項 目<br />

概 念<br />

• ベニアの 概 要 (4-27 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-36<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.18 __attribute__((section("name"))) を 使 用 し た コー ド と デー タの 配 置<br />

コー ド およびデータは、 ツールチェーン 固 有 のプ ラ グマや 属 性 を 使 用 し な く て も 、<br />

独 自 のオブジ ェ ク ト に 別 々に 配 置 で き ます。 ただ し、 __attribute__((section("name")))<br />

を 使 用 して、 項 目 を 別 の ELF セ ク シ ョ ンに 配 置 する こ と も で き ます。 その 場 合 、 ス<br />

キ ャ ッ タ フ ァ イルを 使 用 し て、 名 前 付 き セ ク シ ョ ン を 特 定 の 位 に 配 置 で き ます。<br />

__attribute__((section("name"))) を 使 用 し て、 変 数 を 別 のセ ク シ ョ ンに 配 置 するには、<br />

以 下 の 手 順 を 実 行 します。<br />

1. __attribute__((section("name"))) を 使 用 し て、 変 数 の 配 置 先 の 名 前 付 き セ ク シ ョ<br />

ン を 指 定 し ます。 以 下 に 例 を 示 し ます。<br />

例 8-8 セ ク シ ョ ンの 命 名<br />

int variable __attribute__((section("foo"))) = 10;<br />

2. ス キ ャ ッ タ フ ァ イルを 使 用 し て、 名 前 付 き セ ク シ ョ ン を 配 置 し ます。 以 下 に 例<br />

を 示 し ます。<br />

例 8-9 セ ク シ ョ ンの 配 置<br />

FLASH 0x24000000 0x4000000<br />

{<br />

... ; 残 りのコード<br />

}<br />

ADDER 0x08000000<br />

{<br />

file.o (foo)<br />

}<br />

; file.o からセクショ ン foo を 選 択 する<br />

以 下 の 点 に 注 意 し て 下 さい。<br />

• --autoat または --no_autoat によ る リ ン クは 配 置 に 影 響 し ません。<br />

• ス キ ャ ッ タ ロー ド が 使 用 さ れなかった 場 合 、 セ ク シ ョ ンは、 LR_1 ロード 領 域 の<br />

デフォル ト の ER_RW 実 行 領 域 に 配 置 さ れます。<br />

• スキャッタファイルはあるが、foo セレクタは 含 まれないという 場 合 、 セクシ ョ<br />

ンは、 定 義 されている RW 実 行 領 域 に 配 置 さ れます。<br />

セクション 名 に .<strong>ARM</strong>.__at_address を 使 用 する こ と で、 特 定 のア ド レ スに 関 数 を 配 置 す<br />

ることもできます。 例 えば、 関 数 sqr を 0x20000 に 配 置 する には、 次 の よ う に 指 定 し<br />

ます。<br />

int sqr(int n1) __attribute__((section(".<strong>ARM</strong>.__at_0x20000")));<br />

int sqr(int n1)<br />

{<br />

return n1*n1;<br />

}<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-37<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.18.1 関 連 項 目<br />

参 照<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ペー<br />

ジ)<br />

• __at セ ク シ ョ ンの 配 置 に 関 する 制 限 (8-41 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• __attribute__((section("name"))) 関 数 属 性 (5-54 ページ)<br />

• __attribute__((section("name"))) 変 数 属 性 (5-73 ページ)<br />

• #pragma arm section [section_type_list] (5-84 ページ) .<br />

『リンカリファレンス』:<br />

• --autoat、 --no_autoat (2-17 ページ)<br />

• --scatter=file (2-144 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-38<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.19 __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レスにセ ク シ ョ ン を 配 置 する<br />

セ ク シ ョ ン を 配 置 する 必 要 があ る ア ド レ ス をエン コー ド し た 特 別 な 名 前 をセ ク シ ョ<br />

ンに 付 け る こ と がで き ます。 名 前 は 以 下 の よ う に 指 定 で き ます<br />

.<strong>ARM</strong>.__at_address<br />

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

address<br />

セクションの 必 要 なアドレス。 16 進 数 値 ま たは 10 進 数 値 で 指 定 する こ<br />

とができます。.<strong>ARM</strong>.__at_address の 形 式 のセ ク シ ョ ンは、 省 略 形 __at で<br />

表 します。<br />

コ ンパ イ ラ で 変 数 を __at セ ク シ ョ ンに 割 り 当 て るには、 以 下 の 方 法 を 使 用 し ます。<br />

• __attribute__((section(”name”))) を 使 用 し てセ ク シ ョ ンに 明 示 的 に 名 前 を 付 け ま<br />

す。<br />

• 属 性 __at を 使 用 してセクシ ョ ン 名 を 自 動 的 に 設 定 します。<br />

例 8-10 C または C++ コードでの __at セ ク シ ョ ンへの 変 数 の 割 り 当 て<br />

// variable1 を .<strong>ARM</strong>.__at_0x00008000 という 名 前 のセクションに 配 置 する<br />

int variable1 __attribute__((at(0x8000))) = 10;<br />

// variable2 を .<strong>ARM</strong>.__at_0x8000 という 名 前 のセクションに 配 置 する<br />

int variable2 __attribute__((section(".<strong>ARM</strong>.__at_0x8000"))) = 10;<br />

注<br />

__attribute__((at(address))) を 使 用 する 場 合 、 address を 表 す __at セクション 名 の 部 分<br />

は、 8 桁 の 16 進 数 値 に 正 規 化 さ れます。 セ ク シ ョ ン 名 は、 ス キ ャ ッ タ フ ァ イ ル 内 で<br />

名 前 を 使 用 し てセ ク シ ョ ン を 照 合 する 場 合 にのみ 有 意 です。 --autoat コマンド ライン<br />

オプシ ョ ン を 使 用 する と 、 リ ン カに よ っ て __at セクションが 自 動 的 に 割 り 当 てられ<br />

ます。 このオプシ ョ ンはデフォル ト です。<br />

8.19.1 関 連 項 目<br />

概 念<br />

• 特 定 ア ド レ スへの 関 数 と データ の 配 置 (8-18 ページ)<br />

• __attribute__((section("name"))) を 使 用 したコード とデータの 配 置 (8-37 ページ)<br />

• __at セ ク シ ョ ンの 配 置 に 関 する 制 限 (8-41 ページ)<br />

• __at セ ク シ ョ ンの 自 動 配 置 (8-42 ページ)<br />

• __at セ ク シ ョ ンの 手 動 配 置 (8-44 ページ)<br />

• __at を 使 用 したフラ ッシュ メモ リ でのキーの 配 置 (8-46 ページ)<br />

• __at を 使 用 し たペ リ フ ェ ラ ルレ ジ ス タ に 対 する 構 造 の 配 置 (8-48 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --autoat、 --no_autoat (2-17 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• __attribute__((section("name"))) 関 数 属 性 (5-54 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-39<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

• __attribute__((at(address))) 変 数 属 性 (5-68 ページ)<br />

• __attribute__((section("name"))) 変 数 属 性 (5-73 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-40<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.20 __at セ ク シ ョ ンの 配 置 に 関 する 制 限<br />

以 下 の 制 限 は、 __at セ ク シ ョ ン を 特 定 のア ド レ スに 配 置 する 場 合 に 適 用 さ れます。<br />

• __at セ ク シ ョ ンのア ド レ ス 範 囲 は、 重 複 する セ ク シ ョ ンが 別 々のオーバーレ イ<br />

領 域 に 配 置 さ れていない 限 り 、 重 複 し てはな り ません。<br />

• __at セ ク シ ョ ンは、 位 置 非 依 存 の 実 行 領 域 では 使 用 で き ません。<br />

• __at セクションのリンカ 定 義 シンボル $$Base、 $$Limit、 および $$Length は、 参 照<br />

しないで 下 さい。<br />

• __at セクションは、 System V (SysV) とベースプ ラ ッ ト フ ォームアプ リ ケー<br />

ションバイナリインタフェース (BPABI) の 実 行 可 能 フ ァ イルおよび BPABI の<br />

ダイナミ ック リンクライブラ リ (DLL) では 使 用 しないで 下 さい。<br />

• __at セ ク シ ョ ンのア ド レ スは、 境 界 整 列 値 の 倍 数 にする 必 要 があ り ます。<br />

• __at セクションでは、+FIRST または +LAST 順 序 付 け 制 約 のいずれも 無 視 さ れま<br />

す。<br />

8.20.1 関 連 項 目<br />

概 念<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ペー<br />

ジ) .<br />

その 他 の 情 報<br />

• 『Base Platform ABI for the <strong>ARM</strong> Architecture』 ,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0037-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-41<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.21 __at セ ク シ ョ ンの 自 動 配 置<br />

__at セ ク シ ョ ンの 自 動 配 置 はデフ ォル ト で 有 効 になっています。 こ の 機 能 を 制 御 す<br />

るには、 リ ンカコマンド ラインオプシ ョ ン --autoat を 使 用 し ます。<br />

注<br />

__at セ ク シ ョ ンは、 位 置 非 依 存 の 実 行 領 域 では 使 用 で き ません。<br />

--autoat オプシ ョ ンを 使 用 して リ ン クする と き、 __at セクションはスキャッタロード<br />

セレクタによって 配 置 されません。 代 わりに、 リ ンカによって __at セクションは 互<br />

換 領 域 に 配 置 さ れます。 互 換 領 域 が 見 つか ら ない 場 合 は、 __at セクションのロード 領<br />

域 と 実 行 領 域 が 作 成 さ れます。<br />

リンカの --autoat オプシ ョ ンに よ って 作 成 さ れた 実 行 領 域 はすべて UNINIT スキャッタ<br />

ロード 属 性 を 持 ちます。 ZI __at セ ク シ ョ ン をゼ ロ で 初 期 化 する 必 要 があ る 場 合 、 こ<br />

のセ ク シ ョ ンは 互 換 領 域 内 に 配 置 する 必 要 があ り ます。 リ ンカの --autoat オプシ ョ ン<br />

に よ って 作 成 さ れた 実 行 領 域 のベース ア ド レ スは 少 な く と も 4 バイ ト 境 界 で 整 列 さ<br />

れてい る 必 要 があ り ます。 領 域 が 正 し く 整 列 さ れていない 場 合 は、 リ ンカのエ ラー<br />

メ ッ セージが 生 成 さ れます。<br />

互 換 領 域 と は、 以 下 の よ う な 領 域 です。<br />

• __at のア ド レ スが 実 行 可 能 領 域 のベースおよび リ ミ ッ ト の 範 囲 内 にあ る。 こ こ<br />

で、 リ ミ ッ ト はベース ア ド レ スに 実 行 領 域 の 最 大 サ イ ズを 加 えた 値 です。 最 大<br />

サイズが 設 定 されていない 場 合 、 __at セ ク シ ョ ンの 配 置 リ ミ ッ ト は __at セク<br />

シ ョ ン を 含 ま ない 実 行 領 域 の 現 在 のサ イ ズに 定 数 10240 バイ ト を 加 えた 値 に 設<br />

定 されます。<br />

• 実 行 領 域 は、 以 下 の 条 件 を 少 な く と も 1 つ 満 た し ます。<br />

— 標 準 的 な ス キ ャ ッ タ ロー ド 規 則 に よ っ て __at セクションを 一 致 させるセ<br />

レクタがある。<br />

— __at セクションと 同 じ 種 類 (RO、 RW、 または ZI) のセクシ ョ ンが 少 なく<br />

とも 1 つある。<br />

— EMPTY 属 性 がない。<br />

注<br />

リ ン カでは、 種 類 が RW の __at セクションは、 RO と 互 換 性 があ る と 見 な<br />

されます。<br />

以 下 の 例 には、 種 類 が RO のセクシ ョ ン .<strong>ARM</strong>.__at_0x0、 種 類 が RW のセクシ ョ ン<br />

.<strong>ARM</strong>.__at_0x2000、 種 類 が ZI のセクシ ョ ン .<strong>ARM</strong>.__at_0x4000、 および 種 類 が ZI のセク<br />

ション .<strong>ARM</strong>.__at_0x8000 を 示 しています。<br />

例 8-11 C または C++ コー ド での 変 数 の 配 置<br />

// RW 変 数 を .<strong>ARM</strong>.__at_0x2000 という 名 前 のセクションに 配 置 する<br />

int foo __attribute__((section(".<strong>ARM</strong>.__at_0x2000"))) = 100;<br />

// ZI 変 数 を .<strong>ARM</strong>.__at_0x4000 という 名 前 のセクションに 配 置 する<br />

int bar __attribute__((section(".<strong>ARM</strong>.__at_0x4000"), zero_init));<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-42<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

// ZI 変 数 を .<strong>ARM</strong>.__at_0x8000 という 名 前 のセクションに 配 置 する<br />

int variable __attribute__((section(".<strong>ARM</strong>.__at_0x8000"), zero_init));<br />

例 8-12 __at セ ク シ ョ ンの 自 動 配 置<br />

LR1 0x0<br />

{<br />

ER_RO 0x0 0x2000<br />

{<br />

*(+RO) ; .<strong>ARM</strong>.__at_0x0 は ER_RO の 範 囲 内 に あ る<br />

}<br />

ER_RW 0x2000 0x2000<br />

{<br />

*(+RW) ; .<strong>ARM</strong>.__at_0x2000 は ER_RW の 範 囲 内 に あ る<br />

}<br />

ER_ZI 0x4000 0x2000<br />

{<br />

*(+ZI) ; .<strong>ARM</strong>.__at_0x4000 は ER_ZI の 範 囲 内 に あ る<br />

}<br />

}<br />

; __at セクショ ン .<strong>ARM</strong>.__at_0x8000 は 対 象 と な る す べ て の 領 域 の 範 囲 外 に あ る た め<br />

; そ の ロ ー ド 領 域 と 実 行 領 域 が リ ン カ に よ っ て 作 成 さ れ る。<br />

8.21.1 関 連 項 目<br />

概 念<br />

• __attribute__((section("name"))) を 使 用 したコード とデータの 配 置 (8-37 ページ)<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ペー<br />

ジ)<br />

• __at セ ク シ ョ ンの 配 置 に 関 する 制 限 (8-41 ページ)<br />

• __at セ ク シ ョ ンの 手 動 配 置 (8-44 ページ)<br />

• __at を 使 用 したフラ ッシュ メモ リ でのキーの 配 置 (8-46 ページ)<br />

• __at を 使 用 し たペ リ フ ェ ラ ルレ ジ ス タ に 対 する 構 造 の 配 置 (8-48 ページ) .<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 記 述 について (4-10 ページ) .<br />

参 照<br />

『リ ンカ リ フ ァレンス』:<br />

• --autoat、 --no_autoat (2-17 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --zi_base=address (2-197 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-43<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.22 __at セ ク シ ョ ンの 手 動 配 置<br />

--no_autoat コ マン ド ラ イ ンオプシ ョ ン を 使 用 する 場 合 は、 標 準 的 なセ ク シ ョ ン 配 置<br />

規 則 を 使 用 して、 __at セクションを 配 置 できます。<br />

注<br />

__at セ ク シ ョ ンは、 位 置 非 依 存 の 実 行 領 域 では 使 用 で き ません。<br />

以 下 の 例 には、 読 み 出 し 専 用 セ ク シ ョ ン .<strong>ARM</strong>.__at_0x2000 と 読 み 出 し - 書 き 込 みセク<br />

ション .<strong>ARM</strong>.__at_0x4000 の 配 置 を 示 しています。 手 動 モードでは、 ロード 領 域 と 実 行<br />

領 域 は 自 動 的 に 作 成 さ れません。 __at セ ク シ ョ ン を 実 行 領 域 に 配 置 で き ない 場 合 、 エ<br />

ラーが 生 成 されます。<br />

例 8-13 C または C++ コー ド での 変 数 の 配 置<br />

// RO 変 数 を .<strong>ARM</strong>.__at_0x2000 という 名 前 のセクションに 配 置 する<br />

const int FOO __attribute__((section(".<strong>ARM</strong>.__at_0x2000"))) = 100;<br />

// RW 変 数 を .<strong>ARM</strong>.__at_0x4000 という 名 前 のセクションに 配 置 する<br />

int bar __attribute__((section(".<strong>ARM</strong>.__at_0x4000")));<br />

例 8-14 __at セ ク シ ョ ンの 手 動 配 置<br />

LR1 0x0<br />

{<br />

ER_RO 0x0 0x2000<br />

{<br />

*(+RO)<br />

}<br />

ER_RO2 0x2000<br />

{<br />

*(.<strong>ARM</strong>.__at_0x2000)<br />

}<br />

ER2 0x4000<br />

{<br />

*(+RW +ZI)<br />

}<br />

}<br />

; +RO によって .<strong>ARM</strong>.__at_0x0 が 選 択 される<br />

; .<strong>ARM</strong>.__at_0x2000 によって .<strong>ARM</strong>.__at_0x2000 が 選 択 さ れる<br />

; +RW によって .<strong>ARM</strong>.__at_0x4000 が 選 択 される<br />

8.22.1 関 連 項 目<br />

概 念<br />

• __attribute__((section("name"))) を 使 用 したコード とデータの 配 置 (8-37 ページ)<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ペー<br />

ジ)<br />

• __at セ ク シ ョ ンの 配 置 に 関 する 制 限 (8-41 ページ)<br />

• __at セ ク シ ョ ンの 自 動 配 置 (8-42 ページ)<br />

• __at を 使 用 したフラ ッシュ メモ リ でのキーの 配 置 (8-46 ページ)<br />

• __at を 使 用 し たペ リ フ ェ ラ ルレ ジ ス タ に 対 する 構 造 の 配 置 (8-48 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-44<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 記 述 について (4-10 ページ) .<br />

参 照<br />

『リ ンカ リ フ ァレンス』:<br />

• --autoat、 --no_autoat (2-17 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-45<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.23 __at を 使 用 し た フ ラ ッ シ ュ メ モ リ でのキーの 配 置<br />

一 部 のフ ラ ッ シ ュ メ モ リ デバ イ ス では、 特 定 の 機 能 を ア ク テ ィ ブにする ためにキー<br />

をア ド レ スに 書 き 込 む 必 要 があ り ます。 __at セクションを 使 用 すると、 値 を 特 定 のア<br />

ドレスに 簡 単 に 書 き 込 むことができます。<br />

デバイ スに 0x8000 ~ 0x10000 のフラ ッシュ メモ リが 搭 載 されており、 アド レス 0x8000<br />

でキーが 必 要 であ る と 仮 定 し ます。 __at セクションを 使 用 してキーをアドレスに 書 き<br />

込 むには、 変 数 を 宣 言 し、 コ ンパ イ ラ が .<strong>ARM</strong>.__at_0x8000 というセクションを 生 成 で<br />

きるようにする 必 要 があります。<br />

例 8-15 C または C++ コー ド でのフ ラ ッ シ ュキー 変 数 の 配 置<br />

// flash_key を .<strong>ARM</strong>.__at_0x8000 という 名 前 のセクションに 配 置 する<br />

long flash_key __attribute__((section(".<strong>ARM</strong>.__at_0x8000")));<br />

以 下 の 例 では、 フ ラ ッ シ ュ メ モ リ の 実 行 領 域 の 手 動 配 置 を 記 述 し た ス キ ャ ッ タ フ ァ<br />

イルを 示 しています。<br />

例 8-16 フ ラ ッ シ ュ メ モ リ の 実 行 領 域 の 手 動 配 置<br />

ER_FLASH 0x8000 0x2000<br />

{<br />

*(+RO)<br />

*(.<strong>ARM</strong>.__at_0x8000) ; キー<br />

}<br />

リンカのコマンドラインオプション --no_autoat を 使 用 して、 手 動 配 置 を 有 効 にし ま<br />

す。<br />

以 下 の 例 では、 フ ラ ッ シ ュ メ モ リ の 実 行 領 域 の 自 動 配 置 を 記 述 し た ス キ ャ ッ タ フ ァ<br />

イルを 示 しています。 リ ンカのコマンド ラインオプシ ョ ン --autoat を 使 用 して、 自 動<br />

配 置 を 有 効 にし ます。<br />

例 8-17 フ ラ ッ シ ュ メ モ リ の 実 行 領 域 の 自 動 配 置<br />

ER_FLASH 0x8000 0x2000<br />

{<br />

*(+RO)<br />

}<br />

; 他 の コ ー ド と 読 み 出 し 専 用 デー タ<br />

; __at セクショ ンが 自 動 的 に 選 択 される<br />

8.23.1 関 連 項 目<br />

タスク<br />

• FIRST 属 性 と LAST 属 性 を 使 用 したセクシ ョ ンの 配 置 (4-22 ページ)<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ペー<br />

ジ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-46<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

概 念<br />

• __at セ ク シ ョ ンの 自 動 配 置 (8-42 ページ)<br />

• __at セ ク シ ョ ンの 手 動 配 置 (8-44 ページ) .<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 記 述 について (4-10 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --autoat、 --no_autoat (2-17 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• __attribute__((section("name"))) 変 数 属 性 (5-73 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-47<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.24 __at を 使 用 し たペ リ フ ェ ラルレジス タ に 対 する 構 造 の 配 置<br />

初 期 化 されていない 変 数 をペリ フェ ラルレジス タに 配 置 するには、 ZI __at セクショ<br />

ン を 使 用 し ます。 レ ジ ス タ が 0x10000000 で 使 用 でき る と 仮 定 し て、<br />

.<strong>ARM</strong>.__at_0x10000000 という ZI __at セ ク シ ョ ン を 定 義 し ます。 以 下 に 例 を 示 し ます。<br />

int foo __attribute__((section( ・ <strong>ARM</strong>.__at_0x10000000 ・ , zero_init));<br />

以 下 の 例 には、 ZI __at セ ク シ ョ ンの 手 動 配 置 を 記 述 し た ス キ ャ ッ タ フ ァ イルを 示 し<br />

ています。<br />

例 8-18 ZI __at セ ク シ ョ ンの 手 動 配 置<br />

ER_PERIPHERAL 0x10000000 UNINIT<br />

{<br />

*(.<strong>ARM</strong>.__at_0x10000000)<br />

}<br />

自 動 配 置 を 使 用 する 場 合 、 0x10000000 付 近 の 実 行 領 域 が 他 にない と い う 想 定 で、 リ ン<br />

カによって UNINIT 属 性 の 領 域 が 0x10000000 に 自 動 的 に 作 成 されます。 UNINIT 属 性 に<br />

よ って、 初 期 化 さ れていないデータ ま たは メ モ リ マ ッ プ さ れた I/O を 含 む 実 行 領 域 が<br />

作 成 さ れます。<br />

8.24.1 関 連 項 目<br />

概 念<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ペー<br />

ジ) .<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 記 述 について (4-10 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 属 性 (4-13 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• __attribute__((section("name"))) 変 数 属 性 (5-73 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-48<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.25 オーバーレ イ を 使 用 し たセ ク シ ョ ンの 配 置<br />

スキャッタファイル 内 で OVERLAY 属 性 を 使 用 する と 、 複 数 の 実 行 領 域 を 同 じ ア ド レ ス<br />

に 配 置 で き ます。 実 行 領 域 を 一 度 に 1 つだけ イ ン ス タ ン ス 化 するには、 オーバーレ<br />

イマネージャが 必 要 です。 <strong>ARM</strong> コンパイラツールチェーンにはオーバーレイマネー<br />

ジャは 付 属 していません。<br />

以 下 の 例 では、 RAM 内 のス タ テ ィ ッ ク セ ク シ ョ ン と、 その 後 に 続 く 一 連 のオーバー<br />

レ イ の 定 義 を 示 し ています。 こ の 例 では、 一 度 に こ れら のセ ク シ ョ ンの 1 つのみを<br />

インスタンス 化 しています。<br />

例 8-19 ルー ト 領 域 の 指 定<br />

EMB_APP 0x8000<br />

{<br />

.<br />

.<br />

STATIC_RAM 0x0<br />

; RW と ZI のコード / データのほとんどを 含 む<br />

{<br />

* (+RW,+ZI)<br />

}<br />

OVERLAY_A_RAM 0x1000 OVERLAY ; オーバーレイの 開 始 アドレス ...<br />

{<br />

module1.o (+RW,+ZI)<br />

}<br />

OVERLAY_B_RAM 0x1000 OVERLAY<br />

{<br />

module2.o (+RW,+ZI)<br />

}<br />

... ; 残 りのスキャ ッ タロード 記 述 ...<br />

}<br />

OVERLAY と し てマー ク さ れてい る 領 域 は、 起 動 時 に C ライブラリによって 初 期 化 され<br />

ません。 オーバーレ イ 領 域 が 使 用 する メ モ リ の 内 容 は、 オーバーレ イ マネージ ャ が<br />

管 理 し ます。 ま た、 領 域 に 初 期 化 さ れたデータ が 含 まれてい る 場 合 は、 NOCOMPRESS 属<br />

性 を 使 用 して RW データ が 圧 縮 さ れない よ う に し ます。<br />

リ ンカ 定 義 シンボルを 使 用 する と、 コード とデータのコ ピーに 必 要 なア ド レスを 取<br />

得 でき ます。<br />

OVERLAY 属 性 は、 別 の 領 域 と は 異 な る ア ド レ ス を 持 つ 単 一 の 領 域 で 使 用 で き ます。 し<br />

たがって、 C ラ イ ブ ラ リ ス ター ト ア ッ プ コー ド に よ る 特 定 の 領 域 の 初 化 を 避 け る 方<br />

法 と して、 オーバーレイ 領 域 を 使 用 できます。 他 のオーバーレイ 領 域 と 同 様 に、 こ<br />

れら の 領 域 はコー ド 内 で 手 動 で 初 期 化 する 必 要 あ り ます。<br />

オーバーレ イ 領 域 は 相 対 ベース を 持 つこ と がで き ます。 +offset ベース ア ド レ ス を 持<br />

つオーバーレ イ 領 域 の 動 作 は、 その 前 の 領 域 と +offset の 値 に 依 存 し ます。 連 続 する<br />

+offset 領 域 の +offset の 値 が 同 じ 場 合 、 それら の 領 域 は リ ンカに よ って 同 じベース ア<br />

ドレスに 配 置 されます。<br />

+offset の 実 行 領 域 ER が、 オーバーレ イ 実 行 領 域 の 連 続 する 重 複 ブ ロ ッ ク に 続 けて<br />

存 在 する 場 合 、 ER のベースア ド レ スは 次 のよ う にな り ます。<br />

オ ー バ ー レ イ 実 行 領 域 の 重 複 ブ ロ ッ ク の リ ミ ッ ト ア ド レ ス + offset<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-49<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

以 下 の 表 には、 +offset を OVERLAY 属 性 と 共 に 使 用 し た 場 合 の 影 響 を 示 し ています。<br />

REGION1 は、 スキ ャ ッ タ フ ァ イル 内 の REGION2 の 直 前 に 配 置 されます。<br />

表 8-7 オーバーレ イ での 相 対 オ フ セ ッ ト の 使 用<br />

REGION1 を<br />

OVERLAY と 共 に 設<br />

定 する<br />

+offset<br />

REGION2 ベースア ド レス<br />

いいえ REGION1 の リミット + <br />

はい +0 REGION1 ベースアドレス<br />

はい REGION1 の リミット + <br />

以 下 の 例 では、 相 対 オフセ ッ ト をオーバーレ イ と 共 に 使 用 し た 場 合 の 実 行 領 域 のア<br />

ドレスに 対 する 影 響 を 示 しています。<br />

例 8-20 オーバーレ イ での 相 対 オ フ セ ッ ト の 例<br />

EMB_APP 0x8000{<br />

CODE 0x8000<br />

{<br />

*(+RO)<br />

}<br />

# REGION1 Base = CODE limit<br />

REGION1 +0 OVERLAY<br />

{<br />

module1.o(*)<br />

}<br />

# REGION2 Base = REGION1 Base<br />

REGION2 +0 OVERLAY<br />

{<br />

module2.o(*)<br />

}<br />

# REGION3 Base = REGION2 Base = REGION1 Base<br />

REGION3 +0 OVERLAY<br />

{<br />

module3.o(*)<br />

}<br />

}<br />

# REGION4 Base = REGION3 Limit + 4<br />

Region4 +4 OVERLAY<br />

{<br />

module4.o(*)<br />

}<br />

オーバーレ イ でない 領 域 の 長 さ が 不 明 な 場 合 は、 ゼ ロ 相 対 オフセ ッ ト を 使 用 し て<br />

オーバーレ イの 開 始 ア ド レ ス を 指 定 する こ と で、 オーバーレ イ を タ テ ィ ッ ク セ ク<br />

ションの 直 後 に 配 置 できます。<br />

以 下 の コ マン ド ラ イ ンオプシ ョ ン を 使 用 する と 、 イ メ ージに さ ら にデバ ッ グ 情 報 を<br />

追 加 で き ます。<br />

• --emit_debug_overlay_relocs<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-50<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

• --emit_debug_overlay_section<br />

こ れら を 使 用 する こ と で、 現 在 有 効 なオーバーレ イ をオーバーレ イ に 対 応 し たデ<br />

バッガで 追 跡 できるよ うになり ます。<br />

8.25.1 関 連 項 目<br />

概 念<br />

• __at セ ク シ ョ ン を 使 用 し て 特 定 のア ド レ スにセ ク シ ョ ン を 配 置 する (8-39 ペー<br />

ジ) .<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 記 述 について (4-5 ページ)<br />

• 実 行 領 域 の 記 述 について (4-10 ページ)<br />

• ロード 領 域 に 相 対 アドレス +offset を 使 用 する 際 の 注 意 事 項 (4-18 ページ)<br />

• 実 行 領 域 に 相 対 ア ド レ ス +offset を 使 用 する 際 の 注 意 事 項 (4-19 ページ) .<br />

参 照<br />

• リンカ 定 義 シンボルへのアクセス (7-4 ページ) .<br />

『リンカリファレンス』:<br />

• --emit_debug_overlay_relocs (2-54 ページ)<br />

• --emit_debug_overlay_section (2-55 ページ)<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

• ロー ド 領 域 と 実 行 領 域 のア ド レ ス 属 性 (4-16 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• __attribute__((section("name"))) 変 数 属 性 (5-73 ページ) .<br />

その 他 の 情 報<br />

• ABI for the <strong>ARM</strong> Architecture:Support for Debugging Overlaid Programs,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0049-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-51<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.26 <strong>ARM</strong> C および C++ ラ イ ブ ラ リ コー ド の 配 置 について<br />

<strong>ARM</strong> の C および C++ の 標 準 ラ イブラ リ のコード を スキ ャ ッ タ フ ァ イルに 配 置 でき ま<br />

す。 スキャ ッ タフ ァ イルでラ イブラ リ 名 を 解 決 でき る よ う に、*armlib または *cpplib*<br />

を 使 用 して 下 さい。<br />

__main.o、 __scatter*.o、 __dc*.o、 *Region$$Table など、 いくつかの <strong>ARM</strong> の C および<br />

C++ ラ イ ブ ラ リ セ ク シ ョ ンはルー ト 領 域 に 配 置 する 必 要 があ り ます。 こ れ ら のセ ク<br />

ションはリ リース 間 で 異 なる 能 性 があります。 リンカは InRoot$$Sections を 使 用 する<br />

こ と で、 今 後 も 問 題 が 生 じ ない よ う に こ れら のセ ク シ ョ ンすべてを 自 動 的 に 配 置 で<br />

きます。<br />

8.26.1 関 連 項 目<br />

タスク<br />

• ルー ト 実 行 領 域 の 作 成 (8-14 ページ)<br />

• FIXED 属 性 を 使 用 し たルー ト 領 域 の 作 成 (8-17 ページ) .<br />

概 念<br />

• ルー ト 領 域 と は (8-13 ページ)<br />

• ルー ト 領 域 へのコー ド の 配 置 例 (8-53 ページ)<br />

• <strong>ARM</strong> C ラ イ ブ ラ リ コー ド の 配 置 例 (8-54 ページ)<br />

• <strong>ARM</strong> C++ ラ イ ブ ラ リ コー ド の 配 置 例 (8-55 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-52<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.27 ルー ト 領 域 へのコー ド の 配 置 例<br />

ス キ ャ ッ タ フ ァ イルを 使 用 し て、 名 前 付 き セ ク シ ョ ン と 同 様 にルー ト セ ク シ ョ ン を<br />

指 定 し ます。 以 下 の 例 では、 セ ク シ ョ ンセレ ク タ InRoot$$Sections を 使 用 して、 ルー<br />

ト 領 域 に 配 置 する 必 要 があ るすべてのセ ク シ ョ ン を 配 置 し ています。<br />

例 8-21 ルー ト 領 域 の 指 定<br />

ROM_LOAD 0x0000 0x4000<br />

{<br />

ROM_EXEC 0x0000 0x4000 ; 0x0 にルート 領 域<br />

{<br />

vectors.o (Vect, +FIRST) ; ベクタテーブル<br />

* (InRoot$$Sections) ; ルート 領 域 に 配 置 する 必 要 があるすべての<br />

; ライブラリセクション (__main.o、<br />

; __scatter*.o、 __dc*.o、 * Region$$Table など)<br />

}<br />

RAM 0x10000 0x8000<br />

{<br />

* (+RO, +RW, +ZI) ; 他 のすべてのセ ク シ ョ ン<br />

}<br />

}<br />

8.27.1 関 連 項 目<br />

タスク<br />

• ルー ト 実 行 領 域 の 作 成 (8-14 ページ)<br />

• FIXED 属 性 を 使 用 し たルー ト 領 域 の 作 成 (8-17 ページ) .<br />

概 念<br />

• ルー ト 領 域 と は (8-13 ページ)<br />

• <strong>ARM</strong> C および C++ ライブラリコードの 配 置 について (8-52 ページ)<br />

• <strong>ARM</strong> C ラ イ ブ ラ リ コー ド の 配 置 例 (8-54 ページ)<br />

• <strong>ARM</strong> C++ ラ イ ブ ラ リ コー ド の 配 置 例 (8-55 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-53<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.28 <strong>ARM</strong> C ラ イ ブ ラ リ コー ド の 配 置 例<br />

以 下 の 例 では、 C ラ イ ブ ラ リ コー ド の 配 置 方 法 を 示 し ています。<br />

例 8-22 <strong>ARM</strong> C ラ イ ブ ラ リ コー ド の 配 置<br />

ROM1 0<br />

{<br />

* (InRoot$$Sections)<br />

* (+RO)<br />

ROM2 0x1000<br />

{<br />

*armlib/c_* (+RO)<br />

}<br />

}<br />

ROM3 0x2000<br />

{<br />

*armlib/h_* (+RO)<br />

}<br />

RAM1 0x3000<br />

{<br />

*armlib* (+RO)<br />

}<br />

RAM2 0x4000<br />

{<br />

* (+RW, +ZI)<br />

}<br />

; <strong>ARM</strong> が 提 供 するすべての C ライブラリ 関 数<br />

; <strong>ARM</strong> が 提 供 する __<strong>ARM</strong>_* のみ<br />

; 再 配 布 可 能 な ラ イ ブ ラ リ 関 数<br />

; <strong>ARM</strong> が 提 供 する そ の 他 すべての ラ イ ブ ラ リ コ ー ド<br />

; 浮 動 小 数 点 ラ イ ブ ラ リ な ど<br />

armlib という 名 前 は、install_directory\lib\armlib ディレク ト リにある <strong>ARM</strong> C ライブ<br />

ラ リ フ ァ イ ルを 示 すために 使 用 さ れています。<br />

8.28.1 関 連 項 目<br />

概 念<br />

• <strong>ARM</strong> C および C++ ライブラリコードの 配 置 について (8-52 ページ)<br />

• ルー ト 領 域 へのコー ド の 配 置 例 (8-53 ページ)<br />

• <strong>ARM</strong> C++ ラ イ ブ ラ リ コー ド の 配 置 例 (8-55 ページ) .<br />

参 照<br />

『<strong>ARM</strong> ® C および C++ ラ イ ブ ラ リ と 浮 動 小 数 点 サポー ト の 使 用 』 :<br />

• C および C++ ラ イ ブ ラ リ の 命 名 規 則 (2-130 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-54<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.29 <strong>ARM</strong> C++ ラ イ ブ ラ リ コー ド の 配 置 例<br />

以 下 の 例 は、 スキ ャ ッ タ ロード が 行 われる C++ プログラムです。<br />

#include <br />

using namespace std;<br />

extern "C" int foo ()<br />

{<br />

cout


スキャ ッ タ フ ァ イルの 使 用<br />

8.30 <strong>ARM</strong> ラ イ ブ ラ リ ヘルパ 関 数 の 配 置 例<br />

コンパイ ラによ って、 結 果 と して 生 成 されるオブジェ ク ト フ ァ イルに <strong>ARM</strong> ヘルパ 関<br />

数 が 生 成 されます。 し たがって、 同 じ 1 つのスキ ャ ッ タ フ ァ イ 内 で armlib と cpplib を<br />

使 用 し て こ れ ら の 関 数 を 配 置 する こ と はで き ません。<br />

こ れら のヘルパ 関 数 を 配 置 する ため、 ス キ ャ ッ タ フ ァ イルに *.* (i.__<strong>ARM</strong>_*) を 指 定 し<br />

ます。 スキャ ッ タファ イルに * (+RO) があ る 場 合 、 *.* 部 分 が 重 要 です。<br />

* (i.__<strong>ARM</strong>_*) を 使 用 する と 、 以 下 のエ ラーが 生 成 さ れます。<br />

エラー: L6223E:Ambiguous selectors...<br />

こ れは、 複 数 の 一 致 を 解 決 する ためのス キ ャ ッ タ ロー ド 規 則 が 原 因 で 発 生 し ます。<br />

8.30.1 関 連 項 目<br />

概 念<br />

『<strong>ARM</strong> コンパイラツールチェーン : リンカリファレンス』<br />

• ス キ ャ ッ タ フ ァ イルの 処 理 時 の 複 数 のマ ッ チングを リ ンカが 解 決 する 方 法<br />

(4-28 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-56<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.31 空 き 領 域 の 予 約<br />

実 行 領 域 のス キ ャ ッ タ ロー ド 記 述 で EMPTY 属 性 を 使 用 し て、 ス タ ッ ク 用 の 空 き メ モ リ<br />

ブロッ クを 予 約 できます。<br />

こ の メ モ リ ブ ロ ッ ク はロー ド 領 域 の 一 部 ではあ り ませんが、 実 行 時 に 使 用 する ため<br />

に 割 り 当 て られます。 この メ モ リ ブロ ッ クはダ ミ ーの ZI 領 域 と し て 作 成 さ れる ため、<br />

リ ンカが こ のブ ロ ッ ク にア ク セスする と きは 以 下 のシンボルが 使 用 さ れます。<br />

• Image$$region_name$$ZI$$Base<br />

• Image$$region_name$$ZI$$Limit<br />

• Image$$region_name$$ZI$$Length.<br />

長 さに 負 の 値 が 指 定 されている 場 合 は、 指 定 されている ア ド レ スが、 その 領 域 の 終<br />

了 ア ド レ ス と し て 使 用 さ れます。 こ のア ド レ スには、 相 対 ア ド ス ではな く 絶 対 ア ド<br />

レスを 指 定 して 下 さい。<br />

以 下 の 例 では、 実 行 領 域 の 定 義 STACK 0x800000 EMPTY –0x10000 によって、 アドレス<br />

0x7F0000 で 始 ま り 、 ア ド レ ス 0x800000 で 終 わる STACK と い う 領 域 が 定 義 さ れています。<br />

例 8-23 ス タ ッ ク 用 の 領 域 の 予 約<br />

LR_1 0x80000<br />

{<br />

STACK 0x800000 EMPTY -0x10000<br />

}<br />

{<br />

}<br />

HEAP +0 EMPTY 0x10000<br />

; ロード 領 域 を 0x80000 から 開 始 する<br />

; 長 さが 負 の 値 であるため、 領 域 は<br />

; 0x800000 で 終 わる。 領 域 の 開 始 ア ド レ スは<br />

; その 長 さを 使 用 して 計 算 する。<br />

; ス タックの 配 置 に 使 用 する 空 き 領 域<br />

; 領 域 は 前 の 領 域 の 末 尾 か ら<br />

; 開 始 す る。 領 域 の 終 了 ア ド レ ス は 正 の 値 の 長 さ を<br />

; 使 用 し て 計 算 す る<br />

{<br />

; ヒープの 配 置 に 使 用 する 空 き 領 域<br />

}<br />

... ; 残 りのスキャ ッ タロード 記 述 ...<br />

注<br />

EMPTY 実 行 領 域 のために 作 成 さ れる ダ ミ ーの ZI 領 域 は、 実 行 時 にゼ ロ で 初 期 化 さ れま<br />

せん。<br />

相 対 ア ド レ ス (+offset) を 指 定 し、 負 の 長 さ を 指 定 し た 場 合 、 エ ラーが 生 成 さ れま<br />

す。<br />

以 下 に、 こ の 例 を 図 示 し ます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-57<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

0x810000<br />

<br />

<br />

0x800000<br />

<br />

<br />

<br />

0x7F0000<br />

<br />

この 例 では、 リ ンカによ って 以 下 のシンボルが 生 成 されます。<br />

図 8-4 ス タ ッ ク 用 の 領 域 の 予 約<br />

Image$$STACK$$ZI$$Base<br />

Image$$STACK$$ZI$$Limit<br />

Image$$STACK$$ZI$$Length<br />

Image$$HEAP$$ZI$$Base<br />

Image$$HEAP$$ZI$$Limit<br />

Image$$HEAP$$ZI$$Length<br />

= 0x7f0000<br />

= 0x800000<br />

= 0x10000<br />

= 0x800000<br />

= 0x810000<br />

= 0x10000<br />

注<br />

EMPTY 属 性 は 実 行 領 域 のみに 適 用 さ れます。 EMPTY 属 性 が ロー ド 領 域 の 定 義 に 使 用 さ れ<br />

てい る 場 合 は、 リ ン カに よ って 警 告 が 生 成 さ れ、 こ の 属 性 は 無 視 さ れます。<br />

リンカは、EMPTY 領 域 に 使 用 さ れる ア ド レ ス 空 間 が、 他 の 実 行 領 域 に 使 用 さ れていな<br />

いかど う かをチェ ッ ク し ます。<br />

8.31.1 関 連 項 目<br />

概 念<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 記 述 について (4-10 ページ) .<br />

参 照<br />

• Image$$ 実 行 領 域 シンボル (7-6 ページ) .<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 属 性 (4-13 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-58<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.32 ページ 境 界 での 領 域 の 作 成 について<br />

各 実 行 領 域 がページ 境 界 で 開 始 さ れる、 ターゲ ッ ト に 直 接 ロー ド で き る ELF ファイ<br />

ルを 生 成 できます。<br />

リ ンカには、 ページ 境 界 での ロー ド 領 域 と 実 行 領 域 の 作 成 に 役 立 つ 以 下 の 組 み 込 み<br />

関 数 が 用 意 さ れています。<br />

• AlignExpr<br />

• GetPageSize<br />

注<br />

実 行 領 域 を 整 列 させる と 、 ロー ド ア ド レ ス と 実 行 ア ド レ スの 両 方 が 整 列 さ れます。<br />

以 下 の 例 では、 各 実 行 領 域 が 新 し いページか ら 開 始 さ れる ELF ファイルを 生 成 して<br />

います。<br />

例 8-24 ページ 境 界 での 領 域 の 作 成<br />

LR1 GetPageSize() + SizeOfHeaders()<br />

{<br />

ER_RO +0<br />

{<br />

*(+RO)<br />

}<br />

ER_RW +GetPageSize()<br />

{<br />

*(+RW)<br />

}<br />

ER_ZI +0<br />

{<br />

*(+ZI)<br />

}<br />

}<br />

デフ ォル ト のページサ イ ズであ る 0x8000 が 使 用 さ れます。 こ のページサ イ ズ を 変 更<br />

するには、 --pagesize コマンド ラインオプショ ンを 使 用 します。<br />

8.32.1 関 連 項 目<br />

概 念<br />

• デマン ドページング (4-24 ページ)<br />

• 実 行 領 域 と 入 力 セ ク シ ョ ンのオーバーア ラ イ メ ン ト (8-61 ページ)<br />

• スキ ャ ッ タ フ ァ イル 内 の 式 の 評 価 (8-63 ページ)<br />

• スキ ャ ッ タ フ ァ イル 内 の 式 の 評 価 を 使 用 し たパデ ィ ングの 回 避 (8-64 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --pagesize=pagesize (2-119 ページ)<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-59<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

• ロー ド 領 域 に 厳 密 に 配 置 し た 状 態 で、 実 行 領 域 でベース ア ド レ スに 合 わせる 例<br />

(4-45 ページ)<br />

• AlignExpr(expr, align) 関 数 (4-46 ページ)<br />

• GetPageSize() 関 数 (4-47 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-60<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.33 実 行 領 域 と 入 力 セ ク シ ョ ンのオーバーア ラ イ メ ン ト<br />

コードセクシ ョ ンとデータセクシ ョ ンをオーバーアライ メ ン ト させる 必 要 が 生 じる<br />

場 合 があ り ます。 それ ら のセ ク シ ョ ンの 処 理 方 法 は、 ソ ース コー ド にア ク セスでき<br />

るかど うかによって 異 なり ます。<br />

• 元 の ソース コー ド にア ク セスでき る 場 合 は、 __align(n) キーワード、<br />

--min_array_alignment コ マン ド ラ イ ンオプシ ョ ンなど を 使 用 する こ と で コ ンパ イ<br />

ル 時 に 実 行 でき ます。<br />

• ソースコードにアクセスできない 場 合 は、 スキャッタファイルで 以 下 のアライ<br />

メ ン ト 指 定 子 を 使 用 する 必 要 があ り ます。<br />

ALIGNALL 実 行 領 域 内 のすべてのセ ク シ ョ ンのセ ク シ ョ ンア ラ イ メ ン ト を 増 やし<br />

ます。 以 下 に 例 を 示 し ます。<br />

ER_DATA ...ALIGNALL 8<br />

{<br />

... ; セレクタ<br />

}<br />

OVERALIGN<br />

特 定 のセ ク シ ョ ンのア ラ イ メ ン ト を 増 やし ます。 以 下 に 例 を 示 し ま<br />

す。<br />

ER_DATA ...<br />

{<br />

*.o(.bar, OVERALIGN 8)<br />

... ; セレクタ<br />

}<br />

8.33.1 関 連 項 目<br />

概 念<br />

• ページ 境 界 での 領 域 の 作 成 について (8-59 ページ)<br />

参 照<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

• 入 力 セ ク シ ョ ンの 記 述 について (4-23 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• __align (5-3 ページ)<br />

• --min_array_alignment=opt (3-156 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-61<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.34 スキャ ッ タ フ ァ イルでのプ リ プ ロセ ッ シング コ マン ド の 使 用<br />

C プリプロセッサを 使 用 して、 スキャッタファイルを 渡 すことができます。 これに<br />

より、C プリプロセッサのすべての 機 能 にアクセスできるようになります。<br />

ス キ ャ ッ タ フ ァ イルの 最 初 の 行 で、 リ ン カが こ のフ ァ イルを 処 理 する ために 呼 び 出<br />

すプ リ プ ロ セ ッ サ コ マン ド を 指 定 し ます。 こ の コ マン ド の 形 式 以 下 に 示 し ます。<br />

#! preprocessor [pre_processor_flags]<br />

一 般 的 には、 #! armcc -E という コマンドが 使 用 されます。 このコマンドは、armcc プリ<br />

プ ロ セ ッ サを 使 用 し て、 ス キ ャ ッ タ フ ァ イ ルを 渡 し ます。<br />

以 下 の こ と がで き ます。<br />

• プリプロセッシングディレクティブをスキャッタファイルの 先 頭 に 追 加 しま<br />

す。<br />

• スキャッタファイル 内 の 単 純 な 式 の 評 価 を 使 用 します。<br />

例 えば、 スキャ ッ タ フ ァ イル file.scat には 以 下 のよ う なコマン ド を 含 めます。<br />

#! armcc -E<br />

#define ADDRESS 0x20000000<br />

#include "include_file_1.h"<br />

lr1 ADDRESS<br />

{<br />

...<br />

}<br />

リ ンカに よ って、 前 処 理 済 みのス キ ャ ッ タ フ ァ イルが 解 析 され、 デ ィ レ ク テ ィ ブが<br />

コメントとして 処 理 されます。<br />

ま た、 ス キ ャ ッ タ フ ァ イルの 前 処 理 を --predefine コマンド ラインオプショ ンと 共 に<br />

使 用 する こ と も で き ます。 こ の 例 では、 以 下 の よ う に し ます。<br />

1. file.scat を 変 更 して、 ディ レ クテ ィブ #define ADDRESS 0x20000000 を 削 除 し ます。<br />

2. 以 下 の コ マン ド を 指 定 し ます。<br />

armlink --predefine="-DADDRESS=0x20000000" --scatter=file.scat<br />

8.34.1 関 連 項 目<br />

概 念<br />

• スキ ャ ッ タ フ ァ イル 内 の 式 の 評 価 (8-63 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --predefine="string" (2-125 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-62<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.35 スキャ ッ タ フ ァ イル 内 の 式 の 評 価<br />

リンカは、 使 用 されている 演 算 子 が +、 -、 *、 /、 AND、 OR、 および 丸 括 弧 のみの 単 純 な<br />

式 を 評 価 できます。 OR および AND の 実 装 は、 C の 演 算 子 の 優 先 順 位 に 従 います。<br />

8.35.1 式 の 評 価 の 使 用 例<br />

次 のデ ィ レ ク テ ィ ブを 使 用 し ます。<br />

#define BASE_ADDRESS 0x8000<br />

#define ALIAS_NUMBER 0x2<br />

#define ALIAS_SIZE 0x400<br />

#define AN_ADDRESS (BASE_ADDRESS+(ALIAS_NUMBER*ALIAS_SIZE))<br />

ス キ ャ ッ タ フ ァ イルには、 次 の も のが 含 まれる 可 能 性 があ り ます。<br />

LOAD_FLASH AN_ADDRESS<br />

; 開 始 ア ド レ ス<br />

前 処 理 の 後 の 評 価 は 次 の と お り です。<br />

LOAD_FLASH ( 0x8000 + ( 0x2 * 0x400 )) ; 開 始 ア ド レ ス<br />

評 価 の 後 、 スキ ャ ッ タ フ ァ イルが 解 析 されて、 ロード 領 域 が 作 成 されます。<br />

LOAD_FLASH 0x8800 ; 開 始 ア ド レ ス<br />

8.35.2 関 連 項 目<br />

概 念<br />

• スキャッタファイルでのプリプロセッシングコマンドの 使 用 (8-62 ページ)<br />

• スキ ャ ッ タ フ ァ イル 内 の 式 の 評 価 を 使 用 し たパデ ィ ングの 回 避 (8-64 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-63<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.36 スキャ ッ タ フ ァ イル 内 の 式 の 評 価 を 使 用 し たパデ ィ ングの 回 避<br />

スキャッタファイルで ALIGN、 ALIGNALL、 または FIXED 属 性 を 使 用 する と 、 イ メ ージに<br />

大 量 のパデ ィ ン グが 挿 入 さ れる 場 合 があ り ます。 こ のパデ ィ ン グ を 削 除 する には、<br />

式 の 評 価 を 使 用 し て、 ロー ド 領 域 と 実 行 領 域 の 開 始 ア ド レ ス を 指 定 し ます。 ア ド レ<br />

ス 式 の 指 定 には、 組 み 込 み 関 数 AlignExpr を 使 用 できます。<br />

8.36.1 スキャ ッ タ フ ァ イルでのパデ ィ ングの 回 避 例<br />

以 下 のスキャッタファイルでは、 生 成 されたイ メージにパディングが 挿 入 されます。<br />

LR1 0x4000<br />

{<br />

ER1 +0 ALIGN 0x8000<br />

{<br />

...<br />

}<br />

}<br />

ALIGN キーワード を 使 用 する と、ER1 はロードビューと 実 行 ビューの 両 方 で 0x8000 の 境<br />

界 で 整 列 さ れます。 ロー ド ビ ューで 整 列 させる ためには、 リ ンカは 0x4000 バイ トの<br />

パデ ィ ングを 挿 入 する 必 要 があ り ます。<br />

以 下 のスキャッタファイルでは、 生 成 されたイ メージにパディングが 挿 入 されませ<br />

ん。<br />

LR1 0x4000<br />

{<br />

ER1 AlignExpr(+0, 0x8000)<br />

{<br />

...<br />

}<br />

}<br />

AlignExpr を 使 用 する と 、 +0 の 結 果 は 0x8000 の 境 界 で 整 列 さ れます。 そのため、 作 成<br />

さ れる 実 行 領 域 の ロー ド ア ド レ スは 0x4000 にな り ますが、 実 行 ア ド レスは 0x8000 に<br />

なります。<br />

8.36.2 関 連 項 目<br />

概 念<br />

• スキ ャ ッ タ フ ァ イル 内 の 式 の 評 価 (8-63 ページ) .<br />

『リンカリファレンス』:<br />

• ロー ド 領 域 に 厳 密 に 配 置 し た 状 態 で、 実 行 領 域 でベース ア ド レ スに 合 わせる 例<br />

(4-45 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

• AlignExpr(expr, align) 関 数 (4-46 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-64<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.37 等 価 なスキャ ッ タ ロー ド 記 述 を 使 用 し た 単 純 イ メ ージの 生 成<br />

コマンド ラインオプショ ン --reloc、 --ro_base、 --rw_base、 --ropi、 --rwpi、 および<br />

--split を 指 定 する と 、 以 下 の タ イ プの 単 純 イ メ ージが 作 成 さ れます。<br />

• タイプ 1 のイ メージ :1 つの ロー ド 領 域 と 連 続 する 実 行 領 域<br />

• タイプ 2 のイ メージ :1 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域<br />

• タイプ 3 のイ メージ :2 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域<br />

これと 同 じタイプのイ メージは、--scatter コマンド ラインオプショ ンと、 対 応 する<br />

スキャッタロード 記 述 の 1 つを 含 んでい る フ ァ イ ルを 使 用 し て、 作 成 する こ と がで<br />

きます。<br />

8.37.1 関 連 項 目<br />

概 念<br />

• 単 純 イ メ ージの タ イ プ (4-10 ページ)<br />

• タイプ 1 のイ メージ :1 つの ロー ド 領 域 と 連 続 する 実 行 領 域 (8-66 ページ)<br />

• タイプ 2 のイ メージ :1 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (8-68 ページ)<br />

• タイプ 3 のイ メージ :2 つの ロー ド 領 域 と 連 続 し ない 実 行 領 域 (8-70 ページ) .<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 記 述 について (4-5 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --reloc (2-134 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --ropi (2-138 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ)<br />

• --scatter=file (2-144 ページ)<br />

• --split (2-156 ページ)<br />

• ロード 領 域 の 属 性 (4-8 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-65<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.38 タイプ 1 のイ メージ : 1 つのロー ド 領 域 と 連 続 する 実 行 領 域<br />

このタイプのイ メージは、 ロードビュー 内 の 1 つのロー ド 領 域 と 、 実 行 ビ ュー 内 の 3<br />

つの 実 行 領 域 か ら 構 成 さ れます。 実 行 領 域 は メ モ リ マ ッ プ 内 連 続 し て 配 置 さ れます。<br />

--ro_base address を 使 用 する と 、 RO 出 力 セ ク シ ョ ンを 含 んでいる 領 域 のロード ア ド<br />

レスと 実 行 アドレスを 指 定 できます。 以 下 の 例 では、--ro_base 0x040000 を 使 用 する こ<br />

と と 同 じ 意 味 を 持 つスキャ ッ タロード 記 述 を 示 しています。<br />

例 8-25 1 つのロー ド 領 域 と 連 続 する 実 行 領 域<br />

LR_1 0x040000<br />

{<br />

ER_RO +0<br />

}<br />

{<br />

; LR_1 と い う 名 前 のロード 領 域 を 定 義 し、 0x040000 から 開 始 する。<br />

; 最 初 の 実 行 領 域 は ER_RO と い う 名 前 で、 前 の 領 域 の 末 尾 か ら 開 始 する。<br />

; ただし、 前 の 領 域 は 存 在 しないため、 アドレスは 0x040000 になる。<br />

* (+RO) ; すべての RO セクショ ンはこの 領 域 に 連 続 して 配 置 される。<br />

}<br />

ER_RW +0<br />

{<br />

; 2 番 目 の 実 行 領 域 は ER_RW と い う 名 前 で、 前 の 領 域 の 末 尾 か ら<br />

; 開 始 す る。 ア ド レ ス は 0x040000 + ER_RO 領 域 の サ イ ズ に な る。<br />

* (+RW) ; すべての RW セクショ ンはこの 領 域 に 連 続 して 配 置 される。<br />

}<br />

ER_ZI +0<br />

{<br />

}<br />

; 最 後 の 実 行 領 域 は ER_ZI と い う 名 前 で、 前 の 領 域 の 末 尾<br />

; 0x040000 + ER_RO 領 域 の サ イ ズ + ER_RW 領 域 の サ イ ズ<br />

; から 開 始 する。<br />

* (+ZI) ; すべての ZI セ ク シ ョ ンはこ こ に 連 続 し て 配 置 される。<br />

こ の 例 では、 以 下 の よ う にな り ます。<br />

• この 記 述 によ り、ロードアドレスに 0x040000 が 設 定 された、LR_1 という 名 前 の 1<br />

つの ロー ド 領 域 を 含 んでい る イ メ ージが 作 成 さ れます。<br />

• このイ メージには、ER_RO、 ER_RW、 ER_ZI という 3 つの 実 行 領 域 があ り 、 それぞれ<br />

RO、 RW、 ZI の 各 出 力 セ ク シ ョ ン を 含 んでいます。 RO と RW はルー ト 領 域 で<br />

す。 ZI は 実 行 時 に 動 的 に 作 成 さ れます。 ER_RO の 実 行 ア ド レ スは 0x040000 です。<br />

実 行 領 域 の 記 述 において、 +offset 形 式 のベース 指 定 子 を 使 用 する こ と に よ り 、<br />

3 つの 実 行 領 域 がすべて メ モ リ マ ッ プ 内 で 連 続 し て 配 置 さ れます。 こ れに よ り 、<br />

実 行 領 域 をその 前 の 行 領 域 の 直 後 に 配 置 で き ます。<br />

--reloc オプシ ョ ン を 使 用 する と 、 再 配 置 可 能 な イ メ ージを 作 成 で き ます。 --reloc を<br />

単 独 で 使 用 する と 、 単 一 の ロー ド 領 域 の 属 性 が RELOC に 設 定 される、 単 純 タ イプ 1 に<br />

似 たイ メージが 生 成 されます。<br />

8.38.1 ropi の 例<br />

こ の 例 では、 実 行 領 域 は メ モ リ マ ッ プ 内 で 連 続 し て 配 置 さ れます。 ただ し、 --ropi を<br />

指 定 する と 、 RO 出 力 セ ク シ ョ ン を 保 持 する ロー ド 領 域 と 実 行 領 域 が 位 置 非 依 存 と し<br />

てマーク されます。<br />

以 下 の 例 では、 --ro_base 0x010000 --ropi を 使 用 する こ と と 同 じ 意 味 を 持 つスキャ ッ タ<br />

ロード 記 述 を 示 しています。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-66<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

例 8-26 位 置 非 依 存 コー ド<br />

LR_1 0x010000 PI ; 最 初 のロード 領 域 を 0x010000 から 開 始 する。<br />

{<br />

ER_RO +0 ; PI 属 性 が 親 か ら 継 承 さ れ る。<br />

; デフォルトの 実 行 アドレスは 0x010000 だが、 コードは 移 動 できる。<br />

{<br />

* (+RO) ; すべての RO セクションはここに 配 置 される。<br />

}<br />

ER_RW +0 ABSOLUTE ; PI 属 性 が ABSOLUTE によってオーバーライドされる。<br />

{<br />

* (+RW) ; 次 に RW セクショ ンが 配 置 される。 このセクショ ンは 移 動 できない。<br />

}<br />

ER_ZI +0 ; ER_ZI 領 域 は ER_RW 領 域 の 後 に 配 置 さ れ る。<br />

{<br />

* (+ZI) ; すべての ZI セ ク シ ョ ンはこ こ に 連 続 し て 配 置 される。<br />

}<br />

}<br />

RO 実 行 領 域 であ る ER_RO は、 ロー ド 領 域 LR_1 から PI 属 性 を 継 承 し ます。 次 の 実 行 領<br />

域 ER_RW は ABSOLUTE としてマークされ、+offset 形 式 のベース 指 定 子 が 使 用 さ れます。<br />

このため、ER_RW には ER_RO の PI 属 性 が 継 承 さ れません。 ま た、 ER_ZI 領 域 のオフセ ッ<br />

トに +0 が 設 定 されているため、 この 領 域 は ER_RW 領 域 の ABSOLUTE 属 性 を 継 承 し ます。<br />

8.38.2 関 連 項 目<br />

概 念<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 記 述 について (4-5 ページ)<br />

• ロード 領 域 に 相 対 アドレス +offset を 使 用 する 際 の 注 意 事 項 (4-18 ページ)<br />

• 実 行 領 域 に 相 対 ア ド レ ス +offset を 使 用 する 際 の 注 意 事 項 (4-19 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --reloc (2-134 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --ropi (2-138 ページ)<br />

• ロード 領 域 の 属 性 (4-8 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-67<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.39 タイプ 2 のイ メージ : 1 つのロー ド 領 域 と 連 続 し ない 実 行 領 域<br />

このタイプのイ メージは、 ロードビュー 内 の 1 つのロー ド 領 域 と 、 実 行 ビ ュー 内 の 3<br />

つの 実 行 領 域 か ら 構 成 さ れます。 RW 実 行 領 域 が RO 実 行 領 域 と 隣 接 し ない こ と を 除<br />

いては、 タ イプ 1 のイ メージと 似 ています。<br />

--ro_base=address1 を 使 用 する と 、 RO 出 力 セ ク シ ョ ンを 含 んでいる 領 域 のロード ア ド<br />

レスと 実 行 アドレスを 指 定 できます。--rw_base=address2 を 使 用 する と 、 RW 実 行 領 域<br />

の 実 行 ア ド レ ス を 指 定 でき ます。<br />

以 下 の 例 では、 --ro_base=0x010000 --rw_base=0x040000 を 使 用 する こ と と 同 じ 意 味 を 持<br />

つスキャ ッ タ ロード 記 述 を 示 しています。<br />

例 8-27 1 つのロー ド 領 域 と 複 数 の 実 行 領 域<br />

LR_1 0x010000<br />

{<br />

ER_RO +0<br />

}<br />

; LR_1 という 名 前 のロード 領 域 を 定 義 する。<br />

; 最 初 の 実 行 領 域 は ER_RO と い う 名 前 で、 前 の 領 域 の 末 尾 か ら 開 始 する。<br />

; 前 の 領 域 は 存 在 し ないため、 ア ド レ スは 0x010000 になる。<br />

{<br />

* (+RO) ; すべての RO セ ク シ ョ ンはこ の 領 域 に 連 続 し て 配 置 される。<br />

}<br />

ER_RW 0x040000 ; 2 番 目 の 実 行 領 域 は ER_RW という 名 前 で、0x040000 から 開 始 する。<br />

{<br />

* (+RW) ; すべての RW セ ク シ ョ ンはこ の 領 域 に 連 続 し て 配 置 される。<br />

}<br />

ER_ZI +0 ; 最 後 の 実 行 領 域 は ER_ZI という 名 前 で、<br />

; アドレスは 0x040000 + ER_RW 領 域 の サ イ ズ に な る。<br />

{<br />

* (+ZI) ; すべての ZI セ ク シ ョ ンはこ こ に 連 続 し て 配 置 される。<br />

}<br />

こ の 例 では、 以 下 の よ う にな り ます。<br />

• この 記 述 によ り、ロードアドレスに 0x010000 が 設 定 された、LR_1 という 名 前 の 1<br />

つの ロー ド 領 域 を 含 んでい る イ メ ージが 作 成 さ れます。<br />

• このイ メージには、ER_RO、 ER_RW、 ER_ZI という 3 つの 実 行 領 域 があ り 、 それぞれ<br />

RO、 RW、 ZI の 各 出 力 セ ク シ ョ ン を 含 んでいます。 RO 領 域 はルー ト 領 域 です。<br />

ER_RO の 実 行 ア ド レ スは 0x010000 です。<br />

• ER_RW 実 行 領 域 と ER_RO 実 行 領 域 は 隣 接 し ていません。 こ の 領 域 の 実 行 ア ド レ ス<br />

は 0x040000 です。<br />

• ER_ZI 実 行 領 域 は、 その 前 の 実 行 領 域 であ る ER_RW の 直 後 に 配 置 されます。<br />

8.39.1 rwpi の 例<br />

RW 実 行 領 域 と RO 実 行 領 域 が 隣 接 し ていない 点 で、 --rw_base を 指 定 して 作 成 する タ<br />

イプ 2 のイ メージと 似 ています。 ただし、--rwpi を 指 定 する と 、 RW 出 力 セ ク シ ョ ン<br />

を 保 持 する 実 行 領 域 が 位 置 非 依 存 と し てマー ク さ れます。<br />

以 下 の 例 では、 --ro_base=0x010000 --rw_base=0x018000 --rwpi を 使 用 する こ と と 同 じ 意<br />

味 を 持 つス キ ャ ッ タ ロー ド 記 述 を 示 し ています。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-68<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

例 8-28 位 置 非 依 存 デー タ<br />

LR_1 0x010000<br />

{<br />

ER_RO +0<br />

}<br />

; 最 初 のロード 領 域 を 0x010000 から 開 始 する。<br />

; デ フォルトの ABSOLUTE 属 性 が 親 か ら 継 承 さ れ る。 実 行 ア ド レ ス は<br />

; 0x010000 になる。 コード と RO データは 移 動 できない。<br />

{<br />

* (+RO) ; すべての RO セクションはここに 配 置 される。<br />

}<br />

ER_RW 0x018000 PI ; PI 属 性 に よ っ て ABSOLUTE がオーバーライドされる。<br />

{<br />

* (+RW) ; RW セクショ ンは 0x018000 に 配 置 され、 移 動 でき る。<br />

}<br />

ER_ZI +0 ; ER_ZI 領 域 は ER_RW 領 域 の 後 に 配 置 さ れ る。<br />

{<br />

* (+ZI) ; すべての ZI セ ク シ ョ ンはこ こ に 連 続 し て 配 置 される。<br />

}<br />

RO 実 行 領 域 であ る ER_RO は、 ロー ド 領 域 LR_1 から ABSOLUTE 属 性 を 継 承 し ます。 次 の<br />

実 行 領 域 であ る ER_RW は、 PI としてマークされます。また、ER_ZI 領 域 のオフセ ッ ト に<br />

+0 が 設 定 されているため、 この 領 域 は ER_RW 領 域 の PI 属 性 を 継 承 し ます。<br />

タイプ 2 とタイプ 3 のイ メージに、--ropi と --rwpi の 他 の 組 み 合 わせを 使 用 する ス<br />

キ ャ ッ タ ロー ド の 記 述 も 可 能 です。<br />

8.39.2 関 連 項 目<br />

概 念<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 記 述 について (4-5 ページ)<br />

• ロード 領 域 に 相 対 アドレス +offset を 使 用 する 際 の 注 意 事 項 (4-18 ページ)<br />

• 実 行 領 域 に 相 対 ア ド レ ス +offset を 使 用 する 際 の 注 意 事 項 (4-19 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --ro_base=address (2-137 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ)<br />

• ロード 領 域 の 属 性 (4-8 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-69<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.40 タイプ 3 のイ メージ : 2 つのロー ド 領 域 と 連 続 し ない 実 行 領 域<br />

タイプ 3 のイ メージは、 ロードビュー 内 の 2 つのロード 領 域 と、 実 行 ビ ュー 内 の 3 つ<br />

の 実 行 領 域 か ら 構 成 さ れます。 こ の タ イ プの イ メ ージはタ イ 2 のイ メージと 似 てい<br />

ますが、 このイ メージではタ イプ 2 の 1 つのロー ド 領 域 が 2 つのロー ド 領 域 に 分 割 さ<br />

れます。<br />

ロー ド 領 域 の 再 配 置 と 分 割 を 行 う には、 以 下 の リ ン カオプシ ョ ン を 使 用 し ます。<br />

--reloc --reloc --split の 組 み 合 わせを 使 用 する と 、 単 純 タ イ プ 3 に 似 た イ メ ー<br />

ジが 生 成 されますが、 2 つのロード 領 域 には RELOC 属 性 が 設 定 さ れます。<br />

--ro_base=address1<br />

--rw_base=address2<br />

RO 出 力 セ ク シ ョ ンを 含 んでいる 領 域 のロード ア ド レ ス と 実 行 ア ド レ ス<br />

を 指 定 し ます。<br />

RW 出 力 セ ク シ ョ ンを 含 んでいる 領 域 のロード ア ド レ ス と 実 行 ア ド レ ス<br />

を 指 定 し ます。<br />

--split RO 出 力 セ ク シ ョ ン と RW 出 力 セ ク シ ョ ン を 含 んでい るデフ ォル ト の 1<br />

つのロー ド 領 域 を 2 つの ロー ド 領 域 に 分 割 し ます。 こ れに よ り 、 一 方 の<br />

ロード 領 域 には RO 出 力 セ ク シ ョ ンが 含 められ、 も う 一 方 のロード 領 域<br />

には RW 出 力 セ ク シ ョ ンが 含 め られます。<br />

以 下 の 例 では、 --ro_base=0x010000 --rw_base=0x040000 --split を 使 用 する こ と と 同 じ 意<br />

味 を 持 つス キ ャ ッ タ ロー ド 記 述 を 示 し ています。<br />

例 8-29 複 数 のロー ド 領 域<br />

LR_1 0x010000 ; 最 初 のロード 領 域 を 0x010000 から 開 始 する。<br />

{<br />

ER_RO +0 ; アドレスは 0x010000 になる。<br />

{<br />

* (+RO)<br />

}<br />

}<br />

LR_2 0x040000 ; 2 番 目 のロード 領 域 を 0x040000 から 開 始 する。<br />

{<br />

ER_RW +0 ; アドレスは 0x040000 になる。<br />

{<br />

* (+RW) ; すべての RW セ ク シ ョ ンはこ の 領 域 に 連 続 し て 配 置 される。<br />

}<br />

ER_ZI +0 ; アドレスは 0x040000 + ER_RW 領 域 の サ イ ズ に な る 。<br />

{<br />

* (+ZI) ; すべての ZI セ ク シ ョ ンはこ の 領 域 に 連 続 し て 配 置 される。<br />

}<br />

}<br />

こ の 例 では、 以 下 の よ う にな り ます。<br />

• 0x010000 と 0x040000 をロードアドレスとする 2 つのロード 領 域 LR_1 および LR_2<br />

を 含 んでいる イ メージが 作 成 されます。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-70<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

• このイ メージには、ER_RO、 ER_RW、 ER_ZI という 3 つの 実 行 領 域 があ り 、 それぞれ<br />

RO、 RW、 ZI の 各 出 力 セ ク シ ョ ン を 含 んでいます。 ER_RO の 実 行 ア ド レ スは<br />

0x010000 です。<br />

• ER_RW 実 行 領 域 は、 実 行 ア ド レ スが 0x040000 であるため、ER_RO 実 行 領 域 と 隣 接 し<br />

ていません。<br />

• ER_ZI 実 行 領 域 は、 その 前 の 実 行 領 域 であ る ER_RW の 直 後 に 配 置 されます。<br />

8.40.1 再 配 置 可 能 なロー ド 領 域 の 例<br />

このタイプ 3 の イ メ ージ も、 ロー ド ビ ュー 内 の 2 つのロード 領 域 と、 実 行 ビ ュー 内 の<br />

3 つの 実 行 領 域 か ら 構 成 さ れます。 ただ し、 こ こ では 2 つのー ド 領 域 に RELOC 属 性 を<br />

設 定 する ために、 --reloc を 使 用 し ます。<br />

以 下 の 例 では、 --ro_base 0x010000 --rw_base 0x040000 --reloc --split を 使 用 する こ と と<br />

同 じ 意 味 を 持 つスキャ ッ タ ロード 記 述 を 示 しています。<br />

例 8-30 再 配 置 可 能 なロー ド 領 域<br />

LR_1 0x010000 RELOC<br />

{<br />

ER_RO + 0<br />

{<br />

* (+RO)<br />

}<br />

}<br />

LR2 0x040000 RELOC<br />

{<br />

ER_RW + 0<br />

{<br />

* (+RW)<br />

}<br />

}<br />

ER_ZI +0<br />

{<br />

* (+ZI)<br />

}<br />

8.40.2 関 連 項 目<br />

概 念<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 記 述 について (4-5 ページ)<br />

• ロード 領 域 に 相 対 アドレス +offset を 使 用 する 際 の 注 意 事 項 (4-18 ページ)<br />

• 実 行 領 域 に 相 対 ア ド レ ス +offset を 使 用 する 際 の 注 意 事 項 (4-19 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --reloc (2-134 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-71<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

• --rw_base=address (2-141 ページ)<br />

• --split (2-156 ページ)<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• ロー ド 領 域 と 実 行 領 域 のア ド レ ス 属 性 (4-16 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-72<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

8.41 スキャ ッ タ フ ァ イルを 使 用 した ELF のマ ッ ピング<br />

単 純 イ メ ージの 場 合 、 ELF 形 式 の 実 行 可 能 な フ ァ イ ルには、 以 下 のセグ メ ン ト が 含<br />

まれます。<br />

• PT_LOAD タイプの 1 つの ELF プログラムセグメン トで 表 されるロード 領 域<br />

• 以 下 の 3 つまでの ELF セ ク シ ョ ンで 表 さ れる 実 行 領 域<br />

— RO 用 のセ ク シ ョ ン<br />

— RW 用 のセ ク シ ョ ン<br />

— ZI 用 のセ ク シ ョ ン<br />

例 えば、 以 下 の よ う な ス キ ャ ッ タ フ ァ イルがあ る と し ます。<br />

例 8-31 スキャ ッ タ フ ァ イル<br />

LOAD 0x8000<br />

{<br />

EXEC_ROM +0<br />

{<br />

*(+RO)<br />

}<br />

RAM +0<br />

{<br />

*(+RW,+ZI)<br />

}<br />

HEAP +0x100 EMPTY 0x100<br />

{<br />

}<br />

STACK +0 EMPTY 0x400<br />

{<br />

}<br />

}<br />

このスキャッタファイルでは、 ロード 領 域 のアドレスが 0x8000 である、 PT_LOAD タ<br />

イプの 1 つのプロ グ ラ ムセグ メ ン ト が 作 成 されます。<br />

EXEC_ROM の 内 容 を 表 す SHT_PROGBITS タイプの 1 つの 出 力 セ ク シ ョ ンが 作 成 さ<br />

れます。 RAM を 表 す 2 つの 出 力 セ ク シ ョ ンが 作 成 さ れます。 1 つは SHT_PROGBITS<br />

タ イ プで、 初 期 化 さ れた 読 み 出 し / 書 き 込 みデータ を 含 みます。 も う 1 つは<br />

SHT_NOBITS タ イ プで、 ゼ ロ で 初 期 化 さ れたデータ についての 記 述 を 含 みます。<br />

ヒープとスタックは、 ELF ファイルの SHT_NOBITS セクションに 記 述 されます。<br />

イ メ ージ 内 のス キ ャ ッ タ ロー ド が 行 われたセ ク シ ョ ン を 確 認 するには、 以 下 の<br />

fromelf コマンドを 入 力 します。<br />

fromelf --text -v my_image.axf<br />

シンボルテーブルを 表 示 する には、 以 下 の コ マン ド を 入 力 し ます。<br />

fromelf --text -s -v my_image.axf<br />

以 下 は fromelf の 出 力 例 で、 LOAD、 EXEC_ROM、 RAM、 HEAP、 および STACK の 各 セ ク シ ョ ンが<br />

示 されています。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-73<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

例 8-32 ELF イ メ ージ 内 のスキャ ッ タ ロー ド が 行 われたセ ク シ ョ ン<br />

...<br />

========================================================================<br />

** Program header #0<br />

Type :PT_LOAD (1)<br />

File Offset :52 (0x34)<br />

Virtual Addr :0x00008000<br />

Physical Addr :0x00008000<br />

Size in file :764 bytes (0x2fc)<br />

Size in memory:2140 bytes (0x85c)<br />

Flags<br />

:PF_X + PF_W + PF_R + PF_<strong>ARM</strong>_ENTRY (0x80000007)<br />

Alignment :4<br />

========================================================================<br />

** Section #1<br />

Name :EXEC_ROM<br />

...<br />

Addr :0x00008000<br />

File Offset :52 (0x34)<br />

Size :740 bytes (0x2e4)<br />

...<br />

====================================<br />

** Section #2<br />

Name :RAM<br />

...<br />

Addr :0x000082e4<br />

File Offset :792 (0x318)<br />

Size :20 bytes (0x14)<br />

...<br />

====================================<br />

** Section #3<br />

Name :RAM<br />

...<br />

Addr :0x000082f8<br />

File Offset :812 (0x32c)<br />

Size :96 bytes (0x60)<br />

...<br />

====================================<br />

** Section #4<br />

Name :HEAP<br />

...<br />

Addr :0x00008458<br />

File Offset :812 (0x32c)<br />

Size :256 bytes (0x100)<br />

...<br />

====================================<br />

** Section #5<br />

Name :STACK<br />

...<br />

Addr :0x00008558<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-74<br />

ID 111311<br />

Non-Confidential


スキャ ッ タ フ ァ イルの 使 用<br />

File Offset :812 (0x32c)<br />

Size :1024 bytes (0x400)<br />

...<br />

8.41.1 関 連 項 目<br />

概 念<br />

• スキャッタロードについて (8-3 ページ)<br />

• メモリマップが 単 純 なイメージ (8-7 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 8-75<br />

ID 111311<br />

Non-Confidential


第 9 章<br />

armlink における GNU ld スクリプトのサポート<br />

以 下 の ト ピ ッ ク では、 armlink におけ る GNU ld スクリプトのサポートについて 説 明 しま<br />

す。<br />

• GNU ld スクリプトのサポート と 制 限 について (9-2 ページ)<br />

• armlink での ld ス ク リ プ ト の 一 般 的 な 使 用 事 例 (9-4 ページ)<br />

• Armlink に 実 装 さ れてい る 重 要 な ld スクリプトコマンド (9-6 ページ)<br />

• armlink での ld ス ク リ プ ト の 使 用 に 固 有 の 制 限 (9-8 ページ)<br />

• armlink での ld ス ク リ プ ト の 使 用 に 関 する 推 奨 事 項 (9-9 ページ)<br />

• armlink に よ っ て 使 用 さ れるデフ ォル ト の GNU ld スクリプト (9-10 ページ)<br />

• <strong>ARM</strong> Linux 実 行 可 能 フ ァ イルを リ ン クする ための GNU ld スクリプトの 例<br />

(9-14 ページ)<br />

• <strong>ARM</strong> Linux 共 有 オブジ ェ ク ト を リ ン クする ための GNU ld スクリプトの 例<br />

(9-16 ページ)<br />

• ld --ldpartial オブジェ ク ト を リ ン クするための GNU ld スクリプトの 例<br />

(9-18 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-1<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.1 GNU ld スクリプトのサポート と 制 限 について<br />

armlink では GNU ld ス ク リ プ ト の 使 用 をサポー ト し ていますが、 以 下 の 制 限 があ り ま<br />

す。<br />

• armlink に GNU ld スクリプト 言 語 のサブセットが 実 装 されている。<br />

• サブセッ ト は、 <strong>ARM</strong> Linux と 部 分 リンクのサポートに 重 点 を 置 いている。<br />

• 仮 想 ア ド レ ス (VMA) がロードアドレス (LMA) と 同 じである 必 要 がある。<br />

• このリ リースでは、 ベアメ タルはサポート されない。<br />

• armlink --sysv コマンドラインオプショ ンでは、 内 部 ld スクリプトが 使 用 され<br />

る。 --sysv は --arm_linux コマンド ラインオプショ ンのデフォルトでもあり ます。<br />

ld スクリプトを 指 定 するには、armlink --linker_script ld_script コマンドラインオプ<br />

ション、 または 同 義 語 のコマンドラインオプション -T ld_script を 使 用 し ます。<br />

9.1.1 イ メ ージおよび 共 有 オブジ ェ ク ト を リ ン クする 場 合 の ld ス ク リ プ ト の 使 用<br />

イ メ ージまたは 共 有 オブジ ェ ク ト を リ ン クするには、 以 下 の 点 に 注 意 し て 下 さ い。<br />

• --sysv オプシ ョ ンまたは --arm_linux オプシ ョ ンが 必 要 です。<br />

• 認 識 さ れないフ ァ イルは、 ld ス ク リ プ ト と 同 様 に 解 析 さ れます。<br />

• ld スクリプトによって 生 成 されたすべての ELF イ メ ージおよび 共 有 オブジ ェ ク<br />

ト では、 デマン ド ページングが 行 われます。 ページサ イ ズを 制 御 すには、<br />

--pagesize オプシ ョ ン を 使 用 し ます。 デフ ォル ト は 0x8000 です。<br />

9.1.2 部 分 オブジ ェ ク ト を リ ン クする 場 合 の ld スクリプトの 使 用<br />

部 分 オブジ ェ ク ト を リ ン ク する には、 armlink --ldpartial コマンドラインオプショ ン<br />

を 使 用 する 必 要 があ り ます。 -r コマンド ラインオプショ ンは --ldpartial の 同 義 語 で<br />

す。<br />

9.1.3 関 連 項 目<br />

概 念<br />

• armlink での ld ス ク リ プ ト の 一 般 的 な 使 用 事 例 (9-4 ページ)<br />

• Armlink に 実 装 されている 重 要 な ld スクリプトコマンド (9-6 ページ)<br />

• armlink での ld ス ク リ プ ト の 使 用 に 固 有 の 制 限 (9-8 ページ)<br />

• armlink での ld ス ク リ プ ト の 使 用 に 関 する 推 奨 事 項 (9-9 ページ)<br />

• armlink によって 使 用 されるデフォルトの GNU ld スクリプト (9-10 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --arm_linux (2-13 ページ)<br />

• --ldpartial (2-95 ページ)<br />

• --linker_script=ld_script (2-101 ページ)<br />

• --pagesize=pagesize (2-119 ページ)<br />

• --sysroot=path (2-171 ページ)<br />

• --sysv (2-172 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-2<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

その 他 の 情 報<br />

• LD の 使 用 : GNU リンカ<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-3<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.2 armlink での ld ス ク リ プ ト の 一 般 的 な 使 用 事 例<br />

以 下 に、 armlink での ld ス ク リ プ ト の 一 般 的 な 使 用 事 例 を 示 し ます。<br />

ライブラリのラップ<br />

一 部 の ラ イ ブ ラ リ には、 動 的 な 部 分 と 静 的 な 部 分 があ り ます。 ld スクリ<br />

プトでは、INPUT コマン ド で 指 定 された とお り の 順 序 で 両 方 のラ イブラ<br />

リ をロード します。 以 下 に 例 を 示 します。<br />

INPUT(libstatic.a)<br />

INPUT(libdynamic.so)<br />

このスク リプトでは、libstatic.a の 後 に libdynamic.so をロードするよう<br />

にリンカに 指 示 しています。<br />

--ldpartial オプシ ョ ン を 使 用 し た 部 分 リ ン ク<br />

ld スクリプトを 指 定 して、 リンカによるセクションの 結 合 方 法 を 制 御 で<br />

き ます。 以 下 に 例 を 示 し ます。<br />

SECTIONS<br />

{<br />

.text :0<br />

{<br />

*(.text)<br />

*(mysection)<br />

}<br />

}<br />

このスク リプトでは、mysection とすべての .text セクションを 1 つの<br />

.text 出 力 セ ク シ ョ ンに 結 合 する よ う に リ ンカに 指 示 し ています。<br />

<strong>ARM</strong> Linux のリンクの 細 かい 制 御<br />

デフォル ト の リ ンカス ク リ プ ト で 指 定 されている 順 序 とは 異 なる 順 序 で<br />

セ ク シ ョ ン を 結 合 する こ と が 必 要 にな る 場 合 があ り ます。 ま た、 リ ン カ<br />

で 定 のア ド レ スにシンボルを 定 義 する こ と が 必 要 にな る 場 合 も あ り ま<br />

す。 こ う し た 情 報 は、 ユーザ 定 義 の リ ン カ ス ク リ プ ト で 指 定 で き ます。<br />

注<br />

<strong>ARM</strong> Linux 上 で 実 行 で き る フ ァ イルを 正 常 に 生 成 するには、 ダ イ ナ ミ ッ<br />

ク ローダがフ ァ イルを ロー ド する のに 使 用 で き る メ タデータ を 格 納 する<br />

出 力 セ ク シ ョ ン を イ メ ージに 含 め る 必 要 があ り ます。 最 初 はいずれかの<br />

サンプルス ク リ プ ト を 元 に、 それを 目 的 に 合 わせて 変 更 する こ と を 推 奨<br />

します。<br />

9.2.1 関 連 項 目<br />

概 念<br />

• <strong>ARM</strong> Linux 実 行 可 能 フ ァ イルを リ ン ク する ための GNU ld スクリプトの 例<br />

(9-14 ページ)<br />

• <strong>ARM</strong> Linux 共 有 オブジ ェ ク ト を リ ン ク する ための GNU ld スクリプトの 例<br />

(9-16 ページ)<br />

• ld --ldpartial オブジェ ク ト を リ ン クするための GNU ld スクリプトの 例<br />

(9-18 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-4<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

参 照<br />

『リンカリファレンス』:<br />

• --ldpartial (2-95 ページ)<br />

• --linker_script=ld_script (2-101 ページ)<br />

• --sysroot=path (2-171 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-5<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.3 Armlink に 実 装 されている 重 要 な ld スクリプト コマンド<br />

以 下 の ld スクリプトコマンドが 実 装 されています。<br />

ファイルを 処 理 するコマンド<br />

以 下 の コ マン ド が 実 装 さ れています。<br />

• AS_NEEDED<br />

• ENTRY<br />

• GROUP<br />

• INCLUDE<br />

• INPUT<br />

• OUTPUT<br />

• OUTPUT_ARCH<br />

• OUTPUT_FORMAT<br />

• SEARCH_DIR<br />

• STARTUP<br />

入 力 セ ク シ ョ ン を 出 力 セ ク シ ョ ンにマ ッ プする コ マン ド<br />

SECTIONS コマンドが 実 装 されています。<br />

SECTIONS コマンドは 最 も 複 雑 なコマンドですが、 すべての 機 能 が 実 装 さ<br />

れているわけではあ り ません。 特 に、 ロード ア ド レス 機 能 は 実 装 されて<br />

いません。<br />

AT(address)<br />

>region<br />

AT>region<br />

これらのコマンドはサポート されていません。 これらのコマンドでは、<br />

サポー ト されていない PHDRS コマンドが 必 要 になるか、 または 仮 想 アド<br />

レスとロードアドレスが 別 々になるためです。<br />

以 下 のデータ 定 義 関 数 は 実 装 さ れていません。<br />

• BYTE(expression)<br />

• COMMON<br />

• CONSTRUCTORS<br />

• CREATE_OBJECT_SYMBOLS<br />

• SHORT(expression)<br />

• LONG(expression)<br />

• QUAD(expression)<br />

• SQUAD(expression)<br />

入 力 セ ク シ ョ ンの 指 定 子 は 使 用 で き ません。<br />

archive:file<br />

シンボルバージ ョ ン 管 理 を 制 御 する コマン ド<br />

VERSIONS コマンドが 実 装 されています。<br />

VERSIONS コマンド 構 文 は、armlink --symver_script コマンドラインオプ<br />

ションでサポートされているものとまったく 同 じです。armlink では、<br />

VERSIONS コマン ドでの 符 号 化 されていないシンボル 名 の 一 致 はサポー ト<br />

していません。<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-6<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.3.1 関 連 項 目<br />

概 念<br />

• GNU ld スクリプトのサポート と 制 限 について (9-2 ページ)<br />

• armlink での ld ス ク リ プ ト の 使 用 に 固 有 の 制 限 (9-8 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --linker_script=ld_script (2-101 ページ)<br />

• --symver_script=file (2-169 ページ)<br />

• --sysroot=path (2-171 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-7<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.4 armlink での ld ス ク リ プ ト の 使 用 に 固 有 の 制 限<br />

以 下 の 制 限 は、 armlink で ld ス ク リ プ ト を 使 用 する 場 合 に 適 用 さ れます。<br />

PHDRS このコマンドは 実 装 されていません。 ld ス ク リ プ ト を 使 用 する 場 合 は、<br />

リ ン カに よ っ て 常 にプ ロ グ ラ ムヘ ッ ダが 自 動 的 に 生 成 さ れます。<br />

MEMORY<br />

OVERLAY<br />

このコマンドは 実 装 されていません。 リンカでは、 0 ~ 0XFFFFFFFF に 同 一<br />

な メ モ リ 空 間 があ る と 想 定 し ます。<br />

このコマンドは 実 装 されていません。 オーバーレイは 使 用 できません。<br />

その 他 のコ マン ド と 組 み 込 み 関 数<br />

以 下 の コ マン ド と 組 み 込 み 関 数 はサポー ト さ れていません。<br />

• ASSERT<br />

• FORCE_COMMON_ALLOCATION<br />

• INHIBIT_COMMON_ALLOCATION<br />

• INSERT AFTER<br />

• INSERT BEFORE<br />

• LENGTH<br />

• NOCROSSREFS<br />

• ORIGIN<br />

• REGION_ALIAS<br />

• TARGET<br />

armlink リンカ 定 義 シンボル<br />

各 出 力 セ ク シ ョ ンは、 内 部 的 には 実 行 領 域 と し て 定 義 さ れます。 既 存 の<br />

armlink 実 行 領 域 シンボルを 使 用 で き ます。 以 下 に 例 を 示 し ます。<br />

.text :{ *(.text) }<br />

出 力 セ ク シ ョ ン .text は、 .text と い う 名 前 の 実 行 領 域 で 表 さ れます。 ス<br />

キャッタファイルによって 実 行 領 域 が 定 義 されている 場 合 と 同 様 に、 シ<br />

ンボル Image$$.text$$Base を 使 用 できます。<br />

その 他 の 制 限<br />

その 他 には 以 下 の 制 限 があ り ます。<br />

• ld ス ク リ プ ト を 使 用 する 場 合 、 __AT セクションはサポート されませ<br />

ん。<br />

• ld ス ク リ プ ト を 使 用 する 場 合 、 RW 圧 縮 はサポー ト さ れません。<br />

9.4.1 関 連 項 目<br />

概 念<br />

• GNU ld スクリプトのサポート と 制 限 について (9-2 ページ)<br />

• Armlink に 実 装 されている 重 要 な ld スクリプトコマンド (9-6 ページ)<br />

• Image$$ 実 行 領 域 シンボル (7-6 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --linker_script=ld_script (2-101 ページ)<br />

• --symver_script=file (2-169 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-8<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.5 armlink での ld ス ク リ プ ト の 使 用 に 関 する 推 奨 事 項<br />

armlink で 使 用 する ld ス ク リ プ ト を 生 成 する 場 合 は、 以 下 の 推 奨 事 項 に 従 っ て 下 さ<br />

い。<br />

9.5.1 <strong>ARM</strong> Linux 向 けの ld ス ク リ プ ト を 生 成 する 場 合 の 推 奨 事 項<br />

ダ イナ ミ ッ ク ローダが 適 切 に 動 作 する ためには、 特 定 の タ イ プの 出 力 セ ク シ ョ ンが<br />

必 要 です。 以 下 にその 出 力 セ ク シ ョ ン を 示 し ます。<br />

• ハッシュテーブル<br />

• ストリングテーブル<br />

• ダイナミ ックシンボルテーブル<br />

• ダイナミ ックセクション<br />

• バージ ョ ンセ ク シ ョ ン<br />

• スレッドローカルス トレージセクション<br />

9.5.2 一 般 的 な 推 奨 事 項<br />

以 下 に 一 般 的 な 推 奨 事 項 を 示 し ます。<br />

• 各 出 力 セ ク シ ョ ンの タ イ プを 同 種 に し ます。 以 下 に 例 を 示 し ます。<br />

.text :{ *(.text) }<br />

.data :{ *(.data) }<br />

.bss :{ *(.bss) }<br />

こ れは、 以 下 の よ う に 変 更 する こ と を 推 奨 し ます。<br />

.stuff<br />

{<br />

*(.text)<br />

*(.data)<br />

*(.bss)<br />

}<br />

• <strong>ARM</strong> Linux 上 で ELF ファイルを 実 行 する 場 合 は、 ダイナミ ッ ク リ ンカによって<br />

使 用 さ れる メ タデータ の 場 所 を 変 更 し ないで 下 さ い。<br />

• SECTIONS コ マン ド と 一 致 し ないセ ク シ ョ ンは 孤 立 と マー ク さ れます。 孤 立 セ ク<br />

シ ョ ンは、 リ ン カに よ っ て 適 切 な 場 所 に 配 置 さ れます。 リ ン カでは、 必 ずし も<br />

可 能 ではあ り ませんが、 ld を 使 用 して 孤 立 セクシ ョ ンの 配 置 を 一 致 させよ う と<br />

します。armlink に よ る 孤 立 セ ク シ ョ ンの 配 置 方 法 を 使 用 し ない 場 合 は、 明 示 的<br />

な 配 置 を 使 用 し ます。<br />

9.5.3 関 連 項 目<br />

概 念<br />

• GNU ld スクリプトのサポート と 制 限 について (9-2 ページ)<br />

• Armlink に 実 装 されている 重 要 な ld スクリプトコマンド (9-6 ページ)<br />

• armlink での ld ス ク リ プ ト の 使 用 に 固 有 の 制 限 (9-8 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --linker_script=ld_script (2-101 ページ)<br />

• --symver_script=file (2-169 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-9<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.6 armlink によ っ て 使 用 されるデフ ォル ト の GNU ld スクリプト<br />

ld ス ク リ プ ト を 必 要 と する コ マン ド ラ イ ンオプシ ョ ン を 使 用 する 場 合 、<br />

--linker_script コ マン ド ラ イ ンオプシ ョ ンで 使 用 する ス ク リ プ ト を 指 定 で き ます。 ス<br />

ク リ プ ト を 指 定 し ない 場 合 、 armlink によって 使 用 されるデフォルトの ld スクリプト<br />

は、 実 行 可 能 フ ァ イル と 共 有 オブジ ェ ク ト のど ち ら を ビル ド する かに よ って 異 な り<br />

ます。<br />

9.6.1 実 行 可 能 フ ァ イル 用 のデフ ォル ト の ld スクリプト<br />

SECTIONS<br />

{<br />

PROVIDE(__executable_start = 0x0008000);<br />

. = 0x00008000 + SIZEOF_HEADERS;<br />

.interp :{ *(.interp) }<br />

.note.ABI-tag :{ *(.note.ABI-tag) }<br />

.hash :{ *(.hash) }<br />

.dynsym :{ *(.dynsym) }<br />

.dynstr :{ *(.dynstr) }<br />

.version :{ *(.version) }<br />

.version_d :{ *(.version_d) }<br />

.version_r :{ *(.version_r) }<br />

.rel.dyn :{ *(.rel.dyn) }<br />

.rela.dyn :{ *(.rela.dyn) }<br />

.rel.plt :{ *(.rel.plt) }<br />

.rela.plt :{ *(.rela.plt) }<br />

.init :{ KEEP (*(.init)) }<br />

.plt :{ *(.plt) }<br />

.text :{ *(.text .text.*) }<br />

.fini :{ KEEP (*(.fini)) }<br />

PROVIDE(__etext = .);<br />

PROVIDE(_etext = .);<br />

PROVIDE(etext = .);<br />

.rodata :{ *(.rodata .rodata.*) }<br />

__exidx_start = .;<br />

.<strong>ARM</strong>.exidx :{ *(.<strong>ARM</strong>.exidx*) }<br />

__exidx_end = .;<br />

. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .)& (CONSTANT<br />

(MAXPAGESIZE) - 1));<br />

. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));<br />

.tdata :{ *(.tdata .tdata.*) }<br />

.tbss :{ *(.tbss .tbss.*) }<br />

.preinit_array :<br />

{<br />

PROVIDE_HIDDEN (__preinit_array_start = .);<br />

KEEP (*(.preinit_array))<br />

PROVIDE_HIDDEN (__preinit_array_end = .);<br />

}<br />

.init_array :<br />

{<br />

PROVIDE_HIDDEN (__init_array_start = .);<br />

KEEP (*(.init_array*))<br />

PROVIDE_HIDDEN (__init_array_end = .);<br />

}<br />

.fini_array :<br />

{<br />

PROVIDE_HIDDEN (__fini_array_start = .);<br />

KEEP (*(.fini_array*))<br />

PROVIDE_HIDDEN (__fini_array_end = .);<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-10<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

}<br />

.dynamic :{ *(.dynamic) }<br />

.got :{ *(.got.plt) *(.got) }<br />

.data :<br />

{<br />

__data_start = .;<br />

*(.data .data.*)<br />

}<br />

_edata = .;<br />

PROVIDE(edata = .);<br />

__bss_start = .;<br />

__bss_start__ = .;<br />

.bss :<br />

{<br />

*(.bss .bss.*)<br />

. = ALIGN(.!= 0 32 / 8 : 1);<br />

}<br />

__bss_end__ = .;<br />

_bss_end__ = .;<br />

. = ALIGN(4);<br />

__end = .;<br />

_end = .;<br />

PROVIDE(end = .);<br />

}<br />

9.6.2 共 有 オブジ ェ ク ト 用 のデフ ォル ト の ld スクリプト<br />

SECTIONS<br />

{<br />

. = 0 + SIZEOF_HEADERS;<br />

.note.ABI-tag :{ *(.note.ABI-tag) }<br />

.hash :{ *(.hash) }<br />

.dynsym :{ *(.dynsym) }<br />

.dynstr :{ *(.dynstr) }<br />

.version :{ *(.version) }<br />

.version_d :{ *(.version_d) }<br />

.version_r :{ *(.version_r) }<br />

.rel.dyn :{ *(.rel.dyn) }<br />

.rela.dyn :{ *(.rela.dyn) }<br />

.rel.plt :{ *(.rel.plt) }<br />

.rela.plt :{ *(.rela.plt) }<br />

.init :{ KEEP (*(.init)) }<br />

.plt :{ *(.plt) }<br />

.text :{ *(.text .text.*) }<br />

.fini :{ KEEP (*(.fini)) }<br />

PROVIDE(__etext = .);<br />

PROVIDE(_etext = .);<br />

PROVIDE(etext = .);<br />

.rodata :{ *(.rodata .rodata.*) }<br />

__exidx_start = .;<br />

.<strong>ARM</strong>.exidx :{ *(.<strong>ARM</strong>.exidx*) }<br />

__exidx_end = .;<br />

.interp :{ *(.interp) }<br />

. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .)& (CONSTANT<br />

(MAXPAGESIZE) - 1));<br />

. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));<br />

.tdata :{ *(.tdata .tdata.*) }<br />

.tbss :{ *(.tbss .tbss.*) }<br />

.preinit_array :<br />

{<br />

PROVIDE_HIDDEN (__preinit_array_start = .);<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-11<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

KEEP (*(.preinit_array))<br />

PROVIDE_HIDDEN (__preinit_array_end = .);<br />

}<br />

.init_array :<br />

{<br />

PROVIDE_HIDDEN (__init_array_start = .);<br />

KEEP (*(.init_array*))<br />

PROVIDE_HIDDEN (__init_array_end = .);<br />

}<br />

.fini_array :<br />

{<br />

PROVIDE_HIDDEN (__fini_array_start = .);<br />

KEEP (*(.fini_array*))<br />

PROVIDE_HIDDEN (__fini_array_end = .);<br />

}<br />

.dynamic :{ *(.dynamic) }<br />

.got :{ *(.got.plt) *(.got) }<br />

.data :<br />

{<br />

__data_start = .;<br />

*(.data .data.*)<br />

}<br />

_edata = .;<br />

PROVIDE(edata = .);<br />

__bss_start = .;<br />

__bss_start__ = .;<br />

.bss :<br />

{<br />

*(.bss .bss.*)<br />

. = ALIGN(.!= 0 32 / 8 : 1);<br />

}<br />

__bss_end__ = .;<br />

_bss_end__ = .;<br />

. = ALIGN(4);<br />

__end = .;<br />

_end = .;<br />

PROVIDE(end = .);<br />

}<br />

9.6.3 --ldpartial によって 部 分 的 にリンクされたオブジェクトのデフォルトの ld スクリプト<br />

SECTIONS<br />

{<br />

.interp 0 :{ *(.interp) }<br />

.note.ABI-tag 0 :{ *(.note.ABI-tag) }<br />

.hash 0 :{ *(.hash) }<br />

.dynsym 0 :{ *(.dynsym) }<br />

.dynstr 0 :{ *(.dynstr) }<br />

.version 0 :{ *(.version) }<br />

.version_d 0 :{ *(.version_d) }<br />

.version_r 0 :{ *(.version_r) }<br />

.rel.dyn 0 :{ *(.rel.dyn) }<br />

.rel.plt 0 :{ *(.rel.plt) }<br />

.init 0 :{ KEEP (*(.init)) }<br />

.plt 0 :{ *(.plt) }<br />

.text 0 :{ *(.text) }<br />

.fini 0 :{ KEEP (*(.fini)) }<br />

.rodata 0 :{ *(.rodata) }<br />

.<strong>ARM</strong>.exidx 0 :{ *(.<strong>ARM</strong>.exidx*) }<br />

.tdata 0 :{ *(.tdata) }<br />

.tbss 0 :{ *(.tbss) }<br />

.preinit_array 0 :<br />

{<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-12<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

KEEP (*(.preinit_array))<br />

}<br />

.dynamic 0 :{ *(.dynamic) }<br />

.got 0 :{ *(.got.plt) *(.got) }<br />

.data 0 :<br />

{<br />

*(.data)<br />

}<br />

.bss 0 :<br />

{<br />

*(.bss)<br />

}<br />

}<br />

9.6.4 関 連 項 目<br />

概 念<br />

• GNU ld スクリプトのサポート と 制 限 について (9-2 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --ldpartial (2-95 ページ)<br />

• --linker_script=ld_script (2-101 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-13<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.7 <strong>ARM</strong> Linux 実 行 可 能 フ ァ イルを リ ン クするための GNU ld スクリプトの 例<br />

以 下 の ld スクリプトだけで、"hello world" アプ リ ケーシ ョ ンを リ ンクできます。 最 も<br />

重 要 な 部 分 を 以 下 に 示 し ます。<br />

• 最 初 の .= 0x00008000 + SIZEOF_HEADERS;<br />

リンカは、ELF ヘッ ダ と プロ グ ラ ムヘッ ダを 最 初 のページに 含 める こ と ができ<br />

ます。<br />

• RW を 別 のページに 含 め る 境 界 調 整 式<br />

• ダイナミ ック リンカが 必 要 とするメタデータの 出 力 セクション<br />

ld ス ク リ プ ト フ ァ イ ルを 指 定 する には、 armlink --linker_script コマンド ラインオプ<br />

シ ョ ン を 使 用 し ます。<br />

SECTIONS<br />

{<br />

PROVIDE(__executable_start = 0x0008000);<br />

. = 0x00008000 + SIZEOF_HEADERS;<br />

.interp :{ *(.interp) }<br />

.hash :{ *(.hash) }<br />

.gnu.hash :{ *(.gnu.hash) }<br />

.dynsym :{ *(.dynsym) }<br />

.dynstr :{ *(.dynstr) }<br />

.version :{ *(.version) }<br />

.version_d :{ *(.version_d) }<br />

.version_r :{ *(.version_r) }<br />

.rel.dyn :{ *(.rel.dyn) }<br />

.rel.plt :{ *(.rel.plt) }<br />

.init :{ KEEP (*(.init)) }<br />

.plt :{ *(.plt) }<br />

.text :{ *(.text .text.*) }<br />

.fini :{ KEEP (*(.fini)) }<br />

.rodata :{ *(.rodata .rodata.*) }<br />

.<strong>ARM</strong>.extab :{ *(.<strong>ARM</strong>.extab*) }<br />

__exidx_start = .;<br />

.<strong>ARM</strong>.exidx :{ *(.<strong>ARM</strong>.exidx*) }<br />

__exidx_end = .;<br />

. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .)& (CONSTANT<br />

(MAXPAGESIZE) - 1));<br />

. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));<br />

.tdata :{ *(.tdata .tdata.*) }<br />

.tbss :{ *(.tbss .tbss.*) }<br />

.preinit_array :<br />

{<br />

PROVIDE_HIDDEN (__preinit_array_start = .);<br />

KEEP (*(.preinit_array))<br />

PROVIDE_HIDDEN (__preinit_array_end = .);<br />

}<br />

.init_array :<br />

{<br />

PROVIDE_HIDDEN (__init_array_start = .);<br />

KEEP (*(SORT(.init_array.*)))<br />

KEEP (*(.init_array))<br />

PROVIDE_HIDDEN (__init_array_end = .);<br />

}<br />

.fini_array :<br />

{<br />

PROVIDE_HIDDEN (__fini_array_start = .);<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-14<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

KEEP (*(.fini_array))<br />

KEEP (*(SORT(.fini_array.*)))<br />

PROVIDE_HIDDEN (__fini_array_end = .);<br />

}<br />

.dynamic :{ *(.dynamic) }<br />

.got :{ *(.got.plt) *(.got) }<br />

.data :<br />

{<br />

*(.data .data.*)<br />

}<br />

.bss :<br />

{<br />

*(.bss .bss.*)<br />

. = ALIGN(.!= 0 32 / 8 : 1);<br />

}<br />

}<br />

9.7.1 関 連 項 目<br />

概 念<br />

• GNU ld スクリプトのサポート と 制 限 について (9-2 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --linker_script=ld_script (2-101 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-15<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.8 <strong>ARM</strong> Linux 共 有 オブジ ェ ク ト を リ ン クするための GNU ld スクリプトの 例<br />

以 下 の ld スクリプトの 例 は 共 有 ライブラリのリンク 用 で、 アプリケーション 用 の 例<br />

と 似 ています。 共 有 ライブラ リは 0 + SIZEOF_HEADERS から 開 始 します。<br />

ld ス ク リ プ ト フ ァ イ ルを 指 定 する には、 armlink --linker_script コマンド ラインオプ<br />

シ ョ ン を 使 用 し ます。<br />

SECTIONS<br />

{<br />

. = 0 + SIZEOF_HEADERS;<br />

.hash :{ *(.hash) }<br />

.gnu.hash :{ *(.gnu.hash) }<br />

.dynsym :{ *(.dynsym) }<br />

.dynstr :{ *(.dynstr) }<br />

.version :{ *(.version) }<br />

.version_d :{ *(.version_d) }<br />

.version_r :{ *(.version_r) }<br />

.rel.dyn :{ *(.rel.dyn) }<br />

.rel.plt :{ *(.rel.plt) }<br />

.init :{ KEEP (*(.init)) }<br />

.plt :{ *(.plt) }<br />

.text :{ *(.text .text.*) }<br />

.fini :{ KEEP (*(.fini)) }<br />

.rodata :{ *(.rodata .rodata.*) }<br />

.<strong>ARM</strong>.extab :{ *(.<strong>ARM</strong>.extab*) }<br />

__exidx_start = .;<br />

.<strong>ARM</strong>.exidx :{ *(.<strong>ARM</strong>.exidx*) }<br />

__exidx_end = .;<br />

.interp :{ *(.interp) }<br />

. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .)& (CONSTANT<br />

(MAXPAGESIZE) - 1));<br />

. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));<br />

.tdata :{ *(.tdata .tdata.*) }<br />

.tbss :{ *(.tbss .tbss.*) }<br />

.preinit_array :<br />

{<br />

PROVIDE_HIDDEN (__preinit_array_start = .);<br />

KEEP (*(.preinit_array))<br />

PROVIDE_HIDDEN (__preinit_array_end = .);<br />

}<br />

.init_array :<br />

{<br />

PROVIDE_HIDDEN (__init_array_start = .);<br />

KEEP (*(SORT(.init_array.*)))<br />

KEEP (*(.init_array))<br />

PROVIDE_HIDDEN (__init_array_end = .);<br />

}<br />

.fini_array :<br />

{<br />

PROVIDE_HIDDEN (__fini_array_start = .);<br />

KEEP (*(.fini_array))<br />

KEEP (*(SORT(.fini_array.*)))<br />

PROVIDE_HIDDEN (__fini_array_end = .);<br />

}<br />

.dynamic :{ *(.dynamic) }<br />

.got :{ *(.got.plt) *(.got) }<br />

.data :<br />

{<br />

*(.data .data.*)<br />

}<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-16<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

.bss :<br />

{<br />

*(.bss .bss.*)<br />

. = ALIGN(.!= 0 32 / 8 : 1);<br />

}<br />

}<br />

9.8.1 関 連 項 目<br />

概 念<br />

• GNU ld スクリプトのサポート と 制 限 について (9-2 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --linker_script=ld_script (2-101 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-17<br />

ID 111311<br />

Non-Confidential


armlink における GNU ld スクリプトのサポート<br />

9.9 ld --ldpartial オブジェ ク ト をリンクするための GNU ld スクリプトの 例<br />

ld --ldpartial の 汎 用 形 式 では、 各 出 力 セ ク シ ョ ンが 0x0 に 割 り 当 て られます。 リ ンカ<br />

は、 SECTIONS コマン ド の 命 令 を 常 に 実 行 でき るわけではあ り ません。 1 つの 出 力 セ ク<br />

シ ョ ンに 結 合 さ れた 入 力 セ ク シ ョ ンは、 次 の リ ン ク で 削 除 で き ません。 次 リ ン ク で<br />

セ ク シ ョ ン を 削 除 する 必 要 があ る こ と を リ ンカが 検 出 し た 場 合 、 セ ク シ ョ ンは 結 合<br />

されません。 結 合 できないセクシ ョ ンは、 そのまま 力 オブジェ ク ト に 渡 されます。<br />

SECTIONS<br />

{<br />

.init 0 :{ *(.init) }<br />

.text 0 :{ *(.text) }<br />

.fini 0 :{ *(.fini) }<br />

.rodata 0 :{ *(.rodata) }<br />

.data 0 :{ *(.data) }<br />

.bss 0 :{ *(.bss) }<br />

}<br />

ld ス ク リ プ ト フ ァ イ ルを 指 定 する には、 armlink --linker_script コマンド ラインオプ<br />

シ ョ ン を 使 用 し ます。<br />

9.9.1 関 連 項 目<br />

概 念<br />

• GNU ld スクリプトのサポート と 制 限 について (9-2 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --ldpartial (2-95 ページ)<br />

• --linker_script=ld_script (2-101 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-18<br />

ID 111311<br />

Non-Confidential


第 10 章<br />

BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ<br />

イル<br />

以 下 の 各 ト ピ ッ ク では、 リ ン カ armlink によるベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ<br />

ンバイナリ インタフェース (BPABI) と System V (SysV) の 共 有 ラ イ ブ ラ リ と 実 行 可 能<br />

フ ァ イルのサポー ト の 仕 組 みについて 説 明 し ます。<br />

概 念<br />

• ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバイナ リ イ ン タ フ ェース (BPABI) につ<br />

いて (10-3 ページ)<br />

• BPABI がサポー ト しているプラ ッ ト フ ォーム (10-4 ページ)<br />

• すべての BPABI モデルに 共 通 する 概 念 (10-5 ページ)<br />

• BPABI モデルのシンボルのイ ンポー ト と エ ク スポー ト について (10-6 ページ)<br />

• BPABI モデルのシンボルの 可 視 性 (10-7 ページ)<br />

• BPABI モデルの 自 動 的 な イ ンポー ト と エ ク ス ポー ト (10-9 ページ)<br />

• BPABI モデルの 手 動 のイ ンポー ト と エ ク スポー ト (10-10 ページ)<br />

• BPABI モデルのシンボルバージ ョ ン 管 理 (10-11 ページ)<br />

• BPABI モデルの RW 圧 縮 (10-12 ページ)<br />

• SysV モデルの リ ンカオプシ ョ ン (10-13 ページ)<br />

• SysV メモリモデル (10-14 ページ)<br />

• SysV メ モ リ モデルにおけ る ダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則 (10-15 ペー<br />

ジ)<br />

• SysV メモリモデルのアドレシングモード (10-17 ページ)<br />

• SysV メモリモデルのスレッドローカルストレージ (10-18 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-1<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

• SysV メモリモデルでのコマンドラインデフォルトへの 変 更 (10-20 ページ)<br />

• ベア メ タルモデルと DLL 類 似 モデルの リ ンカオプシ ョ ン (10-21 ページ)<br />

• ベア メ タルメ モ リ モデルと DLL 類 似 メ モ リ モデル (10-22 ページ)<br />

• BPABI DLL 類 似 モデルでの 必 須 のシンボルバージ ョ ン 管 理 (10-23 ページ)<br />

• BPABI DLL 類 似 モデルにおけ る ダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-24 ページ)<br />

• BPABI DLL 類 似 モデルのア ド レ シングモー ド (10-25 ページ)<br />

• BPABI DLL 類 似 モデルでの C++ の 初 期 化 (10-26 ページ)<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ)<br />

• シンボルバージ ョ ン 管 理 のスク リプト ファイル (10-28 ページ)<br />

• バージ ョ ン 管 理 シンボルの 作 成 例 (10-29 ページ)<br />

• 組 み 込 みシンボルについて (10-30 ページ)<br />

• 暗 黙 のシンボルバージョン 管 理 を 有 効 にするリンカオプション (10-31 ページ)<br />

.<br />

参 照<br />

• SysV メモリモデルに 関 連 するリンカコマンドラインオプション (10-19 ページ)<br />

• BPABI DLL 類 似 モデルに 関 連 する リ ン カ コ マン ド ラ イ ンオプシ ョ ン (10-32 ペー<br />

ジ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-2<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.1 ベースプラ ッ ト フ ォームアプ リケーシ ョ ンバイナリ イン タ フ ェース (BPABI) につ<br />

いて<br />

多 くの 組 み 込 みシステムは、 オペレーティングシステムを 使 用 してデバイスのリ<br />

ソース を 管 理 し ています。 ほ と んどの 場 合 、 こ れはアプ リ ケーシン と 緊 密 に 統 合 さ<br />

れる リアルタイムオペレーティングシステム (RTOS) を 含 む 1 つの 大 容 量 実 行 可 能<br />

ファイルです。 このほか、 さらに 複 雑 なオペレーテ ィ ングシステム (OS) はプラ ッ<br />

トフォーム OS と 呼 ばれ、 <strong>ARM</strong> Linux などがその 例 です。 これらはアプリ ケーショ ン<br />

や 共 有 ラ イブラ リ をオンデマン ドでロードする 機 能 を 備 えています。<br />

プラッ ト フォーム OS でアプリ ケーシ ョ ンを 実 行 したり 共 有 ライブラ リ を 使 用 したり<br />

するには、 プラ ッ ト フォームのアプ リ ケーシ ョ ンバイナ リ インタフェース (ABI) と<br />

<strong>ARM</strong> アーキテクチャ 用 ABI に 準 拠 する 必 要 があ り ます。 こ れには、 カ ス タ ム フ ァ イ<br />

ル 形 式 などの リ ンカの 出 力 の 大 幅 な 変 更 も 含 まれます。 このよ う なさ まざまなプ<br />

ラットフォームをサポートするため、<strong>ARM</strong> アーキテクチャ 用 ABI にはベースプ ラ ッ<br />

トフォームアプリケーションバイナリインタフェース (BPABI) が 用 意 されていま<br />

す。<br />

BPABI はプラ ッ ト フ ォーム ABI を 派 生 で き る 基 本 標 準 を 提 供 し ています。 リ ンカは、<br />

BPABI に 準 拠 する ELF イ メージや 共 有 ライブラリを 生 成 します。ポスト リンカと 呼<br />

ばれるプ ラ ッ ト フ ォーム 固 有 のツールは、 こ の ELF 出 力 フ ァ イルを、 プ ラ ッ ト<br />

フ ォーム 固 有 のフ ァ イル 形 式 に 変 換 し ます。 ポ ス ト ン カ ツールはプ ラ ッ ト フ ォーム<br />

OS ベンダから 提 供 されています。 以 下 の 図 は、 BPABI ツールの 流 れを 示 していま<br />

す。<br />

: <br />

:<br />

.c .o<br />

.axf<br />

bin/exe<br />

ABI BPABI<br />

<br />

<br />

図 10-1 BPABI ツールの 流 れ<br />

10.1.1 関 連 項 目<br />

概 念<br />

• BPABI がサポー ト しているプラ ッ ト フ ォーム (10-4 ページ)<br />

• すべての BPABI モデルに 共 通 する 概 念 (10-5 ページ) .<br />

その 他 の 情 報<br />

• 『Base Platform ABI for the <strong>ARM</strong> Architecture』 ,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0037-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-3<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.2 BPABI がサポー ト し ている プ ラ ッ ト フ ォーム<br />

ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI) では、<br />

共 有 ラ イ ブ ラ リ の 種 類 に よ って 次 の 3 通 りのプラッ トフォームモデルを 定 義 してい<br />

ます。<br />

ベア メ タル ベア メ タルモデルは、 オフ ラ インのダイナ ミ ッ ク ローダまたは 単 純 なモ<br />

ジ ュールローダ 用 に 設 計 されています。 モジ ュール 間 の 参 照 は、 その 他<br />

の 助 構 造 体 な し に 直 接 ローダに よ って 解 決 さ れます。<br />

DLL 類 似 ダイナミ ック リンクライブラ リ (DLL) 類 似 モデルは、 ロード と ランタ<br />

イ ムの 効 率 性 と 引 き 換 えに 動 的 ラ イ ブ ラ リ と 静 的 ラ イ ブ ラ リ の 間 の 透 過<br />

性 を 犠 牲 にし ます。<br />

SysV System V (SysV) モデルは 動 的 ライブラ リ と 静 的 ライブラ リの 間 の 違 い<br />

をマスク します。 <strong>ARM</strong> Linux はこの 形 式 を 使 用 しています。<br />

10.2.1 リンカの BPABI サポー ト<br />

<strong>ARM</strong> リンカでは 3 種 類 の BPABI モデルすべてをサポー ト し てお り 、 オブジェ ク ト<br />

フ ァ イ ル と ラ イ ブ ラ リ の コ レ ク シ ョ ン を 以 下 の 要 素 に リ ン ク で き ます。<br />

• ベア メ タル 実 行 可 能 イ メ ージ<br />

• BPABI DLL または SysV の 共 有 オブジェ ク ト<br />

• BPABI または SysV の 実 行 可 能 フ ァ イル<br />

10.2.2 リンカの <strong>ARM</strong> Linux サポー ト<br />

リンカは、<strong>ARM</strong> Linux に 必 要 なデータ をすべて 備 えた SysV の 実 行 可 能 フ ァ イル と 共<br />

有 ライブラ リ を 生 成 できます。 ただし、--shared オプシ ョ ンまたは --sysv オプシ ョ ン<br />

だけでな く 、 他 のコマン ド ラ イ ンオプシ ョ ン と ラ イブラ リ も 指 定 する 必 要 があ り ま<br />

す。<br />

正 し い 入 力 オプシ ョ ン と ラ イ ブ ラ リ がすべて 指 定 さ れてい る 場 合 、 後 処 理 な し で<br />

ELF ファイルを 使 用 できます。<br />

10.2.3 関 連 項 目<br />

タスク<br />

『<strong>ARM</strong> ® コンパイラツールチェーンおよび GNU ライブラリでの Linux アプ リ ケーシ ョ<br />

ンのビルド』 :<br />

• 第 3 章 <strong>ARM</strong> コンパイラツールチェーンを 使 用 した Linux アプ リ ケーシ ョ ンまた<br />

は Linux ライブラリのビルド .<br />

概 念<br />

• ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI)<br />

について (10-3 ページ)<br />

• すべての BPABI モデルに 共 通 する 概 念 (10-5 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --dll (2-49 ページ)<br />

• --shared (2-148 ページ)<br />

• --sysv (2-172 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-4<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.3 すべての BPABI モデルに 共 通 する 概 念<br />

リ ンカ を 使 用 する と 、 ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバイ ナ リ イ ン タ<br />

フェース (BPABI) の 共 有 ラ イ ブ ラ リ を ビル ド し、 共 有 ラ イ ブ ラ リ にオブジ ェ ク ト<br />

をリンクできます。すべての BPABI モデルに 共 通 する 概 念 を 以 下 に 示 し ます<br />

• シンボルのインポート<br />

• シンボルのエクスポート<br />

• バージ ョ ン 管 理<br />

• シンボルの 可 視 性<br />

10.3.1 関 連 項 目<br />

概 念<br />

• BPABI モデルのシンボルのイ ンポー ト と エ ク スポー ト について (10-6 ページ)<br />

• BPABI モデルのシンボルの 可 視 性 (10-7 ページ)<br />

• BPABI モデルの 自 動 的 な イ ンポー ト と エ ク スポー ト (10-9 ページ)<br />

• BPABI モデルの 手 動 のイ ンポー ト と エ ク スポー ト (10-10 ページ)<br />

• BPABI モデルのシンボルバージ ョ ン 管 理 (10-11 ページ)<br />

• BPABI モデルの RW 圧 縮 (10-12 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-5<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.4 BPABI モデルのシンボルのイ ンポー ト と エ ク スポー ト について<br />

従 来 の リ ン ク では、 必 要 な コー ド と データ をすべて 含 む 1 つの 実 行 可 能 フ ァ イルに<br />

リンクするために、すべてのシンボルをリンク 時 に 定 義 する 必 要 がありました。ダ<br />

イナミ ッ ク リ ンクをサポート しているプラ ッ ト フォームでは、 シンボルのバイン<br />

デ ィ ングを ロード 時 か、 場 合 によ っては 実 行 まで 遅 らせる こ と ができ ます。 そのた<br />

め、 アプ リ ケーシ ョ ン を 複 数 のモジ ュール ( 実 行 可 能 フ ァ イルま たは 共 有 ラ イ ブ ラ<br />

リ ) に 分 割 で き ます。 現 在 のモジ ュール 以 外 のモジ ュールで 定 義 さ れてい る シンボ<br />

ルはダ イナ ミ ッ ク シンボルテーブルに 配 置 さ れます。 ロー ド 時 ま たは 実 行 時 に 動 的<br />

にリ ンクするのに 適 している 関 数 もダイナミ ッ クシンボルテーブルに 配 置 されます。<br />

ダイナミ ックシンボルテーブルの 内 容 は、 次 の 2 通 りの 方 法 で 制 御 できます。<br />

• ELF シンボルの 可 視 性 プ ロパテ ィ か ら 内 容 を 推 論 する 自 動 的 な 規 則<br />

• ス テア リ ン グ フ ァ イルに 存 在 する 手 動 のデ ィ レ ク テ ィ ブ<br />

これらの 規 則 は SysV モデルでは 若 干 異 な り ます。<br />

10.4.1 関 連 項 目<br />

概 念<br />

• SysV モデルの リ ンカオプシ ョ ン (10-13 ページ)<br />

• SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-15 ページ)<br />

• SysV メモリモデルのアドレシングモード (10-17 ページ)<br />

• SysV メモリモデルのスレッドローカルストレージ (10-18 ページ)<br />

• SysV メモリモデルに 関 連 するリンカコマンドラインオプション (10-19 ページ)<br />

• ベア メ タルモデルと DLL 類 似 モデルの リ ンカオプシ ョ ン (10-21 ページ)<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ) .<br />

その 他 の 情 報<br />

• SysV ELF 仕 様 書<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-6<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.5 BPABI モデルのシンボルの 可 視 性<br />

各 シンボルには、 コ ンパイ ラ ス イ ッチ、 ステア リ ングフ ァ イル、 またはソース コー<br />

ド の 属 性 で 制 御 で き る 可 視 性 プ ロパテ ィ があ り ます。 シンボル 参 照 の 場 合 、 可 視 性<br />

は、 リ ンカがそのシンボルの 定 義 に 使 用 で き る 定 義 を 制 御 し ます。 シンボルが 定 義<br />

の 場 合 、 可 視 性 は、 そのシンボルが 現 在 モジ ュールの 外 か ら 見 え る かど う かを 制 御<br />

します。<br />

ELF 仕 様 では、 以 下 の 可 視 性 オプシ ョ ンが 定 義 さ れています。<br />

可 視 性 参 照 定 義<br />

表 10-1 シンボルの 可 視 性<br />

STV_DEFAULT<br />

STV_PROTECTED<br />

STV_HIDDENSTV_INTERN<br />

AL<br />

シンボルは 共 有 オブジ ェ ク ト の 定 義 に<br />

バインドできます。<br />

シンボルはモジ ュール 内 で 解 決 する 必<br />

要 があ り ます。<br />

シンボルはモジ ュール 内 で 解 決 する 必<br />

要 があ り ます。<br />

シンボルはモジュールの 外 から 見 えるよ う<br />

にで き ます。 別 のモジ ュールか ら の 定 義 に<br />

よってダイナミ ック リンカでプリエンプ<br />

ティブにできます。<br />

シンボルはモジュールの 外 から 見 えるよ う<br />

にで き ます。 別 のモジ ュールか ら の 定 義 に<br />

よ って 実 行 時 にプ リ エンプテ ィ ブにで き ま<br />

せん。<br />

シンボルはモジュールの 外 からは 見 えませ<br />

ん。<br />

シンボルのプリエンプトは System V (SysV) シ ス テムで 最 も 一 般 的 です。 シンボル<br />

のプ リ エンプ ト はベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバイナ リ イ ン タ フ ェー<br />

ス (BPABI) のダイナミ ック リンクライブラ リ (DLL) 類 似 の 実 装 で 起 こるこ とがあ<br />

り ます。 プラ ッ ト フ ォームのオーナーがこ の 動 作 を 定 義 し ます。 詳 細 については、<br />

特 定 のプ ラ ッ ト フ ォームのニ ュ アルを 参 照 し て 下 さ い。<br />

10.5.1 関 連 項 目<br />

概 念<br />

• RW データ 圧 縮 を 使 用 した 最 適 化 (5-16 ページ)<br />

• SysV モデルの リ ンカオプシ ョ ン (10-13 ページ)<br />

• SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-15 ページ)<br />

• SysV メモリモデルのアドレシングモード (10-17 ページ)<br />

• SysV メモリモデルのスレッドローカルストレージ (10-18 ページ)<br />

• SysV メモリモデルに 関 連 するリンカコマンドラインオプション (10-19 ページ)<br />

• ベア メ タルモデルと DLL 類 似 モデルの リ ンカオプシ ョ ン (10-21 ページ)<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --keep_protected_symbols (2-91 ページ)<br />

• --max_visibility=type (2-112 ページ)<br />

• --override_visibility (2-116 ページ)<br />

• --use_definition_visibility (2-180 ページ)<br />

• EXPORT (3-2 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-7<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

• IMPORT (3-5 ページ)<br />

• REQUIRE (3-9 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• --apcs=qualifer...qualifier (3-12 ページ)<br />

• --dllexport_all、 --no_dllexport_all (3-84 ページ)<br />

• --dllimport_runtime、 --no_dllimport_runtime (3-85 ページ)<br />

• --hide_all、 --no_hide_all (3-120 ページ) .<br />

『アセンブラ リ フ ァ レンス』 :<br />

• EXPORT、 GLOBAL (6-80 ページ) .<br />

その 他 の 情 報<br />

• SysV ELF 仕 様 書<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-8<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.6 BPABI モデルの 自 動 的 な イ ンポー ト と エ ク スポー ト<br />

リ ンカは 自 動 的 にシンボルを イ ンポー ト およびエ ク ス ポー ト で き ます。 こ の 動 作 は、<br />

出 力 が 実 行 可 能 フ ァ イルま たは 共 有 ラ イ ブ ラ リ で、 プ ラ ッ ト ォームモデルが System V<br />

(SysV) の 場 合 、 入 力 オブジ ェ ク ト フ ァ イル 内 のシンボルの 可 視 性 の 組 み 合 わせに 依<br />

存 し ます。 こ れは、 使 用 し てい る リ ン ク モデルの 種 類 に よ って 異 な り ます。<br />

10.6.1 関 連 項 目<br />

概 念<br />

• すべての BPABI モデルに 共 通 する 概 念 (10-5 ページ)<br />

• SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-15 ページ)<br />

• SysV メモリモデルのアドレシングモード (10-17 ページ)<br />

• SysV メモリモデルのスレッドローカルストレージ (10-18 ページ)<br />

• SysV メモリモデルに 関 連 するリンカコマンドラインオプション (10-19 ページ)<br />

• ベア メ タルモデルと DLL 類 似 モデルの リ ンカオプシ ョ ン (10-21 ページ)<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ) .<br />

その 他 の 情 報<br />

• SysV ELF 仕 様 書<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-9<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.7 BPABI モデルの 手 動 のイ ンポー ト と エ ク スポー ト<br />

リ ンカのス テア リ ング フ ァ イルを 使 用 し て、 以 下 の 操 作 を 実 行 で き ます。<br />

• 動 的 な イ ンポー ト と エ ク ス ポー ト の 手 動 制 御<br />

• 自 動 的 な 規 則 のオーバーラ イ ド<br />

ダ イナ ミ ッ ク シンボルテーブルの 内 容 を 制 御 する と き に 使 用 で き る ス テア リ ング<br />

ファイルコマンドを 以 下 に 示 します。<br />

• EXPORT<br />

• IMPORT<br />

• REQUIRE<br />

10.7.1 関 連 項 目<br />

概 念<br />

• ステアリ ングファイルとは (7-24 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• EXPORT (3-2 ページ)<br />

• IMPORT (3-5 ページ)<br />

• REQUIRE (3-9 ページ) .<br />

その 他 の 情 報<br />

• SysV ELF 仕 様 書<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-10<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.8 BPABI モデルのシンボルバージ ョ ン 管 理<br />

シンボルバージ ョ ン 管 理 は、 共 有 ライブラ リのインタフェースを 厳 密 に 制 御 する 方<br />

法 です。<br />

バージ ョ ン 管 理 されているシンボルのある 共 有 ラ イブラ リ からシンボルがイ ンポー<br />

トされると、armlink はシンボルの 最 新 の (デフォル ト ) バージ ョ ンにバイン ド し ま<br />

す。 プ ラ ッ ト フ ォーム OS がシンボルのバージ ョ ンを 解 決 する ロード 時 または 実 行 に<br />

は、 さ ら に 新 し いバージ ョ ンが 使 用 可 能 な 場 合 で も、 常 に armlink によって 選 択 され<br />

たバージ ョ ンに 解 決 さ れます。 こ のプ ロ セ スは 自 動 です。<br />

シンボルを 実 行 可 能 フ ァ イルま たは 共 有 ラ イ ブ ラ リ か ら エ ク ス ポー ト する と き に、<br />

バージ ョ ン を 指 定 で き ます。 armlink では、 バージ ョ ンが 共 有 オブジェ ク ト 名<br />

(--soname で 設 定 ) か ら 派 生 する 暗 黙 的 なシンボルバージ ョ ン 管 理 、 ま たはバージ ョ<br />

ンの 正 確 な 定 義 にス ク リ プ ト が 使 用 さ れる 明 示 的 なシンボルバージ ョ ン 管 理 をサ<br />

ポー ト しています。<br />

10.8.1 関 連 項 目<br />

概 念<br />

• SysV モデルの リ ンカオプシ ョ ン (10-13 ページ)<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --soname=name (2-153 ページ) .<br />

その 他 の 情 報<br />

• SysV ELF 仕 様 書<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-11<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.9 BPABI モデルの RW 圧 縮<br />

圧 縮 さ れた RW データ 用 のデコ ンプレ ッ サは、 <strong>ARM</strong> C ラ イ ブ ラ リ の 起 動 コー ド に 緊<br />

密 に 統 合 されています。 プラ ッ ト フ ォーム OS でアプ リ ケーシ ョ ン 実 行 する 場 合 は、<br />

この 機 能 をプラッ ト フォームまたはプラッ ト フォームライブラ リで 提 供 する 必 要 が<br />

あります。 したがって、ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバイナ リ イ ン タ<br />

フェース (BPABI) ファイルまたは System V (SysV) ファイルのリ ンク 時 は、 デコン<br />

プレッサがないため、 RW 圧 縮 は 無 効 になっています。 圧 縮 を 再 度 有 効 にする こ と は<br />

できません。<br />

10.9.1 関 連 項 目<br />

概 念<br />

• RW データ 圧 縮 を 使 用 した 最 適 化 (5-16 ページ) .<br />

その 他 の 情 報<br />

• SysV ELF 仕 様 書<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-12<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.10 SysV モデルのリ ンカオプシ ョ ン<br />

リ ンカ を 使 用 する と 、 System V (SysV) の 共 有 ライブラリをビルドおよびリンクし、<br />

SysV の 実 行 可 能 フ ァ イルを 作 成 でき ます。 以 下 の 表 には、 SysV メモリモデルに 関 連<br />

するコマンド ラ インオプシ ョ ンを 示 しています。<br />

表 10-2 SysV サポー ト の 有 効 化<br />

コマンドラインオプ<br />

ション<br />

--arm_linux<br />

--sysv<br />

--sysv --shared<br />

説 明<br />

これは、--sysv を 指 定 したこ<br />

とになります。<br />

SysV の 実 行 可 能 フ ァ イルを<br />

生 成 し ます。<br />

SysV の 共 有 ラ イブラ リ を 生<br />

成 します。<br />

10.10.1 関 連 項 目<br />

概 念<br />

• SysV メモリモデル (10-14 ページ)<br />

• SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-15 ページ)<br />

• SysV メモリモデルのアドレシングモード (10-17 ページ)<br />

• SysV メモリモデルのスレッドローカルストレージ (10-18 ページ)<br />

• SysV メモリモデルに 関 連 するリンカコマンドラインオプション (10-19 ページ)<br />

.<br />

参 照<br />

『リンカリファレンス』:<br />

• --fpic (2-74 ページ)<br />

• --import_unresolved、 --no_import_unresolved (2-79 ページ)<br />

• --shared (2-148 ページ)<br />

• --sysv (2-172 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• --apcs=qualifer...qualifier (3-12 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-13<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.11 SysV メモリモデル<br />

System V (SysV) ファイルには、 一 般 的 な ELF 仕 様 に 記 述 さ れてい る 標 準 メ モ リ モ<br />

デルが 含 まれています。 SysV 形 式 を 使 用 するプラ ッ ト フォームオペレーテングシス<br />

テムは 複 数 あり ます ( 例 えば <strong>ARM</strong> Linux)。<br />

SysV メモリモデルは 標 準 メモリモデルであるため、 設 定 オプションがありません。<br />

リ ンカは、 コ マン ド ラ イ ンで 指 定 する ス キ ャ ッ タ フ ァ イルを 無 視 し、 一 般 的 な ELF<br />

仕 様 に よ っ て 定 義 さ れた 標 準 メ モ リ マ ッ プを 使 用 し ます。<br />

10.11.1 関 連 項 目<br />

概 念<br />

• SysV モデルの リ ンカオプシ ョ ン (10-13 ページ)<br />

• SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-15 ページ)<br />

• SysV メモリモデルのアドレシングモード (10-17 ページ)<br />

• SysV メモリモデルのスレッドローカルストレージ (10-18 ページ)<br />

• SysV メモリモデルに 関 連 するリンカコマンドラインオプション (10-19 ページ)<br />

その 他 の 情 報<br />

• ELF for the <strong>ARM</strong> Architecture, http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-14<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.12 SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

System V (SysV) メ モ リ モデルには、 以 下 の 規 則 が 適 用 さ れます。<br />

実 行 可 能 フ ァ イル 未 定 義 のシンボル 参 照 は 未 定 義 のシンボルエ ラーです。<br />

可 視 性 が STV_HIDDEN または STV_INTERNAL のグローバルシンボルは、 ダイ<br />

ナミックシンボルテーブルにエクスポートされません。<br />

可 視 性 が STV_PROTECTED または STV_DEFAULT のグローバルシンボルは、<br />

--export_all オプシ ョ ンまたは --export_dynamic オプシ ョ ン を 指 定 し ない<br />

限 り、 ダイナミ ックシンボルテーブルにエクスポート されません。<br />

共 有 ラ イ ブ ラ リ<br />

可 視 性 が STV_DEFAULT の 未 定 義 のシンボル 参 照 は イ ンポー ト さ れた と 見 な<br />

さ れ、 ダ イ ナ ミ ッ ク シンボルテーブルに 配 置 さ れます。<br />

可 視 性 が STV_DEFAULT ではない 未 定 義 のシンボル 参 照 は、 未 定 義 のシンボ<br />

ルエラーです。<br />

可 視 性 が STV_HIDDEN または STV_INTERNAL のグローバルシンボルは、 ダイ<br />

ナミックシンボルテーブルにエクスポートされません。<br />

注<br />

再 配 置 が 必 要 な STV_HIDDEN または STV_INTERNAL グローバルシンボルはダ<br />

イナミ ッ クシンボルテーブルに 配 置 できますが、 リ ンカによってローカ<br />

ルシンボルに 変 更 さ れて、 共 有 ラ イ ブ ラ リ 外 か ら ア ク セ ス で き な く な り<br />

ます。<br />

可 視 性 が STV_PROTECTED または STV_DEFAULT のグローバルシンボルは、 常 に<br />

ダイナミ ックシンボルテーブルにエクスポート されます。<br />

10.12.1 glibc との 互 換 性 を 確 保 するために 定 義 されるシンボル 定 義<br />

SysV と glibc と の 互 換 性 を 向 上 させる ために、 対 応 する セ ク シ ョ ンがオブジ ェ ク ト<br />

内 に 存 在 する 場 合 は、 リ ン カに よ って 以 下 のシンボルが 定 義 さ れます。<br />

• .init_array セ ク シ ョ ンの 場 合 :<br />

— __init_array_start<br />

— __init_array_end<br />

• .fini_array セ ク シ ョ ンの 場 合 :<br />

— __fini_array_start<br />

— __fini_array_end<br />

• <strong>ARM</strong>.exidx セクションの 場 合 :<br />

— __exidx_start<br />

— __exidx_end<br />

• .preinit_array セ ク シ ョ ンの 場 合 :<br />

— __preinit_array_start<br />

— __preinit_array_end<br />

• __executable_start<br />

• etext<br />

• _etext<br />

• __etext<br />

• __data_start<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-15<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

• edata<br />

• _edata<br />

• __bss_start<br />

• __bss_start__<br />

• _bss_end__<br />

• __bss_end__<br />

• end<br />

• _end<br />

• __end<br />

• __end__<br />

10.12.2 関 連 項 目<br />

概 念<br />

• SysV モデルの リ ンカオプシ ョ ン (10-13 ページ)<br />

• SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-15 ページ)<br />

• SysV メモリモデルのアドレシングモード (10-17 ページ)<br />

• SysV メモリモデルのスレッドローカルストレージ (10-18 ページ)<br />

• SysV メモリモデルに 関 連 するリンカコマンドラインオプション (10-19 ページ)<br />

.<br />

参 照<br />

• --export_all、 --no_export_all (2-64 ページ)<br />

• --export_dynamic、 --no_export_dynamic (2-65 ページ)<br />

• --keep_protected_symbols (2-91 ページ) .<br />

その 他 の 情 報<br />

• ELF for the <strong>ARM</strong> Architecture, http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-16<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.13 SysV メモリモデルのアドレシングモード<br />

System V (SysV) には、 プログラムおよび 他 のモデルからインポート されたデータや<br />

コード にア ク セスする ためのモデルが 定 義 されています。 必 要 に 応 じ て、 リ ンカは<br />

必 要 なプロシージャ リ ンクテーブル (PLT) セクシ ョ ンとグローバルオフセッ トテー<br />

ブル (GOT) セ ク シ ョ ン を 自 動 生 成 し ます。<br />

10.13.1 位 置 非 依 存 コー ド<br />

SysV 共 有 ラ イ ブ ラ リ は、 --apcs=/fpic コンパイラコマンドラインオプションを 使 用 し<br />

て、 位 置 非 依 存 コー ド で コ ンパ イル さ れます。<br />

共 有 ラ イ ブ ラ リ が 位 置 非 依 存 であ る こ と を 宣 言 する 場 合 は、 PLT セクションと GOT<br />

セクションの 構 造 に 影 響 するため、 リンカコマンドラインオプシン --fpic も 使 用 す<br />

る 必 要 があ り ます。<br />

注<br />

デフォル ト では、 コマン ド ラ インオプシ ョ ン --shared を --fpic オプシ ョ ンなしで 指 定<br />

する と 、 リ ン カでエ ラー メ ッ セージが 生 成 さ れます。 位 置 依 存 の 共 有 ラ イ ブ ラ リ を<br />

作 成 する 場 合 は、 --diag_suppress=6403 を 使 用 してエラーメ ッセージをオフにできま<br />

す。<br />

10.13.2 関 連 項 目<br />

概 念<br />

• SysV モデルの リ ンカオプシ ョ ン (10-13 ページ)<br />

• SysV メ モ リ モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-15 ページ)<br />

• SysV メモリモデルのアドレシングモード<br />

• SysV メモリモデルのスレッドローカルストレージ (10-18 ページ)<br />

• SysV メモリモデルに 関 連 するリンカコマンドラインオプション (10-19 ページ)<br />

.<br />

参 照<br />

『リンカリファレンス』:<br />

• --diag_suppress=tag[,tag,...] (2-47 ページ)<br />

• --fpic (2-74 ページ)<br />

• --import_unresolved、 --no_import_unresolved (2-79 ページ)<br />

• --shared (2-148 ページ) .<br />

『コンパイ ラ リ ファレンス』 :<br />

• --apcs=qualifer...qualifier (3-12 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-17<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.14 SysV メ モ リ モデルのスレ ッ ド ローカルス ト レージ<br />

リンカでは、『Addenda to, and Errata in, the ABI for the <strong>ARM</strong> Architecture』 に 記 述 されて<br />

いる <strong>ARM</strong> Linux スレ ッ ド ローカルス ト レージモデルをサポー ト しています。<br />

10.14.1 関 連 項 目<br />

その 他 の 情 報<br />

• Addenda to, and Errata in, the ABI for the <strong>ARM</strong> Architecture (ABI-addenda) ,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0045-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-18<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.15 SysV メモリモデルに 関 連 するリンカコマンドラインオプション<br />

以 下 の リ ン カ コ マン ド ラ イ ンオプシ ョ ンが SysV メモリモデルに 関 連 しています。<br />

参 照<br />

『リンカリファレンス』:<br />

• --arm_linux (2-13 ページ)<br />

• --dynamic_debug (2-50 ページ)<br />

• --dynamic_linker=name (2-51 ページ)<br />

• --export_all、 --no_export_all (2-64 ページ)<br />

• --export_dynamic、 --no_export_dynamic (2-65 ページ)<br />

• --fpic (2-74 ページ)<br />

• --import_unresolved、 --no_import_unresolved (2-79 ページ)<br />

• --linux_abitag=version_id (2-102 ページ)<br />

• --runpath=pathlist (2-140 ページ)<br />

• --shared (2-148 ページ)<br />

• --sysv (2-172 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-19<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.16 SysV メ モ リ モデルでのコ マン ド ラ イ ンデフ ォル ト への 変 更<br />

<strong>ARM</strong> コンパイラツールチェーンでは、 C および C++ のシ ス テム ラ イ ブ ラ リ を 含 む 共<br />

有 ライブラ リ を 提 供 していません。 System V (SysV) のサポートで 想 定 される 使 用 モ<br />

デルは、 プ ラ ッ ト フ ォームに 付 属 する シ ス テム ラ イ ブ ラ リ の 使 用 です。 例 えば、<br />

<strong>ARM</strong> Linux では、 これは libc.so です。<br />

libc.so を 使 用 する ために、 リ ンカではデフ ォル ト の 動 作 に 以 下 の 変 更 を 適 用 し ます。<br />

• --arm_linux を 使 用 する と 、 <strong>ARM</strong> Linux に 必 要 なデフ ォル ト オプシ ョ ンが 設 定 さ<br />

れます。<br />

• --no_ref_cpp_init を 設 定 して <strong>ARM</strong> C++ 初 期 化 コー ド が 含 まれない よ う に し ま<br />

す。<br />

• リンカが 必 要 なシンボルを 定 義 して libc.so と の 互 換 性 を 確 保 し ます。<br />

• --force_so_throw を 設 定 し て、 リ ンカに 例 外 テーブルを 保 持 させます。<br />

10.16.1 関 連 項 目<br />

参 照<br />

『リンカリファレンス』:<br />

• --arm_linux (2-13 ページ)<br />

• --force_so_throw、 --no_force_so_throw (2-73 ページ)<br />

• --ref_cpp_init、 --no_ref_cpp_init (2-132 ページ)<br />

• --sysv (2-172 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-20<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.17 ベアメ タルモデルと DLL 類 似 モデルのリ ン カオプシ ョ ン<br />

プラッ ト フォーム OS のベア メ タル 実 行 可 能 フ ァ イルおよびダイナミ ック リンクライ<br />

ブラ リ (DLL) 類 似 モデルをビルドするには、 以 下 のコマンド ラインオプシ ョ ンを<br />

使 用 し ます。<br />

表 10-3 BPABI サポー ト の 有 効 化<br />

コマンドラインオプ<br />

ション<br />

--base_platform<br />

--bpabi<br />

--bpabi --dll<br />

説 明<br />

ベースプ ラ ッ ト フ ォーム ABI (BPABI) と 共 にス<br />

キ ャ ッ タ ロー ド を 使 用 し ます。<br />

BPABI の 実 行 可 能 フ ァ イルを 生 成 し ます。<br />

BPABI の DLL を 生 成 します。<br />

ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI) に 基<br />

づいた、 特 定 のプラ ッ ト フ ォーム OS のアプ リ ケーシ ョ ンや DLL を 開 発 している 場<br />

合 、 プ ラ ッ ト フ ォームのマニ ュ アル と 併 せて 以 下 の 報 を 使 用 する 必 要 があ り ます。<br />

• ベア メ タルメ モ リ モデルと DLL 類 似 メ モ リ モデル<br />

• BPABI DLL 類 似 モデルでの 必 須 のシンボルバージ ョ ン 管 理<br />

• BPABI DLL 類 似 モデルにおけ る ダ イ ナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

• BPABI DLL 類 似 モデルのア ド レシングモード<br />

• BPABI DLL 類 似 モデルでの C++ の 初 期 化<br />

プラッ ト フォーム OS を 実 装 している 場 合 は、 BPABI 仕 様 と 併 せて こ の 情 報 を 使 用 す<br />

る 必 要 があ り ます。<br />

10.17.1 関 連 項 目<br />

概 念<br />

• ベア メ タルメ モ リ モデルと DLL 類 似 メ モ リ モデル (10-22 ページ)<br />

• BPABI DLL 類 似 モデルでの 必 須 のシンボルバージ ョ ン 管 理 (10-23 ページ)<br />

• BPABI DLL 類 似 モデルにおけ る ダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-24 ページ)<br />

• BPABI DLL 類 似 モデルのア ド レ シングモー ド (10-25 ページ)<br />

• BPABI DLL 類 似 モデルでの C++ の 初 期 化 (10-26 ページ)<br />

• BPABI DLL 類 似 モデルに 関 連 する リ ン カ コ マン ド ラ イ ンオプシ ョ ン (10-32 ペー<br />

ジ) .<br />

参 照<br />

• --base_platform (2-18 ページ)<br />

• --bpabi (2-24 ページ)<br />

• --dll (2-49 ページ) .<br />

その 他 の 情 報<br />

• Base Platform ABI for the <strong>ARM</strong> Architecture,<br />

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0037-/index.html<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-21<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.18 ベアメ タルメモリモデルと DLL 類 似 メ モ リ モデル<br />

ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI) ファ<br />

イルには、 BPABI 仕 様 に 記 述 さ れてい る 標 準 メ モ リ モデルが 含 まれています。<br />

--bpabi コ マン ド ラ イ ンオプシ ョ ン を 使 用 する と 、 リ ンカは こ のモデルを 自 動 的 に 適<br />

用 し、 コマンド ラインで 指 定 されたスキャ ッ タファ イルをすべて 無 視 します。 これ<br />

は 次 のイ メ ージレ イ ア ウ ト に 相 当 し ます。<br />

LR_1 <br />

{<br />

ER_RO +0<br />

{<br />

*(+RO)<br />

}<br />

}<br />

LR_2 <br />

{<br />

ER_RW +0<br />

{<br />

*(+RW)<br />

}<br />

ER_ZI +0<br />

{<br />

*(+ZI)<br />

}<br />

}<br />

10.18.1 メモリモデルのカスタマイズ<br />

オプシ ョ ン --ropi を 指 定 する と、LR_1 は 位 置 非 依 存 と し てマーク さ れます。 それ と 同<br />

様 に、 オプシ ョ ン --rwpi を 指 定 する と、 LR_2 は 位 置 非 依 存 と し てマー ク さ れます。<br />

注<br />

デフォル ト 値 の 0x8000 と 0 がプラ ッ ト フォームに 適 さない 可 能 性 があるので、 ほと ん<br />

どの 場 合 は、 それぞれに --ro_base スイッチと --rw_base スイッチを 指 定 する 必 要 があ<br />

り ます。 こ れら のア ド レ スは、 イ メ ージが 実 行 時 に 再 配 置 さ れる ア ド レ ス を 反 映 し<br />

ている 必 要 はあ り ません。<br />

よ り 複 雑 な メ モ リ レ イ ア ウ ト が 必 要 な 場 合 は、 ベースプ ラ ッ ト フ ォーム リ ン ク モデ<br />

ル --base_platform を 使 用 し ます。<br />

10.18.2 関 連 項 目<br />

概 念<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --base_platform (2-18 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --ropi (2-138 ページ)<br />

• --rosplit (2-139 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-22<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.19 BPABI DLL 類 似 モデルでの 必 須 のシンボルバージ ョ ン 管 理<br />

ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI) DLL<br />

類 似 モデルでは、 静 的 なバイ ンデ ィ ングが 必 要 です。 こ れは、 ポ ス ト リ ンカが<br />

BPABI の DLL 内 のシンボ リ ッ ク 情 報 を 変 換 し て、 序 数 のイデク スが 付 いている テー<br />

ブルを イ ンポー ト ま たはエ ク ス ポー ト する 可 能 性 があ る か ら です。 その 場 合 、 実 行<br />

時 にシンボルを 検 索 する こ と は 不 可 です。<br />

シンボルバージ ョ ン 管 理 の 使 用 によって BPABI で 静 的 バイ ンデ ィ ングが 実 行 されま<br />

す。 BPABI ファイルのデフォルトでは、 コマンドラインオプション --symver_soname<br />

はオンになっています。 つま り 、 エク スポー ト されたシンボルはすべて、 DLL の 名<br />

前 に 基 づいてバージ ョ ンが 与 え られます。<br />

10.19.1 関 連 項 目<br />

概 念<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --soname=name (2-153 ページ)<br />

• --symver_script=file (2-169 ページ)<br />

• --symver_soname (2-170 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-23<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.20 BPABI DLL 類 似 モデルにおけるダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI) DLL<br />

類 似 モデルには、 以 下 の 規 則 が 適 用 さ れます。<br />

実 行 可 能 フ ァ イル 未 定 義 のシンボル 参 照 は 未 定 義 のシンボルエ ラーです。<br />

可 視 性 が STV_HIDDEN または STV_INTERNAL のグローバルシンボルは、 ダイ<br />

ナミックシンボルテーブルにエクスポートされません。<br />

可 視 性 が STV_PROTECTED または STV_DEFAULT のグローバルシンボルは、<br />

--export_all オプシ ョ ンまたは --export_dynamic オプシ ョ ン を 設 定 し ない<br />

限 り、 ダイナミ ックシンボルテーブルにエクスポート されません。<br />

DLL<br />

未 定 義 のシンボル 参 照 は 未 定 義 のシンボルエ ラーです。<br />

可 視 性 が STV_HIDDEN または STV_INTERNAL のグローバルシンボルは、 ダイ<br />

ナミックシンボルテーブルにエクスポートされません。<br />

注<br />

再 配 置 が 必 要 な STV_HIDDEN または STV_INTERNAL グローバルシンボルはダ<br />

イナミ ッ クシンボルテーブルに 配 置 できますが、 リ ンカによってローカ<br />

ルシンボルに 変 更 さ れて、 共 有 ラ イ ブ ラ リ 外 か ら ア ク セ ス で き な く な り<br />

ます。<br />

可 視 性 が STV_PROTECTED または STV_DEFAULT のグローバルシンボルは、 常 に<br />

ダイナミ ックシンボルテーブルにエクスポート されます。<br />

シンボルは、EXPORT ステアリングファイルコマンドおよび IMPORT ステアリングファイ<br />

ルコ マン ド を 使 用 し て、 手 動 でエ ク ス ポー ト およびイ ンポー ト で き ます。 ス テア リ<br />

ングファイルコマンドを 指 定 するには、--edit コマンド ラインオプショ ンを 使 用 しま<br />

す。<br />

10.20.1 関 連 項 目<br />

概 念<br />

• ステアリ ングファイルとは (7-24 ページ)<br />

参 照<br />

• ステアリ ングファイルコマンドの 概 要 (7-26 ページ)<br />

• ステアリ ングファイルの 形 式 (7-27 ページ) .<br />

『リンカリファレンス』:<br />

• --edit=file_list (2-53 ページ)<br />

• --export_all、 --no_export_all (2-64 ページ)<br />

• --export_dynamic、 --no_export_dynamic (2-65 ページ)<br />

• --keep_protected_symbols (2-91 ページ)<br />

• EXPORT (3-2 ページ)<br />

• IMPORT (3-5 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-24<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.21 BPABI DLL 類 似 モデルのア ド レシングモー ド<br />

ベア メ タルモデルとベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ<br />

フェース (BPABI) DLL 類 似 モデル と の 主 な 違 いは、 イ ンポー ト し た 自 分 のプ ロ グ<br />

ラ ム コー ド と データへのア ク セ スに 使 用 さ れる ア ド レ シングモー ド です。 BPABI 仕<br />

様 のカテゴ リ に 対 応 する 次 の 4 つのオプシ ョ ンがあ り ます。<br />

• なし<br />

• 直 接 参 照<br />

• 間 接 参 照<br />

• 相 対 静 的 ベース ア ド レ ス 参 照<br />

必 要 なア ド レ シングモー ド の 選 択 は、 以 下 の コ マン ド ラ イ ンオプシ ョ ンで 制 御 さ れ<br />

ます。<br />

• --pltgot<br />

• --pltgot_opts<br />

10.21.1 関 連 項 目<br />

参 照<br />

『リンカリファレンス』:<br />

• --pltgot=type (2-122 ページ)<br />

• --pltgot_opts=mode (2-124 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-25<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.22 BPABI DLL 類 似 モデルでの C++ の 初 期 化<br />

ダイナミ ック リンクライブラ リ (DLL) では、 初 期 化 を 実 行 する イ ニシ ャ ラ イ ザ 関<br />

数 への 参 照 を 含 むテーブルを 使 用 し た、 静 的 コ ン ス ト ラ ク タ の 初 期 化 をサポー ト し<br />

ています。 そテーブルは、 SHT_INIT_ARRAY という 特 殊 なセクションタイプの ELF セク<br />

シ ョ ンに 保 存 さ れます。 こ れら の 各 イ ニシ ャ ラ イ ザには、 初 期 化 を 実 行 する 関 数 へ<br />

のタイプ R_<strong>ARM</strong>_TARGET1 の 再 配 置 が 含 まれています。<br />

ELF アプ リ ケーシ ョ ンバイナリ インタフェース (ABI) 仕 様 では、 R_<strong>ARM</strong>_TARGET1 を 相<br />

対 形 式 ま たは 絶 対 形 式 と し て 記 述 し ています。<br />

<strong>ARM</strong> C ラ イ ブ ラ リ は 相 対 形 式 を 使 用 し ます。 例 えば、 リ ンカでは、 <strong>ARM</strong> C ライブラ<br />

リの 定 義 __cpp_initialize__aeabi を 検 出 した 場 合 は、 R_<strong>ARM</strong>_TARGET1 の 相 対 形 式 を 使 用<br />

し、 そ う でない 場 合 は 絶 対 形 式 を 使 用 し ます。<br />

10.22.1 関 連 項 目<br />

概 念<br />

• ベア メ タルモデルと DLL 類 似 モデルの リ ンカオプシ ョ ン (10-21 ページ)<br />

• ベア メ タルメ モ リ モデルと DLL 類 似 メ モ リ モデル (10-22 ページ)<br />

• BPABI DLL 類 似 モデルでの 必 須 のシンボルバージ ョ ン 管 理 (10-23 ページ)<br />

• BPABI DLL 類 似 モデルにおけ る ダ イナ ミ ッ ク シンボルテーブルの 自 動 規 則<br />

(10-24 ページ)<br />

• BPABI DLL 類 似 モデルのア ド レ シングモー ド (10-25 ページ)<br />

• BPABI DLL 類 似 モデルに 関 連 する リ ン カ コ マン ド ラ イ ンオプシ ョ ン (10-32 ペー<br />

ジ) .<br />

『<strong>ARM</strong> ® C および C++ ラ イ ブ ラ リ と 浮 動 小 数 点 サポー ト の 使 用 』 :<br />

• 実 行 環 境 の 初 期 化 と アプ リ ケーシ ョ ンの 実 行 (2-61 ページ)<br />

• C++ の 初 期 化 、 構 築 、 および 破 棄 (2-62 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-26<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.23 シンボルバージョ ン 管 理 について<br />

シンボルのバージ ョ ン 管 理 では、 シンボルのイ ンポー ト 元 およびエク スポー ト 先 の<br />

動 的 な 共 有 オブジ ェ ク ト に 関 する 追 加 情 報 を 記 録 し ます。 ダ イ ミ ッ ク ローダでは、<br />

こ の 追 加 情 報 を 使 用 し て、 イ メ ージで 必 要 なすべてのシンボルが ロー ド 時 に 利 用 可<br />

能 にな る よ う にし ます。<br />

共 有 オブジ ェ ク ト の 作 成 者 は、 シンボルのバージ ョ ン を 管 理 する こ と で、 すべての<br />

新 し い ク ラ イ アン ト が 使 用 で き る 新 し いバージ ョ ンのシンボル 作 成 する と 同 時 に、<br />

古 いバージ ョ ンの 共 有 オブジ ェ ク ト に リ ン ク する ク ラ イ アン ト と の 互 換 性 を 維 持 す<br />

ることができます。<br />

10.23.1 バージ ョ ン<br />

シンボルのバージ ョ ン 管 理 によ り 、 ダイナ ミ ッ ク シンボルテーブルにバージ ョ ン と<br />

い う 概 念 が 追 加 さ れます。 バージ ョ ン と は、 シンボルに 関 連 付 け られる 名 前 です。<br />

ダ イナ ミ ッ ク ローダでは、 バージ ョ ン 名 に 関 連 付 け られたシンボル 参 照 を 解 決 する<br />

際 、 同 じバージ ョ ン 名 のシンボル 定 義 に 対 してのみマッチングを 行 う こ とができま<br />

す。<br />

注<br />

共 有 オブジェ ク ト の リ ビジ ョ ン 履 歴 を 示 すために、 バージ ョ ンを 以 前 のバージ ョ ン<br />

名 に 関 連 付 け る こ と ができ ます。<br />

10.23.2 デフォルトのバージョ ン<br />

共 有 オブジ ェ ク ト に 同 じ シンボルの 複 数 のバージ ョ ン を 含 め る こ と はで き ますが、<br />

共 有 オブジ ェ ク ト の ク ラ イ ア ン ト は 最 新 バージ ョ ンに し かバ イ ド で き ません。<br />

このバインドできる 最 新 バージョ ンを、 シンボルのデフォル ト のバージ ョ ン と 呼 び<br />

ます。<br />

10.23.3 バージ ョ ン 管 理 シンボルの 作 成<br />

デフォル ト では、 リ ンカはベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン<br />

タフェース (BPABI) に 準 拠 していない 共 有 オブジェク トにバージ ョ ン 管 理 シンボ<br />

ルを 作 成 しません。<br />

10.23.4 関 連 項 目<br />

参 照<br />

• シンボルバージ ョ ン 管 理 のスク リプト ファイル (10-28 ページ) .<br />

『fromelf イ メ ージ 変 換 ユーテ ィ リ テ ィ の 使 用 』 :<br />

• --symbolversions、 --no_symbolversions (4-75 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-27<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.24 シンボルバージ ョ ン 管 理 のス ク リ プ ト フ ァ イル<br />

シンボルバージョンを 作 成 するコマンドを、 コマンドラインオプション<br />

--symver_script=file で 指 定 さ れた ス ク リ プ ト フ ァ イルに 組 み 込 むこ と がで き ます。 こ<br />

のオプシ ョ ン を 使 用 する と 、 自 動 的 にシンボルバージ ョ ン 管 理 が 有 効 にな り ます。<br />

スクリプトファイルでは、 GNU ld リンカと 同 じ 構 文 をサポートしています。<br />

ス ク リ プ ト フ ァ イルを 使 用 する こ と で、 バージ ョ ン を 以 前 のバージ ョ ンに 関 連 付 け<br />

ることができます。<br />

ス テア リ ン グ フ ァ イル と 組 み 込 みシンボル 方 式 は 組 み 合 わせて 指 定 で き ます。 こ れ<br />

を 行 う 場 合 は、 ス ク リ プ ト フ ァ イル と 組 み 込 みシンボルを 一 致 せ、 以 下 の よ う に<br />

バッカスナウア 記 法 (BNF) の 表 記 を 使 用 する 必 要 があ り ます。<br />

version_definition ::=<br />

version_name "{" symbol_association* "}" [depend_version] ";"<br />

version_name は、 バージ ョ ン 名 を 含 んでいる 文 字 列 です。 depend_version は、 こ の<br />

version_name が 依 存 するバージ ョ ンの 名 前 を 含 んでい る 文 字 列 です。 こ のバージ ョ ン<br />

は、 ス ク リ プ ト フ ァ イル 内 で 事 前 に 定 義 されている 必 要 があ り ます。 バージ ョ ン 名<br />

は 重 要 ではあ り ませんが、 以 下 の よ う に 読 みやすい 名 前 を 付 け る と 便 利 です。<br />

symbol_association ::=<br />

"local:"| "global:"| symbol_name ";"<br />

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

• "local:" は、 こ のバージ ョ ン 定 義 で これに 続 く すべての symbol_name が 共 有 オブ<br />

ジェク トに 対 してローカルであり、 バージョン 管 理 されないこ とを 示 します。<br />

• "global:" は、 これに 続 く すべての symbol_name がこのバージョン 定 義 に 属 するこ<br />

とを 示 します。<br />

各 バージ ョ ン 定 義 の 始 めには、 暗 黙 の "global:" が 存 在 し ます。<br />

• symbol_name は、 静 的 シンボルテーブル 内 のグ ローバルシンボルの 名 前 です。<br />

注<br />

ス ク リ プ ト フ ァ イルを 使 用 する 場 合 は、 バージ ョ ン 定 義 と そのバージ ョ ン 定 義 に 関<br />

連 付 け ら れる シンボルが 一 致 する 必 要 があ り ます。 不 一 致 が 見 かっ た 場 合 は、 リ ン<br />

カか ら 警 告 が 生 成 さ れます。<br />

10.24.1 関 連 項 目<br />

概 念<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ)<br />

• バージ ョ ン 管 理 シンボルの 作 成 例 (10-29 ページ)<br />

• 暗 黙 のシンボルバージョン 管 理 を 有 効 にするリンカオプション (10-31 ページ)<br />

.<br />

参 照<br />

『リンカリファレンス』:<br />

• --symver_script=file (2-169 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-28<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.25 バージ ョ ン 管 理 シンボルの 作 成 例<br />

以 下 の 例 では、 シンボル foo@ver1、 foo@@ver2、 および bar@@ver1 をオブジェク ト シンボ<br />

ルテーブルに 配 置 し ます。<br />

例 10-1 バージ ョ ン 管 理 シンボルの 作 成 、 組 み 込 みシンボル<br />

int old_function(void) __asm__("foo@ver1");<br />

int new_function(void) __asm__("foo@@ver2");<br />

int other_function(void) __asm__("bar@@ver1");<br />

ver2 が ver1 に 依 存 する 追 加 の 依 存 関 係 情 報 を 含 む、 対 応 する ス ク リ プ ト フ ァ イルを<br />

以 下 に 示 し ます。<br />

例 10-2 バージ ョ ン 管 理 シンボルの 作 成 、 ス ク リ プ ト フ ァ イル<br />

ver1<br />

{<br />

global:<br />

foo; bar;<br />

local:<br />

*;<br />

};<br />

ver2<br />

{<br />

global:<br />

foo;<br />

} ver1;<br />

10.25.1 関 連 項 目<br />

概 念<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ)<br />

• 暗 黙 のシンボルバージョン 管 理 を 有 効 にするリンカオプション (10-31 ページ)<br />

.<br />

参 照<br />

『リンカリファレンス』:<br />

• --symver_script=file (2-169 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-29<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.26 組 み 込 みシンボルについて<br />

リ ンカによ ってシンボルバージ ョ ンが 作 成 される よ う にする 特 定 の 名 前 付 き シンボ<br />

ルを 入 力 オブジ ェ ク ト に 追 加 で き ます。 追 加 で き る シンボルは 以 下 の よ う な 形 式 に<br />

なります。<br />

• name@version (デフ ォル ト 以 外 のバージ ョ ンのシンボルの 場 合 )<br />

• name@@version (デフ ォル ト のバージ ョ ンのシンボルの 場 合 )<br />

こ の よ う なシンボルは、 エ ク ス ポー ト を 考 えてい る 関 数 やデータ のア ド レ スで 定 義<br />

する 必 要 があ り ます。 シンボル 名 は、 シンボル 名 部 分 (name) と バージ ョ ン 定 義 部 分<br />

(version) の 2 つの 部 分 か ら 構 成 さ れます。 name はダイナ ミ ッ クシンボルテーブルに<br />

追 加 さ れ、 共 有 オブジ ェ ク ト の イ ン タ フ ェースの 一 部 にな り ます。 ver がまだ 存 在 し<br />

ない 場 合 は、 その 名 前 のバージ ョ ン を 作 成 し、 name を ver という 名 前 のバージョンに<br />

関 連 付 け ます。<br />

以 下 の 例 では、 シンボル foo@ver1、 foo@@ver2、 および bar@@ver1 をオブジェク ト シンボ<br />

ルテーブルに 配 置 し ます。<br />

例 10-3 バージ ョ ン 管 理 シンボルの 作 成 、 組 み 込 みシンボル<br />

int old_function(void) __asm__("foo@ver1");<br />

int new_function(void) __asm__("foo@@ver2");<br />

int other_function(void) __asm__("bar@@ver1");<br />

リ ンカでは こ れら のシンボルを 読 み 出 し、 バージ ョ ン 定 義 ver1 と ver2 を 作 成 し ます。<br />

シンボル foo はデフ ォル ト のバージ ョ ン 以 外 の ver1 とデフォルトのバージョンの ver2<br />

に 関 連 付 け ら れます。 シンボル bar はデフ ォル ト のバージ ョ ンの ver1 に 関 連 付 け ら れ<br />

ます。<br />

こ の 方 法 では、 複 数 のバージ ョ ン 間 の 関 連 付 けを 作 成 する こ と はで き ません。<br />

10.26.1 関 連 項 目<br />

参 照<br />

『コンパイ ラの 使 用 』 :<br />

• シンボルバージ ョ ンに 対 するコンパイラおよびリ ンカサポートの 使 用<br />

(5-32 ページ) .<br />

『アセンブラの 使 用 』 :<br />

• 第 5 章 <strong>ARM</strong> アセンブ リ 言 語 の 記 述 .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-30<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.27 暗 黙 のシンボルバージ ョ ン 管 理 を 有 効 にする リ ン カオプシ ョ ン<br />

静 的 バ イ ンデ ィ ン グ を 行 う ためにシンボルのバージ ョ ン 管 理 を 行 う 必 要 があ る が、<br />

指 定 さ れるバージ ョ ン 番 号 に 注 意 を 払 う 必 要 はない 場 合 は、 暗 のシンボルバージ ョ<br />

ン 管 理 を 使 用 でき ます。<br />

コマンド ラインオプショ ン --symver_soname を 使 用 する と、 暗 黙 のシンボルバージ ョ<br />

ン 管 理 が 有 効 にな り ます。<br />

シンボルにバージ ョ ンが 定 義 されていない 場 合 は、 リ ンクしているファイルの SONAME<br />

が 使 用 されます。<br />

こ のオプシ ョ ンは、 組 み 込 みシンボルま たはス ク リ プ ト フ ァ イル と 組 み 合 わせて 使<br />

用 する こ と はで き ません。<br />

10.27.1 関 連 項 目<br />

参 照<br />

• シンボルバージ ョ ン 管 理 について (10-27 ページ)<br />

• シンボルバージ ョ ン 管 理 のスク リプト ファイル (10-28 ページ)<br />

• 組 み 込 みシンボルについて (10-30 ページ) .<br />

『リンカリファレンス』:<br />

• --symver_soname (2-170 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-31<br />

ID 111311<br />

Non-Confidential


BPABI および SysV の 共 有 ラ イ ブ ラ リ と 実 行 可 能 フ ァ イル<br />

10.28 BPABI DLL 類 似 モデルに 関 連 する リ ン カ コ マン ド ラ イ ンオプシ ョ ン<br />

以 下 の リ ン カ コ マン ド ラ イ ンオプシ ョ ンがベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ<br />

ンバイナ リ インタフェース (BPABI) DLL 類 似 モデルに 関 連 し ています。<br />

参 照<br />

『リンカリファレンス』:<br />

• --base_platform (2-18 ページ)<br />

• --bpabi (2-24 ページ)<br />

• --dll (2-49 ページ)<br />

• --dynamic_debug (2-50 ページ)<br />

• --export_all、 --no_export_all (2-64 ページ)<br />

• --pltgot=type (2-122 ページ)<br />

• --pltgot_opts=mode (2-124 ページ)<br />

• --ro_base=address (2-137 ページ)<br />

• --ropi (2-138 ページ)<br />

• --rosplit (2-139 ページ)<br />

• --runpath=pathlist (2-140 ページ)<br />

• --rw_base=address (2-141 ページ)<br />

• --rwpi (2-142 ページ)<br />

• --soname=name (2-153 ページ)<br />

• --symver_script=file (2-169 ページ)<br />

• --symver_soname (2-170 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 10-32<br />

ID 111311<br />

Non-Confidential


第 11 章<br />

ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能<br />

以 下 の 各 ト ピ ッ ク では、 <strong>ARM</strong> リンカ armlink でサポー ト されているベースプラ ッ ト<br />

フ ォーム リ ン ク モデルの 機 能 について 説 明 し ます。<br />

概 念<br />

• ベースプ ラ ッ ト フ ォームモデルでのス キ ャ ッ タ フ ァ イルの 使 用 に 関 する 制 限<br />

(11-2 ページ)<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデルのス キ ャ ッ タ フ ァ イルの 例 (11-5 ページ)<br />

• ベースプ ラ ッ ト フ ォームモデルを 使 用 し た PLT シーケンスの 配 置 (11-7 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 11-1<br />

ID 111311<br />

Non-Confidential


ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能<br />

11.1 ベースプ ラ ッ ト フ ォームモデルでのスキャ ッ タ フ ァ イルの 使 用 に 関 する 制 限<br />

ベースプ ラ ッ ト フ ォームモデルでは、 ス キ ャ ッ タ フ ァ イ ルをサポー ト し ています。<br />

スキ ャ ッ タ フ ァ イル 内 で 使 用 でき る キーワード には 制 限 があ り せんが、 使 用 でき る<br />

ス キ ャ ッ タ フ ァ イ ルの タ イ プには 以 下 の 制 限 があ り ます。<br />

• RELOC 属 性 でマー ク さ れた ロー ド 領 域 には、 +offset の 相 対 ベース ア ド レ ス を 持 つ<br />

実 行 領 域 のみが 含 まれている 必 要 があ り ます。 以 下 の 例 では、 RELOC 属 性 と<br />

+offset 相 対 ベース ア ド レ ス を 使 用 する 有 効 な ス キ ャ ッ タ フ ァ イル と 無 効 な ス<br />

キャッタファイルを 示 します。<br />

例 11-1 RELOC と +offset を 使 用 する 有 効 なスキャ ッ タ フ ァ イルの 例<br />

# こ れ は 有 効 で す。 す べ て の 実 行 領 域 に +offset ア ドレスが 指 定 されています。<br />

LR1 0x8000 RELOC<br />

{<br />

ER_RELATIVE +0<br />

{<br />

*(+RO)<br />

}<br />

}<br />

例 11-2 RELOC と +offset を 使 用 する 無 効 なスキャ ッ タ フ ァ イルの 例<br />

# こ れ は 有 効 で は あ り ま せ ん。 実 行 領 域 の 1 つ に 絶 対 ベ ー ス ア ド レ ス が 指 定 さ れ て い ま す。<br />

LR1 0x8000 RELOC<br />

{<br />

ER_RELATIVE +0<br />

{<br />

*(+RO)<br />

}<br />

ER_ABSOLUTE 0x1000<br />

{<br />

*(+RW)<br />

}<br />

}<br />

• PLT セ ク シ ョ ン を 必 要 と する ロー ド 領 域 には、 OVERLAY としてマークされていな<br />

い、 コー ド を 含 む 実 行 領 域 が 少 な く と も 1 つ 含 まれてい る 必 要 があ り ます。 こ<br />

の 実 行 領 域 は、 PLT セ ク シ ョ ン を 保 持 する めに 使 用 さ れます。 PLT は 常 に メ モ<br />

リ 内 に 存 在 している 必 要 があるため、OVERLAY 領 域 は 使 用 でき ません。 以 下 の 例<br />

では、 PLT セ ク シ ョ ン を 必 要 と する 実 行 領 域 を 定 義 する 有 効 な ス キ ャ ッ タ フ ァ<br />

イルと 無 効 なスキャッタファイル 示 します。<br />

例 11-3 PLT セ ク シ ョ ン を 必 要 と する ロー ド 領 域 の 有 効 なスキャ ッ タ フ ァ イルの 例<br />

# これは 有 効 です。 ER_1 にはコードが 含 まれ、 OVERLAY ではあり ません。<br />

LR_NEEDING_PLT 0x8000<br />

{<br />

ER_1 +0<br />

{<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 11-2<br />

ID 111311<br />

Non-Confidential


ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能<br />

}<br />

}<br />

*(+RO)<br />

例 11-4 PLT セ ク シ ョ ン を 必 要 と する ロー ド 領 域 の 無 効 なスキャ ッ タ フ ァ イルの 例<br />

# これは 有 効 ではありません。 コードを 含 むすべての 実 行 領 域 が OVERLAY としてマークされています。<br />

LR_NEEDING_PLT 0x8000<br />

{<br />

ER_1 +0 OVERLAY<br />

{<br />

*(+RO)<br />

}<br />

ER_2 +0<br />

{<br />

*(+RW)<br />

}<br />

}<br />

• ロード 領 域 で PLT セ ク シ ョ ンが 必 要 な 場 合 は、 PLT セクションをロード 領 域 内<br />

に 配 置 する 必 要 があ り ます。 デフ ォル ト では、 ロー ド 領 域 で PLT セクションが<br />

必 要 な 場 合 、 PLT セ ク シ ョ ンは、 リ ンカに よ って コー ド を 含 む 最 初 の 実 行 領 域<br />

内 に 配 置 さ れます。 ス キ ャ ッ タ ロー ド セレ ク タ を 使 用 し て、 の 配 置 先 をオー<br />

バーラ イ ド でき ます。<br />

コー ド を 含 むロー ド 領 域 が 複 数 あ る 場 合 、 name と い う 名 前 のロード 領 域 の PLT<br />

セ ク シ ョ ンの 名 前 は .plt_name にな り ます。 コー ド を 含 むロー ド 領 域 が 1 つだけ<br />

の 場 合 、 PLT セ ク シ ョ ンの 名 前 は .plt にな り ます。<br />

以 下 の 例 では、 PLT セ ク シ ョ ン を 配 置 する 有 効 な ス キ ャ ッ タ フ ァ イ ル と 無 効 な<br />

スキャッタファイルを 示 します。<br />

例 11-5 PLT セ ク シ ョ ン を 配 置 する 有 効 なスキャ ッ タ フ ァ イルの 例<br />

# これは 有 効 です。 LR1 の PLT セクショ ンは LR1 に 配 置 されます。<br />

LR1 0x8000<br />

{<br />

ER1 +0<br />

{<br />

*(+RO)<br />

}<br />

ER2 +0<br />

{<br />

*(.plt_LR1)<br />

}<br />

}<br />

LR2 0x10000<br />

{<br />

ER1 +0<br />

{<br />

*(other_code)<br />

}<br />

}<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 11-3<br />

ID 111311<br />

Non-Confidential


ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能<br />

例 11-6 PLT セ ク シ ョ ン を 配 置 する 無 効 なスキャ ッ タ フ ァ イルの 例<br />

# これは 有 効 ではありません。 LR1 の PLT セクショ ンは LR2 に 配 置 されています。<br />

LR1 0x8000<br />

{<br />

ER1 +0<br />

{<br />

*(+RO)<br />

}<br />

}<br />

LR2 0x10000<br />

{<br />

ER1 +0<br />

{<br />

*(.plt_LR1)<br />

}<br />

}<br />

11.1.1 関 連 項 目<br />

概 念<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ)<br />

• ベースプ ラ ッ ト フ ォームモデルを 使 用 し た PLT シーケンスの 配 置 (11-7 ペー<br />

ジ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 属 性 (4-8 ページ)<br />

• 実 行 領 域 の 属 性 (4-13 ページ)<br />

• ロー ド 領 域 と 実 行 領 域 のア ド レ ス 属 性 (4-16 ページ)<br />

• ロー ド 領 域 のア ド レ ス 属 性 の 継 承 規 則 (4-20 ページ)<br />

• RELOC ア ド レ ス 属 性 の 継 承 規 則 (4-22 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 11-4<br />

ID 111311<br />

Non-Confidential


ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能<br />

11.2 ベースプ ラ ッ ト フ ォーム リ ン ク モデルのスキャ ッ タ フ ァ イルの 例<br />

こ の 例 では、 ベースプ ラ ッ ト フ ォーム リ ン ク モデルでのス キ ャ ッ タ フ ァ イルの 使 用<br />

方 法 を 示 しています。<br />

再 配 置 可 能 な ロー ド 領 域 を 使 用 し た、 ス キ ャ ッ タ フ ァ イル 形 式 の 標 準 のベースプ<br />

ラットフォームアプリケーションバイナリインタフェース (BPABI) メモリモデル<br />

を 以 下 に 示 し ます。<br />

例 11-7 再 配 置 可 能 なロー ド 領 域 を 使 用 し た 標 準 の BPABI スキャ ッ タ フ ァ イル<br />

LR1 0x8000 RELOC<br />

{<br />

ER_RO +0<br />

{<br />

*(+RO)<br />

}<br />

}<br />

LR2 0x0 RELOC<br />

{<br />

ER_RW +0<br />

{<br />

*(+RW)<br />

}<br />

ER_ZI +0<br />

{<br />

*(+ZI)<br />

}<br />

}<br />

この 例 は、 BPABI 仕 様 と 同 じ 2 領 域 形 式 であ る ため、 BPABI に 準 拠 し ています。<br />

次 の 例 では、 再 配 置 可 能 ではない 2 つのロード 領 域 LR1 と LR2 を 示 しています。<br />

例 11-8 再 配 置 可 能 ではないロー ド 領 域 を 使 用 し たスキャ ッ タ フ ァ イル<br />

LR1 0x8000<br />

{<br />

ER_RO +0<br />

{<br />

*(+RO)<br />

}<br />

ER_RW +0<br />

{<br />

*(+RW)<br />

}<br />

ER_ZI +0<br />

{<br />

*(+ZI)<br />

}<br />

}<br />

LR2 0x10000<br />

{<br />

ER_KNOWN_ADDRESS +0<br />

{<br />

*(fixedsection)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 11-5<br />

ID 111311<br />

Non-Confidential


ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能<br />

}<br />

}<br />

LR3 0x20000 RELOC<br />

{<br />

ER_RELOCATABLE +0<br />

{<br />

*(floatingsection)<br />

}<br />

}<br />

LR1 と LR2 には 固 定 ア ド レ スが 指 定 されているため、 リ ンカは LR1 と LR2 の 間 のダ<br />

イナ ミ ッ ク な 再 配 置 を 生 成 する 必 要 があ り ません。 ただ し、 RELOC ロード 領 域 LR3<br />

は、 ア ド レ ス 空 間 内 で ロー ド 領 域 LR1 と LR2 か ら 非 常 に 離 れた 場 所 に 配 置 さ れる 可<br />

能 性 があ り ます。 そのため、 LR1 と LR3 の 間 および LR2 と LR3 の 間 には、 ダ イナ<br />

ミ ッ ク な 再 配 置 が 必 要 にな り ます。<br />

各 ロード 領 域 に 対 して PLT が 生 成 される よ う にするには、オプシ ョ ン --pltgot=direct<br />

--pltgot_opts=crosslr を 使 用 し ます。<br />

11.2.1 関 連 項 目<br />

概 念<br />

• ベースプ ラ ッ ト フ ォームアプ リ ケーシ ョ ンバ イ ナ リ イ ン タ フ ェース (BPABI)<br />

リンクモデル (3-6 ページ)<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ)<br />

• BPABI リンクモデルと SysV リンクモデルの 両 方 に 共 通 する 概 念 (3-11 ページ)<br />

• ベースプ ラ ッ ト フ ォームモデルでのス キ ャ ッ タ フ ァ イルの 使 用 に 関 する 制 限<br />

(11-2 ページ)<br />

参 照<br />

『リンカリファレンス』:<br />

• ロード 領 域 の 属 性 (4-8 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 11-6<br />

ID 111311<br />

Non-Confidential


ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能<br />

11.3 ベースプラ ッ ト フ ォームモデルを 使 用 した PLT シーケンスの 配 置<br />

リ ン カでは、 ベースプ ラ ッ ト フ ォームモデル (--base_platform) の 場 合 に、 コードを<br />

含 む 複 数 の ロー ド 領 域 に 対 する プロシージャ リ ンクテーブル (PLT) の 生 成 をサポー<br />

トしています。<br />

ベースプ ラ ッ ト フ ォームモデルの 場 合 に PLT の 生 成 を 有 効 にするには、 PLT シーケ<br />

ンスを 生 成 する --pltgot= オプシ ョ ン を 使 用 し ます。 オプシ ョ ン --pltgot_opts=crosslr<br />

を 使 用 する と 、 RELOC ロー ド 領 域 間 で 呼 び 出 し を 行 う ためのエン ト リ を PLT に 追 加 で<br />

き ます。 複 数 の ロー ド 領 域 に 対 する PLT 生 成 は、 --pltgot=direct でのみサポー ト され<br />

ます。<br />

--pltgot_opts=crosslr オプシ ョ ンは、 イ メージが 動 的 にロード される 際 に 互 いに 関 連<br />

し て 移 動 する 複 数 の ロー ド 領 域 があ る 場 合 に 便 利 です。 リ ン カに よ っ て ロー ド 領 域<br />

ごとに PLT が 生 成 される ため、 離 れている PLT にア ク セスするのに 呼 び 出 し を 拡 張<br />

する 必 要 があ り ません。<br />

リンカによって 生 成 された PLT セクションの 配 置<br />

• ロード 領 域 が 1 つしかない 場 合 、 PLT は 1 つです。 オブジェ ク ト anon$$obj.o の<br />

.plt という 名 前 のセクションがリンカによって 作 成 されます。<br />

• ロード 領 域 が 複 数 ある 場 合 は、 PLT セ ク シ ョ ン を 必 要 と する ロー ド 領 域 ご と に<br />

PLT セクションが 作 成 されます。 デフォルトでは、 PLT セクションはコードを<br />

含 む 最 初 の 実 行 領 域 内 に 配 置 さ れます。 配 置 先 は、 ス キ ャ ッ タ フ ァ イルで 正 確<br />

な PLT セ ク シ ョ ン 名 を 指 定 する こ と でオーバーラ イ ド で き ます。<br />

例 えば、 LR Name と い う 名 前 のロード 領 域 の 場 合 、 PLT セクションはオブジェク<br />

ト anon$$obj.o の .plt_LR_NAME という 名 前 になります。 スキャッタファイルでこ<br />

の PLT セ ク シ ョ ンの 名 前 を 正 確 に 指 定 するには、 以 下 のセレ ク タ を 使 用 し ま<br />

す。<br />

anon$$obj.o(.plt_LR_NAME)<br />

以 下 の 点 に 注 意 し て 下 さい。<br />

• ロード 領 域 LR_NAME の PLT をロード 領 域 LR_NAME の 範 囲 外 に 移 動 する と 、 リ ン カ<br />

によってエラーメ ッセージが 生 成 されます。<br />

• ロード 領 域 LR_NAME に RELOC 実 行 領 域 と RELOC 以 外 の 実 行 領 域 が 混 在 し てい る 場<br />

合 、 リ ン カに よ っ てエ ラー メ ッ セージが 生 成 さ れます。 こ れは、 実 行 時 に RELOC<br />

実 行 領 域 か ら PLT にアクセスでき る 保 証 がないためです。<br />

• --pltgot=indirect と --pltgot=sbrel は、 複 数 の ロー ド 領 域 ではサポー ト さ れませ<br />

ん。<br />

11.3.1 関 連 項 目<br />

概 念<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデル (3-8 ページ) .<br />

参 照<br />

『リンカリファレンス』:<br />

• --base_platform (2-18 ページ)<br />

• --pltgot=type (2-122 ページ)<br />

• --pltgot_opts=mode (2-124 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 11-7<br />

ID 111311<br />

Non-Confidential


付 録 A<br />

『 リ ン カの 使 用 』 に 対 する 改 訂<br />

『リンカの 使 用 』 に 対 し て、 以 下 の 技 術 的 変 更 が 加 え ら れま し た。<br />

表 A-1 発 行 E と 発 行 F の 相 違 点<br />

変 更 点<br />

適 切 な 場 合 、<br />

• Thumb に 16 ビ ッ ト の 接 頭 辞 を 付 け ま し<br />

た<br />

• Thumb-2 を 32 ビッ ト Thumb に 変 更 し ま<br />

した。<br />

<strong>ARM</strong>CC5INC な どの 新 し いバージ ョ ンの 番 号 付 け<br />

の 方 式 に 環 境 変 数 の リ ス ト を 更 新 し ま し た。<br />

関 連 する ト ピ ッ ク<br />

• リンカについて (2-2 ページ)<br />

• Thumb コー ド を 含 む 実 行 領 域 の 順 序 付 け<br />

について (4-26 ページ)<br />

• ベニアの 概 要 (4-27 ページ)<br />

• 関 数 の イ ン ラ イ ン 化 に 影 響 を 与 え る 要 因<br />

(5-23 ページ)<br />

• スキャッタロードの 記 述 におけるベニア<br />

入 力 セ ク シ ョ ンの 選 択 (8-36 ページ)<br />

• リンカによる <strong>ARM</strong> 標 準 ラ イ ブ ラ リ の 検<br />

索 方 法 の 制 御 (4-39 ページ)<br />

• リンク 時 のユーザライブラリの 指 定<br />

(4-41 ページ)<br />

• リ ンカに よ る 参 照 の 解 決 方 法<br />

(4-43 ページ) .<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. A-1<br />

ID 111311<br />

Non-Confidential


『リ ン カの 使 用 』 に 対 する 改 訂<br />

表 A-2 発 行 D と 発 行 E の 相 違 点<br />

変 更 点<br />

--api、 --no_api、 --veneerinject、 --no_veneerinject オプ<br />

シ ョ ンの 説 明 への リ ン ク を 追 加 し ま し た。<br />

<strong>ARM</strong> 1176 エ ラ ッ タ を 回 避 する オプシ ョ ンへの リ ン ク<br />

を 追 加 しま した。<br />

ト ピ ッ ク の タ イ ト ルを 改 善 し ま し た。<br />

関 連 する ト ピ ッ ク<br />

リ ン カ コ マン ド ラ イ ンオプシ ョ ンの 目 的 別 一<br />

覧 (2-5 ページ)<br />

リ ン カ コ マン ド ラ イ ンオプシ ョ ンの 目 的 別 一<br />

覧 (2-5 ページ)<br />

__attribute__((section("name"))) を 使 用 したコー<br />

ド と データ の 配 置 (8-37 ページ)<br />

サンプルの C/C++ コー ド を 追 加 し ま し た。 • __at セ ク シ ョ ンの 自 動 配 置 (8-42 ペー<br />

ジ)<br />

• __at セ ク シ ョ ンの 手 動 配 置 (8-44 ペー<br />

ジ)<br />

• __at を 使 用 したフラ ッシュ メモ リ での<br />

キーの 配 置 (8-46 ページ) .<br />

表 A-3 発 行 C と 発 行 D の 相 違 点<br />

変 更 点<br />

リンカ 機 能 のリストから LTCG とプロファイ リング<br />

についての 項 目 を 削 除 し ま し た。<br />

プ ロ フ ァ イ リ ン グについての メ モを 削 除 し ま し た。<br />

廃 止 予 定 の 機 能 であ る LTCG についての メ モを 追 加<br />

しました。<br />

関 連 する ト ピ ッ ク<br />

リンカについて (2-2 ページ)<br />

リンク 時 コード 生 成 について (5-13 ページ)<br />

表 A-4 発 行 B と 発 行 C の 相 違 点<br />

変 更 点<br />

厳 格 なオプシ ョ ンフ ァ ミ リ についての 新 規 ト ピ ッ ク。<br />

あ る 実 行 領 域 について、 ANY_SIZE キーワー ド を 使 用 し<br />

て 未 割 り 当 てセ ク シ ョ ンの 配 置 に 許 容 さ れる 最 大 サ<br />

イ ズを 指 定 する 方 法 に 関 する 詳 細 を 追 加 し ま し た。<br />

スキャッタファイルを 使 用 して <strong>ARM</strong> ライブラリヘル<br />

パ 関 数 を 配 置 する 方 法 についての 新 規 ト ピ ッ ク を 追<br />

加 しました。<br />

関 連 する ト ピ ッ ク<br />

リンカにおける 厳 格 なオプションファミ リの<br />

使 用 (4-45 ページ)<br />

.ANY モジュールセレ ク タによ る 未 割 り 当 てセ<br />

クションの 配 置 (8-25 ページ)<br />

<strong>ARM</strong> ラ イ ブ ラ リ ヘルパ 関 数 の 配 置 例<br />

(8-56 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. A-2<br />

ID 111311<br />

Non-Confidential


『リ ン カの 使 用 』 に 対 する 改 訂<br />

表 A-5 発 行 A と 発 行 B の 相 違 点<br />

変 更 点<br />

64 ビ ッ ト リ ン カのサポー ト に 関 する メ モを 追 加 し ま<br />

した。<br />

『リンカリファレンス』 の 新 しいコマン ド ラ イ ンオプ<br />

ションへのリンクを 追 加 しました。<br />

プ ロ グ ラ ムセグ メ ン ト サ イ ズの 制 限 に 関 する メ モを<br />

追 加 し ま し た。<br />

ス キ ャ ッ タ フ ァ イルおよび 対 応 する コ マン ド ラ イ ン<br />

オプシ ョ ンの 比 較 表 を 追 加 し ま し た。<br />

未 割 り 当 てセ ク シ ョ ンの 処 理 に 関 する 情 報 を 追 加 し<br />

ました。<br />

PROTECTED キーワー ド を 使 用 し た 場 合 、 ロー ド 領 域 の<br />

重 複 も 防 止 さ れます。<br />

マッピングシンボルの 概 要 トピックを 追 加 しました。<br />

Load$$ ZI 出 力 セ ク シ ョ ンシンボルを 追 加 し ま し た。<br />

<strong>ARM</strong> アセンブラで リ ンカ 定 義 シンボルをインポート<br />

する 方 法 についての ト ピ ッ ク を 追 加 し ま し た。<br />

コー ド およびデータ を 特 定 のア ド レ スに 配 置 する 方<br />

法 の 例 を 追 加 し ま し た。<br />

.ANY モジ ュールセレ ク タ の 使 用 法 を 説 明 する ト ピ ッ<br />

ク を 追 加 し ま し た。<br />

__attribute__((section("name"))) の 使 用 時 に 影 響 を 受<br />

け る 各 種 の リ ン カ 機 能 について、 情 報 を 追 加 し ま し<br />

た。<br />

+offset 実 行 領 域 およびオーバーレ イ 実 行 領 域 につい<br />

ての 情 報 を 追 加 し ました。<br />

サポー ト さ れないキーワー ド の 一 覧 か ら、 GNU ld ス<br />

クリプトキーワード ABSOLUTE、 ADDR、 ALIGNOF、 DEFINED、<br />

EXTERN、 LOADADDR、 SIZEOF を 削 除 しま した。 現 在 はサ<br />

ポー ト されています。<br />

関 連 する ト ピ ッ ク<br />

リンカについて (2-2 ページ)<br />

リ ン カ コ マン ド ラ イ ンオプシ ョ ンの 目 的 別 一<br />

覧 (2-5 ページ)<br />

• イメージの 構 造 (4-3 ページ)<br />

• 入 力 セ ク シ ョ ン、 出 力 セ ク シ ョ ン、 領<br />

域 、 およびプ ロ グ ラ ムセグ メ ン ト<br />

(4-5 ページ) .<br />

リ ン カで イ メ ージの メ モ リ マ ッ プを 指 定 する<br />

方 法 (4-8 ページ)<br />

リンカによるセクションの 配 置 (4-20 ページ)<br />

ス キ ャ ッ タ ロー ド 時 のベニアの 再 利 用<br />

(4-32 ページ)<br />

マッピングシンボルについて (7-3 ページ)<br />

Load$$ 実 行 領 域 シンボル (7-7 ページ)<br />

<strong>ARM</strong> アセンブラでの リ ンカ 定 義 シンボルのイ<br />

ンポート (7-13 ページ)<br />

特 定 ア ド レ スへの 関 数 と データ の 配 置<br />

(8-18 ページ)<br />

• .ANY モジ ュールセレ ク タ に よ る 未 割 り<br />

当 てセク シ ョ ンの 配 置 (8-25 ページ)<br />

• .ANY セ ク シ ョ ンの 配 置 アルゴ リ ズムの<br />

使 用 例 (8-29 ページ)<br />

• 領 域 の 割 り 当 て、 セレ ク タ、 および 優 先<br />

度 の 動 作 を 示 す next_fit アルゴ リ ズ<br />

ムの 例 (8-32 ページ)<br />

• .ANY セクションのソートアルゴリズム<br />

の 使 用 例 (8-34 ページ) .<br />

__attribute__((section("name"))) を 使 用 したコー<br />

ド と データ の 配 置 (8-37 ページ)<br />

オーバーレ イ を 使 用 し たセ ク シ ョ ンの 配 置<br />

(8-49 ページ)<br />

armlink での ld ス ク リ プ ト の 使 用 に 固 有 の 制 限<br />

(9-8 ページ)<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. A-3<br />

ID 111311<br />

Non-Confidential


『リ ン カの 使 用 』 に 対 する 改 訂<br />

表 A-5 発 行 A と 発 行 B の 相 違 点 ( 続 き)<br />

変 更 点<br />

実 行 可 能 フ ァ イルおよび 共 有 オブジ ェ ク ト のデフ ォ<br />

ルトの ld スクリプトに 変 更 を 加 え、.bss 領 域 に 続 く 4<br />

バイ トの 境 界 で 整 列 させるよ うにしました。<br />

--ldpartial 用 のデフ ォル ト の ld ス ク リ プ ト を 追 加 し<br />

ました。<br />

ベースプラットフォームリンクモデルのトピックを<br />

「ベースプ ラ ッ ト フ ォーム リ ン ク モデルの 機 能 」 に 移<br />

動 しました。<br />

関 連 する ト ピ ッ ク<br />

armlink に よ って 使 用 さ れるデフ ォル ト の GNU<br />

ld スクリプト (9-10 ページ)<br />

armlink に よ って 使 用 さ れるデフ ォル ト の GNU<br />

ld スクリプト (9-10 ページ)<br />

• ベースプ ラ ッ ト フ ォームモデルでのス<br />

キ ャ ッ タ フ ァ イルの 使 用 に 関 する 制 限<br />

(11-2 ページ)<br />

• ベースプ ラ ッ ト フ ォーム リ ン ク モデルの<br />

スキャッタファイルの 例 (11-5 ページ)<br />

• ベースプ ラ ッ ト フ ォームモデルを 使 用 し<br />

た PLT シーケンスの 配 置 (11-7 ページ)<br />

.<br />

<strong>ARM</strong> DUI 0474FJ Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. A-4<br />

ID 111311<br />

Non-Confidential

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!