You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
®<br />
<strong>ARM</strong><br />
デベロッパスイート<br />
バージョン 1.2<br />
リンカ / ユーティリティガイド<br />
Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved.<br />
<strong>ARM</strong> DUI0151AJ-00
<strong>ARM</strong> デベロッパスイート<br />
リンカ / ユーティリティガイド<br />
Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved.<br />
リリース 情 報<br />
改 訂 履 歴<br />
日 付<br />
発 行<br />
変 更 内 容<br />
2001 年 11 月 A ADS リリース 1.2<br />
著 作 権<br />
®<br />
または のマークが 付 いた 言 葉 およびロゴは、<strong>ARM</strong> 社 が 所 有 する 登 録 商 標 または 商 標 です。 本 書<br />
に 記 載 されている 他 の 製 品 名 は、 各 社 の 所 有 する 商 標 です。<br />
本 書 に 記 載 されている 情 報 の 全 部 または 一 部 、ならびに 本 書 で 紹 介 する 製 品 は、 著 作 権 所 有 者 の<br />
文 書 による 事 前 の 許 可 を 得 ない 限 り、 転 用 ・ 複 製 することを 禁 じます。<br />
本 書 に 記 載 されている 製 品 は、 今 後 も 継 続 的 に 開 発 ・ 改 良 の 対 象 となります。 本 書 に 含 まれる 製<br />
品 およびその 利 用 方 法 についての 情 報 は、<strong>ARM</strong> が 利 用 者 の 利 益 のために 提 供 するものです。した<br />
がって 当 社 では、 製 品 の 市 販 性 または 利 用 の 適 切 性 を 含 め、 暗 示 的 ・ 明 示 的 に 関 係 なく 一 切 の 責<br />
任 を 負 いません。<br />
本 書 は、 本 製 品 の 利 用 者 をサポートすることだけを 目 的 としています。 本 書 に 記 載 されている 情<br />
報 の 使 用 、 情 報 の 誤 りまたは 省 略 、あるいは 本 製 品 の 誤 使 用 によって 発 生 したいかなる 損 失 ・ 損<br />
傷 についても、<strong>ARM</strong> 社 は 一 切 責 任 を 負 いません。<br />
ii Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
目 次<br />
<strong>ARM</strong> デベロッパスイートリンカ / ユーティリティ<br />
ガイド<br />
序 章<br />
本 書 について ...................................................................................................vi<br />
ご 意 見 ・ご 質 問 ................................................................................................ix<br />
第 1 章<br />
第 2 章<br />
第 3 章<br />
第 4 章<br />
はじめに<br />
1.1 リンカおよびユーティリティについて.........................................................1-2<br />
armlink のコマンド 構 文<br />
2.1 armlink について ...........................................................................................2-2<br />
2.2 armlink のコマンド 構 文 ................................................................................2-8<br />
基 本 リンカ 機 能<br />
3.1 イメージ 構 造 の 指 定 ......................................................................................3-2<br />
3.2 セクションの 配 置 .........................................................................................3-8<br />
3.3 最 適 化 と 修 正 .............................................................................................. 3-12<br />
3.4 コマンドラインオプションを 使 用 した 単 純 イメージの 作 成 ...................... 3-14<br />
イメージシンボルへのアクセス<br />
4.1 リンカ 定 義 シンボルへのアクセス ................................................................4-2<br />
4.2 別 のイメージに 含 まれるシンボルへのアクセス ..........................................4-5<br />
4.3 グローバルシンボルの 隠 蔽 と 再 命 名 ............................................................4-9<br />
4.4 $Super$$ と $Sub$$ を 使 用 したシンボル 定 義 のオーバライド ................. 4-12<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. iii
目 次<br />
第 5 章<br />
第 6 章<br />
第 7 章<br />
第 8 章<br />
分 散 ローディング 記 述 ファイルの 使 用<br />
5.1 分 散 ローディングについて .......................................................................... 5-2<br />
5.2 分 散 ローディング 記 述 ファイルの 形 式 構 文 ................................................. 5-7<br />
5.3 例 : 領 域 アドレスとセクションアドレスの 指 定 ........................................ 5-22<br />
5.4 等 価 な 分 散 ローディング 記 述 を 使 用 した 単 純 イメージの 生 成 .................. 5-28<br />
ライブラリの 作 成 と 使 用<br />
6.1 ライブラリについて ..................................................................................... 6-2<br />
6.2 ライブラリの 検 索 、 選 択 、スキャン............................................................ 6-3<br />
6.3 <strong>ARM</strong> ライブラリアン ................................................................................... 6-6<br />
<strong>fromELF</strong> の 使 用<br />
7.1 <strong>fromELF</strong> について ........................................................................................ 7-2<br />
7.2 <strong>fromELF</strong> コマンドラインオプション............................................................ 7-3<br />
7.3 <strong>fromELF</strong> の 使 用 例 ...................................................................................... 7-10<br />
<strong>ARM</strong> プロファイラの 使 用<br />
8.1 <strong>ARM</strong> プロファイラ ....................................................................................... 8-2<br />
8.2 プロファイラのコマンドラインオプション ................................................. 8-3<br />
8.3 サンプル 出 力 ................................................................................................ 8-4<br />
用 語 集<br />
iv Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
序 章<br />
本 章 では、<strong>ARM</strong> デベロッパスイート(ADS)に 含 まれているリンカおよびユーティリ<br />
ティの 解 説 書 について 説 明 します。 本 章 は 以 下 のセクションから 構 成 されています。<br />
• 本 書 について:P. vi<br />
• ご 意 見 ・ご 質 問 :P. ix<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. v
序 章<br />
本 書 について<br />
本 書 は ADS の 解 説 書 です。 本 書 では、ADS に 含 まれているリンカへのコマンドライン<br />
オプションと 他 の <strong>ARM</strong> ツールについて 説 明 しています。<br />
対 象 読 者<br />
本 書 は、ADS を 使 用 してアプリケーションを 作 成 する 全 ての 開 発 者 を 対 象 としていま<br />
す。 本 書 の 内 容 は、ADS の「スタートアップガイド」に 記 載 されている <strong>ARM</strong> 開 発 ツー<br />
ルに 精 通 した 経 験 豊 富 なソフトウェア 開 発 者 を 想 定 して 書 かれています。<br />
本 書 の 構 成<br />
本 書 は 以 下 の 章 と 付 録 から 構 成 されています。<br />
第 1 章<br />
第 2 章<br />
第 3 章<br />
第 4 章<br />
第 5 章<br />
第 6 章<br />
第 7 章<br />
はじめに<br />
ADS バージョン 1.2 に 含 まれているリンカと 関 連 ユーティリティを 概 説<br />
します。<br />
armlink のコマンド 構 文<br />
リンカに 使 用 することができる 全 てのコマンドラインオプションについ<br />
て 説 明 します。<br />
基 本 リンカ 機 能<br />
単 純 なイメージの 作 成 方 法 を 具 体 的 に 説 明 します。<br />
イメージシンボルへのアクセス<br />
イメージ 内 のシンボルへのアクセス 方 法 について 詳 しく 説 明 します。<br />
分 散 ローディング 記 述 ファイルの 使 用<br />
分 散 ローディングファイルを 使 用 してメモリ 内 にコードとデータを 格 納<br />
する 方 法 を 説 明 します。<br />
ライブラリの 作 成 と 使 用<br />
ライブラリオブジェクトを 作 成 し、それにアクセスする 際 の 手 順 につい<br />
て 説 明 します。<br />
<strong>fromELF</strong> の 使 用<br />
<strong>fromELF</strong> ユーティリティプログラムの 概 要 と、このプログラムを 使 用 し<br />
たイメージ 形 式 の 変 更 方 法 について 説 明 します。<br />
vi Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
序 章<br />
第 8 章<br />
<strong>ARM</strong> プロファイラの 使 用<br />
ADS に 含 まれている <strong>ARM</strong> プロファイラユーティリティプログラムにつ<br />
いて 説 明 します。<br />
表 記 規 則<br />
本 書 では 以 下 の 表 記 規 則 を 用 いています。<br />
monospace コマンド、ファイル 名 、プログラム 名 、ソースコードなど、キーボード<br />
から 入 力 可 能 なテキストを 示 しています。<br />
monospace コマンドまたはオプションに 使 用 可 能 な 略 語 を 示 しています。コマンド<br />
名 またはオプション 名 を 全 て 入 力 する 代 わりに、 下 線 部 分 の 文 字 だけを<br />
入 力 してこれらを 指 定 することができます。<br />
monospace italic<br />
コマンドおよび 関 数 への 引 数 で、 特 定 の 値 に 置 き 換 えることが 可 能 なも<br />
のを 示 しています。<br />
monospace bold<br />
サンプルコード 以 外 に 使 用 される 言 語 キーワードを 示 しています。<br />
italic<br />
bold<br />
重 要 用 語 、 専 門 用 語 、 相 互 参 照 、 引 用 箇 所 を 斜 体 で 記 載 しています。<br />
メニュー 名 などのインタフェース 要 素 を 太 字 で 記 載 しています。また、<br />
適 宜 記 述 リスト 内 の 重 要 箇 所 と、<strong>ARM</strong> プロセッサシグナルの 名 前 にも 太<br />
字 を 用 いています。<br />
参 考 資 料<br />
このセクションでは、<strong>ARM</strong> プロセッサファミリの 開 発 コード 関 連 情 報 を 提 供 している<br />
<strong>ARM</strong> 社 および 各 社 の 出 版 物 を 紹 介 します。<br />
<strong>ARM</strong> は 自 社 出 版 物 の 定 期 的 な 更 新 ・ 修 正 を 行 っています。 最 新 の 正 誤 表 と 追 補 情 報 、<br />
ならびに <strong>ARM</strong> によく 寄 せられる 質 問 とその 回 答 については、<strong>ARM</strong> ホームページ<br />
http://www.arm.com をご 覧 下 さい。<br />
<strong>ARM</strong> の 出 版 物<br />
本 書 では、ADS に 含 まれている 開 発 ツールの 参 考 情 報 を 提 供 しています。この 他 、 本<br />
製 品 には 以 下 の 資 料 が 同 梱 されています。<br />
• ADS Installation and License Management Guide(<strong>ARM</strong> DUI 0139)<br />
• スタートアップガイド(<strong>ARM</strong> DUI 0064)<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. vii
序 章<br />
• ADS デベロッパガイド(<strong>ARM</strong> DUI 0056)<br />
• ADS アセンブラガイド(<strong>ARM</strong> DUI 0068)<br />
• ADS コンパイラ / ライブラリガイド(<strong>ARM</strong> DUI 0067)<br />
• AXD/armsd デバッガガイド(<strong>ARM</strong> DUI 0066)<br />
• ADS デバッグターゲットガイド(<strong>ARM</strong> DUI 0058)<br />
• CodeWarrior IDE Guide(<strong>ARM</strong> DUI 0065)<br />
<strong>ARM</strong> デベロッパスイートには 上 記 の 他 に 以 下 の 資 料 が 収 録 されています。<br />
• <strong>ARM</strong> Architecture Reference Manual(<strong>ARM</strong> DDI 0100)。DynaText と PDF 形 式 で 収<br />
録 されています。<br />
• <strong>ARM</strong> Applications Library Programmer's Guide。DynaText と PDF 形 式 で 収 録 されて<br />
います。<br />
• <strong>ARM</strong> ELF 仕 様 書 (SWS ESPC 0003)。PDF 形 式 で<br />
install_directory\PDF\specs\<strong>ARM</strong>ELF.pdf に 収 録 されています。<br />
• TIS DWARF 2 仕 様 書 。PDF 形 式 で<br />
install_directory\PDF\specs\TIS-DWARF2.pdf に 収 録 されています。<br />
• <strong>ARM</strong>/Thumb ® Procedure Call Standard specification。PDF 形 式 で<br />
install_directory\PDF\specs\ATPCS.pdf に 収 録 されています。<br />
また、<strong>ARM</strong> 製 品 の 関 連 情 報 については、 以 下 の 出 版 物 を 参 照 して 下 さい。<br />
• <strong>ARM</strong> Reference Peripheral Specification(<strong>ARM</strong> DDI 0062)<br />
• ご 使 用 中 のハードウェアデバイスに 関 する <strong>ARM</strong> データシートまたはテクニカル<br />
リファレンスマニュアル<br />
その 他 、サンプルコードおよび 記 述 コードに 関 する 情 報 については、<strong>ARM</strong> Firmware Suite<br />
(AFS)のサンプルコードと 説 明 書 を 参 照 して 下 さい。AFS の 詳 細 については、 以 下 の<br />
<strong>ARM</strong> 出 版 物 を 参 照 して 下 さい。<br />
• <strong>ARM</strong> Firmware Suite User Guide(<strong>ARM</strong> DUI 0136)<br />
• <strong>ARM</strong> Firmware Suite Reference Guide(<strong>ARM</strong> DUI 0102)<br />
他 の 出 版 物<br />
本 書 では、<strong>ARM</strong> アセンブリ 言 語 、C ならびに C++ プログラミング 言 語 については 詳 し<br />
く 説 明 していません。プログラミングに 関 する 一 般 情 報 については、 他 の 出 版 物 を 参<br />
照 して 下 さい。<br />
<strong>ARM</strong> アーキテクチャについての 一 般 情 報 については、 以 下 の 出 版 物 を 参 照 して 下 さい。<br />
• <strong>ARM</strong> System-on-chip Architecture (second edition), Furber, S., (2000). Addison Wesley.<br />
ISBN 0-201-67519-6.<br />
viii Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
序 章<br />
ご 意 見 ・ご 質 問<br />
<strong>ARM</strong> 社 では、ADS および 本 書 に 関 するご 意 見 ・ご 質 問 をお 待 ちしています。<br />
<strong>ARM</strong> デベロッパスイートについてのご 意 見 ・ご 質 問<br />
ADS に 関 するご 意 見 ・ご 質 問 がございましたら、 製 品 購 入 元 までご 連 絡 下 さい。その<br />
際 、 迅 速 かつ 適 切 な 対 応 をさせて 頂 くために、 以 下 の 情 報 をご 用 意 下 さい。<br />
• お 名 前 と 会 社 名<br />
• 製 品 のシリアル 番 号<br />
• ご 使 用 になっている 製 品 のリリース 情 報<br />
• ハードウェアプラットフォーム、オペレーティングシステムのタイプ、バージョ<br />
ンなど、ご 使 用 になっているプラットフォームについての 詳 しい 情 報<br />
• 当 該 問 題 が 繰 り 返 し 発 生 するコードの 小 さなスタンドアロンサンプル<br />
• 当 初 の 期 待 する 動 作 と、 実 際 に 起 こったことに 関 する 詳 しい 説 明<br />
• コマンドラインオプションを 含 め、 使 用 した 全 てのコマンド<br />
• 問 題 を 例 示 するサンプル 出 力<br />
• バージョン 番 号 、ビルド 番 号 などを 含 め、ご 使 用 になっているツールのバージョ<br />
ン 情 報<br />
本 書 に 関 するご 意 見<br />
本 書 に 関 するご 意 見 等 がございましたら、 電 子 メールに 以 下 の 情 報 をご 記 入 の 上 、<br />
errata@arm.com までお 寄 せ 下 さい。<br />
• 資 料 名<br />
• 資 料 番 号<br />
• ご 意 見 のあるページ 番 号<br />
• 問 題 点 の 詳 しい 説 明<br />
補 足 または 向 上 すべき 点 についてのご 提 案 もお 待 ちしています。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. ix
序 章<br />
x Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
第 1 章<br />
はじめに<br />
本 章 では、ADS に 収 録 されている <strong>ARM</strong> リンカ / ユーティリティプログラムをご 紹 介 し<br />
ます。 本 章 は 以 下 のセクションから 構 成 されています。<br />
• リンカおよびユーティリティについて:P. 1-2<br />
• リンカ:P. 1-2<br />
• ユーティリティ:P. 1-3<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 1-1
はじめに<br />
1.1 リンカおよびユーティリティについて<br />
ADS は、 支 援 文 書 およびサンプルを 含 み、<strong>ARM</strong> ファミリの RISC プロセッサ 用 アプリ<br />
ケーションの 記 述 やデバッグを 目 的 としたアプリケーション 群 で 構 成 されています。<br />
ADS を 使 用 することにより、C、C++、ならびに <strong>ARM</strong> アセンブリ 言 語 プログラムの 開<br />
発 ・ 作 成 ・デバッグが 可 能 となります。<br />
ADS ツールキットは、 以 下 の 主 要 コンポーネントから 構 成 されています:<br />
• コマンドライン 開 発 ツール<br />
• GUI 開 発 ツール<br />
• ユーティリティ<br />
• 支 援 ソフトウェア<br />
本 書 では、ADS に 含 まれている <strong>ARM</strong> リンカ armlink と、コマンドラインユーティリ<br />
ティツールについて 説 明 します。ADS に 収 録 されている <strong>ARM</strong> アセンブラ、コンパイ<br />
ラ、デバッガ、 支 援 ソフトウェアの 参 考 文 書 については、P. vii「<strong>ARM</strong> の 出 版 物 」をご<br />
覧 下 さい。<br />
1.1.1 リンカ<br />
armlink は、1 つ 以 上 のオブジェクトファイルの 内 容 と、1 つ 以 上 のオブジェクトライブ<br />
ラリから 選 択 された 部 分 とを 組 み 合 わせ、ELF 実 行 イメージまたは 部 分 的 にリンクし<br />
た ELF オブジェクトを 生 成 します。<br />
armlink は <strong>ARM</strong> コードと Thumb コードをリンクさせ、 必 要 に 応 じてプロセッサ 状 態 を<br />
切 り 替 えるためのインタワーキングベニアを 自 動 生 成 することができます。またこの<br />
リンカは、 必 要 に 応 じて 長 分 岐 ベニアを 自 動 生 成 し、 分 岐 命 令 の 範 囲 を 拡 張 すること<br />
ができます。<br />
armlink は、システムメモリマップ 内 にコードとデータを 別 々の 位 置 に 配 置 できるコマ<br />
ンドラインオプションをサポートしています。 別 の 方 法 としては、 分 散 ロード 記 述 ファ<br />
イルを 使 用 して、ロード 時 と 実 行 時 のどちらにも、 出 力 イメージ 内 のコードセクショ<br />
ンとデータセクションに 別 々のメモリ 位 置 を 指 定 することができます。これにより 複<br />
数 のメモリに 広 がる 複 雑 なイメージを 作 成 することができます。<br />
armlink を 使 用 して 共 通 セクションと 未 使 用 セクションを 削 除 し、 出 力 イメージのサイ<br />
ズを 小 さくすることができます。さらに、このリンカを 使 用 して 以 下 を 行 うことがで<br />
きます。<br />
• リンクされたファイルのデバッグ 情 報 と 参 照 情 報 の 生 成<br />
• スタティックコールグラフの 生 成 とそのスタック 使 用 率 のリスト<br />
• 出 力 イメージにあるシンボルテーブルの 内 容 の 制 御<br />
armlink は、リンクしようとするオブジェクトのビルド 属 性 に 基 づいて、リンクに 適 し<br />
た 標 準 C または C++ ライブラリバリアントを 自 動 的 に 選 択 します。<br />
1-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
はじめに<br />
armlink は ELF 以 外 の 出 力 形 式 を 生 成 しません。したがって、ELF イメージを ROM に<br />
ロードするためにプレーンバイナリなどの 他 の 形 式 に 変 換 したい 場 合 には、<strong>fromELF</strong><br />
ユーティリティを 使 用 して 下 さい。ユーティリティをご 覧 下 さい。<br />
この<strong>ARM</strong>リンカの 詳 細 については、 第 2 章 「armlinkのコマンド 構 文 」を 参 照 して 下 さい。<br />
1.1.2 ユーティリティ<br />
このセクションでは、 主 要 開 発 ツールをサポートするために 提 供 されている 以 下 の<br />
ユーティリティツールについて 概 説 します。<br />
• <strong>fromELF</strong><br />
• armar<br />
• armprof<br />
<strong>fromELF</strong><br />
<strong>fromELF</strong> は、<strong>ARM</strong> イメージ 変 換 ユーティリティです。<strong>fromELF</strong> は ELF 形 式 の 入 力 ファ<br />
イルを 受 け 取 り、 以 下 の 多 様 な 出 力 形 式 に 変 換 します。<br />
• プレーンバイナリ<br />
• Motorola32 ビット S レコード 形 式<br />
• Intel Hex-32 形 式<br />
• バイト 指 向 (Verilog メモリモデル)Hex 形 式<br />
また、<strong>fromELF</strong> を 使 用 して 入 力 ファイルに 関 するテキスト 情 報 を 作 成 し、コードを 逆<br />
アセンブルすることもできます。 詳 細 については、 第 7 章 「<strong>fromELF</strong> の 使 用 」を 参 照 し<br />
て 下 さい。<br />
armar<br />
<strong>ARM</strong> ライブラリアン armar を 使 用 して、ELF ファイルセットを ar 形 式 ライブラリに 収<br />
集 ・ 保 管 することができます。 複 数 の ELF オブジェクトファイルの 代 わりにライブラ<br />
リをリンカに 渡 すことができます。 詳 細 については、P. 6-6「<strong>ARM</strong> ライブラリアン」を<br />
参 照 して 下 さい。<br />
armprof<br />
<strong>ARM</strong> プロファイラ armprof は、<strong>ARM</strong> デバッガが 生 成 したプロファイルデータファイル<br />
からの 簡 単 なプログラムの 実 行 プロファイルを 表 示 します。 詳 細 については、 第 8 章<br />
「<strong>ARM</strong> プロファイラの 使 用 」を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 1-3
はじめに<br />
1-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
第 2 章<br />
armlink のコマンド 構 文<br />
本 章 では、armlink のコマンド 構 文 について 詳 しく 説 明 します。 本 章 は 以 下 のセクショ<br />
ンから 構 成 されています。<br />
• armlink について:P. 2-2<br />
• armlink のコマンド 構 文 :P. 2-8<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-1
armlink のコマンド 構 文<br />
2.1 armlink について<br />
<strong>ARM</strong> リンカ armlink を 使 用 して、 以 下 を 行 うことができます。<br />
• <strong>ARM</strong>コードまたは Thumb コードのどちらかを 使 用 したライブラリとオブジェク<br />
トの 集 合 をリンクし、1 つの 実 行 イメージを 作 成 する。<br />
• 後 のリンク 作 業 の 入 力 として 使 用 可 能 なオブジェクトにするために、オブジェク<br />
ト 集 合 の 一 部 を 1 つのオブジェクトにする。<br />
• コードとデータのメモリ 内 の 位 置 を 指 定 する。<br />
• リンクされたファイルに 関 するデバッグ 情 報 と 参 照 情 報 を 作 成 する。<br />
オブジェクトは、コードと、 初 期 化 データと、ゼロに 設 定 する 必 要 のあるメモリの 位<br />
置 を 含 む、 複 数 の 入 力 セクションから 構 成 されます。 入 力 セクションには、 読 み 出 し<br />
専 用 (RO)、 読 み 出 し - 書 き 込 み(RW)、ゼロ 初 期 化 (ZI)のいずれかの 属 性 を 設 定 す<br />
ることができます。armlink はこれらの 属 性 を 使 用 して 入 力 セクションをグループ 化 し、<br />
出 力 セクション、 出 力 領 域 、 出 力 イメージと 呼 ばれる 大 きなビルディングブロックを<br />
作 成 します。ロード 領 域 は ELF セグメントと 同 じです。<br />
通 常 、リセット 時 またはデバッガによってイメージがターゲットにロードされた 後 は、<br />
ロード 領 域 はシステムメモリマップ 内 に 存 在 します。イメージを 実 行 するには、その<br />
前 にいくつかの 領 域 を 実 行 アドレスに 移 動 させなければならない 場 合 があります。こ<br />
のためイメージのメモリマップには 全 く 異 なる 2 つのビューがあります。<br />
• プログラムとデータが 最 初 にロードされたときのメモリのロードビュー<br />
• コードを 通 常 の 実 行 位 置 に 移 動 した 後 のメモリの 実 行 ビュー<br />
ロードアドレスで 実 行 される 領 域 をルート 領 域 と 呼 びます。<br />
イメージ 階 層 の 詳 細 については、P. 3-2「イメージ 構 造 の 指 定 」を 参 照 して 下 さい。<br />
2-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
2.1.1 armlink への 入 力<br />
armlink への 入 力 は 以 下 で 構 成 されます。<br />
• ELF オブジェクト 形 式 の 1 つ 以 上 のオブジェクトファイル。この 形 式 については<br />
<strong>ARM</strong> ELF 仕 様 書 で 説 明 しています。 詳 細 については P. vii「<strong>ARM</strong> の 出 版 物 」を 参<br />
照 して 下 さい。<br />
• その 他 、armar で 作 成 された 1 つまたは 複 数 のライブラリ( 第 6 章 「ライブラリ<br />
の 作 成 と 使 用 」 参 照 )<br />
注<br />
下 位 互 換 性 の 目 的 で、armlink は AOF 形 式 のオブジェクトファイルと ALF 形 式 のライ<br />
ブラリにも 対 応 しています。ただし、これらの 旧 形 式 は 今 後 サポート 対 象 外 となる 予<br />
定 です。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-3
armlink のコマンド 構 文<br />
2.1.2 armlink からの 出 力<br />
armlink の 呼 び 出 しに 成 功 すると、 以 下 のいずれかの 出 力 が 得 られます。<br />
• ELF 実 行 可 能 形 式 の 実 行 イメージ<br />
• 部 分 リンクされた ELF オブジェクト 形 式 のオブジェクト<br />
単 純 なイメージの 場 合 、ELF 実 行 ファイルにはそのイメージの RO および RW 出 力 セ<br />
クションとほぼ 同 じセグメントが 含 まれています。また ELF 実 行 ファイルは、イメー<br />
ジの 出 力 セクションを 含 む ELF セクションも 保 持 しています。<br />
ELF 実 行 可 能 形 式 の 実 行 イメージは、<strong>fromELF</strong> ユーティリティを 使 用 して 他 のファイ<br />
ル 形 式 に 変 換 することができます。 詳 細 については、 第 7 章 「<strong>fromELF</strong> の 使 用 」を 参 照<br />
して 下 さい。<br />
実 行 イメージの 構 成<br />
armlink を 使 用 して 実 行 イメージを 構 成 するとき、armlink は 以 下 を 行 います。<br />
• 入 力 オブジェクトファイル 間 のシンボリック 参 照 を 解 決 する。<br />
• そのままでは 不 完 全 なシンボリック 参 照 を、ライブラリからオブジェクトモ<br />
ジュールを 抽 出 することによって 完 成 させる。<br />
• 入 力 セクションを 属 性 と 名 前 によってソートし、 類 似 する 属 性 と 名 前 の 付 いたセ<br />
クションを 連 続 するチャンクにマージする。<br />
• デバッグセクションの 重 複 コピーを 削 除 する。<br />
• 決 められたグループ 化 情 報 と 配 置 情 報 に 基 づき、オブジェクトフラグメントをメ<br />
モリ 領 域 内 にまとめる。<br />
• 再 配 置 可 能 値 を 再 配 置 する。<br />
• 実 行 イメージを 生 成 する。<br />
部 分 リンクされたオブジェクトの 構 成<br />
armlink を 使 用 して 部 分 リンクされたオブジェクトを 構 成 するとき、armlink は 以 下 を 行<br />
います。<br />
• デバッグセクションの 重 複 コピーを 削 除 する。<br />
• シンボルテーブルのサイズを 最 小 化 する。<br />
• 未 解 決 参 照 は 未 解 決 のままにしておく。<br />
• 次 のリンクステップへの 入 力 として 使 用 可 能 なオブジェクトを 生 成 する。<br />
注<br />
部 分 リンクを 行 う 場 合 、 分 散 ローディングファイルにあるコンポーネントオブジェク<br />
トを 名 前 で 参 照 することはできません。<br />
2-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
2.1.3 armlink オプションの 概 要<br />
このセクションでは、armlink の 各 コマンドラインオプションについて 簡 単 に 説 明 しま<br />
す。これらのオプションは 機 能 グループで 分 類 しています。<br />
ヘルプおよび 情 報 へのアクセス<br />
使 用 可 能 なコマンドラインオプションに 関 する 情 報 を 得 るには、 以 下 のオプションを<br />
使 用 します。<br />
-help<br />
ツールのバージョン 番 号 を 確 認 するには、 以 下 のオプションを 使 用 します。<br />
-vsn<br />
出 力 タイプと 出 力 ファイル 名 の 指 定<br />
1 つの 実 行 イメージではなく 部 分 リンクされたオブジェクトを 作 成 するには、 以 下 のオ<br />
プションを 使 用 します。<br />
-partial<br />
出 力 ファイルに 名 前 を 付 けるには、 以 下 のオプションを 使 用 します。<br />
-output<br />
出 力 ファイル 形 式 を 指 定 するには、 以 下 のオプションを 使 用 します。<br />
-elf<br />
ELF はデフォルトかつ 唯 一 使 用 できる 出 力 形 式 です。<strong>fromELF</strong> を 使 用 することにより、<br />
ELF 出 力 を 他 の 形 式 に 変 換 することができます。 詳 細 については、 第 7 章 「<strong>fromELF</strong> の<br />
使 用 」を 参 照 して 下 さい。<br />
via ファイルの 使 用<br />
リンカへの 追 加 コマンドライン 引 数 を 含 む via ファイルを 指 定 するには、 以 下 のオプ<br />
ションを 使 用 します。<br />
-via<br />
詳 細 については、ADS コンパイラ / ライブラリガイドの via ファイル 関 連 セクションを<br />
参 照 して 下 さい。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-5
armlink のコマンド 構 文<br />
イメージのメモリマップ 情 報 の 指 定<br />
以 下 のオプションを 使 用 して、 単 純 なメモリマップを 指 定 することができます。<br />
-reloc<br />
-ro-base<br />
-rw-base<br />
-ropi<br />
-rwpi<br />
-split<br />
複 雑 なイメージの 場 合 には、 以 下 のオプションを 使 用 します。<br />
-scatter<br />
分 散 ローディングについては、 第 5 章 「 分 散 ローディング 記 述 ファイルの 使 用 」を 参<br />
照 して 下 さい。<br />
-scatter オプションを 使 用 する 場 合 は、 単 純 メモリマップオプションの -ro-base、<br />
-rw-base、-reloc、-ropi、-rwpi、-split のいずれも 使 用 できません。-scatter<br />
オプションを 使 用 するには、 分 散 ローディング 記 述 ファイルを 使 用 して<br />
__user_initial_stackheap() 関 数 を 再 実 装 する 必 要 があります。<br />
単 純 メモリマップオプションは 実 行 イメージのメモリマップを 指 定 するため、 部 分 リ<br />
ンクには 使 用 できません。 詳 細 については ADS デベロッパガイドを 参 照 して 下 さい。<br />
イメージ 内 容 の 制 御<br />
以 下 のオプションを 使 用 して、イメージの 内 容 に 影 響 を 及 ぼす 様 々な 要 因 を 制 御 する<br />
ことができます。<br />
-debug | -nodebug<br />
-entry<br />
-first<br />
-keep<br />
-last<br />
-libpath<br />
-edit<br />
-locals | -nolocals<br />
-remove | -noremove<br />
-scanlib | -noscanlib<br />
-match<br />
2-6 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
イメージ 関 連 情 報 の 生 成<br />
以 下 のオプションを 使 用 して、イメージ 関 連 情 報 の 抽 出 方 法 と 表 示 方 法 を 制 御 するこ<br />
とができます。<br />
-callgraph<br />
-info<br />
-map<br />
-symbols<br />
-symdefs<br />
-xref<br />
-xreffrom<br />
-xrefto<br />
-callgraphを 除 き、リンカは 標 準 出 力 ストリームstdoutで 要 求 された 情 報 をデフォ<br />
ルトで 印 字 します。この 情 報 は、-list コマンドラインオプションを 使 用 してテキス<br />
トファイルに 転 送 することができます。<br />
-callgraph を 使 用 する 場 合 、この 情 報 は HTML ファイルに 保 存 されます。<br />
output_name.htmと 命 名 されたHTMLファイルが、 生 成 イメージと 同 じディレクトリ<br />
に 保 存 されます。<br />
armlink の 診 断 の 制 御<br />
以 下 のオプションを 使 用 して、armlink による 診 断 の 実 行 方 法 を 制 御 することができます。<br />
-errors<br />
-list<br />
-verbose<br />
-strict<br />
-unresolved<br />
-mangled<br />
-unmangled<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-7
armlink のコマンド 構 文<br />
2.2 armlink のコマンド 構 文<br />
注<br />
括 弧 を 使 用 するコマンドライン 引 数 の 場 合 、UNIX システムでは 逆 スラシュ 文 字 (\)<br />
を 用 いて 括 弧 文 字 をエスケープしなければならない 場 合 があります。<br />
以 下 は、armlink の 完 全 コマンド 構 文 です。<br />
armlink [-help] [-vsn] [-partial] [-output file] [-elf] [-reloc]<br />
[-ro-base address] [-ropi] [-rw-base address] [-rwpi] [-split] [-scatter file]<br />
[-debug|-nodebug] [-remove (RO/RW/ZI/DBG)|-noremove] [-entry location ]<br />
[-keep section-id] [-first section-id] [-last section-id] [-libpath pathlist]<br />
[-scanlib|-noscanlib] [-locals|-nolocals] [-callgraph] [-info topics] [-map]<br />
[-symbols] [-symdefs file] [-edit file] [-xref] [-xreffrom object(section)]<br />
[-xrefto object(section)] [-errors file] [-list file] [-verbose] [-unmangled<br />
|-mangled] [-match crossmangled] [-via file] [-strict] [-unresolved symbol]<br />
[-MI|-LI|-BI] [input-file-list]<br />
各 オプションの 説 明 :<br />
-help<br />
-vsn<br />
-partial<br />
-output file<br />
-elf<br />
頻 繁 に 使 用 される 複 数 のコマンドラインオプションの 一 覧 を 印<br />
字 します。<br />
armlink のバージョン 情 報 を 表 示 します。<br />
1 つの 実 行 イメージではなく 部 分 リンクされたオブジェクトを 作<br />
成 します。<br />
出 力 ファイルの 名 前 を 指 定 します。このファイルは、 部 分 リンク<br />
されたオブジェクトでも 実 行 イメージでも 構 いません。 出 力 ファ<br />
イルの 名 前 が 指 定 されていない 場 合 、armlink は 以 下 のデフォルト<br />
を 使 用 します。<br />
__image.axf 出 力 が 実 行 イメージの 場 合 。<br />
__object.o 出 力 が 部 分 リンクされたオブジェクトの 場<br />
合 。<br />
fileにパス 情 報 が 指 定 されていない 場 合 、このファイルは 現 在 の<br />
作 業 ディレクトリ 内 に 作 成 されます。パス 情 報 が 指 定 されている<br />
場 合 は、そのディレクトリがデフォルトの 出 力 ディレクトリにな<br />
ります。<br />
ELF 形 式 のイメージを 生 成 します。ELF は armlink がサポートし<br />
ている 唯 一 の 出 力 形 式 です。デフォルトにはこの 形 式 が 使 用 され<br />
ます。<br />
2-8 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
-reloc<br />
-ro-base address<br />
-ropi<br />
再 配 置 可 能 イメージを 作 成 します。<br />
再 配 置 可 能 イメージに 含 まれる 動 的 セグメントは、リンク 後 のイ<br />
メージの 再 配 置 に 使 用 できる 再 配 置 アドレスを 保 持 します。リン<br />
ク 後 の 再 配 置 を 示 すサンプルコードに、 拡 張 ROM 構 成 と 実 行 時<br />
の 動 的 ローディングが 含 まれます。<br />
イメージをリンク 時 のアドレスにロードする 場 合 は、armlink が 作<br />
成 する 再 配 置 可 能 イメージの 再 配 置 処 理 を 行 う 必 要 はなく、その<br />
イメージの 有 効 なデバッグデータを 得 ることができます。しか<br />
し、イメージをリンク 時 のアドレスとは 異 なるアドレスにロード<br />
して 再 配 置 処 理 を 行 った 場 合 には、そのイメージ 内 にあるすべて<br />
のデバッグデータが 無 効 になります。<br />
-reloc を 単 体 で 使 用 すると 単 純 タイプ 1 に 似 たイメージが 生 成<br />
されますが、その 1 つのロード 領 域 に RELOC 属 性 が 設 定 されま<br />
す。タイプ 1 のイメージについては、P. 3-14「タイプ 1: 単 一 ロー<br />
ド 領 域 と 連 続 出 力 領 域 」を 参 照 して 下 さい。<br />
-reloc -split の 組 み 合 わせを 使 用 すると 単 純 タイプ 3 に 似 た<br />
イメージが 生 成 されますが、この 場 合 は 2 つのロード 領 域 に<br />
RELOC 属 性 が 設 定 されます。タイプ 3 のイメージについては、<br />
P. 3-17「タイプ 3:2 ロード 領 域 と 不 連 続 出 力 領 域 」を 参 照 して 下<br />
さい。<br />
-split を 使 用 せずに -reloc -rw-base を 使 用 すると、エラー<br />
が 発 生 します。<br />
RO 出 力 セクションを 含 む 領 域 のロードアドレスと 実 行 アドレス<br />
の 両 方 を address に 設 定 します。address は、ワード 境 界 で 整<br />
列 させる 必 要 があります。このオプションを 指 定 していない 場 合<br />
は、デフォルトの RO ベースアドレス 0x8000 が 使 用 されます。<br />
RO 出 力 セクションを 含 むロード / 実 行 領 域 を 位 置 独 立 にします。<br />
このオプションを 使 用 しない 場 合 は、その 領 域 が 絶 対 領 域 として<br />
マーキングされます。 通 常 、 読 み 出 し 専 用 のどの 入 力 セクション<br />
も、 読 み 出 し 専 用 位 置 独 立 セクションである 必 要 があります。こ<br />
のオプションを 選 択 した 場 合 、armlink は 以 下 を 行 います。<br />
• セクション 間 の 再 配 置 が 可 能 であるかどうかをチェックし<br />
ます。<br />
• インタワーキングベニアなど、armlink が 生 成 したすべての<br />
コードが 読 み 出 し 専 用 の 位 置 独 立 コードであることを 確 認<br />
します。<br />
注<br />
armlink が 入 力 セクションの 処 理 を 終 了 するまで、<strong>ARM</strong> ツールは<br />
最 終 出 力 イメージが 読 み 出 し 専 用 の 位 置 独 立 イメージであるか<br />
どうかを 決 定 できません。したがって、コンパイラやアセンブラ<br />
に ROPI オプションを 指 定 した 場 合 でも、armlink が ROPI エラー<br />
メッセージを 発 行 することがあります。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-9
armlink のコマンド 構 文<br />
-rw-base address<br />
-rwpi<br />
RW 出 力 セクションを 含 む 領 域 の 実 行 アドレスを address に 設<br />
定 します。address はワード 境 界 であること。<br />
このオプションを -split と 共 に 使 用 すると、RW 出 力 セクショ<br />
ンを 含 む 領 域 のロードアドレスと 実 行 アドレスの 両 方 がaddress<br />
に 設 定 されます。<br />
RW/ZI 出 力 セクションを 含 むロード / 実 行 領 域 を 位 置 独 立 にしま<br />
す。このオプションを 使 用 しない 場 合 は、その 領 域 が 絶 対 領 域 と<br />
してマーキングされます。このオプションを 使 用 する 場 合 は、<br />
-rw-base に 値 を 指 定 する 必 要 があります。-rw-base が 指 定 さ<br />
れていない 場 合 は、-rw-base 0 とみなされます。 通 常 、 書 き 込<br />
み 可 能 な 各 入 力 セクションは、Read Only Position Independent セク<br />
ションである 必 要 があります。<br />
このオプションを 選 択 した 場 合 、armlink は 以 下 を 行 います。<br />
• 読 み 出 し - 書 き 込 み 実 行 領 域 への 入 力 セクションに PI 属 性<br />
が 設 定 されているかどうかをチェックします。<br />
• セクション 間 の 再 配 置 が 可 能 であるかどうかをチェックし<br />
ます。<br />
• RO 領 域 と RW 領 域 のコピー 時 または 初 期 化 時 に 使 用 される<br />
テーブルの 静 的 ベース 相 対 エントリアドレスを 生 成 します。<br />
注<br />
書 き 込 み 可 能 データに 位 置 独 立 属 性 が、コンパイラによって 設 定<br />
されることはありません。つまり、コンパイラやアセンブラに<br />
RWPI オプションを 指 定 した 場 合 でも、armlink はそのデータが<br />
RWPI ではないと 診 断 する 場 合 があります。<br />
-split<br />
RO 出 力 セクションと RW 出 力 セクションを 含 むデフォルトの<br />
ロード 領 域 を 2 つのロード 領 域 に 分 割 します。<br />
• RO 出 力 セクションを 含 む 領 域 :デフォルトのロードアドレ<br />
スは 0x8000 ですが、-ro-base オプションを 使 用 して 別<br />
のアドレスを 指 定 することができます。<br />
• RW 出 力 セクションを 含 む 領 域 :この 領 域 のロードアドレス<br />
は -rw-base オプションによって 指 定 されます。このオプ<br />
ションを 使 用 するには、-rw-base に 値 を 指 定 する 必 要 が<br />
あります。-rw-base が 指 定 されていない 場 合 は、<br />
-rw-base 0 とみなされます。<br />
2-10 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
-scatter file<br />
file に 書 かれた 分 散 ローディングの 記 述 を 使 用 してイメージの<br />
メモリマップを 作 成 します。この 記 述 により、イメージ 内 の 様 々<br />
な 領 域 とセクションのグループ 化 および 配 置 情 報 を 用 意 するこ<br />
とができます。 詳 細 については、 第 5 章 「 分 散 ローディング 記 述<br />
ファイルの 使 用 」を 参 照 して 下 さい。<br />
注<br />
このオプションを 使 用 する 場 合 は、スタックとヒープの 初 期 化 関<br />
数 __user_initial_stackheap() を 再 実 装 する 必 要 がありま<br />
す。<br />
-debug<br />
-nodebug<br />
出 力 ファイルにデバッグ 情 報 を 付 加 します。このデバッグ 情 報 に<br />
は、デバッグ 入 力 セクションとシンボル / ストリングテーブルが<br />
含 まれています。このオプションはデフォルトで 設 定 されます。<br />
出 力 ファイルにデバッグ 情 報 を 付 加 しません。このオプションを<br />
使 用 するとイメージサイズは 小 さくなりますが、ソースレベルで<br />
のデバッグが 不 可 能 になります。armlink は、 入 力 オブジェクトと<br />
ライブラリメンバ 内 で 検 出 したすべてのデバッグ 入 力 セクショ<br />
ンを 破 棄 し、イメージがデバッガにロードされるときにシンボル<br />
/ ストリングテーブルを 付 加 しません。これによる 影 響 を 受 ける<br />
のはデバッガロード 時 におけるイメージサイズのみであり、ター<br />
ゲットにダウンロードされるバイナリイメージのサイズには 影<br />
響 しません。<br />
イメージではなく 部 分 リンクされたオブジェクトを 作 成 する 場<br />
合 、armlink は 入 力 オブジェクト 内 で 検 出 したデバッグ 入 力 セク<br />
ションを 破 棄 しますが、 部 分 リンクされたオブジェクト 内 にシン<br />
ボル / ストリングテーブルを 作 成 します。<br />
注<br />
<strong>fromELF</strong> を 使 用 する 場 合 は、-nodebug を 使 用 しないで 下 さい。<br />
デバッグ 情 報 がないイメージを 作 成 した 場 合 :<br />
• <strong>fromELF</strong> を 使 用 しても、そのイメージを 他 のファイル 形 式<br />
に 変 換 することができません。<br />
• <strong>fromELF</strong> が 有 意 な 逆 アセンブリリストを 作 成 することがで<br />
きません。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-11
armlink のコマンド 構 文<br />
-remove (RO/RW/ZI/DBG)<br />
入 力 セクション 上 の 未 使 用 セクションを 削 除 し、イメージから 未<br />
使 用 セクションを 削 除 します。イメージのエントリポイントを 含<br />
んでいる、あるいは 使 用 セクションから 参 照 される 入 力 セクショ<br />
ンは、 使 用 するセクションとみなされます。P. 3-12「 未 使 用 セク<br />
ションの 削 除 」を 参 照 して 下 さい。<br />
注 意<br />
-remove を 使 用 する 場 合 は、 例 外 ハンドラを 削 除 しないように 注<br />
意 して 下 さい。この 場 合 は -keep オプションを 使 用 して 例 外 ハ<br />
ンドラを 識 別 するか、ENTRY ディレクティブを 使 用 して 例 外 ハン<br />
ドラにエントリポイントのラベルを 付 けて 下 さい。<br />
また、セクション 属 性 修 飾 子 を 使 用 すれば、 未 使 用 セクションの<br />
削 除 プロセスをより 厳 密 に 制 御 することができます。この 場 合 は<br />
以 下 の 修 飾 子 を 使 用 することができます。<br />
RO RO タイプの 全 ての 未 使 用 セクションが 削 除 されます。<br />
RW RW タイプの 全 ての 未 使 用 セクションが 削 除 されます。<br />
ZI ZI タイプの 全 ての 未 使 用 セクションが 削 除 されます。<br />
DBG DEBUG タイプの 全 ての 未 使 用 セクションが 削 除 され<br />
ます。<br />
上 記 の 修 飾 子 を 使 用 する 場 所 と 順 序 に 制 約 はありませんが、 修 飾<br />
子 は 必 ず 括 弧 () で 囲 み、スラッシュ / で 区 切 る 必 要 があります。<br />
デフォルトには -remove (RO/RW/ZI/DBG) が 使 用 されます。<br />
セクション 属 性 修 飾 子 が 指 定 されていない 場 合 は、 全 ての 未 使 用<br />
セクションが 削 除 されます。-remove は<br />
-remove (RO/RW/ZI/DBG) と 等 価 です。<br />
-noremove<br />
-entry location<br />
このオプションを 使 用 すると、 入 力 セクション 上 の 未 使 用 セク<br />
ションの 削 除 が 実 行 されません。 最 終 イメージ 内 の 入 力 セクショ<br />
ンは 未 使 用 セクションも 含 めて 全 て 保 持 されます。<br />
イメージの 固 有 の 初 期 エントリポイントを 指 定 します。イメージ<br />
には 複 数 のエントリポイントが 含 まれている 可 能 性 があります<br />
が、このコマンドを 使 用 して 指 定 された 初 期 エントリポイント<br />
は、ローダが 使 用 する 実 行 ファイルヘッダにストアされます。コ<br />
マンドラインでこのオプションを 使 用 できるのは 1 箇 所 だけで<br />
す。イメージがロードされるとき、<strong>ARM</strong> デバッガはこのエント<br />
リアドレスを 使 用 して PC を 初 期 化 します。 初 期 エントリポイン<br />
トは、 以 下 の 条 件 を 満 たしている 必 要 があります。<br />
• イメージのエントリポイントが 実 行 領 域 内 に 存 在 する。<br />
• その 実 行 領 域 が 非 オーバレイ 領 域 であり、かつルート 実 行<br />
領 域 である(ロードアドレス= 実 行 アドレス)。<br />
2-12 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
-keep section-id<br />
location を 以 下 のいずれかと 置 き 換 えます。<br />
entry_address<br />
数 値 を 指 定 します。<br />
例 :<br />
-entry 0x0<br />
symbol イメージのエントリポイントに symbol のアドレスを<br />
指 定 します。<br />
例 :<br />
-entry int_handler<br />
symbolの 定 義 が 複 数 存 在 すると、armlinkはエラーメッ<br />
セージを 生 成 します。<br />
offset+object(section)<br />
イメージのエントリポイントを、 特 定 の object に 含<br />
まれる section 内 の offset の 位 置 に 指 定 します。<br />
例 :<br />
-entry 8+startup(startupseg)<br />
-entry への 引 数 にはスペースを 入 れないで 下 さい。<br />
input section とオブジェクト 名 のマッチングにお<br />
いて、 大 文 字 ・ 小 文 字 は 区 別 されません。 以 下 の 簡 略<br />
化 された 表 記 を 使 用 することができます。<br />
• object(section) と 表 記 すれば、offset=0 と<br />
みなします。<br />
• 入 力 セクションが 1 つしかないとき、object の<br />
み 表 記 できます。この 形 式 を 使 用 した 場 合 に、<br />
object 内 に 複 数 の 非 デバッグ 入 力 セクション<br />
が 存 在 すると、armlink はエラーメッセージを 生<br />
成 します。<br />
未 使 用 セクションを 削 除 する 処 理 に 対 して、 削 除 してはならない<br />
入 力 セクションを 指 定 します。P. 3-5「イメージのメモリマップの<br />
指 定 」を 参 照 して 下 さい。-keep へのどの 形 式 の section-id<br />
引 数 にも、ワイルドカード * および?を 使 用 することができます。<br />
section-id を 以 下 のいずれかに 置 き 換 えて 下 さい。<br />
symbol 未 使 用 セクションを 削 除 する 処 理 に 対 して、symbol<br />
が 定 義 されている 入 力 セクションを 保 持 するように 指<br />
定 します。symbol の 定 義 が 複 数 存 在 する 場 合 、<br />
symbol を 定 義 する 全 ての 入 力 セクションが 同 様 に 処<br />
理 されます。<br />
例 :<br />
-keep int_handler<br />
_handler で 終 わるシンボルを 定 義 する 全 てのセク<br />
ションを 保 存 するには、 以 下 を 使 用 します。<br />
-keep *_handler<br />
このコマンドは、コマンドライン 上 で 何 度 でも 使 用 す<br />
ることができます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-13
armlink のコマンド 構 文<br />
object(section)<br />
未 使 用 セクションを 削 除 する 処 理 に 対 して、object に<br />
ある section を 削 除 しないように 指 定 します。 入 力 セ<br />
クションとオブジェクト 名 のマッチングにおいて、 大<br />
文 字 ・ 小 文 字 は 区 別 されません。 例 えば、vectors.o<br />
オブジェクトの vect セクションを 保 持 するには 以 下<br />
のコマンドを 使 用 します。<br />
-keep vectors.o(vect)<br />
vectors.o オブジェクトに 含 まれ、セクション 名 の 先<br />
頭 3 文 字 が vec である 全 てのセクションを 保 持 するに<br />
は、 以 下 のコマンドを 使 用 します。<br />
-keep vectors.o(vec*)<br />
object<br />
このコマンドは、コマンドライン 上 で 何 度 でも 使 用 す<br />
ることができます。<br />
未 使 用 セクションを 削 除 するとき、object にある 1 つ<br />
の 入 力 セクションを 保 持 するように 指 定 します。オブ<br />
ジェクト 名 のマッチングが 行 われるとき、 大 文 字 ・ 小<br />
文 字 は 区 別 されません。この 省 略 形 を 使 用 したときに<br />
objectに 複 数 の 入 力 セクションが 存 在 すると、armlink<br />
はエラーメッセージを 生 成 します。<br />
例 :<br />
-keep dspdata.o<br />
名 前 が dsp で 始 まる 各 オブジェクトの 1 つの 入 力 セク<br />
ションを 保 持 するには、 以 下 のコマンドを 使 用 します。<br />
-keep dsp*.o<br />
このオプションは、コマンドライン 上 で 何 度 でも 使 用<br />
することができます。<br />
-first section-id 選 択 された 入 力 セクションを 実 行 領 域 内 に 最 初 に 配 置 します。 例<br />
えば、このオプションを 使 用 することによって、リセットおよび<br />
割 り 込 みベクタを 含 むセクションを 最 初 にイメージ 内 に 配 置 す<br />
ることができます。section-id を 以 下 のいずれかに 置 き 換 えて<br />
下 さい。<br />
symbol symbol を 定 義 するセクションを 選 択 します。 複 数 のセ<br />
クションを 最 初 に 配 置 することは 不 可 能 なため、 複 数<br />
の 定 義 を 持 つシンボルを 指 定 することはできません。<br />
例 :<br />
-first reset<br />
object(section)<br />
objectからsectionを 選 択 します。objectとその 後<br />
の 開 括 弧 との 間 にはスペースを 入 れないで 下 さい。<br />
例 :<br />
-first init.o(init)<br />
2-14 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
object<br />
object にある 1 つの 入 力 セクションを 選 択 します。こ<br />
の 省 略 形 を 使 用 したときに 複 数 の 入 力 セクションが 存<br />
在 すると、armlink はエラーメッセージを 生 成 します。<br />
例 :<br />
-first init.o<br />
注<br />
分 散 ローディングを 使 用 する 場 合 は、コマンドラインで 指 定 され<br />
た -FIRST の 代 わりに 分 散 ローディング 記 述 ファイル 内 の<br />
+FIRST を 優 先 します。 分 散 ローディングファイルが 使 用 される<br />
と、armlink は -first と -last が 無 視 されることを 警 告 します。<br />
-first を 使 用 すると、 最 初 に RO を、 次 に RW を、 最 後 に ZI を 配<br />
置 する、 領 域 内 の 出 力 セクションの 基 本 属 性 ソート 順 序 を 変 更 で<br />
きません。 対 象 領 域 に RO セクションが 存 在 する 場 合 は、RW セ<br />
クションまたは ZI セクションを 最 初 に 配 置 することができませ<br />
ん。 対 象 領 域 に RO セクションまたは RW セクションが 存 在 する<br />
場 合 は、ZI セクションを 最 初 に 配 置 することはできません。<br />
異 なる 2 つのセクションの 両 方 を 同 一 実 行 領 域 内 の 最 初 に 配 置 す<br />
ることはできないため、このオプションは 1つしか 使 用 できません。<br />
-last section-id<br />
選 択 された 入 力 セクションを 実 行 領 域 の 最 後 に 配 置 します。 例 え<br />
ば、このオプションを 使 用 することで、チェックサムを 含 む 入 力<br />
セクションを RW セクション 内 の 最 後 に 強 制 的 に 配 置 することが<br />
できます。section-id を 以 下 のいずれかに 置 き 換 えて 下 さい。<br />
symbol symbol を 定 義 するセクションを 選 択 します。 最 後 に 複<br />
数 のセクションを 配 置 することは 不 可 能 なため、 複 数<br />
の 定 義 を 持 つシンボルを 指 定 することはできません。<br />
例 :<br />
-last checksum<br />
object(section)<br />
objectからsectionを 選 択 します。objectとその 後<br />
の 開 括 弧 との 間 にはスペースを 入 れないで 下 さい。<br />
例 :<br />
-last checksum.o(check)<br />
object object から 1 つの 入 力 セクションを 選 択 します。<br />
objectに 複 数 の 入 力 セクションがある 場 合 、armlinkは<br />
エラーメッセージを 生 成 します。<br />
注<br />
分 散 ローディングを 使 用 する 場 合 は、コマンドラインで 指 定 され<br />
た -LAST の 代 わりに 分 散 ローディング 記 述 ファイル 内 の +LAST<br />
を 優 先 します。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-15
armlink のコマンド 構 文<br />
-last を 使 用 すると、 最 初 に RO を、 次 に RW を、 最 後 に ZI を 配 置<br />
する、 領 域 内 の 出 力 セクションの 基 本 属 性 ソート 順 序 をオーバラ<br />
イドすることができなくなります。 対 象 領 域 に ZI セクションが 存<br />
在 する 場 合 、RW セクションを 最 後 に 配 置 することはできません。<br />
対 象 領 域 に RW セクションまたは ZI セクションが 存 在 する 場 合 、<br />
RO セクションを 最 後 に 配 置 することはできません。<br />
異 なる 2 つのセクションの 両 方 を 同 一 実 行 領 域 内 の 最 後 に 配 置 す<br />
ることはできないため、このオプションは1つしか 使 用 できません。<br />
-libpath pathlist <strong>ARM</strong> 標 準 C/C++ ライブラリの 探 索 に 使 用 されるパスのリストを<br />
指 定 します。<br />
注<br />
このオプションがユーザライブラリの 探 索 に 影 響 を 及 ぼすこと<br />
はありません。<br />
これらのパスは、<strong>ARM</strong>LIB 環 境 変 数 によって 指 定 されたパスを<br />
オーバライドします。pathlist は、 必 要 な <strong>ARM</strong> ライブラリの<br />
検 索 のみに 使 用 されるパス path1, path2,... pathn をカン<br />
マで 区 切 ってリストにしたものです。<strong>ARM</strong> ライブラリを 含 むディ<br />
レクトリのデフォルトパスは、<strong>ARM</strong>LIB 環 境 変 数 によって 指 定 さ<br />
れます。ライブラリのインクルードについては、P. 6-3「ライブラ<br />
リの 検 索 、 選 択 、スキャン」を 参 照 して 下 さい。<br />
-scanlib<br />
-noscanlib<br />
-locals<br />
-nolocals<br />
参 照 を 解 決 するデフォルトライブラリ( 標 準 <strong>ARM</strong> C/C++ ライブ<br />
ラリ)のスキャンをイネーブルします。このオプションはデフォ<br />
ルトで 設 定 されています。<br />
リンク 時 にデフォルトライブラリをスキャンしません。<br />
実 行 イメージの 作 成 時 に、 出 力 シンボルテーブルにローカルシン<br />
ボルを 追 加 するようにリンカに 命 令 します。このオプションはデ<br />
フォルトで 設 定 されています。<br />
実 行 イメージの 作 成 時 に、 出 力 シンボルテーブルにローカルシン<br />
ボルを 追 加 しないようにリンカに 命 令 します。 出 力 シンボルテー<br />
ブルのサイズを 小 さくしたい 場 合 には、このオプションを 使 用 す<br />
ることによって 最 適 化 を 図 ることができます。<br />
2-16 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
-callgraph<br />
関 数 のスタティックコールグラフを HTML 形 式 で 作 成 します。こ<br />
のコールグラフから、イメージ 内 の 全 ての 関 数 の 定 義 情 報 と 参 照<br />
情 報 を 得 ることができます。 各 関 数 func について、コールグラ<br />
フは 以 下 を 示 します。<br />
• 関 数 がコンパイルされるときのプロセッサ 状 態 (<strong>ARM</strong> また<br />
は Thumb)<br />
• func を 呼 び 出 す 関 数 の 集 合<br />
• func によって 呼 び 出 される 関 数 の 集 合<br />
• func のアドレスがイメージ 内 で 使 用 される 回 数<br />
さらに、コールグラフから 以 下 の 関 数 を 識 別 することができます。<br />
• インタワーキングベニアを 通 じて 呼 び 出 される 関 数<br />
• イメージ 外 で 定 義 される 関 数<br />
• 未 定 義 のままであっても 許 される 関 数 ( 弱 い 参 照 )<br />
スタティックコールグラフからは、 以 下 のスタック 使 用 情 報 も 得<br />
ることができます。<br />
• 各 関 数 が 使 用 するスタックフレームのサイズ<br />
• 対 象 関 数 が 全 てのコールシーケンスを 通 じて、つまりコー<br />
ルグラフの 非 周 期 ファンクションコールを 通 じて 使 用 する<br />
スタックの 最 大 サイズ<br />
-info topics<br />
指 定 されたトピックに 関 する 情 報 を 印 字 します。topics は 一 連<br />
のトピックキーワードをカンマで 区 切 ったものです。トピック<br />
キーワードには 以 下 のいずれかを 使 用 することができます。<br />
sizes イメージ 内 の 各 入 力 オブジェクトおよびライブラリメ<br />
ンバに 使 用 されるコードとデータ(RO データ、RW<br />
データ、ZI データ、デバッグデータ)のサイズをリス<br />
トします。このオプションを 使 用 すると、-info<br />
sizes,totals が 暗 黙 に 定 義 されます。<br />
totals 入 力 オブジェクトおよびライブラリに 使 用 されるコー<br />
ドとデータ(RO データ、RW データ、ZI データ、デ<br />
バッグデータ)のサイズの 合 計 を 示 します。<br />
veneers armlink が 生 成 するベニアの 詳 細 を 示 します。ベニアの<br />
詳 細 については、P. 3-13「ベニアの 生 成 」を 参 照 して<br />
下 さい。<br />
unused -removeを 使 用 したことによってイメージから 削 除 さ<br />
れた 全 未 使 用 セクションをリストします。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-17
armlink のコマンド 構 文<br />
注<br />
リスト 内 のキーワード 間 にはスペースを 入 れないで 下 さい。<br />
正 しい 入 力 の 例 :<br />
-info sizes,totals<br />
間 違 った 入 力 の 例 :<br />
-info sizes, totals<br />
-map<br />
-symbols<br />
-symdefs file<br />
-edit file<br />
-xref<br />
イメージマップを 作 成 します。このイメージマップは、デバッガ<br />
およびリンカが 生 成 した 入 力 セクションを 含 め、イメージ 内 の 各<br />
ロード 領 域 、 実 行 領 域 、 入 力 セクションのアドレスとサイズを 保<br />
持 します。<br />
リンクステップで 使 用 される 各 ローカル / グローバルシンボルと<br />
その 値 をリストします。この 中 にはリンカが 生 成 したシンボルも<br />
含 まれます。<br />
出 力 イメージからのグローバルシンボルの 定 義 を 含 んだシンボ<br />
ル 定 義 ファイルを 作 成 します。<br />
デフォルトでは、 全 てのグローバルシンボルが symdefs ファイル<br />
に 書 き 込 まれます。file が 既 に 存 在 する 場 合 、リンカは 既 存 の<br />
symdefs ファイルにリストされたシンボルだけを 出 力 します。<br />
fileがパス 情 報 のないままで 指 定 されている 場 合 、リンカは 出 力<br />
イメージが 書 き 込 まれるディレクトリ 内 でそのファイルを 検 索<br />
します。ファイルが 検 出 されない 場 合 は、そのディレクトリ 内 に<br />
作 成 されます。<br />
このシンボル 定 義 ファイルは、 別 のイメージにリンクするときの<br />
入 力 として 使 用 することができます。 詳 細 については、P. 4-5「 別<br />
のイメージに 含 まれるシンボルへのアクセス」を 参 照 して 下 さい。<br />
このオプションを 使 用 して、 出 力 バイナリのシンボルテーブルを<br />
編 集 するコマンドを 含 んだ、ステアリングファイルを 指 定 するこ<br />
とができます。ステアリングファイル 内 には 以 下 のコマンドを 指<br />
定 することができます。<br />
• グローバルシグナルを 隠 蔽 するコマンド。このオプション<br />
を 使 用 して、オブジェクトファイル 内 の 特 定 のグローバル<br />
シンボルを 隠 蔽 することができます。 隠 蔽 されたシンボル<br />
は 公 開 されません。<br />
• グローバルシンボルに 別 名 を 付 けるコマンド。このオプ<br />
ションを 使 用 して、シンボル 名 の 競 合 を 解 消 することがで<br />
きます。<br />
ステアリングファイルの 構 文 については、P. 4-9「グローバルシン<br />
ボルの 隠 蔽 と 再 命 名 」を 参 照 して 下 さい。<br />
入 力 セクション 間 の 全 ての 相 互 参 照 をリストします。<br />
2-18 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
-xreffrom object(section)<br />
objectの 入 力 sectionから 別 の 入 力 セクションへの 相 互 参 照 を<br />
リストします。このリストは -xref を 使 用 することによって 得 ら<br />
れるリストのサブセットであり、 特 定 の 入 力 セクションからの 参<br />
照 を 調 べたいときに 便 利 です。このオプションを 複 数 使 用 して、<br />
複 数 入 力 セクションからの 参 照 をリストさせることができます。<br />
-xrefto object(section)<br />
他 の 入 力 セクションから object に 含 まれる 入 力 section への<br />
相 互 参 照 をリストします。このリストは -xref を 使 用 すること<br />
によって 得 られるリストのサブセットであり、 特 定 の 入 力 セク<br />
ションへの 参 照 を 調 べたいときに 便 利 です。このオプションを 複<br />
数 使 用 して、 複 数 入 力 セクションへの 参 照 をリストさせることが<br />
できます。<br />
-errors file 標 準 エラーストリームからの 診 断 を file へ 転 送 します。<br />
-list file<br />
-verbose<br />
-unmangled<br />
-mangled<br />
-info、-map、-symbols、-xref、-xreffrom、-xrefto の<br />
各 コマンド 出 力 からの 診 断 を file へ 転 送 します。<br />
file がパス 情 報 のないままで 指 定 されている 場 合 、そのファイル<br />
は 出 力 イメージが 書 き 込 まれる 出 力 ディレクトリ 内 に 作 成 され<br />
ます。<br />
インクルードされるオブジェクトと、それらのオブジェクトが 取<br />
得 されるライブラリを 含 め、リンク 操 作 に 関 する 詳 しい 情 報 を 印<br />
字 します。<br />
診 断 メッセージ 内 、ならびに -xref、-xreffrom、-xrefto、<br />
-symbols の 各 オプションによって 作 成 されたリスト 内 に、 符 号<br />
化 されていないC++シンボル 名 を 表 示 するようにリンカに 指 示 し<br />
ます。<br />
このオプションが 選 択 されている 場 合 、リンカは C++ シンボル 名<br />
がソースコード 表 記 のように 表 示 されるよう、これらのシンボル<br />
名 を 復 号 化 します。このオプションはデフォルトです。<br />
診 断 メッセージ 内 、ならびに -xref、-xreffrom、-xrefto、<br />
-symbols の 各 オプションによって 作 成 されたリスト 内 に、 符 号<br />
化 された C++ シンボル 名 を 表 示 するようにリンカに 指 示 します。<br />
このオプションが 選 択 されている 場 合 、リンカは C++ シンボル 名<br />
を 復 号 化 しません。シンボル 名 は、オブジェクトのシンボルテー<br />
ブルに 出 現 する 形 で 表 示 されます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-19
armlink のコマンド 構 文<br />
-match crossmangled<br />
以 下 の 組 み 合 わせのマッチングを 行 うようにリンカに 指 示 します。<br />
• 復 号 化 されたシンボルへの 参 照 と、 符 号 化 された 定 義<br />
• 符 号 化 されたシンボルへの 参 照 と、 復 号 化 された 定 義<br />
ライブラリとマッチングは 以 下 のように 行 われます。<br />
• ライブラリメンバが 符 号 化 された 定 義 を 定 義 し、 復 号 化 さ<br />
れた 未 解 決 参 照 があるとき、この 参 照 を 満 たすためにその<br />
メンバがロードされます。<br />
• ライブラリメンバが 復 号 化 された 定 義 を 定 義 し、 符 号 化 さ<br />
れた 未 解 決 参 照 があるとき、この 参 照 を 満 たすためにその<br />
メンバがロードされます。<br />
注<br />
このオプションは 部 分 リンクに 使 用 しても 作 用 しません。 部 分 オ<br />
ブジェクトは、たとえ 符 号 化 された 定 義 が 存 在 しても、 復 号 化 さ<br />
れたシンボルへの 全 ての 未 解 決 参 照 を 保 持 します。マッチングは<br />
最 終 リンクステップにおいてのみ 実 行 されます。<br />
-via file<br />
入 力 ファイル 名 およびリンカオプションの 詳 細 リストを file か<br />
ら 読 み 込 みます。<br />
armlink のコマンドラインには 複 数 の -via オプションを 入 力 する<br />
ことができます。また、-via オプションは via ファイル 内 に 含 め<br />
ることもできます。via ファイルの 記 述 に 関 する 詳 しい 情 報 につい<br />
ては、ADS コンパイラ / ライブラリガイドを 参 照 して 下 さい。<br />
-strict<br />
警 告 ではなく、エラーとして 障 害 を 引 き 起 こす 可 能 性 のある 条 件<br />
を 通 知 するようにリンカに 指 示 します。<br />
-unresolved symbol<br />
未 定 義 シンボルと、symbol のグローバル 定 義 とのマッチングを<br />
行 います。symbol は、 定 義 済 みのグローバルシンボルである 必<br />
要 があります。シンボルが 未 定 義 シンボルとしてリストされる<br />
と、リンクは、 失 敗 です。このオプションを 使 用 すれば、 見 当 ら<br />
ない 関 数 への 各 参 照 をダミー 関 数 とのマッチングを 行 うことに<br />
よって 部 分 的 に 実 装 されたシステムをテストすることが 可 能 と<br />
なるため、トップダウン 方 式 の 開 発 では 特 に 便 利 です。<br />
このオプションを 使 用 しても 警 告 は 表 示 されません。<br />
2-20 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
armlinkのコマンド 構 文<br />
input-file-list オブジェクトまたはライブラリをスペースで 区 切 ってリストし<br />
たものです。<br />
オブジェクトファイルの 特 殊 タイプであるsymdefファイルをこの<br />
リストに 入 れることで、 以 前 に 生 成 されたイメージファイルのグ<br />
ローバルシンボルの 値 を 得 ることができます。 詳 細 については、<br />
P. 4-5「 別 のイメージに 含 まれるシンボルへのアクセス」を 参 照 し<br />
て 下 さい。<br />
入 力 ファイルリスト 内 でライブラリを 使 用 する 方 法 には 以 下 の 2<br />
通 りがあります。<br />
• ライブラリから 抽 出 し、 独 立 オブジェクトとしてイメージ<br />
に 追 加 する 特 定 のメンバを 指 定 する。 例 えば、 入 力 ファイ<br />
ルリスト 内 にmystring.lib(strcmp.o)と 指 定 すること<br />
ができます。<br />
• 非 弱 な 未 解 決 参 照 を 解 決 してくれるライブラリのメンバを<br />
抽 出 して、 追 加 すべきライブラリをライブラリリストに 指<br />
定 する。 例 えば、 入 力 ファイルリスト 内 に mystring.lib<br />
と 指 定 することができます。armlink がデフォルトのライブ<br />
ラリディレクトリをスキャンし、ほぼ 一 致 する 使 用 可 能 な<br />
ライブラリを 選 択 すると、armlink によって 暗 黙 的 にこのラ<br />
イブラリが、このライブラリリストに 追 加 されます。この<br />
リストに 含 まれるライブラリのメンバは、それらが 非 弱 な<br />
未 解 決 参 照 を 解 決 する 場 合 にのみ、イメージに 追 加 されま<br />
す。 詳 細 については、P. 6-3「ライブラリの 検 索 、 選 択 、ス<br />
キャン」を 参 照 して 下 さい。<br />
armlink は、 以 下 の 順 序 で 入 力 ファイルリストを 処 理 します。<br />
1. オブジェクトをイメージに 無 条 件 で 追 加 する。<br />
2. パターンを 使 用 してライブラリから 選 択 したメンバを、オ<br />
ブジェクトであるかのようにイメージに 無 条 件 で 追 加 す<br />
る。 例 :<br />
armlink main.o mylib(stdio.o) mylib(a*.o).<br />
全 ての a*.o オブジェクトおよび stdio.o を 無 条 件 で 追 加<br />
します。<br />
3. 後 で 残 りの 非 弱 な 未 解 決 参 照 の 解 決 に 使 用 されるライブラ<br />
リをライブラリストに 追 加 する。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 2-21
armlink のコマンド 構 文<br />
2-22 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
第 3 章<br />
基 本 リンカ 機 能<br />
本 章 では、armlink の 基 本 機 能 について 説 明 します。 本 章 は 以 下 のセクションから 構 成<br />
されています。<br />
• イメージ 構 造 の 指 定 :P. 3-2<br />
• セクションの 配 置 :P. 3-8<br />
• 最 適 化 と 修 正 :P. 3-12<br />
• コマンドラインオプションを 使 用 した 単 純 イメージの 作 成 :P. 3-14<br />
より 高 度 なリンカ 機 能 については、 以 下 のセクションを 参 照 して 下 さい。<br />
シンボルへのアクセス<br />
第 4 章 「イメージシンボルへのアクセス」<br />
分 散 ローディング 第 5 章 「 分 散 ローディング 記 述 ファイルの 使 用 」<br />
ライブラリ 第 6 章 「ライブラリの 作 成 と 使 用 」<br />
形 式 の 変 更 第 7 章 「<strong>fromELF</strong> の 使 用 」<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-1
基 本 リンカ 機 能<br />
3.1 イメージ 構 造 の 指 定<br />
イメージの 構 造 は 以 下 によって 定 義 されます。<br />
• それを 構 成 する 領 域 と 出 力 セクションの 数<br />
• イメージがロードされるときの、 上 記 の 領 域 とセクションのメモリ 内 における<br />
位 置<br />
• イメージが 実 行 されるときの、 上 記 の 領 域 とセクションのメモリ 内 における 位 置<br />
3.1.1 オブジェクトとイメージのビルディングブロック<br />
実 行 ファイルにストアされたイメージは、イメージ、 領 域 、 出 力 セクション、 入 力 セ<br />
クションから 成 る 階 層 から 構 成 されています。<br />
• 1つのイメージは、1 つ 以 上 の 領 域 から 構 成 されています。 各 領 域 は、1 つ 以 上 の<br />
出 力 セクションから 構 成 されています。<br />
• 各 出 力 セクションには、1 つ 以 上 の 入 力 セクションが 含 まれています。<br />
• 入 力 セクションには、オブジェクトファイル 内 のコードおよびデータ 情 報 が 含 ま<br />
れています。<br />
P. 3-3 図 3-1は、 領 域 、 出 力 セクションならびに 入 力 セクション 間 の 関 係 を 示 しています。<br />
3-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
基 本 リンカ 機 能<br />
図 3-1 イメージのビルディングブロック<br />
入 力 セクション<br />
入 力 セクションには、コードまたは 初 期 化 データを 保 持 しているものと、<br />
初 期 化 されていないメモリ、あるいはイメージ 実 行 前 にゼロを 設 定 する<br />
必 要 があるメモリの 断 片 を 記 述 するものがあります。 入 力 セクションに<br />
は、RO、RW、ZI のいずれかの 属 性 を 設 定 することができます。armlink<br />
はこれらの 属 性 を 使 用 して 入 力 セクションをグループ 化 し、 出 力 セク<br />
ションまたは 出 力 領 域 と 呼 ばれる 大 きなビルディングブロックを 構 成 し<br />
ます。<br />
出 力 セクション<br />
1 つの 出 力 セクションは、RO、RW、ZI のうちで 同 じ 属 性 を 持 った、 連<br />
続 する 一 連 の 入 力 セクションから 構 成 されます。 出 力 セクションは、そ<br />
れを 構 成 する 入 力 セクションと 同 じ 属 性 を 持 ちます。これらの 入 力 セク<br />
ションは、その 出 力 セクション 内 において P. 3-8「セクションの 配 置 」で<br />
説 明 する 規 則 にしたがってソートされます。<br />
領 域<br />
1 つの 領 域 は、1 ~ 3 つの 連 続 する 出 力 セクションから 構 成 されます。 領<br />
域 内 の 出 力 セクションは、 属 性 にしたがってソートされます。 最 初 に RO<br />
出 力 セクション、 次 に RW 出 力 セクション、 最 後 に ZI 出 力 セクションが<br />
配 置 されます。 通 常 、 領 域 は ROM、RAM、ペリフェラルなどの 物 理 メ<br />
モリデバイスにマップされます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-3
基 本 リンカ 機 能<br />
3.1.2 イメージのロードビューと 実 行 ビュー<br />
イメージ 領 域 は、ロード 時 にシステムのメモリマップに 配 置 されます。イメージを 実<br />
行 するには、その 前 にいくつかの 領 域 を 実 行 アドレスへ 移 動 し、ZI 出 力 セクションを<br />
作 成 しなければならない 場 合 があります。 例 えば、 初 期 化 された RW データは、ROM<br />
内 のロードアドレスからRAM 内 の 実 行 アドレスにコピーしなければならない 場 合 があ<br />
ります。<br />
イメージのメモリマップには 異 なる 2 つのビューがあります( 図 3-2)。<br />
ロードビュー<br />
実 行 ビュー<br />
このビューは、イメージがメモリにロードされるとき、すなわち<br />
イメージ 実 行 開 始 前 のアドレスに 基 づいて 各 領 域 と 各 セクショ<br />
ンを 表 します。<br />
このビューは、イメージ 実 行 中 におけるアドレスに 基 づいて 各 領<br />
域 と 各 セクションを 表 します。<br />
図 3-2 ロード 時 と 実 行 時 のメモリマップ<br />
表 3-1 は、ロードビューと 実 行 ビューの 比 較 を 示 しています。<br />
表 3-1<br />
ロード<br />
説 明<br />
実 行<br />
説 明<br />
ロード<br />
アドレス<br />
イメージの 実 行 開 始 前 まで、そのイ<br />
メージ 内 のセクションまたは 領 域 が<br />
ロードされているメモリ 内 のアドレ<br />
ス。セクションまたは 非 ルート 領 域 の<br />
ロードアドレスは、 実 行 アドレスと 異<br />
なる 場 合 があります。<br />
実 行 アドレス<br />
イメージの 実 行 中 に、そのイメージ 内 の<br />
セクションまたは 領 域 が 位 置 するアド<br />
レス。<br />
ロード 領 域 ロードアドレス 空 間 内 の 領 域 。 実 行 領 域 実 行 アドレス 空 間 内 の 領 域 。<br />
3-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
基 本 リンカ 機 能<br />
3.1.3 イメージのメモリマップの 指 定<br />
1 つのイメージを 構 成 する 領 域 および 出 力 セクションの 数 に 制 限 はありません。これら<br />
の 領 域 がいくつあっても、 異 なるロードアドレスと 実 行 アドレスを 割 り 当 てることが<br />
できます。イメージのメモリマップを 構 成 するには、armlink に 以 下 に 関 する 情 報 を 与<br />
える 必 要 があります。<br />
グループ 化 入 力 セクションを 出 力 セクションと 出 力 領 域 にグループ 化 する 方 法 。<br />
配 置 メモリマップ 内 におけるイメージ 領 域 の 位 置 。<br />
イメージのメモリマップの 複 雑 度 により、この 情 報 は 以 下 の 2 つの 方 法 で armlink に 渡<br />
すことができます。<br />
コマンドラインオプションの 使 用<br />
イメージ 内 のロード 領 域 が 1 ~ 2 つで、 実 行 領 域 が 3 つまでしかないよ<br />
うな 単 純 なケースには、 以 下 のオプションを 使 用 することができます。<br />
• -ro-base<br />
• -rw-base<br />
• -split<br />
• -ropi<br />
• -rwpi<br />
上 記 のオプションを 使 用 した 簡 素 化 された 記 述 により、 単 純 イメージに<br />
使 用 する 分 散 ローディング 記 述 と 同 じことを 設 定 することができます。<br />
詳 細 については、P. 3-14「コマンドラインオプションを 使 用 した 単 純 イ<br />
メージの 作 成 」を 参 照 して 下 さい。<br />
分 散 ローディング 記 述 ファイルの 使 用<br />
イメージコンポーネントのグループ 化 と 配 置 を 厳 密 に 制 御 しなければな<br />
らない 複 雑 なケースには、 記 述 ファイルを 使 用 します。 詳 細 については、<br />
第 5 章 「 分 散 ローディング 記 述 ファイルの 使 用 」を 参 照 して 下 さい。 分<br />
散 ローディングの 使 用 には、コマンドラインで -scatter filename を<br />
指 定 します。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-5
基 本 リンカ 機 能<br />
3.1.4 イメージのエントリポイント<br />
イメージ 内 のエントリポイントによって、プログラムの 実 行 開 始 位 置 が 示 されます。エ<br />
ントリポイントには 異 なる 2 つのタイプがあります。<br />
初 期 エントリポイント<br />
イメージの 初 期 エントリポイントは 1 つの 値 で 表 され、ELF ヘッダファ<br />
イルにストアされます。オペレーティングシステムまたはブートローダ<br />
によって RAM にロードされたプログラムに 対 して、ローダはそのイメー<br />
ジ 内 の 初 期 エントリポイントに 制 御 を 渡 すことによって、イメージの 実<br />
行 を 開 始 します。<br />
1 つのイメージ 内 に 存 在 し 得 る 初 期 エントリポイントは 1 つだけです。 初<br />
期 エントリポイントはENTRYディレクティブによって 設 定 されたエント<br />
リポイントの 1 つとも 考 えられますが、 必 ずしもそうであるとは 限 りま<br />
せん。<br />
ENTRY ディレクティブによって 設 定 されたエントリポイント<br />
エントリポイントが ENTRY ディレクティブを 使 用 してアセンブリ 言 語<br />
ソースに 設 定 されていることがあります。 組 み 込 みシステムの 場 合 、こ<br />
のディレクティブは 例 外 ベクタ 経 由 で 開 始 されるコードのマーキングに<br />
使 用 するのが 一 般 的 です。<br />
初 期 エントリポイントの 指 定<br />
初 期 エントリポイントは -entry リンカオプションを 使 用 して 指 定 することができま<br />
す。-entry オプションを 指 定 できるのは 1 箇 所 だけです。 詳 細 については、P. 2-8<br />
「armlink のコマンド 構 文 」を 参 照 して 下 さい。<br />
ブートローダまたはオペレーティングシステムのプログラムローダといったローダに<br />
よって 実 行 されるイメージには、 初 期 エントリポイントが 含 まれている 必 要 がありま<br />
す。 例 えば、OS のイメージはブートローダによってロードされ、 実 行 ファイルヘッダ<br />
内 に 指 定 された 初 期 エントリポイントから 実 行 が 開 始 されます。このイメージはロー<br />
ドされた 後 にブートローダをオーバライドし、OS となります。オペレーティングシス<br />
テムの 場 合 、そのイメージには 例 外 ハンドラアドレスなどの 他 のエントリポイントが<br />
含 まれています。<br />
ゼロ 番 地 に ROM を 置 く 組 み 込 みアプリケーションの 場 合 には、-entry 0x0(または<br />
上 位 ベクタを 使 用 する CPU では 0xffff0000)を 使 用 します。<br />
初 期 エントリポイントは、 以 下 の 条 件 を 満 たしている 必 要 があります。<br />
• そのイメージのエントリポイントが 実 行 領 域 内 に 存 在 していること。<br />
• その 実 行 領 域 が 非 オーバレイ 領 域 であり、かつルート 領 域 であること(ロードア<br />
ドレスが 実 行 アドレスと 同 じであること)。<br />
3-6 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
基 本 リンカ 機 能<br />
-entry オプションを 使 用 して 初 期 エントリポイントを 指 定 していない 場 合 でも、リン<br />
カは 可 能 な 限 りこれを 設 定 しようと 試 みます。<br />
• -entry オプションを 使 用 していない 場 合 に、 入 力 オブジェクトに ENTRY ディ<br />
レクティブによって 設 定 されたエントリポイントが 1 つだけ 存 在 しているとき、<br />
リンカはそのエントリポイントをイメージの 初 期 エントリポイントとして 使 用<br />
します。<br />
• -entry オプションが 使 用 されておらず、さらに 以 下 のどちらかが 真 である 場 合<br />
に、リンカは 初 期 エントリポイントを 含 まない 出 力 オブジェクトを 生 成 します。<br />
— ENTRYディレクティブを 使 用 して 複 数 のエントリポイントが 指 定 されてい<br />
る。<br />
— ENTRYディレクティブを 使 用 して 指 定 されているエントリポイントが 存 在<br />
しない。<br />
出 力 オブジェクトに 初 期 エントリポイントが 含 まれていない 場 合 、リンカは 以 下<br />
の 警 告 を 発 行 します。<br />
L6305W: Image does not have an entry point. (Not specified or<br />
not set due to multiple choices)<br />
複 数 エントリポイントの 指 定<br />
組 み 込 みイメージには 複 数 のエントリポイントを 記 述 することができます。 例 えば、<br />
一 般 的 に 組 み 込 みイメージには、Reset、IRQ、FIQ、SVC、UNDEF、ABORT の 各 例 外<br />
がそのイメージの 実 行 中 に 制 御 を 渡 すために 使 用 するエントリポイントが 含 まれてい<br />
ます。<br />
ENTRY ディレクティブを 使 用 すれば、1 つのイメージ 内 に 複 数 のエントリポイントを 記<br />
述 することができます。このディレクティブは ENTRY キーワードで 出 力 コードセク<br />
ションをマーキングし、リンカが 未 使 用 セクションの 削 除 を 実 行 する 際 にそのセク<br />
ションを 削 除 しないように 指 示 します。C または C++ で 記 述 したプログラムの 場 合 、C<br />
ライブラリにある __main() 関 数 もエントリポイントとなります。ENTRY ディレク<br />
ティブの 詳 細 については、ADS アセンブラガイドを 参 照 して 下 さい。<br />
組 み 込 みイメージがローダによって 使 用 される 場 合 には、そのイメージのヘッダに 1 つ<br />
の 初 期 エントリポイントを 指 定 する 必 要 があります。 詳 細 については、P. 3-6「 初 期 エ<br />
ントリポイントの 指 定 」を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-7
基 本 リンカ 機 能<br />
3.2 セクションの 配 置<br />
リンカは、 領 域 内 の 全 ての 入 力 セクションをその 属 性 にしたがってソートします。 同<br />
一 属 性 を 持 つ 入 力 セクションは、その 領 域 内 において 一 連 の 連 続 したブロックを 形 成<br />
します。<br />
各 入 力 セクションのベースアドレスはリンカが 定 義 するソート 順 序 によって 決 定 さ<br />
れ、そのベースアドレスを 保 持 する 出 力 セクション 内 で 正 しく 整 列 されます。<br />
イメージを 生 成 するとき、リンカは 以 下 の 順 序 で 入 力 セクションをソートします。<br />
• 属 性<br />
• 入 力 セクションの 名 前<br />
• 入 力 リスト 内 における 各 セクションの 位 置 (-first または -last オプション<br />
によってオーバライドされている 位 置 を 除 く)。 詳 細 については、P. 3-10「FIRST<br />
と LAST を 使 用 したセクションの 配 置 」を 参 照 して 下 さい。<br />
デフォルトでリンカが 作 成 するイメージは、RO と RW に 加 え、オプションで ZI の 属<br />
性 を 持 つ 出 力 セクションから 構 成 されます。メモリ 管 理 ハードウェアを 搭 載 したシス<br />
テムでは、ランタイムに RO 出 力 セクションを 保 護 することができます。また、RO セ<br />
クションはターゲットの ROM 内 に 配 置 することも 可 能 です。<br />
3-8 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
基 本 リンカ 機 能<br />
3.2.1 属 性 による 入 力 セクションの 順 序 付 け<br />
特 定 言 語 のランタイムシステムと 関 連 付 けられたイメージ 部 分 は、 数 を 最 小 限 に 抑 え<br />
た 連 続 領 域 にまとめられます。armlink は、 入 力 セクションを 属 性 によって 以 下 のよう<br />
に 順 序 付 けます。<br />
• 読 み 出 し 専 用 コード<br />
• 読 み 出 し 専 用 データ<br />
• 読 み 出 し / 書 き 込 みコード<br />
• 他 の 初 期 化 データ<br />
• ゼロ 初 期 化 ( 未 初 期 化 )データ<br />
同 一 属 性 を 持 つ 入 力 セクションは、 名 前 によって 順 序 付 けされます。 名 前 は 大 文 字 ・ 小<br />
文 字 を 区 別 するものとみなされ、ASCII 文 字 照 合 シーケンスを 使 用 してアルファベット<br />
順 で 比 較 されます。<br />
同 一 の 属 性 と 名 前 を 持 つ 入 力 セクションは、 入 力 リスト 内 における 相 対 位 置 にした<br />
がって 順 序 付 けられます。<br />
したがって、ライブラリからインクルードされる、 同 じ 属 性 と 名 前 を 持 つ 入 力 セクショ<br />
ンの 位 置 は 予 測 不 可 能 です。 厳 密 な 位 置 設 定 を 行 う 必 要 がある 場 合 には、モジュール<br />
を 手 動 で 抽 出 し、それを 入 力 リストに 組 み 込 むことができます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-9
基 本 リンカ 機 能<br />
3.2.2 FIRST と LAST を 使 用 したセクションの 配 置<br />
領 域 内 の 全 ての RO コード 入 力 セクションは 連 続 して 1 つの RO 出 力 セクションを 形 成<br />
し、この 出 力 セクションは 全 ての RW 入 力 セクションを 含 む 出 力 セクションよりも 優<br />
先 されます。<br />
分 散 ローディングを 使 用 しない 場 合 には、リンカオプション -first および -last を<br />
使 用 して 入 力 セクションを 配 置 します。<br />
分 散 ローディングを 使 用 するときに 配 置 順 序 が 重 要 な 場 合 には、 分 散 ロード 記 述 ファ<br />
イル 内 で 擬 似 属 性 FIRST および LAST を 使 用 し、 実 行 領 域 内 の 最 初 と 最 後 の 入 力 セク<br />
ションをマーキングします。<br />
ただし、FIRST と LAST の 使 用 方 法 が 基 本 属 性 ソート 順 序 に 違 反 してはなりません。つ<br />
まり、ある 入 力 セクションは、それを 含 む 出 力 セクションが 実 行 領 域 内 の 最 初 (また<br />
は 最 後 )の 出 力 セクションである 場 合 に、その 領 域 内 の 最 初 (または 最 後 )に 配 置 す<br />
ることができます。 例 えば、RO 入 力 セクションを 含 む 実 行 領 域 内 の FIRST 入 力 セク<br />
ションは、RO 入 力 セクションでなければなりません。 同 様 に、その 実 行 領 域 に ZI 入<br />
力 セクションが 含 まれている 場 合 には、LAST 入 力 セクションは ZI 入 力 セクションで<br />
なければなりません。<br />
各 出 力 セクション 内 において、 入 力 セクションはその 名 前 にしたがってアルファベッ<br />
ト 順 でソートされ、 次 に 入 力 順 序 内 における 位 置 によってソートされます。<br />
3-10 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
基 本 リンカ 機 能<br />
3.2.3 セクションの 整 列<br />
入 力 セクションが 順 序 付 けられると、armlink はベースアドレスが 固 定 される 前 に 必 要<br />
に 応 じてパディングを 行 い、 各 入 力 セクションをそのアライメントの 倍 数 になるアド<br />
レスから 開 始 させます。アライメントは 拡 張 する( 通 常 は 4 バイト 整 列 のものを 8 バ<br />
イト 整 列 に 設 定 する)ことが 可 能 ですが、 自 然 アライメントを 縮 小 する( 通 常 は 4 バ<br />
イト 整 列 のものを 2 バイト 整 列 に 設 定 する)ことはできません。 入 力 セクションはワー<br />
ド 境 界 で 整 列 させるのが 一 般 的 です。 入 力 セクションのアライメントは、 以 下 のいず<br />
れかを 使 用 して 指 定 することができます。<br />
ALIGN<br />
__align<br />
この 属 性 はアセンブリ 言 語 から AREA ディレクティブに 使 用 します。こ<br />
の 場 合 の 入 力 セクションのアドレスは、2 (align 属 性 値 )の 倍 数 となります。<br />
C からの 場 合 はこの 修 飾 子 を 使 用 します。 入 力 セクションアドレスは、<br />
指 定 値 (2 の 累 乗 )の 倍 数 となります。<br />
__alignについては、 例 3-1およびADSコンパイラ/ライブラリガイドの__alignの 項 を 参<br />
照 して 下 さい。ALIGN については、 例 3-2 および ADS アセンブラガイドの ALIGN の<br />
項 を 参 照 して 下 さい。<br />
例 3-1 __align 修 飾 子 の 使 用<br />
__align(8) long long big_var; // big_var eight-byte aligned<br />
例 3-2 アセンブリコードにおける ALIGN 属 性 の 使 用<br />
AREA LDR_LABEL, CODE, READONLY, ALIGN=3 ; align on eight-byte boundary<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-11
基 本 リンカ 機 能<br />
3.3 最 適 化 と 修 正<br />
armlink は、 重 複 セクションを 削 除 するために 最 適 化 と 修 正 を 何 度 か 実 行 し、<strong>ARM</strong> コー<br />
ドと Thumb コード 間 のインタワーキングを 可 能 にして 長 分 岐 を 実 現 します。<br />
3.3.1 共 通 デバッグセクションの 削 除<br />
コンパイラとアセンブラは、コンパイル 単 位 である 各 ソースファイルにつき、1 つのデ<br />
バッグセクションセットを 生 成 します。armlink は、 特 定 ソースファイルのデバッグセ<br />
クションのコピーを 複 数 検 出 し、 最 終 イメージには 1 つのコピーだけを 残 して、その<br />
他 全 てのコピーを 破 棄 します。これにより、イメージのデバッグサイズを 大 幅 に 縮 小<br />
することができます。<br />
3.3.2 共 通 セクションの 削 除<br />
ソース 内 にインライン 関 数 またはテンプレートが 使 用 されている 場 合 、<strong>ARM</strong> C++ コン<br />
パイラはインライン 関 数 およびテンプレート 関 数 の 独 立 した 複 数 のコピーを 保 持 する<br />
ように、オブジェクトを 生 成 します。 共 通 ヘッダファイル 内 で 宣 言 されている 場 合 、こ<br />
れらの 関 数 はその 後 リンクする 個 々のオブジェクト 内 で 何 度 も 定 義 される 可 能 性 があ<br />
ります。 重 複 を 削 除 するため、コンパイラはこれらの 関 数 を 共 通 コードセクションの<br />
別 々のインスタンスにコンパイルし、armlinkは 各 共 通 コードセクションの1つのコピー<br />
だけを 保 持 します。<br />
共 通 コードセクションの 個 々のインスタンスが 同 一 でない 場 合 もあります。 例 えば、こ<br />
れらのコピーのいくつかは、 異 なる(ただし 互 換 性 のある)ビルドオプション、 最 適<br />
化 オプション、あるいはデバッグオプションを 使 用 してビルドされたライブラリ 内 で<br />
検 出 される 場 合 があります。<br />
コピーが 同 一 でない 場 合 、armlink は 入 力 オブジェクトの 属 性 に 基 づき、 各 共 通 コード<br />
セクションの 最 も 可 用 性 の 高 い 部 分 を 一 つにして 保 持 します。<br />
3.3.3 未 使 用 セクションの 削 除<br />
未 使 用 セクションの 削 除 によって、 一 度 も 実 行 されないコード、またはそのコードに<br />
よって 参 照 されないデータが 最 終 イメージから 削 除 されます。この 最 適 化 は、<br />
-(no)remove、-first、-last、-keep のリンカオプションを 使 用 して 制 御 するこ<br />
とができます。-info unused リンカオプションを 使 用 すると、 削 除 された 未 使 用 セ<br />
クションのリストを 生 成 するようにリンカに 指 示 することができます。<br />
3-12 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
基 本 リンカ 機 能<br />
入 力 セクションは 以 下 の 条 件 で 最 終 イメージに 保 持 されます。<br />
• エントリポイントが 含 まれている 場 合<br />
• エントリポイントを 含 む 入 力 セクションからの 非 弱 な 参 照 によって、 直 接 的 また<br />
は 間 接 的 に 参 照 される 場 合<br />
• -first オプションまたは -last オプション(あるいはこれと 同 じ 分 散 ローディ<br />
ング 機 能 )を 使 用 して、 最 初 または 最 後 の 入 力 セクションが 指 定 されている 場 合<br />
• -keep オプションによって 削 除 不 可 とマーキングされている 場 合<br />
3.3.4 ベニアの 生 成<br />
armlink は、 以 下 の 場 合 にベニアを 生 成 する 必 要 があります。<br />
• 分 岐 によって <strong>ARM</strong> 状 態 と Thumb 状 態 が 変 更 される 場 合<br />
• 分 岐 のデスティネーションが、 現 在 の 状 態 の 分 岐 範 囲 外 にある 場 合<br />
ベニアは、 分 岐 範 囲 を 拡 大 してプロセッサ 状 態 を 変 更 することができます。armlink は、<br />
長 分 岐 と 状 態 変 更 を 結 合 します。インタワーキングベニアも 全 て 長 分 岐 ベニアです。<br />
以 下 のベニアタイプは、それぞれ 異 なる 分 岐 要 件 を 満 たします。 必 要 に 応 じ、リンカ<br />
は 位 置 独 立 なベニアを 生 成 します。<br />
<strong>ARM</strong> → <strong>ARM</strong><br />
<strong>ARM</strong> → Thumb<br />
Thumb → <strong>ARM</strong><br />
Thumb → Thumb<br />
長 分 岐<br />
長 分 岐 とインターワーキング<br />
長 分 岐 とインタワーキング<br />
長 分 岐<br />
armlink は、 各 ベニアに 対 して Veneer$$Code と 呼 ばれる 1 つの 入 力 セクションを 作<br />
成 します。ベニアは、 要 件 を 満 たせる 既 存 のベニアが 存 在 しない 場 合 に 初 めて 生 成 さ<br />
れます。2 つの 入 力 セクションに 同 一 デスティネーションへの 長 分 岐 が 含 まれていると<br />
き、1 つのベニアに 両 方 のセクションから 到 達 できる 場 合 には、1 つのベニアだけが 生<br />
成 されます。<br />
1 つの 入 力 セクションにベニアを 収 集 する 場 合 には、それによって 生 成 されるベニア 入<br />
力 セクションが 他 の 入 力 セクションの 範 囲 内 に 収 まらない 可 能 性 があるため、 全 ての<br />
ベニアを 収 集 することはできません。これらのセクションがアドレシング 範 囲 内 にな<br />
い 場 合 、 長 分 岐 は 不 可 能 です。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-13
基 本 リンカ 機 能<br />
3.4 コマンドラインオプションを 使 用 した 単 純 イメージの 作 成<br />
単 純 イメージは、RO、RW、ならびに ZI タイプの 多 数 の 入 力 セクションから 構 成 され<br />
ます。これらの 入 力 セクションが 照 合 されることにより、RO、RW、ZI の 各 出 力 セク<br />
ションが 形 成 されます。ロード 領 域 と 実 行 領 域 における 出 力 セクションの 配 置 により、<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 の 3 つのオプションを 使 用 します。<br />
単 純 イメージのどのタイプの 場 合 にも、 使 用 できる 実 行 領 域 は 3 つまでです。<br />
• 最 初 の 実 行 領 域 には RO 出 力 セクションが 含 まれます。<br />
• 2 番 目 の 実 行 領 域 には RW 出 力 セクションが 含 まれます( 存 在 する 場 合 )。<br />
• 3 番 目 の 実 行 領 域 には ZI 出 力 セクションが 含 まれます( 存 在 する 場 合 )。<br />
これらの 実 行 領 域 は、RO、RW ならびに ZI 実 行 領 域 と 呼 びます。<br />
単 純 イメージは 分 散 ローディングファイルを 使 用 して 作 成 することも 可 能 です。 分 散<br />
ローディングファイルの 詳 細 については、P. 5-28「 等 価 な 分 散 ローディング 記 述 を 使 用<br />
した 単 純 イメージの 生 成 」を 参 照 して 下 さい。<br />
3.4.1 タイプ 1: : 単 一 ロード 領 域 と 連 続 出 力 領 域<br />
このタイプのイメージはロードビュー 内 の 1 つのロード 領 域 から 構 成 され、その 3 つ<br />
の 実 行 領 域 はメモリマップ 内 に 隣 接 して 配 置 されます。この 方 法 は、OS ブートローダ、<br />
Angel、デスクトップシステムなど、RAM にプログラムをロードするシステムに 適 し<br />
ています(P. 3-15 図 3-3 参 照 )。<br />
3-14 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
基 本 リンカ 機 能<br />
図 3-3 タイプ 1<br />
ロードビュー<br />
単 一 のロード 領 域 は、 隣 接 して 配 置 された RO および RW 出 力 セクションから 構 成 さ<br />
れます。ロード 時 には ZI 出 力 セクションは 存 在 しません。ZI 出 力 セクションは、 実 行<br />
前 にイメージファイル 内 の 出 力 セクションの 記 述 を 使 用 して 作 成 されます。<br />
実 行 ビュー<br />
RO、RW、ZI の 各 出 力 セクションを 含 む 3 つの 実 行 領 域 は 隣 接 して 配 置 されます。RO<br />
および RW 実 行 領 域 の 実 行 アドレスはロードアドレスと 同 じであるため、ロードアド<br />
レスから 実 行 アドレスに 移 動 させる 必 要 のあるものはありません。しかし、ZI 出 力 セ<br />
クションを 含 む ZI 実 行 領 域 は、 実 行 開 始 前 に 作 成 されます。<br />
RO 出 力 を 含 む 領 域 のロード / 実 行 アドレスを 指 定 するには、armlink オプション<br />
-ro-base address を 使 用 します。このデフォルトアドレスは 0x8000 です( 図 3-3 参<br />
照 )。<br />
再 配 置 可 能 イメージを 作 成 するには、-reloc オプションを 使 用 します。-reloc をそ<br />
れだけで 使 用 すると、 単 純 タイプ 1 に 似 たイメージが 生 成 されますが、その 1 つのロー<br />
ド 領 域 に RELOC 属 性 が 設 定 されます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-15
基 本 リンカ 機 能<br />
3.4.2 タイプ 2: : 単 一 ロード 領 域 と 不 連 続 出 力 領 域<br />
このタイプのイメージは 1 つのロード 領 域 で 構 成 され、 実 行 ビューでは 3 つの 実 行 領<br />
域 から 構 成 されます。RW 実 行 領 域 と RO 実 行 領 域 は 隣 接 していません。この 方 法 は、<br />
ROM ベースの 組 み 込 みシステムなどに 使 用 できます( 図 3-4 参 照 )。<br />
図 3-4 タイプ 2<br />
ロードビュー<br />
ロードビューでは、ROM などに 連 続 で 配 置 された RO および RW 出 力 セクションが 1<br />
つのロード 領 域 を 構 成 します。ロード 時 には ZI 出 力 セクションは 存 在 しません。ZI 出<br />
力 セクションは、 実 行 前 にイメージファイル 内 の 出 力 セクションの 記 述 を 使 用 して 作<br />
成 されます。<br />
実 行 ビュー<br />
実 行 ビューでは、 最 初 の 実 行 領 域 に RO 出 力 セクションが、2 番 目 の 実 行 領 域 に RW お<br />
よび ZI 出 力 セクションが 含 まれます。<br />
RO 出 力 セクションを 含 む 領 域 の 実 行 アドレスはそのロードアドレスと 同 じであるた<br />
め、RO 出 力 セクションを 移 動 させる 必 要 はありません。<br />
3-16 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
基 本 リンカ 機 能<br />
RW 出 力 セクションを 含 む 領 域 の 実 行 アドレスはそのロードアドレスと 異 なるため、<br />
RW 出 力 セクションはロードアドレスから( 単 一 ロード 領 域 から) 実 行 アドレスに(2<br />
番 目 の 実 行 領 域 に) 移 動 されます。ZI 実 行 領 域 とその 出 力 セクションは、RW 実 行 領<br />
域 に 隣 接 して 配 置 されます。<br />
RO 出 力 セクションのロード / 実 行 アドレスを 指 定 するには armlink オプション<br />
-ro-base addressを、RW 出 力 セクションの 実 行 アドレスを 指 定 するには-rw-base<br />
exec_address を 使 用 します。-ro-base オプションで 実 行 アドレスが 指 定 されてい<br />
ない 場 合 、armlink はデフォルト 値 の 0x8000 を 使 用 します。 組 み 込 みシステムの 場 合 、<br />
-ro-base には 0x0 を 指 定 するのが 一 般 的 です。-rw-base オプションで 実 行 アドレス<br />
が 指 定 されていない 場 合 、デフォルトで RW は RO の 直 ぐ 上 に 配 置 されます。<br />
3.4.3 タイプ 3:2 ロード 領 域 と 不 連 続 出 力 領 域<br />
このタイプのイメージはタイプ 2 のイメージと 似 ていますが、ここではタイプ 2 の 1 つ<br />
のロード 領 域 が 2 つのロード 領 域 に 分 割 されます( 図 3-5)。<br />
図 3-5 タイプ 3<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 3-17
基 本 リンカ 機 能<br />
ロードビュー<br />
ロードビューでは、 最 初 のロード 領 域 が RO 出 力 セクションから 構 成 され、2 番 目 の<br />
ロード 領 域 が RW 出 力 セクションから 構 成 されます。ロード 時 には ZI 出 力 セクション<br />
は 存 在 しません。ZI 出 力 セクションは、 実 行 前 にイメージファイル 内 の 出 力 セクショ<br />
ンの 記 述 を 使 用 して 作 成 されます。<br />
実 行 ビュー<br />
実 行 ビューでは、 最 初 の 実 行 領 域 に RO 出 力 セクションが、2 番 目 の 実 行 領 域 に RW お<br />
よび ZI 出 力 セクションが 含 まれます。<br />
RO 領 域 の 実 行 アドレスはそのロードアドレスと 同 じであるため、RO 出 力 セクション<br />
の 内 容 がロードアドレスから 実 行 アドレスに 移 動 されることはありません。<br />
RW 領 域 の 実 行 アドレスもロードアドレスと 同 じであるため、RW 出 力 セクションの 内<br />
容 はロードアドレスから 実 行 アドレスに 移 動 されません。しかし、ZI 出 力 セクション<br />
は 実 行 開 始 前 に 作 成 され、RW 領 域 の 後 に 配 置 されます。<br />
ロード / 実 行 アドレスは 以 下 のリンカオプションを 使 用 して 指 定 することができます。<br />
-reloc<br />
-reloc -splitの 組 み 合 わせを 使 用 すると 単 純 タイプ3と 同 様 のイメー<br />
ジが 作 成 されますが、2 つのロード 領 域 に RELOC 属 性 が 設 定 されます。<br />
-split このオプションは、-ro-base と -rw-base を 使 用 して 2 つの 領 域 を<br />
別 々に 配 置 できるように、デフォルトの 1 つのロード 領 域 (RO 出 力 セ<br />
クションと RW 出 力 セクションを 含 む 領 域 )を 2 つのロード 領 域 ( 一 方<br />
が RO 出 力 セクションを、 他 方 が RW 出 力 セクションを 含 む)に 分 割 し<br />
ます。<br />
-ro-base address<br />
RO セクションを 含 む 領 域 のロード / 実 行 アドレスに 4 バイト 整 列 の<br />
address( 例 :ROM 内 の 先 頭 位 置 のアドレス)を 設 定 するように armlink<br />
に 指 示 します。-ro-base オプションを 使 用 してこのアドレスが 指 定 さ<br />
れていない 場 合 、armlink はデフォルト 値 の 0x8000 を 使 用 します。<br />
-rw-base address<br />
RW 出 力 セクションを 含 む 領 域 の 実 行 アドレスに、4 バイト 整 列 の<br />
address を 設 定 するように armlink に 指 示 します。このオプションを<br />
-split と 共 に 使 用 すると、RW 領 域 のロードアドレスと 実 行 アドレスの<br />
両 方 が 指 定 されます。<br />
-splitを 使 用 せずに-reloc -rw-baseを 使 用 すると、エラーが 発 生 し<br />
ます。<br />
3-18 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
第 4 章<br />
イメージシンボルへのアクセス<br />
本 章 では、armlink を 使 用 したシンボルの 参 照 方 法 について 説 明 します。 本 章 は 以 下 の<br />
セクションから 構 成 されています。<br />
• リンカ 定 義 シンボルへのアクセス:P. 4-2<br />
• 別 のイメージに 含 まれるシンボルへのアクセス:P. 4-5<br />
• グローバルシンボルの 隠 蔽 と 再 命 名 :P. 4-9<br />
• $Super$$ と $Sub$$ を 使 用 したシンボル 定 義 のオーバライド:P. 4-12<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 4-1
イメージシンボルへのアクセス<br />
4.1 リンカ 定 義 シンボルへのアクセス<br />
armlink が 定 義 するいくつかのシンボルには、 文 字 シーケンス $$ が 含 まれています。こ<br />
れらのシンボルと、シーケンス $$ を 含 む 他 の 全 ての 外 部 名 は、<strong>ARM</strong> で 予 約 している<br />
名 前 です。これらのシンボルは、 領 域 、 出 力 セクション、 入 力 セクションのそれぞれ<br />
のベースアドレスと 範 囲 を 指 定 する 目 的 で 使 用 されます。<br />
アセンブリ 言 語 プログラムの 場 合 、これらのシンボリックアドレスはインポートして<br />
再 配 置 可 能 アドレスとして 使 用 することが 可 能 であり、また C/C++ ソースコードから<br />
はを extern シンボルとして 参 照 することができます。<br />
注<br />
リンカ 定 義 シンボルは、コードがこれらを 参 照 する 場 合 にのみ 定 義 されます。<br />
4.1.1 領 域 関 連 シンボル<br />
領 域 関 連 シンボルは、armlink がイメージを 作 成 するときに 生 成 されます。 表 4-1 は、イ<br />
メージ 内 に 存 在 する 各 実 行 領 域 に 対 して armlink が 生 成 するシンボルを 示 しています。<br />
分 散 ローディングを 使 用 する 場 合 は、 記 述 ファイルがイメージ 内 の 全 ての 実 行 領 域 を<br />
命 名 し、 各 領 域 のロードアドレスと 実 行 アドレスを 定 義 します( 第 5 章 「 分 散 ローディ<br />
ング 記 述 ファイルの 使 用 」 参 照 )。<br />
分 散 ローディングを 使 用 しない 場 合 、リンカはregion_nameの 値 に 以 下 を 使 用 します。<br />
• ER_RO 読 み 出 し 専 用 領 域<br />
• ER_RW 読 み 出 し / 書 き 込 み 領 域<br />
• ER_ZI ゼロ 初 期 化 領 域<br />
ZI 出 力 セクションを 含 む 全 ての 実 行 領 域 に 対 し、armlink は $$ZI$$ を 含 む 追 加 シンボ<br />
ルを 生 成 します。<br />
表 4-1 領 域 関 連 リンカシンボル<br />
シンボル<br />
Load$$region_name$$Base<br />
Image$$region_name$$Base<br />
説 明<br />
領 域 のロードアドレス。<br />
領 域 の 実 行 アドレス。<br />
Image$$region_name$$Length 実 行 領 域 のバイト 長 (4 の 倍 数 )。<br />
Image$$region_name$$Limit<br />
実 行 領 域 の 終 わりを 超 えるバイトアドレス。<br />
4-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
イメージシンボルへのアクセス<br />
表 4-1 領 域 関 連 リンカシンボル<br />
シンボル<br />
Image$$region_name$$ZI$$Base<br />
説 明<br />
この 領 域 にある ZI 出 力 セクションの 実 行 アドレス。<br />
Image$$region_name$$ZI$$Length ZI 出 力 セクションのバイト 長 (4 の 倍 数 )。<br />
Image$$region_name$$ZI$$Limit<br />
実 行 領 域 に 含 まれる ZI 出 力 セクションの 終 わりを 超<br />
えるバイトアドレス。<br />
注<br />
• イメージの ZI 出 力 セクションは 静 的 に 生 成 されるのではなく、ランタイムに 動<br />
的 に 自 動 生 成 されます。したがって、ZI 出 力 セクションのロードアドレスシンボ<br />
ルはありません。<br />
• セクション 関 連 シンボルよりも 領 域 関 連 シンボルを 優 先 して 使 用 することを 推<br />
奨 します。<br />
ZI 領 域 の 上 にスタックとヒープを 配 置 する<br />
領 域 関 連 シンボルの 一 般 的 な 使 用 目 的 の 1 つに、ZI 領 域 のすぐ 上 にヒープを 配 置 する<br />
ことが 挙 げられます。 例 4-1 は、__user_initial_stackheap() の 再 ターゲッティ<br />
ング 化 バージョンをアセンブリ 言 語 で 作 成 する 方 法 を 示 しています。この 例 では、<strong>ARM</strong><br />
Cライブラリからデフォルトである1 領 域 のメモリモデルを 使 用 することを 想 定 してい<br />
ます。 詳 細 については、ADS コンパイラ / ライブラリガイドの<br />
__user_initial_stackheap() の 項 を 参 照 して 下 さい。C を 使 用 する 場 合 の 方 法 に<br />
ついては、ADS デベロッパガイドの「ROM へのコードの 書 き 込 み」の 章 にある<br />
retarget.c の 説 明 を 参 照 して 下 さい。<br />
例 4-1<br />
IMPORT ||Image$$region_name$$ZI$$Limit||<br />
__user_initial_stackheap<br />
LDR r0, =||Image$$region_name$$ZI$$Limit||<br />
MOV pc, lr<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 4-3
イメージシンボルへのアクセス<br />
4.1.2 セクション 関 連 シンボル<br />
表 4-2 が 示 す 出 力 セクションシンボルは、コマンドラインオプションを 使 用 して 単 純 イ<br />
メージを 作 成 するときに 生 成 されます。 単 純 イメージには、3 つの 実 行 領 域 を 生 成 する<br />
3 つの 出 力 セクション(RO、RW、ZI)が 含 まれています。このイメージ 内 にある 全 て<br />
の 入 力 セクションに 対 し、armlink は 表 4-2 が 示 す 入 力 シンボルを 生 成 します。<br />
表 4-2 セクション 関 連 リンカシンボル<br />
シンボル<br />
セクション<br />
のタイプ<br />
説 明<br />
Image$$RO$$Base 出 力 RO 出 力 セクションの 開 始 アドレス。<br />
Image$$RO$$Limit 出 力 RO 出 力 セクションの 終 わりを 超 える 最 初 のバイトアドレス。<br />
Image$$RW$$Base 出 力 RW 出 力 セクションの 開 始 アドレス。<br />
Image$$RW$$Limit 出 力 ZI 出 力 セクションの 終 わりを 超 えるバイトアドレス。(RW 領<br />
域 の 終 わりではなく ZI 領 域 の 終 わりを 選 択 することによっ<br />
て、 既 存 コードとの 互 換 性 を 維 持 することができます。)<br />
Image$$ZI$$Base 出 力 ZI 出 力 セクションの 開 始 アドレス。<br />
Image$$ZI$$Limit 出 力 ZI 出 力 セクションの 終 わりを 超 えるバイトアドレス。<br />
SectionName$$Base 入 力 SectionName と 呼 ばれる 連 結 セクションの 開 始 アドレス。<br />
SectionName$$Limit 入 力 SectionName と 呼 ばれる 連 結 セクションの 終 わりを 超 える<br />
バイトアドレス。<br />
注<br />
コードが 入 力 セクションシンボルを 参 照 する 場 合 、イメージ 内 に 含 まれる 同 一 名 の 全<br />
ての 入 力 セクションは、そのイメージのメモリマップ 内 に 連 続 配 置 するものとみなさ<br />
れます。 不 連 続 メモリ 上 でベースシンボルと 範 囲 シンボルを 使 用 すると 予 測 不 能 かつ<br />
有 害 な 結 果 をもたらすことが 多 いため、 分 散 ローディング 記 述 によって 入 力 セクショ<br />
ンが 不 連 続 配 置 された 場 合 には、armlink はこれをエラーと 診 断 します。<br />
分 散 ローディングファイルを 使 用 する 場 合 の 表 4-2の 出 力 セクションシンボルは 未 定 義<br />
です。コードがこれらのシンボルにアクセスする 場 合 は、 弱 い 参 照 として 処 理 する 必<br />
要 があります。<br />
__user_initial_stackheap() の 標 準 実 装 では、Image$$ZI$$Limit の 値 を 使 用<br />
します。したがって、 分 散 ローディングファイルを 使 用 する 場 合 には<br />
__user_initial_stackheap() を 再 実 装 し、ヒープとスタックの 境 界 を 設 定 する 必<br />
要 があります。ADS コンパイラ / ライブラリガイドのライブラリメモリモデル 関 連 セク<br />
ションと、P. 4-2「 領 域 関 連 シンボル」を 参 照 して 下 さい。<br />
4-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
イメージシンボルへのアクセス<br />
4.2 別 のイメージに 含 まれるシンボルへのアクセス<br />
シンボル 定 義 (symdefs)ファイルを 使 用 することにより、あるイメージに 別 のイメー<br />
ジに 含 まれるグローバルシンボルの 値 を 知 らせることができます。<br />
このファイルは、 例 えば、ROM に 常 駐 する 1 つのイメージと、RAM にロードされる<br />
複 数 のイメージがある 場 合 などに 使 用 できます。RAM にロードされるイメージは、<br />
ROM にあるイメージのグローバル 関 数 とグローバルデータにアクセスすることができ<br />
ます。<br />
4.2.1 symdefs ファイルの 読 み 出 し<br />
symdefs ファイルは、コードもデータも 含 まない、シンボル 情 報 だけのオブジェクト<br />
ファイルと 考 えられます。symdefs ファイルを 読 み 出 すには、 他 のオブジェクトファイ<br />
ルの 場 合 と 同 様 に、このファイルをファイルリストに 追 加 します。armlink はこのファ<br />
イルを 読 み 出 し、ファイルに 含 まれているシンボルとそれらの 値 を 出 力 シンボルテー<br />
ブルに 追 加 します。 追 加 されたシンボルには ABSOLUTE と GLOBAL の 2 つの 属 性 があ<br />
ります。<br />
部 分 リンクが 実 行 されている 場 合 は、これらのシンボルが 出 力 オブジェクトシンボル<br />
テーブルに 追 加 されます。 完 全 リンクが 実 行 されている 場 合 は、これらのシンボルは<br />
イメージシンボルテーブルに 追 加 されます。<br />
ファイル 内 に 無 効 な 行 を 検 出 すると、armlink はエラーメッセージを 生 成 します。 行 は<br />
以 下 の 場 合 に 無 効 となります。<br />
• 欠 けている 列 がある 場 合<br />
• いずれかの 列 に 無 効 な 値 が 含 まれている 場 合<br />
symdefs ファイルから 抽 出 されるシンボルは、オブジェクトシンボルテーブルから 抽 出<br />
されるシンボルと 全 く 同 じ 方 法 で 処 理 されます。 多 重 シンボル 定 義 および <strong>ARM</strong>/Thumb<br />
同 義 語 に 関 しても、 同 じ 制 約 条 件 が 適 用 されます。<br />
4.2.2 symdefs ファイルの 作 成<br />
symdefs ファイルを 作 成 するには、armlink オプション -symdefs filename を 使 用 し<br />
ます。<br />
armlink は、 正 常 な 最 終 リンクステージの 間 に symdefs ファイルを 作 成 します。 部 分 リ<br />
ンクの 場 合 と、 最 終 リンクに 失 敗 した 場 合 には、symdefs ファイルは 作 成 されません。<br />
注<br />
filename が 存 在 しない 場 合 には、 全 てのグローバルシンボルを 含 むファイルが 作 成 さ<br />
れます。filename が 存 在 する 場 合 には、armlink がそのファイルに 再 度 書 き 込 みを 行<br />
うときに 出 力 されるシンボルの 選 択 に、filename の 既 存 の 内 容 が 使 用 されます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 4-5
イメージシンボルへのアクセス<br />
グローバルシンボルのサブセットの 出 力<br />
デフォルトでは、 全 てのグローバルシンボルが symdefs ファイルに 書 き 込 まれます。<br />
filename が 存 在 する 場 合 、armlink はその 内 容 を 使 用 して、 出 力 をグローバルシンボル<br />
のサブセットに 制 限 します。 出 力 シンボルを 制 限 するには:<br />
1. image1 の 最 終 リンクを 行 うところで -symdefs filename を 指 定 する。armlink<br />
が symdef ファイル filename を 作 成 します。<br />
2. テキストエディタで filename を 開 き、 最 終 リストに 不 要 なシンボル 項 目 を 削<br />
除 し、ファイルを 保 存 する。<br />
3. image1 の 最 終 リンクを 行 うときに -symdefs filename を 指 定 する。<br />
image1 を 作 成 する 1 つ 以 上 のオブジェクトの 使 用 方 法 が 変 更 された 後 でシンボ<br />
ル 定 義 を 更 新 する 場 合 など、filename はいつでも 編 集 してコメントを 追 加 した<br />
り image1 を 再 リンクすることが 可 能 です。<br />
armlink は 以 下 の 方 法 で symdefs ファイルを 更 新 します。<br />
1. armlink が 一 時 出 力 ファイルを 作 成 する。<br />
2. filename に 含 まれている 行 が 処 理 される。<br />
a. コメント 行 と 空 白 行 が、そのまま 変 更 されずに 一 時 ファイルにコピーされ<br />
る。<br />
b. filename 内 でシンボル 名 が 検 出 されると、 現 在 のイメージに 含 まれる 命<br />
名 済 みシンボルの 定 義 が 一 時 ファイルに 出 力 されます。<br />
注<br />
1 つのシンボルが filename 内 に 複 数 回 出 現 する 場 合 、そのシンボルの 1<br />
つの 定 義 だけが 一 時 ファイルに 出 力 されます。<br />
filename 内 で 検 出 されたシンボルが 現 在 のイメージ 内 で 定 義 されていな<br />
い 場 合 、そのシンボルに 関 する 出 力 は 生 成 されません。<br />
3. 最 終 リンクに 成 功 すると filename が 削 除 され、 一 時 ファイルが filename と<br />
再 命 名 される。<br />
4-6 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
イメージシンボルへのアクセス<br />
4.2.3 Symdefs ファイルの 形 式<br />
symdefs ファイルは、シンボルとその 値 を 含 む、1 つのタイプのオブジェクトファイル<br />
です。しかし 他 のオブジェクトファイルとは 異 なり、このファイルにはコードもデー<br />
タも 含 まれていません。<br />
symdefs ファイルは、 識 別 行 、 任 意 のコメント、シンボル 情 報 から 構 成 されます( 例 4-2<br />
参 照 )。<br />
例 4-2<br />
## <strong>ARM</strong> Linker, ADS1.2 [Build 776]: Last Updated: Tue Jul 24 13:56:35 2001<br />
;value type name, this is an added comment<br />
0x00001000 A function1<br />
0x00002000 T function2<br />
# This is also a comment, blank lines are ignored<br />
0x00003300 A function3<br />
0x00003340 D table1<br />
識 別 ストリング<br />
テキストファイル 内 の 最 初 の 11 文 字 が ## である 場 合 、armlink はそのファ<br />
イルを symdefs ファイルとして 認 識 します。<br />
識 別 ストリングの 後 には、リンカのバージョン 情 報 と、symdefs ファイルが 一 番 最 近 更<br />
新 された 日 付 と 時 刻 が 続 きます。バージョン 情 報 と 更 新 情 報 は、 識 別 ストリングの 一<br />
部 ではありません。<br />
コメント<br />
コメントは、テキストエディタを 使 用 して 手 動 で 挿 入 できます。コメントには 以 下 の<br />
プロパティがあります。<br />
• 最 初 の 非 空 白 文 字 が ; または # である 行 は 全 てコメントです。<br />
• 先 頭 行 は 必 ず 特 殊 識 別 コメント ## で 開 始 します。このコメントは<br />
ファイル 作 成 時 に armlink が 挿 入 するもので、ユーザが 削 除 してはなりません。<br />
• 最 初 の 非 空 白 文 字 の 後 に ; または # がある 場 合 はコメントとみなされません。<br />
• 空 白 行 は 無 視 されますが、 読 みやすくする 目 的 で 挿 入 することも 可 能 です。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 4-7
イメージシンボルへのアクセス<br />
シンボル 情 報<br />
シンボル 情 報 はシンボルのアドレス、タイプ、 名 前 で 構 成 され、1 行 に 記 述 されます。<br />
シンボルの 値 armlink はシンボルの 絶 対 アドレスを 固 定 16 進 形 式 ( 例 :<br />
0x00004000)で 書 き 込 みます。このファイルを 編 集 する 場 合 、<br />
シンボルのアドレス 値 には 16 進 形 式 または 10 進 形 式 のどちらで<br />
も 使 用 することができます。<br />
タイプフラグ<br />
シンボル 名<br />
以 下 の 各 文 字 はそれぞれのタイプを 表 します。<br />
A <strong>ARM</strong> コード<br />
T Thumb コード<br />
D データ<br />
シンボルの 名 前<br />
4-8 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
イメージシンボルへのアクセス<br />
4.3 グローバルシンボルの 隠 蔽 と 再 命 名<br />
このセクションでは、ステアリングファイルを 使 用 して、 出 力 ファイル 内 のグローバ<br />
ルシンボルを 隠 蔽 または 再 命 名 する 方 法 を 説 明 します。 例 えば、ステアリングファイ<br />
ルは 知 的 所 有 権 の 保 護 やネーム 空 間 のクラッシュの 回 避 に 使 用 することができます。<br />
ステアリングファイルは、 出 力 オブジェクトのシンボルテーブルを 編 集 するコマンド<br />
セットを 含 んだテキストファイルです。<br />
ステアリングファイルを 指 定 するには、armlink コマンドラインオプション -edit<br />
filename を 使 用 します(P. 2-8「armlink のコマンド 構 文 」の -edit オプションの 説 明<br />
を 参 照 して 下 さい)。<br />
サポートされているコマンドは 以 下 の 3 つです。<br />
• RENAME:P. 4-10<br />
• HIDE:P. 4-11<br />
• SHOW:P. 4-11<br />
4.3.1 ステアリングファイルの 形 式<br />
ステアリングファイルは、 以 下 の 形 式 のプレーンテキストファイルです。<br />
• 最 初 の 非 空 白 文 字 がセミコロン(;)またはハッシュ(#) 文 字 である 行 がコメン<br />
トとして 解 釈 されます。コメントは 空 白 行 として 処 理 されます。<br />
• 空 白 行 は 無 視 されます。<br />
• 空 白 ではない 非 コメント 行 は、コマンドまたは 連 続 する 非 空 白 行 に 分 割 されたコ<br />
マンドの 一 部 です。<br />
• 最 後 の 非 空 白 文 字 がカンマ(,)で 終 わるコマンド 行 は、 次 の 非 空 白 行 に 続 きます。<br />
各 コマンドは、コマンドとそれに 続 く 1 つ 以 上 のカンマで 区 切 られたオペランドグルー<br />
プで 構 成 されます。そのコマンドによって、 各 オペランドグループは 1 つまたは 2 つ<br />
のオペランドから 構 成 されます。コマンドは、そのコマンド 内 の 各 オペランドグルー<br />
プに 適 用 されます。この 場 合 には 以 下 の 規 則 が 適 用 されます。<br />
• コマンドの 大 文 字 ・ 小 文 字 は 区 別 されませんが、 一 般 的 には 大 文 字 で 表 示 され<br />
ます。<br />
• オペランドは 大 文 字 ・ 小 文 字 が 区 別 されるシンボル 名 とのマッチングを 行 う 必 要<br />
があるため、 大 文 字 ・ 小 文 字 が 区 別 されます。オペランドにはワイルドカード 文<br />
字 を 使 用 することができます。<br />
コマンドはグローバルシンボルだけに 適 用 されます。ローカルシンボルや STT_FILE<br />
などの 他 のシンボルは 影 響 を 受 けません。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 4-9
イメージシンボルへのアクセス<br />
4.3.2 ステアリングファイルコマンド<br />
以 下 のステアリングファイルコマンドによって、シンボルテーブルに 含 まれるシンボ<br />
ルの 再 命 名 、 隠 蔽 、 表 示 を 行 うことができます。<br />
RENAME<br />
RENAME コマンドは、 定 義 済 みの、または 未 定 義 のグローバルシンボル 名 を 再 命 名 し<br />
ます。<br />
構 文<br />
RENAME pattern AS replacement_pattern [,pattern AS replacement_pattern]*<br />
上 記 において:<br />
pattern 0 個 以 上 のグローバルシンボルに 一 致 し、ワイルドカード 文 字 を 含 める<br />
ことのできるストリングです。pattern がどのグローバルシンボルにも<br />
一 致 しない 場 合 、リンカはそのコマンドを 無 視 します。このオペランド<br />
は、 定 義 済 みシンボルと 未 定 義 シンボルのどちらにも 一 致 させることが<br />
できます。<br />
replacement_pattern<br />
ワイルドカード 文 字 を 含 めることのできるストリングであり、このスト<br />
リングのシンボルが 再 命 名 されます。ワイルドカードを 使 用 する 場 合 は、<br />
pattern 内 に 対 応 するワイルドカードが 存 在 していなければなりませ<br />
ん。pattern のワイルドカードに 一 致 する 文 字 が、<br />
replacement_pattern のワイルドカードに 置 き 換 わります。<br />
例 えば、func1 と 命 名 されたシンボルの 場 合 :<br />
RENAME f* AS my_f*<br />
によって、func1 は my_func1 と 再 命 名 されます。<br />
用 法<br />
ターゲットシンボルの 名 前 がそれ 自 体 で 再 命 名 される 場 合 でも、あるシンボルに 既 に<br />
存 在 しているシンボル 名 を 付 けることはできません。RENAME コマンドでは、ワイルド<br />
カード 文 字 は 1 文 字 しか(* または ?) 使 用 できません。<br />
armlink は 置 換 を 行 う 前 にステアリングファイルを 処 理 します。したがって、1 行 目 で<br />
RENAME A AS B を 使 用 し、2 行 目 で RENAME B AS A を 使 用 することはできません。<br />
4-10 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
イメージシンボルへのアクセス<br />
HIDE<br />
HIDEコマンドは、シンボルテーブル 内 の 定 義 済 みグローバルシンボルを 匿 名 にします。<br />
構 文<br />
HIDE pattern [,pattern]*<br />
上 記 において:<br />
pattern<br />
0 個 以 上 の 定 義 済 みグローバルシンボルに 一 致 し、ワイルドカード 文 字<br />
を 含 めることのできるストリングです。pattern がどの 定 義 済 みグロー<br />
バルシンボルにも 一 致 しない 場 合 、リンカはそのコマンドを 無 視 します。<br />
未 定 義 シンボルを 隠 蔽 することはできません。<br />
SHOW<br />
SHOWコマンドは、それまでHIDEコマンドで 隠 蔽 されていたグローバルシンボルを 認 識<br />
可 能 にします。このコマンドは、HIDE コマンドにワイルドカードを 使 用 した 特 定 シン<br />
ボルの 隠 蔽 を 解 除 したい 場 合 に 便 利 です。<br />
構 文<br />
SHOW pattern [,pattern]*<br />
上 記 において:<br />
pattern<br />
0 個 以 上 のグローバルシンボルに 一 致 し、ワイルドカード 文 字 を 含 める<br />
ことのできるストリングです。pattern がどのグローバルシンボルにも<br />
一 致 しない 場 合 、リンカはそのコマンドを 無 視 します。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 4-11
イメージシンボルへのアクセス<br />
4.4 $Super$$ と $Sub$$ を 使 用 したシンボル 定 義 のオーバライド<br />
外 部 ライブラリや ROM コード 内 に 存 在 しているなどの 理 由 で、 既 存 のシンボルを 修 正<br />
できない 場 合 があります。<br />
このような 場 合 には、$Super$$ と $Sub$$ のパタンを 使 用 して 既 存 のシンボルをパッ<br />
チします。 例 えば、 関 数 foo() の 定 義 をパッチするには、$Sub$$foo() と<br />
$Super$$foo() を 使 用 します。<br />
$Sub$$foo<br />
元 関 数 foo() の 代 わりに 呼 び 出 される 新 しい 関 数 を 識 別 します。このパ<br />
タンを 使 用 して、 元 関 数 の 前 処 理 または 後 処 理 を 追 加 します。<br />
$Super$$foo パッチされていない 元 関 数 foo() を 識 別 します。 元 関 数 はこのパタンを<br />
使 用 して 直 接 呼 び 出 すことができます。<br />
例 4-3 は、ExtraFunc() への 呼 び 出 しと foo() への 呼 び 出 しを 行 うように 修 正 され<br />
た 従 来 の 関 数 foo() を 示 しています。 詳 細 については、pdf\specs ディレクトリ 内<br />
の <strong>ARM</strong>ELF.pdf に 保 存 されている 文 書 を 参 照 して 下 さい。<br />
例 4-3<br />
extern void ExtraFunc(void);<br />
extern void $Super$$foo(void):<br />
/* this function will be linked instead of the original foo() */<br />
void $Sub$$foo(void)<br />
{<br />
ExtraFunc(); /* does some extra setup work */<br />
$Super$$foo(); /* calls the original foo function */<br />
}<br />
4-12 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
第 5 章<br />
分 散 ローディング 記 述 ファイルの 使 用<br />
本 章 では、armlink と 分 散 ローディング 記 述 ファイルを 使 用 した 複 雑 イメージの 作 成 方<br />
法 を 説 明 します。 本 章 は 以 下 のセクションから 構 成 されています。<br />
• 分 散 ローディングについて:P. 5-2<br />
• 分 散 ローディング 記 述 ファイルの 形 式 構 文 :P. 5-7<br />
• 等 価 な 分 散 ローディング 記 述 を 使 用 した 単 純 イメージの 生 成 :P. 5-28<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-1
分 散 ローディング 記 述 ファイルの 使 用<br />
5.1 分 散 ローディングについて<br />
イメージは 領 域 と 出 力 セクションから 構 成 されます。イメージに 含 まれる 各 領 域 の<br />
ロードアドレスと 実 行 アドレスは 異 なっていても 構 いません(P. 3-2「イメージ 構 造 の<br />
指 定 」 参 照 )。<br />
分 散 ローディング 機 能 を 使 用 することにより、イメージのメモリマップを armlink に 指<br />
定 することができます。 分 散 ローディングでは、イメージコンポーネントのグループ<br />
化 と 配 置 を 全 て 制 御 することができます。これにより、ロード 時 と 実 行 時 にメモリマッ<br />
プ 内 で 分 散 する 複 数 領 域 から 構 成 される 複 雑 イメージのマップを 記 述 することができ<br />
ます。 分 散 ローディンは 単 純 イメージ(P. 5-5 図 5-2 参 照 )にも 使 用 できますが、メモ<br />
リマップが 複 雑 なイメージのみに 使 用 されるのが 一 般 的 です(P. 5-6 図 5-4 参 照 )。<br />
イメージのメモリマップを 構 成 するには、armlink に 以 下 に 関 する 情 報 を 与 える 必 要 が<br />
あります。<br />
• 入 力 セクションを 領 域 にグループ 化 する 方 法 を 記 述 したグループ 化 情 報<br />
• メモリマップ 内 にイメージ 領 域 を 配 置 するアドレスを 記 述 した 配 置 情 報<br />
これらの 情 報 は 分 散 ローディング 記 述 を 使 用 して、armlink に 渡 されるテキストファイ<br />
ル 内 に 指 定 されます。<br />
5.1.1 分 散 ローディング 用 に 定 義 されたシンボル<br />
armlink は 分 散 ローディング 記 述 を 使 用 してイメージを 作 成 するときに、いくつかの 領<br />
域 関 連 シンボルを 作 成 します。これらのシンボルについては、P. 4-2「 領 域 関 連 シンボ<br />
ル」を 参 照 して 下 さい。これらの 特 殊 シンボルは、コードが 参 照 している 場 合 にのみ<br />
armlink によって 作 成 されます。<br />
注 意<br />
分 散 ローディング 記 述 ファイルが 使 用 されていない 場 合 、シンボルImage$$RW$$Base、<br />
Image$$RW$$Limit、Image$$RO$$Base、Image$$RO$$Limit、Image$$ZI$$Base、<br />
Image$$ZI$$Limit は 定 義 されません。<br />
デフォルトの 実 装 では Image$$ZI$$Limit を 使 用 しているため、<br />
__user_initial_stackheap() を 再 実 装 してヒープ 領 域 の 開 始 位 置 とスタック 領<br />
域 の 最 上 位 を 示 す 値 を 定 義 する 必 要 があります。 詳 細 については、ADS コンパイラ / ラ<br />
イブラリガイドの「ライブラリメモリモデル」のセクションと、ADS デベロッパガイ<br />
ドの「ROM へのコードの 書 き 込 み」のセクションを 参 照 して 下 さい。<br />
__user_initial_stackheap() を 再 実 装 しないと、リンカによって 以 下 のエラーメッ<br />
セージが 表 示 されます。<br />
Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).<br />
5-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
5.1.2 分 散 ローディングはいつ 使 用 すべきか<br />
リンカへのコマンドラインオプションを 使 用 すればデータとコードの 配 置 をある 程 度<br />
制 御 することができますが、 配 置 を 完 全 に 制 御 するには、コマンドラインから 入 力 可<br />
能 な 指 示 よりもさらに 詳 細 な 指 示 を 必 要 とします。 以 下 に、 分 散 ローディング 記 述 を<br />
必 要 とする(あるいはその 方 が 非 常 に 有 効 である)ケースを 挙 げます。<br />
メモリマップが 複 雑 な 場 合<br />
数 多 くの 異 なるメモリエリアに 配 置 しなければならないコードとデータ<br />
には、どのセクションをどのメモリ 空 間 に 配 置 するかを 定 義 した 詳 細 な<br />
指 示 が 必 要 となります。<br />
メモリタイプが 異 なる 場 合<br />
多 くのシステムには、フラッシュ、ROM、SDRAM、 高 速 SRAM が 組 み<br />
込 まれています。 分 散 ローディング 記 述 を 使 用 することにより、コード<br />
とデータを 最 も 適 切 なメモリタイプにマッチングさせることができま<br />
す。 例 えば、 割 り 込 みコードは 高 速 SRAM に 配 置 して 割 り 込 み 応 答 時 間<br />
を 向 上 させ、あまり 使 用 されないコンフィギュレーション 情 報 はそれよ<br />
りも 遅 いフラッシュメモリに 配 置 するといったことが 考 えられます。<br />
メモリマップ I/O を 使 用 する 場 合<br />
分 散 ローディング 記 述 を 使 用 して、データセクションをメモリマップ 内<br />
の 厳 密 なアドレスに 配 置 することができます。<br />
関 数 の 位 置 を 固 定 する 場 合<br />
周 辺 アプリケーションが 修 正 され、 再 コンパイルされた 場 合 でも、 関 数<br />
はメモリ 内 の 同 じ 位 置 に 配 置 しておくことができます。<br />
ヒープとスタックの 識 別 にシンボルを 使 用 する 場 合<br />
ヒープとスタックの 位 置 を 示 すシンボルを 定 義 し、そこに 内 包 されるモ<br />
ジュールの 位 置 はアプリケーションのリンク 時 に 指 定 することができ<br />
ます。<br />
このように、 組 み 込 みシステムでは ROM、RAM、メモリマップ I/O が 使 用 されるため、<br />
これらの 実 行 にはほとんどの 場 合 に 分 散 ローディングが 必 要 となります。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-3
分 散 ローディング 記 述 ファイルの 使 用<br />
5.1.3 コマンドラインオプション<br />
以 下 は、 分 散 ローディングに 使 用 する armlink コマンドラインオプションです。<br />
-scatter description_file_name<br />
このコマンドは、description_file_name に 記 述 されている 通 りにメモリマップを<br />
構 成 するよう、armlink に 指 示 します。 記 述 ファイルの 形 式 については、P. 5-7「 分 散<br />
ローディング 記 述 ファイルの 形 式 構 文 」を 参 照 して 下 さい。<br />
分 散 ローディング 記 述 ファイルの 詳 細 については、 以 下 を 参 照 して 下 さい。<br />
• 例 : 領 域 アドレスとセクションアドレスの 指 定 :P. 5-22<br />
• 等 価 な 分 散 ローディング 記 述 を 使 用 した 単 純 イメージの 生 成 :P. 5-28<br />
• ADS デベロッパガイドの「ROM へのコードの 書 き 込 み」の 説 明<br />
5.1.4 メモリマップが 単 純 なイメージ<br />
図 5-1 が 示 す 分 散 ローディング 記 述 は、オブジェクトファイルからのセグメントを、<br />
P. 5-5 図 5-2 のマップに 対 応 するメモリにロードします。この 領 域 の 最 大 サイズは 特 に<br />
指 定 する 必 要 はありませんが、 指 定 しておけば 領 域 が 境 界 をオーバフローしていない<br />
かどうかをリンカにチェックさせることができます。<br />
図 5-1 単 純 なファイルの 内 容<br />
5-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
図 5-2 メモリマップ<br />
リンカへのコマンドラインオプションで -ro-base 0x0 および -rw-base 0x10000<br />
を 指 定 しても、これと 同 じ 結 果 が 得 られます。<br />
5.1.5 メモリマップが 複 雑 なイメージ<br />
図 5-3 の 分 散 ローディング 記 述 は、program1.o と program2.o の 2 ファイルからの<br />
セグメントを、P. 5-6 図 5-4 のマップに 対 応 するメモリにロードします。<br />
図 5-3 メモリマップが 複 雑 なファイルの 内 容<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-5
分 散 ローディング 記 述 ファイルの 使 用<br />
図 5-4 分 散 ロードされる 複 雑 なメモリマップ<br />
P. 5-5 図 5-2 が 示 す 単 純 なメモリマップとは 異 なり、このアプリケーションは 基 本 コマ<br />
ンドラインオプションだけではリンカに 指 定 できません。<br />
注 意<br />
P. 5-5 図 5-3 の 分 散 ローディング 記 述 は、program1.o および program2.o のコード<br />
とデータの 位 置 だけを 指 定 します。したがって、 例 えば program3.o という 別 のモ<br />
ジュールをリンクさせるときにこの 記 述 ファイルを 使 用 しても、program3.o のコー<br />
ドとデータの 位 置 は 指 定 されません。<br />
コードとデータの 配 置 をよほど 厳 密 に 行 うのでない 限 り、 残 ったコードとデータの 配<br />
置 には、 指 定 子 * または .ANY の 使 用 を 推 奨 します(P. 5-24「 固 定 アドレスへの 領 域 の<br />
配 置 」 参 照 )。<br />
5-6 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
5.2 分 散 ローディング 記 述 ファイルの 形 式 構 文<br />
分 散 ローディング 記 述 ファイルは、ターゲット 組 み 込 み 製 品 のメモリマップを armlink<br />
に 通 知 するテキストファイルです。armlink をコマンドラインから 使 用 する 場 合 には、<br />
この 記 述 ファイルのファイル 拡 張 子 に 意 味 はありません。しかし、CodeWarrior IDE を<br />
使 用 する 場 合 は、 記 述 ファイルのデフォルト 拡 張 子 に .scf が 使 用 されます。(たとえ<br />
この 拡 張 子 を 変 更 しても、CodeWarrior IDE は 分 散 ローディングファイルとして 認 識 し<br />
ます。) 分 散 ローディング 記 述 ファイルを 使 用 すると、 以 下 を 指 定 することができます。<br />
• 各 ロード 領 域 のロードアドレスおよび 最 大 サイズ<br />
• 各 ロード 領 域 の 属 性<br />
• 各 ロード 領 域 から 導 出 される 実 行 領 域<br />
• 各 実 行 領 域 の 実 行 アドレスおよび 最 大 サイズ<br />
• 各 実 行 領 域 の 入 力 セクション<br />
記 述 ファイルの 形 式 には、ロード 領 域 、 実 行 領 域 、 入 力 セクションの 階 層 が 反 映 され<br />
ます。<br />
注<br />
領 域 に 対 する 入 力 セクションの 割 り 当 ては、 選 択 パタンが 分 散 ローディング 記 述 ファ<br />
イルに 書 き 込 まれる 順 序 と 全 く 関 係 ありません。 選 択 パタンと、ファイル / セクション<br />
の 名 前 またはセクション 属 性 との 間 で 最 適 な 組 み 合 わせが 使 用 されます。P. 5-18「 多 重<br />
一 致 の 解 決 」を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-7
分 散 ローディング 記 述 ファイルの 使 用<br />
5.2.1 BNF の 表 記 と 構 文<br />
表 5-1 は、 形 式 言 語 の 記 述 に 使 用 する BNF シンボルを 示 しています。<br />
表 5-1 BNF 構 文<br />
シンボル<br />
説 明<br />
" クオテーションマークは、 通 常 は BNF 構 文 の 一 部 である 文 字 が 定 義 の<br />
中 でリテラル 文 字 として 使 用 されることを 示 す 場 合 に 使 用 します。<br />
例 えば、 定 義 B"+"C はパタン B+C によってのみ 置 き 換 えることがで<br />
きます。 定 義 B+C は、パタン BC、BBC、BBBC のいずれかに 置 き 換 え<br />
られます。<br />
A ::= B<br />
A を B として 定 義 します。 例 えば、A::= B"+" | C は、A が B+ また<br />
は C のどちらかと 等 価 であることを 意 味 します。<br />
::= 表 記 は、そのコンポーネントにおいて 上 位 レベルの 構 成 を 定 義 す<br />
るために 使 用 します。また 各 コンポーネントには、さらに 単 純 なコン<br />
ポーネントの 上 位 レベルの 構 成 を 定 義 する ::= 定 義 を 使 用 することも<br />
可 能 です。<br />
例 えば、A::= B および B::= C | D は、 定 義 A がパタン C または D<br />
と 等 価 であることを 意 味 します。<br />
[A]<br />
任 意 のエレメント A を 示 します。 例 えば、A::= B[C]D は 定 義 A を<br />
BD または BCD に 拡 大 可 能 であることを 意 味 します。<br />
A+ エレメント A が 1 個 以 上 出 現 することを 意 味 します。 例 えば、A::=<br />
B+ は、 定 義 A を B、BB、BBB のいずれかに 拡 大 できることを 示 します。<br />
A* エレメント A が 0 個 以 上 出 現 することを 意 味 します。<br />
A | B<br />
出 現 するのはエレメント A または B のどちらかであり、 両 方 ではない<br />
ことを 意 味 します。<br />
(A B) エレメント A および B が 一 緒 にグループ 化 されることを 意 味 します。<br />
このシンボルは、| 演 算 子 を 使 用 するとき、あるいは 複 雑 なパタンを 繰<br />
り 返 すときに 使 用 すると 便 利 です。<br />
例 えば、A::=(B C)+ (D | E) は、 定 義 A が BCD、BCE、BCBCD、<br />
BCBCE、BCBCBCD、BCBCBCE のいずれかに 拡 大 可 能 であることを 意 味<br />
します。<br />
5-8 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
5.2.2 分 散 ローディング 記 述 ファイルに 使 用 する 構 文 の 概 要<br />
このセクションで 説 明 する BNF の 定 義 では、 読 みやすくするために 改 行 とスペースを<br />
入 れています。 分 散 ローディングの 定 義 に 改 行 とスペースを 入 れる 必 要 はなく、たと<br />
えファイル 内 に 存 在 していても 無 視 されます。<br />
scatter_descriptionは、1つ 以 上 のload_region_descriptionパタンと 定 義 さ<br />
れます。<br />
Scatter_description ::=<br />
load_region_description+<br />
load_region_description はロード 領 域 の 名 前 として 定 義 され、この 後 に 任 意 の 属<br />
性 指 定 子 またはサイズ 指 定 子 、ならびに 1 つ 以 上 の 実 行 領 域 の 記 述 が 続 きます。<br />
load_region_description ::=<br />
load_region_name (base_address | ("+" offset)) [attributes] [max_size]<br />
"{"<br />
execution_region_description+<br />
"}"<br />
execution_region_description は、 実 行 領 域 名 、ベースアドレス 指 定 、 任 意 の 属<br />
性 指 定 子 またはサイズ 指 定 子 、ならびに 1 つ 以 上 の 入 力 セクションの 記 述 として 定 義<br />
されます。<br />
execution_region_description ::=<br />
execution_region_name (base_address | "+" offset) [attributes] [max_size]<br />
"{"<br />
input_section_description+<br />
"}"<br />
input_section_description は、ソースモジュールセレクタパタンとそれに 続 く<br />
任 意 の 入 力 セクションセレクタして 定 義 されます。<br />
input_section_description ::=<br />
module_select_pattern<br />
[ "("<br />
("+" input_section_attr | input_section_pattern)<br />
([","] "+" input_section_attr | "," input_section_pattern))*<br />
")" ]<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-9
分 散 ローディング 記 述 ファイルの 使 用<br />
図 5-5 は、 典 型 的 な 分 散 ローディング 記 述 ファイルの 内 容 と 構 成 を 示 しています。<br />
図 5-5 分 散 ローディングファイル 定 義 のコンポーネント<br />
5-10 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
5.2.3 ロード 領 域 の 記 述<br />
ロード 領 域 は 以 下 で 構 成 されます。<br />
• 名 前 (リンカはこの 名 前 を 使 用 して 数 あるロード 領 域 を 識 別 します。)<br />
• ベースアドレス(ロードビューにおけるコードとデータの 開 始 アドレスです。)<br />
• 属 性 (オプション)<br />
• 最 大 サイズ(オプション)<br />
• 実 行 領 域 リスト( 実 行 ビューにおけるモジュールのタイプと 位 置 を 識 別 します。)<br />
図 5-6 は、 典 型 的 なロード 領 域 の 記 述 に 含 まれるコンポーネントを 示 しています。<br />
以 下 は BNF における 構 文 です。<br />
load_region_description ::=<br />
図 5-6 ロード 領 域 の 記 述 に 含 まれるコンポーネント<br />
load_region_name (base_address | ("+" offset)) [attribute_list] [ max_size ]<br />
"{"<br />
execution_region_description+<br />
"}"<br />
上 記 において:<br />
load_region_name<br />
ロード 領 域 を 命 名 します。 先 頭 31 文 字 だけが 有 意 です。この 名<br />
前 は 各 領 域 の 識 別 のみに 使 用 されます。exec_region_name<br />
(P. 5-13)とは 異 なり、load_region_name は<br />
Load$$region_name シンボルの 生 成 には 使 用 されません。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-11
分 散 ローディング 記 述 ファイルの 使 用<br />
注<br />
デバッガは 領 域 をロードアドレスにロードする 必 要 があるため、<br />
デバッガに 使 用 する 目 的 で 作 成 されるイメージには 各 領 域 に 固 有<br />
のベースアドレスが 必 要 となります。ロード 領 域 アドレスがオー<br />
バラップしていると、そのイメージの 一 部 が 上 書 きされます。<br />
しかし、ローダまたはオペレーティングシステムは、オーバラッ<br />
プしている 位 置 独 立 領 域 を 正 しくロードすることができます。1 つ<br />
以 上 の 位 置 独 立 領 域 が 異 なるアドレスに 自 動 的 に 移 動 されます。<br />
base_address<br />
領 域 内 のオブジェクトをリンクさせるアドレスです。<br />
base_address にはワード 境 界 整 列 の 数 値 を 指 定 する 必 要 があ<br />
ります。<br />
+offset<br />
先 行 ロード 領 域 の 終 わりを offset バイト 分 だけ 超 えたベースア<br />
ドレスを 示 します。offset には 4 で 割 った 余 りが 0 になる 値 を<br />
指 定 する 必 要 があります。これが 最 初 のロード 領 域 である 場 合 、<br />
+offset はベースアドレス 0 から offset バイトずれた 位 置 で 開<br />
始 することを 意 味 します。<br />
attribute_list ロード 領 域 の 内 容 のプロパティを 指 定 します。<br />
PI<br />
位 置 独 立<br />
RELOC<br />
再 配 置 可 能<br />
OVERLAY<br />
オーバレイ<br />
ABSOLUTE 絶 対 アドレス<br />
属 性 は 上 記 の 中 から 1 つだけを 指 定 することができます。デフォ<br />
ルトのロード 領 域 属 性 は ABSOLUTE です。<br />
PI、RELOC、OVERLAY のいずれかの 属 性 を 持 つロード 領 域 のアド<br />
レス 範 囲 はオーバラップさせることができます。ABSOLUTE ロー<br />
ド 領 域 のアドレス 範 囲 がオーバラップしていると、armlink はエ<br />
ラーを 生 成 します。<br />
OVERLAY キーワードを 使 用 することにより、 同 一 アドレス 上 に 複<br />
数 の 実 行 領 域 を 配 置 することができます。ADS にはオーバレイ 機<br />
能 はありません。したがって 同 一 アドレス 上 に 複 数 の 実 行 領 域 を<br />
配 置 するには、 専 用 のオーバレイマネージャを 使 用 する 必 要 があ<br />
ります。<br />
max_size<br />
execution_region_description<br />
ロード 領 域 の 最 大 サイズを 指 定 します。( 任 意 の max_size の 値<br />
が 指 定 されている 場 合 、その 領 域 に 複 数 の max_size バイトが 割<br />
り 当 てられていると、armlink はエラーを 生 成 します。)<br />
実 行 領 域 の 名 前 、アドレス、 内 容 を 指 定 します(P. 5-13「 実 行 領<br />
域 の 記 述 」 参 照 )。<br />
5-12 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
5.2.4 実 行 領 域 の 記 述<br />
実 行 領 域 は 以 下 で 構 成 されます。<br />
• 名 前<br />
• ベースアドレス( 絶 対 または 相 対 )<br />
• 任 意 の 最 大 サイズの 指 定<br />
• 実 行 領 域 のプロパティを 指 定 する 属 性<br />
• 1つ 以 上 の 入 力 セクションの 記 述 ( 対 象 実 行 領 域 に 配 置 されるモジュール)<br />
図 5-7 は、 典 型 的 な 実 行 領 域 の 記 述 に 含 まれるコンポーネントを 示 しています。<br />
以 下 は BNF を 使 用 した 実 行 領 域 記 述 構 文 を 示 しています。<br />
execution_region_description ::=<br />
図 5-7 実 行 領 域 の 記 述 に 含 まれるコンポーネント<br />
exec_region_name (base_address | "+" offset) [attribute_list] [max_size]<br />
"{"<br />
input_section_description+<br />
"}"<br />
上 記 において:<br />
exec_region_name 実 行 領 域 を 命 名 します。( 先 頭 31 文 字 だけが 有 意 です。)<br />
base_address<br />
+offset<br />
領 域 内 のオブジェクトをリンクさせるアドレスです。<br />
base_address はワード 境 界 で 整 列 させる 必 要 があります。<br />
先 行 の 実 行 領 域 の 終 わりを offset バイト 超 えたベースアドレス<br />
を 記 述 します。offset には 4 で 割 った 余 りが 0 になる 値 を 指 定<br />
する 必 要 があります。<br />
先 行 の 実 行 領 域 が 存 在 しない 場 合 (つまり、これがロード 領 域 内<br />
の 最 初 の 実 行 領 域 である 場 合 )、+offset は 実 行 領 域 のベースア<br />
ドレスが、それを 含 むロード 領 域 のベースから offset バイトず<br />
れた 位 置 から 開 始 することを 意 味 します。<br />
* ベース 指 定 子 (base_designator)は 下 記 の 部 分 を 指 します。<br />
(base_address | "+" offset)<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-13
分 散 ローディング 記 述 ファイルの 使 用<br />
+offset 形 式 が 使 用 され、それを 含 むロード 領 域 にRELOC 属 性 が<br />
設 定 されている 場 合 、 実 行 領 域 はこの RELOC 属 性 を 継 承 します。<br />
しかし、 固 定 base_address が 使 用 されていると、それ 以 後 に<br />
出 現 する offset は RELOC 属 性 を 継 承 しません。<br />
attribute_list 実 行 領 域 の 内 容 のプロパティを 指 定 します。<br />
PI<br />
位 置 独 立<br />
OVERLAY<br />
オーバレイ<br />
ABSOLUTE 絶 対 アドレス。 領 域 の 実 行 アドレスはベース<br />
指 定 子 によって 指 定 されます。<br />
FIXED<br />
固 定 アドレス。 対 象 領 域 のロードアドレスと<br />
実 行 アドレスの 両 方 がベース 指 定 子 によっ<br />
て 指 定 されます(この 領 域 はルート 領 域 で<br />
す。P. 5-22「ルート 実 行 領 域 の 作 成 」を 参 照<br />
して 下 さい)。ベース 指 定 子 には 絶 対 ベース<br />
アドレス、あるいは +0 のオフセットを 指 定<br />
する 必 要 があります。<br />
UNINIT<br />
未 初 期 化 データ<br />
属 性 には、PI、OVERLAY、FIXED、ABSOLUTE のいずれか 1 つを<br />
指 定 することができます。PI、FIXED、OVERLAY のいずれかが<br />
指 定 されていない 限 り、 実 行 領 域 のデフォルト 属 性 には<br />
ABSOLUTE が 使 用 されます。<br />
+offset 形 式 のベース 指 定 子 を 使 用 する 実 行 領 域 は、その 前 の 実<br />
行 領 域 (あるいは、その 領 域 がロード 領 域 内 の 最 初 の 実 行 領 域 で<br />
ある 場 合 には、それを 含 んでいるロード 領 域 )の 属 性 を 継 承 する<br />
か、ABSOLUTE 属 性 を 持 ちます。<br />
実 行 領 域 に 属 性 RELOC を 明 示 的 に 指 定 することはできません。 実<br />
行 領 域 は、 前 の 実 行 領 域 または 親 領 域 の 属 性 を 継 承 する 場 合 にの<br />
み RELOC 属 性 を 持 つことができます。<br />
+offset 形 式 のベース 指 定 子 を 使 用 する 実 行 領 域 がそれ 自 身 の<br />
属 性 を 持 つことはできません(ただし、 継 承 をオーバライドする<br />
ABSOLUTE 属 性 は 除 きます)。 開 始 位 置 を 変 更 せずに 領 域 に<br />
ABSOLUTE を 設 定 するには、+0 ABSOLUTE の 組 み 合 わせを 使 用 し<br />
ます。<br />
PI または OVERLAY が 指 定 された(あるいは RELOC 属 性 を 継 承 し<br />
た) 実 行 領 域 は、オーバラップしたアドレス 範 囲 を 持 つことがで<br />
きます。ABSOLUTE または FIXED が 設 定 された 実 行 領 域 のアドレ<br />
ス 範 囲 がオーバラップしていると、armlink はエラーを 生 成 します。<br />
UNINIT は、 実 行 領 域 内 に ZI 出 力 セクションが 存 在 している 場 合<br />
に、その ZI 出 力 セクションが 0 に 初 期 化 されないことを 示 しま<br />
す。この 属 性 を 使 用 することにより、 未 初 期 化 データまたはメモ<br />
リマップ I/O を 含 む 実 行 領 域 を 作 成 することができます。<br />
5-14 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
max_size<br />
対 象 領 域 に 複 数 の max_size が 割 り 当 てられている 場 合 にはエ<br />
ラーを 生 成 するように armlink に 命 令 する 任 意 の 数 値 です。<br />
input_section_description<br />
入 力 セクションの 内 容 を 指 定 します(「 入 力 セクションの 記 述 」 参<br />
照 )。<br />
5.2.5 入 力 セクションの 記 述<br />
input_section の 記 述 とは、 以 下 によって 入 力 セクションを 識 別 するパタンを 意 味<br />
します。<br />
• モジュール 名 (オブジェクトファイルの 名 前 、ライブラリメンバの 名 前 、あるい<br />
はライブラリファイルの 名 前 )。モジュール 名 にはワイルドカード 文 字 を 使 用 す<br />
ることができます。<br />
• 入 力 セクション 名 、あるいは READ-ONLY や CODE などの 入 力 セクション 属 性<br />
図 5-8 は、 典 型 的 な 入 力 セクションの 記 述 に 含 まれるコンポーネントを 示 しています。<br />
以 下 は BNF を 使 用 した 構 文 を 示 しています。<br />
input_section_description ::=<br />
図 5-8 入 力 セクションの 記 述 に 含 まれるコンポーネント<br />
module_select_pattern<br />
["("<br />
("+" input_section_attr | input_section_pattern)<br />
([","] "+" input_section_attr | "," input_section_pattern))*<br />
")"]<br />
上 記 において:<br />
module_select_pattern<br />
リテラルテキストから 構 成 されるパタンです。ワイルドカード 文 字 * は<br />
0 個 以 上 の 文 字 と、? は 任 意 の 1 文 字 とマッチングされます。<br />
ファイル 名 の 大 文 字 ・ 小 文 字 を 区 別 するホストでも、マッチングは 大 文<br />
字 ・ 小 文 字 の 区 別 なく 行 われます。<br />
全 てのオブジェクトとマッチングさせるときは *.o を、 全 てのファイル<br />
およびライブラリとマッチングさせるときは * を 使 用 します。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-15
分 散 ローディング 記 述 ファイルの 使 用<br />
入 力 セクションは、module_selector_pattern が 以 下 のいずれか 1<br />
つと 一 致 するときに、module_selector_pattern と 一 致 します。<br />
• その 入 力 セクションを 含 むオブジェクトファイルの 名 前<br />
• ライブラリメンバの 名 前 ( 先 行 パス 名 なし)<br />
• そのセクションが 抽 出 されたライブラリのフルネーム(パス 名 を<br />
含 む)。この 名 前 にスペースが 含 まれている 場 合 には、ワイルド<br />
カードを 使 用 して 検 索 を 簡 素 化 することができます。 例 えば、<br />
C:\lib dir\libname.libとのマッチングには*libname.lib<br />
を 使 用 します。<br />
特 殊 モジュールセレクタパタン .ANY を 使 用 すると、 入 力 セクションの<br />
親 モジュールを 考 えることなく、 入 力 セクションを 実 行 領 域 に 割 り 当 て<br />
ることができます。.ANY は、 実 行 領 域 をドントケア 割 り 当 てによって<br />
満 たす 場 合 に 使 用 します。<br />
注<br />
• module_selector_pattern かつ、input_section_attr ま<br />
たは input_section_pattern のどちらかと 一 致 する 入 力 セク<br />
ションだけが 実 行 領 域 に 含 まれます。<br />
(+ input_section_attr)および(input_section_pattern)<br />
を 省 略 した 場 合 には、デフォルトの +RO が 使 用 されます。<br />
• コンパイラによって 生 成 された、あるいは <strong>ARM</strong> ライブラリコード<br />
によって 使 用 される 入 力 セクション 名 は 信 頼 しないで 下 さい。こ<br />
れらの 名 前 は、 異 なるコンパイラオプションが 使 用 される 場 合 な<br />
どに、コンパイルの 都 度 変 更 される 可 能 性 があります。また、コ<br />
ンパイラに 使 用 されるセクション 命 名 規 則 が 全 てのリリースで 一<br />
貫 しているとは 限 りません。<br />
input_section_attr<br />
入 力 セクション 属 性 とマッチ ングされる 属 性 セレ クタです。 各<br />
input_section_attr の 前 には + を 付 けます。<br />
入 力 セクション 名 とマッチングするパタンを 指 定 するとき、この 名 前 に<br />
は 接 頭 文 字 + を 付 ける 必 要 があります。+ の 直 前 にあるカンマは 省 略 す<br />
ることが 可 能 です。<br />
5-16 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
セレクタの 大 文 字 ・ 小 文 字 は 区 別 されません。 認 識 されるセレクタは 以<br />
下 のとおりです。<br />
• RO-CODE<br />
• RO-DATA<br />
• RO(RO-CODE と RO-DATA の 両 方 を 選 択 します。)<br />
• RW-DATA<br />
• RW-CODE<br />
• RW(RW-CODE と RW-DATA の 両 方 を 選 択 します。)<br />
• ZI<br />
• ENTRY(ENTRY ポイントを 含 むセクションです。)<br />
以 下 の 同 義 語 が 認 識 されます。<br />
• CODE:RO-CODE<br />
• CONST:RO-DATA<br />
• TEXT:RO<br />
• DATA:RW<br />
• BSS:ZI<br />
以 下 の 擬 似 属 性 が 認 識 されます。<br />
• FIRST<br />
• LAST<br />
FIRST と LAST は、 配 置 順 序 が 重 要 な 場 合 ( 例 えば、 特 定 の 入 力 セク<br />
ションを 領 域 内 の 最 初 に 配 置 し、チェックサムを 含 む 入 力 セクションを<br />
最 後 に 配 置 しなければならない 場 合 など)に、 領 域 内 の 最 初 と 最 後 のセ<br />
クションをマーキングする 目 的 で 使 用 することができます。FIRST また<br />
は LAST が input_section_attr として 最 初 に 出 現 した 時 点 で、その<br />
リストを 終 了 します。<br />
特 殊 モジュールセレクタパタン .ANY を 使 用 すると、 入 力 セクションの<br />
親 モジュールを 考 えることなく、 入 力 セクションを 実 行 領 域 に 割 り 当 て<br />
ることができます。.ANY は、 実 行 領 域 をドントケア 割 り 当 てによって<br />
満 たす 場 合 に 使 用 します。ほとんどの 場 合 、1 つの .ANY を 使 用 しても、<br />
* モジュールセレクタを 使 用 しても、 結 果 は 同 じです。<br />
分 散 ローディング 記 述 ファイル 内 に 2 つの * セレクタを 使 用 することは<br />
できません。しかしながら、 例 えば 2 つの 修 正 セレクタ *A と *B を 使 用<br />
することは 可 能 であり、また .ANY セレクタを * モジュールセレクタと<br />
組 み 合 わせて 使 用 することも 可 能 です。* モジュールセレクタは .ANY よ<br />
りも 優 先 されます。* セレクタを 含 むファイルの 一 部 分 が 削 除 されると、<br />
.ANY セレクタが 有 効 になります。<br />
.ANY モジュールセレクタパタンを 持 つ<br />
input_section_descriptions の 解 決 は、その 他 全 ての( 非 .ANY の)<br />
入 力 セクションの 記 述 が 解 決 され、 入 力 セクションが 完 全 一 致 に 最 も 近<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-17
分 散 ローディング 記 述 ファイルの 使 用<br />
い 実 行 領 域 に 割 り 当 てられてから 行 われます。 複 数 の .ANY パタンが 存<br />
在 するとき、リンカは 可 能 な 限 り 最 初 の .ANY を 埋 めてから、 次 の .ANY<br />
の 充 填 を 開 始 します。<br />
残 りの 各 未 割 り 当 て 入 力 セクションは、 以 下 の 特 性 を 持 つ 実 行 領 域 に 割<br />
り 当 てられます。<br />
• 残 りの 空 き 空 間 が 最 大 の 領 域 (max_size 値 と、 既 に 割 り 当 てら<br />
れている 入 力 セクションのサイズによって 決 定 されます。)<br />
• .ANY input_section_description に 一 致 する 領 域<br />
• メモリアクセス 属 性 ( 存 在 する 場 合 )が 入 力 セクションのメモリ<br />
属 性 と 一 致 する 領 域<br />
input_section_pattern<br />
大 文 字 ・ 小 文 字 の 区 別 なく、 入 力 セクション 名 とマッチングするパタン<br />
です。このパタンはリテラルテキストで 構 成 されます。ワイルドカード<br />
文 字 * は 0 個 以 上 の 文 字 と、? は 任 意 の 1 文 字 とマッチングされます。<br />
5.2.6 多 重 一 致 の 解 決<br />
1 つのセクションが 複 数 の 実 行 領 域 と 一 致 するとき、それらの 一 致 は 以 下 のように 解 決<br />
されます。 一 意 の 一 致 を 検 出 できない 場 合 、armlink はその 分 散 ローディング 記 述 を 誤<br />
りとみなします。 各 セクションは module_selector_pattern と<br />
input_section_selector によって 選 択 されます。<br />
module_selector_pattern の 指 定 例 :<br />
• * は 全 てのモジュールまたはライブラリと 一 致 します。<br />
• *.o は 全 てのオブジェクトモジュールと 一 致 します。<br />
• math.o は math.o モジュールと 一 致 します。<br />
• *math.lib は math.lib で 終 わる 全 てのライブラリパスと 一 致 します( 例 :<br />
C:\apps\lib\math\satmath.lib)。<br />
input_section_selector 指 定 例 :<br />
• +ROは、 全 てのROコードと 全 てのROデータに 一 致 する 入 力 セクション 属 性 です。<br />
• +RW,+ZI は、 全 ての RW コード、 全 ての RW データ、 全 ての ZI データに 一 致 す<br />
る 入 力 セクション 属 性 です。<br />
• BLOCK_42 は、BLOCK_42. と 命 名 されたアセンブリファイルエリアに 一 致 する<br />
入 力 セクションパタンです。<br />
5-18 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
注<br />
コンパイラは、.text、.data、.constdata、.bss などの 入 力 セクションパ<br />
タンによって 識 別 可 能 なエリアを 生 成 します。しかし、これらの 名 前 は 今 後 の<br />
バージョンで 変 更 される 可 能 性 があるため、できるだけ 使 用 しないで 下 さい。<br />
CまたはC++ファイルに 含 まれる 特 定 の 関 数 または 外 部 データをマッチングする<br />
必 要 がある 場 合 には、 以 下 のいずれかの 方 法 を 使 用 して 下 さい。<br />
— その 関 数 またはデータを 独 立 モジュールにコンパイルし、そのモジュール<br />
オブジェクト 名 でマッチングする。<br />
— #pragma arm section を 使 用 して 対 象 コードまたはデータを 含 むセク<br />
ションを 指 定 する(ADS コンパイラ / ライブラリガイドのプラグマの 説 明<br />
を 参 照 して 下 さい)。<br />
多 重 一 致 の 記 述 には 以 下 の 変 数 を 使 用 します。<br />
• m1 および m2:モジュールセレクタパタンを 表 します。<br />
• s1 および s2: 入 力 セクションセレクタを 表 します。<br />
多 重 一 致 の 場 合 、armlink は 最 も 厳 密 な module_selector_pattern と<br />
input_section_selector の 組 み 合 わせに 基 づいて、 入 力 セクションを 割 り 当 てる<br />
領 域 を 決 定 します。<br />
例 えば、 入 力 セクション A が 実 行 領 域 R1 の m1,s1 と 一 致 し、 実 行 領 域 R2 の m2,s2 と<br />
一 致 する 場 合 、armlink は 以 下 のように 割 り 当 てを 行 います。<br />
• m1,s1 が m2,s2 よりも 厳 密 な 場 合 は、A を R1 に 割 り 当 てます。<br />
• m2,s2 が m1,s1 よりも 厳 密 な 場 合 は、A を R2 に 割 り 当 てます。<br />
• m1,s1 が m2,s2 よりも 厳 密 ではなく、 同 時 に m2,s2 が m1,s1 よりも 厳 密 ではない 場<br />
合 は、その 分 散 ローディングの 記 述 を 誤 りと 診 断 します。<br />
armlink は 以 下 の 順 序 で 最 も 厳 密 な module_selector_pattern、<br />
input_section_selector 対 を 決 定 します。<br />
1. モジュールセレクタパタンの 場 合 :<br />
テキストストリング m1 がパタン m2 に 一 致 し、テキストストリング m2 がパタン<br />
m1 に 一 致 しない 場 合 は、m1 が m2 よりも 厳 密 であると 判 断 します。<br />
2. 入 力 セクションセレクタの 場 合 :<br />
• s1 と s2 の 両 方 が 同 一 パタンのセクション 名 を 持 つ 場 合 には、モジュールセ<br />
レクタパタンと 同 じ 定 義 が 使 用 されます。<br />
• s1、s2 のどちらか 一 方 が 入 力 セクション 名 と 一 致 し、 他 方 が 入 力 セクショ<br />
ン 属 性 と 一 致 する 場 合 には、s1 と s2 の 順 序 付 けは 行 われず、その 記 述 は 誤<br />
りと 診 断 されます。<br />
• s1 と s2 の 両 方 が 入 力 セクション 属 性 に 一 致 する 場 合 、s1 が s2 よりも 厳 密<br />
であるかどうかの 決 定 は、 次 の 関 係 によって 定 義 されます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-19
分 散 ローディング 記 述 ファイルの 使 用<br />
ENTRY は、RO-CODE、RO-DATA、RW-CODE、RW-DATA よりも 厳 密 である。<br />
RO-CODE は RO よりも 厳 密 である。<br />
RO-DATA は RO よりも 厳 密 である。<br />
RW-CODE は RW よりも 厳 密 である。<br />
RW-DATA は RW よりも 厳 密 である。<br />
セクション 属 性 においては、 上 記 以 外 に(s1 が s2 よりも 厳 密 である) 関 係<br />
を 示 すメンバはありません。<br />
3. module_selector_pattern, input_section_selector 対 に 関 して、<br />
m1,s1 は 以 下 が 真 である 場 合 にのみ m2,s2 よりも 厳 密 であると 判 断 されます。<br />
• s1 がリテラル 入 力 セクション 名 (つまり、パタン 文 字 が 含 まれていない 名<br />
前 )であり、s2 が +ENTRY 以 外 の 入 力 セクション 属 性 と 一 致 する。<br />
• m1 が m2 よりも 厳 密 である。<br />
• s1 が s2 よりも 厳 密 である。<br />
このマッチング 方 式 は 以 下 の 結 果 をもたらします。<br />
• 記 述 がファイル 内 に 書 かれた 順 序 に 依 存 しない。<br />
• 一 般 的 に、オブジェクトの 記 述 が 厳 密 になればなるほど、それに 含 まれる 入 力 セ<br />
クションの 記 述 が 厳 密 になる。<br />
• input_section_selectors が 以 下 の 場 合 を 除 いて 検 査 されない。<br />
— オブジェクトの 選 択 が 確 定 されない。<br />
— 一 方 のセレクタが 入 力 セクションの 完 全 な 名 前 を 指 定 し、 他 方 が 属 性 で 選<br />
択 する。この 場 合 、 明 示 的 な 入 力 セクション 名 は、ENTRY 以 外 の、1 つの<br />
オブジェクトから 1 つの 入 力 セクションだけを 選 択 するどの 属 性 よりも 厳<br />
密 です。このことは、 入 力 セクション 名 に 関 連 付 けられたオブジェクトセ<br />
レクタがその 属 性 よりも 厳 密 ではない 場 合 にも 言 えます。<br />
5-20 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
例 5-1 は、 複 数 実 行 領 域 とパタンマッチングを 示 しています。<br />
例 5-1 パタンマッチング<br />
LR_1 0x040000<br />
{<br />
ER_ROM 0x040000<br />
; The startup exec region address is the same<br />
{ ; as the load address.<br />
application.o (+ENTRY) ; The section containing the entry point from<br />
} ; the object is placed here.<br />
ER_RAM1 0x048000<br />
{<br />
application.o (+RO_CODE) ; Other RO code from the object goes here<br />
}<br />
ER_RAM2 0x050000<br />
{<br />
}<br />
application.o (+RO)<br />
}<br />
ER_RAM3 0x060000<br />
{<br />
application.o (+RW)<br />
}<br />
ER_RAM4 +0<br />
{<br />
*.o (+RO, +RW, +ZI)<br />
}<br />
; The RO data goes here<br />
; RW code and data go here<br />
; Follows on from end of ER_R3<br />
; Everything except for application.o goes here<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-21
分 散 ローディング 記 述 ファイルの 使 用<br />
5.3 例 : 領 域 アドレスとセクションアドレスの 指 定<br />
このセクションでは、 分 散 ローディング 記 述 ファイルを 使 用 した 以 下 のアドレスの 指<br />
定 方 法 を 説 明 します。<br />
• ベニア<br />
• ROM 内 の RO 定 数<br />
• ルート 実 行 領 域<br />
固 定 アドレスにあるデータおよび 関 数 へのアクセスについては、ADS デベロッパガイ<br />
ドの「ROM へのコードの 書 き 込 み」を 参 照 して 下 さい。<br />
5.3.1 分 散 ローディング 記 述 におけるベニア 入 力 セクションの 選 択<br />
ベニアは、<strong>ARM</strong> コードと Thumb コードの 切 り 替 え、あるいは 1 つの 命 令 で 指 定 可 能 な<br />
ジャンプよりも 長 いプログラムジャンプの 実 行 に 使 用 されます(P. 3-13「ベニアの 生<br />
成 」 参 照 )。リンカが 生 成 したベニア 入 力 セクションの 配 置 には、 分 散 ローディング<br />
ファイルを 使 用 します。 分 散 ローディング 記 述 ファイル 内 で *(Veneer$$Code) セク<br />
ションセレクタを 保 持 できる 実 行 領 域 は 多 くても 1 つです。<br />
armlink は、 安 全 な 場 合 に 限 り、*(Veneer$$Code) セクションセレクタによって 識 別<br />
される 領 域 にベニア 入 力 セクションを 配 置 します。アドレス 範 囲 の 問 題 や 実 行 領 域 サ<br />
イズの 制 限 などにより、ベニア 入 力 セクションをその 領 域 に 割 り 当 てることができな<br />
い 場 合 もあります。 指 定 された 領 域 にベニアを 追 加 できない 場 合 は、そのベニアを 生<br />
成 した 再 配 置 後 の 入 力 セクションを 含 む 実 行 領 域 に 追 加 されます。<br />
旧 バージョンの <strong>ARM</strong> ツールを 使 用 した 分 散 ローディング 記 述 ファイルに 含 まれる<br />
*(IWV$$Code) のインスタンスは、 自 動 的 に *(Veneer$$Code) に 変 換 されます。 新<br />
しい 記 述 では *(Veneer$$Code) を 使 用 して 下 さい。<br />
5.3.2 ルート 実 行 領 域 の 作 成<br />
イメージの 初 期 エントリポイントを 指 定 する 場 合 、あるいは ENTRY ディレクティブが<br />
1 つしか 使 用 されていないためにリンカが 初 期 エントリポイントを 作 成 する 場 合 には、<br />
そのエントリポイントが 必 ずルート 領 域 内 に 配 置 されるようにしなければなりませ<br />
ん。ルート 領 域 とは、そのロードアドレスで 実 行 する 領 域 を 指 します。 初 期 エントリ<br />
ポイントがルート 領 域 内 に 存 在 しない 場 合 はリンクが 不 可 能 となり、リンカは 以 下 の<br />
ようなエラーメッセージを 返 します。<br />
Entry point (0x00000000) lies within non-root region ER_ROM<br />
5-22 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
分 散 ローディング 記 述 ファイルにおいて、ある 領 域 がルート 領 域 であることを 指 定 す<br />
るには、 以 下 のどちらかの 方 法 を 使 用 することができます。<br />
• その 実 行 領 域 の 属 性 として、 明 示 的 に、あるいはデフォルトのままで ABSOLUTE<br />
を 指 定 し、 最 初 の 実 行 領 域 とそれを 含 むロード 領 域 に 同 じアドレスを 使 用 しま<br />
す。 実 行 領 域 のアドレスをロード 領 域 のアドレスと 同 一 にするには、 以 下 のどち<br />
らかの 方 法 を 使 用 します。<br />
— 実 行 領 域 のベース 指 名 子 (アドレス)とロード 領 域 のベース 指 名 子 (アド<br />
レス)の 両 方 に 同 一 数 値 を 指 定 する。<br />
— ロード 領 域 内 の 最 初 の 実 行 領 域 に +0 オフセットを 指 定 する。<br />
全 ての 実 行 領 域 にオフセット 0(+0)を 指 定 すると、それらの 領 域 全 てが<br />
ルート 領 域 となります( 例 5-2 参 照 )。<br />
• FIXED 実 行 領 域 属 性 を 使 用 して、 特 定 領 域 のロードアドレスと 実 行 アドレスを 同<br />
じにします(P. 5-24 例 5-3、P. 5-24 図 5-9 参 照 )。<br />
FIXED 属 性 を 使 用 することにより、どの 実 行 領 域 でも ROM 内 の 特 定 アドレスに 配 置 す<br />
ることができます。 詳 細 については、P. 5-24「 固 定 アドレスへの 領 域 の 配 置 」を 参 照 し<br />
て 下 さい。<br />
例 5-2 同 一 ロード / 実 行 アドレスの 指 定<br />
LR_1 0x040000<br />
; load region starts at 0x40000<br />
{ ; start of execution region descriptions<br />
ER_RO 0x040000 ; load address = execution address<br />
{<br />
*(+RO)<br />
; all RO sections (must include section with<br />
; initial entry point)<br />
}<br />
; rest of scatter description...<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-23
分 散 ローディング 記 述 ファイルの 使 用<br />
例 5-3 FIXED 属 性 の 使 用<br />
LR_1 0x040000<br />
; load region starts at 0x40000<br />
{ ; start of execution region descriptions<br />
ER_RO 0x040000 ; load address = execution address<br />
{<br />
*(+RO)<br />
; RO sections other than those in init.o<br />
}<br />
ER_INIT 0x080000 FIXED ; load address and execution address of this<br />
; execution region are fixed at 0x80000<br />
{<br />
init.o(+RO) ; all RO sections from init.o<br />
}<br />
; rest of scatter description...<br />
図 5-9 固 定 実 行 領 域 のメモリマップ<br />
5.3.3 固 定 アドレスへの 領 域 の 配 置<br />
実 行 領 域 の 分 散 ローディング 記 述 に FIXED 属 性 を 使 用 することにより、ロードおよび<br />
実 行 が 固 定 アドレスで 行 われるルート 領 域 を 作 成 することができます。<br />
FIXED は、1 つのロード 領 域 内 ( 一 般 的 には 単 一 ROM デバイス 内 )に 複 数 のルート 領 域<br />
を 作 成 するために 使 用 します。 例 えば、この 属 性 を 使 用 することで 定 数 テーブルや<br />
チェックサムなどの 関 数 またはデータブロックをROM 内 の 固 定 アドレスに 配 置 できる<br />
ため、ポインタから 容 易 にアクセスすることが 可 能 となります。<br />
例 えば、 何 らかの 初 期 化 コードを ROM の 開 始 位 置 に 配 置 し、チェックサムを ROM の<br />
終 わりに 配 置 するように 指 定 した 場 合 には、メモリ 内 容 の 一 部 分 が 使 用 されない 可 能<br />
性 があります。このような 場 合 には * または .ANY モジュールセレクタを 使 用 して、 初<br />
期 化 ブロックの 終 わりからデータブロック 開 始 までの 領 域 を 充 填 します。<br />
5-24 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
注<br />
コードの 保 守 性 とデバッグの 容 易 性 を 高 めるには、 分 散 ローディング 記 述 ファイル 内 の<br />
配 置 指 定 要 素 を 最 小 限 に 抑 え、 関 数 とデータの 詳 細 な 配 置 はリンカに 任 せておきます。<br />
部 分 リンクされたコンポーネントオブジェクトは 指 定 できません。 例 えば、オブジェ<br />
クト obj1.o、obj2.o、obj3.o を 部 分 リンクさせて obj_all.o を 生 成 したとき、<br />
これらのコンポーネントオブジェクトの 名 前 は 生 成 されたオブジェクトで 破 棄 されま<br />
す。このため、 例 えばオブジェクトの 1 つである obj1.o を 名 前 で 参 照 することはで<br />
きなくなります。 参 照 できるのは 結 合 オブジェクトである obj_all.o のみです。<br />
特 定 アドレスへの 関 数 とデータの 配 置<br />
通 常 、コンパイラは 1 つのソースファイルから RO、RW、ZI の 各 セクションを 生 成 し<br />
ます。これらの 領 域 にはソースファイルからの 全 てのコードとデータが 含 まれていま<br />
す。1 つの 関 数 またはデータ 項 目 を 固 定 アドレスに 配 置 するには、リンカにその 関 数 ま<br />
たはデータを 入 力 ファイルの 残 りの 部 分 とは 別 に 生 成 させる 必 要 があります。 個 々の<br />
オブジェクトにアクセスするには、 以 下 のいずれかの 方 法 を 使 用 します。<br />
• 関 数 またはデータ 項 目 をそれ 専 用 のソースファイルに 配 置 する。<br />
注<br />
関 数 ごと、またはデータブロックごとに 1 つのオブジェクトを 指 定 すると、コン<br />
パイラの 最 適 化 能 力 が 低 下 します。<br />
• -zo コンパイラオプションを 使 用 して、 関 数 ごとに 1 つのオブジェクトファイル<br />
を 生 成 する(ADS コンパイラ / ライブラリガイド 参 照 )。<br />
• C または C++ ソースコード 内 で #pragma arm section を 使 用 し、 複 数 の 名 前<br />
を 持 つセクションを 作 成 する(P. 5-27 例 5-5 参 照 )。<br />
• アセンブリ 言 語 から AREA ディレクティブを 使 用 する。アセンブリコードでは、<br />
配 置 可 能 な 最 小 単 位 が AREA となります(ADS アセンブラガイド 参 照 )。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-25
分 散 ローディング 記 述 ファイルの 使 用<br />
各 オブジェクトファイルの 内 容 の 配 置<br />
例 5-4 が 示 す 分 散 ローディング 記 述 ファイルは、 以 下 の 配 置 を 行 います。<br />
• 初 期 化 コードをアドレス 0x0 に 配 置 する( 続 けて 残 りの RO コードと、オブジェ<br />
クト data.o 内 の RO データを 除 く 全 ての RO データを 配 置 します)。<br />
• 全 てのグローバル RW 変 数 を RAM 内 の 0x400000 に 配 置 する。<br />
• data.o からのテーブル RO_DATA をアドレス 0x1ff00 に 固 定 する。<br />
例 5-4 セクションの 配 置<br />
LOADREG1 0x0 0x10000<br />
{<br />
EXECREG1 0x0 0x2000 ; ROOT Region, containing init code<br />
{ ; place init code at exactly 0x0<br />
init.o (Init, +FIRST)<br />
* (+RO) ; rest of code and read-only data<br />
}<br />
RAM 0x400000<br />
; RW data to be placed at 0x400000<br />
{<br />
* (+RW +ZI)<br />
}<br />
DATABLOCK 0x1ff00 0xff FIXED ; execution region fixed at 0x1ff00<br />
{ ; the maximum space available for table is 0xff<br />
data.o(+RO_DATA) ; place read-only data between 0x1ff00 and 0x1ffff<br />
}<br />
}<br />
注<br />
FIXED を 単 一 ロード 領 域 に 使 用 することが 適 切 ではない 場 合 があります。 以 下 に、 固<br />
定 位 置 を 指 定 するための 他 の 方 法 を 紹 介 します。<br />
• 使 用 するローダが 複 数 のロード 領 域 を 処 理 できる 場 合 は、RO コードまたはデー<br />
タをその 専 用 のロード 領 域 に 配 置 する。<br />
• 関 数 またはデータを ROM 内 の 固 定 位 置 に 配 置 する 必 要 がない 場 合 は、FIXED の<br />
代 わりに ABSOLUTE を 使 用 する。これにより、ローダはロード 領 域 からのデー<br />
タを RAM 内 の 指 定 されたアドレスにコピーします(ABSOLUTE はデフォルト 属<br />
性 です)。<br />
• データ 構 造 をメモリマップ I/O の 位 置 に 配 置 するには、2 つのロード 領 域 を 使 用<br />
して UNINIT を 指 定 する(UNINIT を 使 用 するとメモリ 位 置 はゼロ 初 期 化 されま<br />
せん)。 詳 細 については、ADS デベロッパガイドの「ROM へのコードの 書 き 込<br />
み」を 参 照 して 下 さい。<br />
5-26 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
arm セクションプラグマの 使 用<br />
コードまたはデータオブジェクトを 専 用 ソースファイル 内 に 配 置 して、そのオブジェ<br />
クトファイルのセクションを 配 置 するには、 標 準 的 なコーディング 方 法 を 使 用 します。<br />
しかしながら、 命 名 されたセクションの 配 置 には、プラグマと 分 散 ローディング 記 述<br />
ファイルも 使 用 することができます。モジュール( 例 :adder.c)を 作 成 し、 例 5-5 が<br />
示 すようにセクションを 明 示 的 に 命 名 します。<br />
例 5-5 セクションの 命 名<br />
// file adder.c<br />
int x1 = 5;<br />
int y1[100];<br />
int const z1[3] = {1,2,3};<br />
int sub1(int x) {return x-1;}<br />
// in.data<br />
// in.bss<br />
// in.constdata<br />
// in.text<br />
#pragma arm section rwdata = "foo", code ="foo"<br />
int x2 = 5;<br />
// in foo (data part of region)<br />
char *s3 = "abc";<br />
// s3 in foo, "abc" in .constdata<br />
int add1(int x) {return x+1;} // in foo (.text part of region)<br />
#pragma arm section code, rwdata // return to default placement<br />
命 名 したセクションを 配 置 する 位 置 は、 分 散 ローディング 記 述 ファイルを 使 用 して 指<br />
定 します( 例 5-6 参 照 )。コードセクションとデータセクションの 名 前 が 同 じ 場 合 には、<br />
コードセクションを 先 に 配 置 します。<br />
例 5-6 セクションの 配 置<br />
FLASH 0x24000000 0x4000000<br />
{<br />
FLASH 0x24000000 0x4000000<br />
{<br />
init.o (Init, +First)<br />
; place code from init.o first<br />
* (+RO) ; sub1(), z1[]<br />
}<br />
32bitRAM 0x0000<br />
{<br />
vectors.o (Vect, +First)<br />
* (+RW,+ZI) ; x1, y1<br />
}<br />
ADDER 0x08000000<br />
{<br />
adder.o (foo)<br />
; x2, string s3, and add1()<br />
}<br />
}<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-27
分 散 ローディング 記 述 ファイルの 使 用<br />
5.4 等 価 な 分 散 ローディング 記 述 を 使 用 した 単 純 イメージの 生 成<br />
コマンドラインオプション(-ro-base、-rw-base、-reloc、-split、-ropi、-rwpi)<br />
を 使 用 すると、P. 3-14「コマンドラインオプションを 使 用 した 単 純 イメージの 作 成 」で<br />
説 明 した 単 純 イメージタイプが 作 成 されます。これらと 同 じイメージタイプは、<br />
-scatter コマンドラインオプションと、 対 応 する 分 散 ローディング 記 述 を 含 むファイ<br />
ルを 使 用 して 作 成 することができます。<br />
5.4.1 タイプ 1<br />
このタイプのイメージは、ロードビューでは 1 つのロード 領 域 、 実 行 ビューでは 3 つ<br />
の 実 行 領 域 から 構 成 されます。 実 行 領 域 はメモリマップ 内 で 連 続 配 置 されます。<br />
非 ropi 領 域<br />
-ro-base address は、RO 出 力 セクションを 含 む 領 域 のロード / 実 行 アドレスを 指 定<br />
します。 例 5-7 は、-ro-base 0x040000 を 使 用 したときと 同 じ 結 果 をもたらす 分 散<br />
ローディング 記 述 を 示 しています。<br />
例 5-7 単 一 ロード 領 域 と 連 続 実 行 領 域<br />
LR_1 0x040000 ; Define the load region name as LR_1, the region starts at 0x040000.<br />
{ ; Start of execution region descriptions.<br />
ER_RO +0 ; First execution region is called ER_RO, region starts at end of previous region.<br />
; However, since there was no previous region, the address is 0x040000.<br />
{<br />
*(+RO) ; All RO sections go into this region, they are placed consecutively.<br />
}<br />
ER_RW +0 ; Second execution region is called ER_RW, the region starts at the end of the<br />
; previous region. The address is 0x040000 + size of ER_RO region.<br />
{<br />
}<br />
*(+RW)<br />
}<br />
ER_ZI +0<br />
{<br />
}<br />
*(+ZI)<br />
; All RW sections go into this region, they are placed consecutively.<br />
; Last execution region is called ER_ZI, the region starts at the end of the<br />
; previous region at 0x040000 + the size of the ER_RO regions + the size of<br />
; the ER_RW regions.<br />
; All ZI region are placed consecutively here.<br />
この 記 述 により、ロードアドレスが 0x040000 の、LR_1 と 命 名 された 単 一 ロード 領<br />
域 が 作 成 されます。<br />
5-28 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
このイメージは ER_RO、ER_RW、ER_ZI と 命 名 された 3 つの 実 行 領 域 で 構 成 され、こ<br />
れらの 領 域 には RO、RW、ZI 出 力 セクションがそれぞれ 含 まれます。ER_RO の 実 行 ア<br />
ドレスは 0x040000 です。これら 3 つの 全 ての 領 域 は、 実 行 領 域 の 記 述 に +offset 形<br />
式 のベース 指 名 子 を 使 用 することによって、メモリマップ 内 に 連 続 で 配 置 されます。こ<br />
の 方 法 で、1 つの 実 行 領 域 をその 前 の 実 行 領 域 の 直 後 に 配 置 することができます。<br />
ropi 領 域<br />
実 行 領 域 はメモリマップ 内 に 連 続 で 配 置 されます。しかし、-ropi は RO 出 力 セクショ<br />
ンを 含 む 実 行 領 域 を 位 置 独 立 領 域 としてマーキングします。<br />
RO 出 力 セクションを 含 む 領 域 のロード / 実 行 アドレスを 指 定 するには、-ro-base<br />
address を 使 用 します。<br />
例 5-8 は、-ro-base 0x010000 -ropi を 使 用 したときと 同 じ 結 果 をもたらす 分 散<br />
ローディング 記 述 を 示 しています。<br />
例 5-8 位 置 独 立 コード<br />
LR_1 0x010000 PI ; The first load region is at 0x010000.<br />
{<br />
ER_RO +0<br />
; The PI attribute is inherited from parent.<br />
; The default execution address is 0x010000, but the code can be moved.<br />
{<br />
*(+RO)<br />
; All the RO sections go here.<br />
}<br />
ER_RW +0 ABSOLUTE ; PI attribute is overridden by ABSOLUTE.<br />
{<br />
*(+RW)<br />
; The RW sections are placed next. They cannot be moved.<br />
}<br />
ER_ZI +0<br />
; ER_ZI region placed after ER_RW region.<br />
{<br />
*(+ZI)<br />
; All the ZI sections are placed consecutively here.<br />
}<br />
}<br />
RO 実 行 領 域 である ER_RO は、ロード 領 域 LR_1 の PI 属 性 を 継 承 します。 次 の 実 行 領<br />
域 ER_RW は ABSOLUTE とマーキングされており、+offset 形 式 のベース 指 名 子 を 使<br />
用 しています。このため、ER_RW は ER_RO から PI 属 性 を 継 承 しません。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-29
分 散 ローディング 記 述 ファイルの 使 用<br />
5.4.2 タイプ 2<br />
このタイプのイメージは、ロードビューでは 1 つのロード 領 域 から、 実 行 ビューでは 3<br />
つの 実 行 領 域 から 構 成 されます。RW 実 行 領 域 が RO 実 行 領 域 と 隣 接 していないことを<br />
除 けば、このタイプはタイプ 1 のイメージと 同 様 です。<br />
非 rwpi 領 域<br />
-ro-base address1は、RO 出 力 セクションを 含 む 領 域 のロード/ 実 行 アドレスを 指 定<br />
します。-rw-base address2 は、RW 実 行 領 域 の 実 行 アドレスを 指 定 します。<br />
例 5-9 は、-ro-base 0x010000 -rw-base 0x040000 を 使 用 したときと 同 じ 結 果<br />
をもたらす 分 散 ローディング 記 述 を 示 しています。<br />
例 5-9 単 一 ロード 領 域 と 複 数 実 行 領 域<br />
LR_1 0x010000<br />
{<br />
ER_RO +0<br />
}<br />
; Defines the load region name as LR_1<br />
; The first execution region is called ER_RO and starts at end of previous region.<br />
; Since there was no previous region, the address is 0x010000.<br />
{<br />
*(+RO) ; All RO sections are placed consecutively into this region.<br />
}<br />
ER_RW 0x040000 ; Second execution region is called ER_RW and starts at 0x040000.<br />
{<br />
*(+RW) ; All RW sections are placed consecutively into this region.<br />
}<br />
ER_ZI +0<br />
{<br />
}<br />
*(+ZI)<br />
; The last execution region is called ER_ZI.<br />
; The address is 0x040000 + size of ER_RW region.<br />
; All ZI sections are placed consecutively here.<br />
この 記 述 により、LR_1 と 命 名 され、ロードアドレスが 0x010000 の 単 一 ロード 領 域<br />
で 構 成 されるイメージが 作 成 されます。<br />
このイメージは、それぞれ RO、RW、ZI の 各 出 力 セクションを 含 む、ER_RO、ER_RW、<br />
ER_ZI と 命 名 された 3 つの 実 行 領 域 から 構 成 されます。ER_RO の 実 行 アドレスは<br />
0x010000 です。<br />
ER_RW 実 行 領 域 は ER_RO に 隣 接 していません。この 領 域 の 実 行 アドレスは 0x040000<br />
です。<br />
5-30 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
ER_ZI 実 行 領 域 は、その 前 の 実 行 領 域 である ER_RW の 直 後 に 配 置 されます。<br />
rwpi 領 域<br />
この 領 域 は、RW 実 行 領 域 の -rw-base を RO 実 行 領 域 から 切 り 離 したタイプ 2 のイメー<br />
ジに 似 ています。しかし、-rwpi は RW 出 力 セクションを 含 む 実 行 領 域 を 位 置 独 立 領<br />
域 としてマーキングします。<br />
タイプ 2 の 他 のイメージと 同 様 に、-ro-base address は RO 出 力 セクションを 含 む<br />
領 域 のロード / 実 行 アドレスの 指 定 に 使 用 し、-rw-base address2 は RW 出 力 セク<br />
ションを 含 む 領 域 のロード / 実 行 アドレスの 指 定 に 使 用 します。<br />
例 5-10 は、-ro-base 0x010000 -rw-base 0x018000 -rwpi を 使 用 したときと<br />
同 じ 結 果 をもたらす 分 散 ローディング 記 述 を 示 しています。<br />
例 5-10 位 置 独 立 データ<br />
LR_1 0x010000 ; The first load region is at 0x010000.<br />
{<br />
ER_RO +0<br />
; Default ABSOLUTE attribute is inherited from parent. The execution address<br />
; is 0x010000. The code and ro data cannot be moved.<br />
{<br />
*(+RO)<br />
; All the RO sections go here.<br />
}<br />
ER_RW 0x018000 PI ; PI attribute overrides ABSOLUTE<br />
{<br />
*(+RW)<br />
; The RW sections are placed at 0x018000 and they can be moved.<br />
}<br />
ER_ZI +0<br />
; ER_ZI region placed after ER_RW region.<br />
{<br />
*(+ZI)<br />
; All the ZI sections are placed consecutively here.<br />
}<br />
}<br />
RO 実 行 領 域 である ER_RO は、ロード 領 域 LR_1 の ABSOLUTE 属 性 を 継 承 します。 次<br />
の 実 行 領 域 ER_RW は PI とマーキングされています。<br />
タイプ 2 とタイプ 3 のイメージにおける -ropi と -rwpi の 他 の 組 み 合 わせの 用 法 に<br />
対 応 するように 同 様 の 分 散 ローディング 記 述 を 書 くこともできます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-31
分 散 ローディング 記 述 ファイルの 使 用<br />
5.4.3 タイプ 3<br />
タイプ 3 のイメージは、ロードビューでは 2 つのロード 領 域 から、 実 行 ビューでは 3 つ<br />
の 実 行 領 域 から 構 成 されます。このタイプは、タイプ 2 での 単 一 ロード 領 域 が 2 つの<br />
ロード 領 域 に 分 割 される 点 を 除 き、タイプ 2 のイメージと 同 様 です。<br />
再 配 置 不 可 能 なロード 領 域<br />
-ro-base address1は、RO 出 力 セクションを 含 む 領 域 のロード/ 実 行 アドレスを 指 定<br />
します。-rw-base address2 は、RW 出 力 セクションを 含 む 領 域 のロード / 実 行 ア<br />
ドレスを 指 定 します。<br />
-split は、デフォルトの 単 一 ロード 領 域 (RO および RW 出 力 セクションを 含 む 領 域 )<br />
を 2 つのロード 領 域 に 分 割 するために 使 用 します。これにより、 一 方 のロード 領 域 に<br />
RO 出 力 セクションが、 他 方 に RW 出 力 セクションが 含 まれます。<br />
例 5-11 は、-ro-base 0x010000 -rw-base 0x040000 -split を 使 用 したときと<br />
同 じ 結 果 をもたらす 分 散 ローディング 記 述 を 示 しています。<br />
例 5-11 複 数 ロード 領 域<br />
LR_1 0x010000 ; The first load region is at 0x010000.<br />
{<br />
ER_RO +0 ; The address is 0x010000.<br />
{<br />
*(+RO)<br />
}<br />
}<br />
LR_2 0x040000 ; The second load region is at 0x040000.<br />
{<br />
ER_RW +0 ; The address is 0x040000.<br />
{<br />
*(+RW) ; All RW sections are placed consecutively into this region.<br />
}<br />
ER_ZI +0 ; The address is 0x040000 + size of ER_RW region.<br />
{<br />
*(+ZI) ; All ZI sections are placed consecutively into this region.<br />
}<br />
}<br />
この 記 述 により、ロードアドレスが 0x010000 と 0x040000 の、LR_1 および LR_2<br />
と 命 名 された 2 つのロード 領 域 を 持 つイメージが 作 成 されます。<br />
5-32 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
分 散 ローディング 記 述 ファイルの 使 用<br />
このイメージは、それぞれ RO、RW、ZI の 各 出 力 セクションを 含 む、ER_RO、ER_RW、<br />
ER_ZI と 命 名 された 3 つの 実 行 領 域 から 構 成 されます。ER_RO の 実 行 アドレスは<br />
0x010000 です。<br />
ER_RW 実 行 領 域 は ER_RO に 隣 接 していません。この 領 域 の 実 行 アドレスは 0x040000<br />
です。<br />
ER_ZI 実 行 領 域 は、その 前 の 実 行 領 域 である ER_RW の 直 後 に 配 置 されます。<br />
再 配 置 可 能 なロード 領 域<br />
このタイプ 3 のイメージもまた、ロードビューでは 2 つのロード 領 域 から、 実 行 ビュー<br />
では 3 つの 実 行 領 域 から 構 成 されます。しかし、-reloc を 使 用 することによって、2<br />
つのロード 領 域 に RELOC 属 性 が 設 定 されます。<br />
-ro-base address1は、RO 出 力 セクションを 含 む 領 域 のロード/ 実 行 アドレスを 指 定<br />
します。-rw-base address2 は、RW 出 力 セクションを 含 む 領 域 のロード / 実 行 ア<br />
ドレスを 指 定 します。<br />
-splitは、RO 出 力 セクションとRW 出 力 セクションを 含 むデフォルトの 単 一 ロード 領<br />
域 を 2 つのロード 領 域 に 分 割 するために 使 用 します。これにより、 一 方 のロード 領 域<br />
には RO 出 力 セクションが、 他 方 には RW 出 力 セクションが 含 まれます。<br />
P. 5-34 例 5-12 は、-ro-base 0x010000 -rw-base 0x040000 -reloc -split を<br />
使 用 したときと 同 じ 結 果 をもたらす 分 散 ローディング 記 述 を 示 しています。<br />
この 記 述 により、ロードアドレスが 0x010000 と 0x040000 の、LR_1 および LR_2<br />
と 命 名 された 2 つのロード 領 域 を 持 つイメージが 作 成 されます。<br />
このイメージは、それぞれ RO、RW、ZI の 各 出 力 セクションを 含 む、ER_RO、ER_RW、<br />
ER_ZIと 命 名 された3つの 実 行 領 域 から 構 成 されます。ER_ROのデフォルト 実 行 アドレ<br />
スは 0x010000 です。<br />
ER_RW 実 行 領 域 は ER_RO に 隣 接 していません。この 領 域 のデフォルト 実 行 アドレスは<br />
0x040000 です。<br />
ER_ZI 実 行 領 域 は、その 前 の 実 行 領 域 である ER_RW の 直 後 に 配 置 されます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 5-33
分 散 ローディング 記 述 ファイルの 使 用<br />
例 5-12 再 配 置 可 能 なロード 領 域<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 />
5-34 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
第 6 章<br />
ライブラリの 作 成 と 使 用<br />
本 章 では armlink とライブラリの 使 用 について 説 明 します。 本 章 は 以 下 のセクションか<br />
ら 構 成 されています。<br />
• ライブラリについて:P. 6-2<br />
• ライブラリの 検 索 、 選 択 、スキャン:P. 6-3<br />
• <strong>ARM</strong> ライブラリアン:P. 6-6<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 6-1
ライブラリの 作 成 と 使 用<br />
6.1 ライブラリについて<br />
オブジェクトファイルは、 関 数 や 変 数 といった 外 部 シンボルを 参 照 することができま<br />
す。armlink はこれらの 参 照 を、 他 のオブジェクトファイルまたはライブラリから 検 出<br />
された 定 義 とマッチングすることによって 解 決 しようと 試 みます。armlink は、ar 形 式<br />
のファイルに 格 納 された ELF ファイルの 集 合 をライブラリとして 認 識 します。<br />
6-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
ライブラリの 作 成 と 使 用<br />
6.2 ライブラリの 検 索 、 選 択 、スキャン<br />
armlink がオブジェクトファイルをイメージに 追 加 する 方 法 と、ライブラリをイメージ<br />
に 追 加 する 方 法 には、 以 下 の 違 いがあります。<br />
• 入 力 リスト 内 の 各 オブジェクトファイルは、それを 参 照 するものがあるかどうか<br />
に 関 係 なく 無 条 件 に 出 力 イメージに 追 加 されますが、-noremove が 使 用 されて<br />
いない 限 り、 未 使 用 セクションは 後 で 削 除 されます。<br />
• ライブラリのメンバは、オブジェクトファイルまたはインクルード 済 みのライブ<br />
ラリメンバがそのメンバへの 弱 い 参 照 を 行 う 場 合 にのみ、あるいは armlink が 明<br />
示 的 にそのメンバを 追 加 するように 指 示 されている 場 合 にのみ、 出 力 にインク<br />
ルードされます。<br />
注<br />
パタンを 使 用 してライブラリから 選 択 されたメンバは、オブジェクトであるかの<br />
ように 無 条 件 にイメージに 追 加 されます。<br />
弱 いシンボルへの 未 解 決 参 照 によってライブラリメンバがロードされることはありま<br />
せん。<br />
注<br />
-noscanlib オプションが 指 定 されている 場 合 、armlink はデフォルトの <strong>ARM</strong>ライブラ<br />
リを 検 索 せずに、 入 力 ファイルリスト 内 に 指 定 されているライブラリのみを 使 用 して<br />
参 照 を 解 決 します。<br />
あるライブラリメンバが 入 力 ファイルリスト 内 で 明 示 的 に 要 求 されている 場 合 、その<br />
メンバはたとえ 現 在 の 参 照 を 解 決 するものでなくてもロードされます。この 場 合 、 明<br />
示 的 に 要 求 されたメンバは、 通 常 のオブジェクトであるかのように 扱 われます。<br />
armlink はライブラリリストを 以 下 のように 作 成 します。<br />
1. armlink は、 入 力 ファイルリスト 内 に 指 定 されている 全 てのライブラリをリスト<br />
に 追 加 します。<br />
2. armlink によってユーザ 指 定 検 索 パスが 検 査 され、 入 力 オブジェクトに 組 み 込 ま<br />
れたライブラリ 要 求 のライブラリディレクトリが 識 別 されます。この 検 索 プロセ<br />
スの 詳 細 については、P. 6-4「<strong>ARM</strong> ライブラリの 検 索 」を 参 照 して 下 さい。<br />
検 索 対 象 のディレクトリおよびサブディレクトリからは、 最 適 なライブラリバリアン<br />
トが 選 択 されます。<strong>ARM</strong> が 提 供 しているライブラリには、そのメンバの 属 性 に 基 づい<br />
て 命 名 された 複 数 のバリアントがあります。ライブラリバリアントの 詳 細 については、<br />
ADS コンパイラ / ライブラリガイドおよび P. 6-4「<strong>ARM</strong> ライブラリバリアントの 選 択 」<br />
を 参 照 して 下 さい。<br />
armlink はライブラリのリストを 構 成 すると、リスト 内 の 各 ライブラリを 何 度 もスキャ<br />
ンすることによって 参 照 を 解 決 します。 詳 細 については、P. 6-5「ライブラリのスキャ<br />
ン」を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 6-3
ライブラリの 作 成 と 使 用<br />
6.2.1 ユーザライブラリの 検 索<br />
コマンドラインで 明 示 的 にインクルードするライブラリの 場 合 、それらのライブラリ<br />
が 現 在 の 作 業 ディレクトリ 内 に 存 在 しなければパスが 要 求 されます。<br />
注<br />
<strong>ARM</strong> 標 準 ライブラリに 使 用 される 検 索 パスは、ユーザライブラリの 検 索 対 象 となりま<br />
せん。<br />
6.2.2 <strong>ARM</strong> ライブラリの 検 索<br />
<strong>ARM</strong> 標 準 ライブラリの 検 出 に 使 用 される 検 索 パスは、 以 下 の 方 法 で 指 定 することがで<br />
きます。<br />
• armlink コマンドラインにおいて、カンマで 区 切 った 親 ディレクトリのリストに<br />
-libpath 引 数 を 追 加 する。<br />
このリストは、<strong>ARM</strong> ライブラリディレクトリ armlib および cpplib の 親 ディ<br />
レクトリで 終 わっている 必 要 があります。<strong>ARM</strong>LIB 変 数 は、<strong>ARM</strong> ライブラリの<br />
親 ディレクトリへのパスを 保 持 します。<br />
注 意<br />
-libpath は、<strong>ARM</strong>LIB 変 数 によって 指 定 されるパスをオーバライドします。<br />
• CodeWarrior IDE リンカコンフィギュレーションパネルを 使 用 する(CodeWarrior<br />
IDE Guide 参 照 )。<br />
• 環 境 変 数 <strong>ARM</strong>LIB を 使 用 する。<br />
armlink は、 上 記 の -libpath、コンフィギュレーションパネル、<strong>ARM</strong>LIB 変 数 のいず<br />
れかによって 指 定 された 各 親 ディレクトリと、 入 力 オブジェクトからの 各 サブディレ<br />
クトリ 要 求 を 組 み 合 わせることにより、<strong>ARM</strong> ライブラリの 検 索 場 所 を 識 別 します。 親<br />
ディレクトリ 内 の<strong>ARM</strong>サブディレクトリの 名 前 は、Lib$$Request$$sub_dir_name<br />
形 式 のシンボルを 使 用 することにより、コンパイル 後 の 各 オブジェクト 内 に 配 置 され<br />
ます。<br />
6.2.3 <strong>ARM</strong> ライブラリバリアントの 選 択<br />
armlink は <strong>ARM</strong> ライブラリの 検 索 時 に 選 択 した 各 ディレクトリから 最 適 なライブラリ<br />
を 選 択 する 必 要 があります。これらのライブラリは、そのメンバオブジェクトの 属 性<br />
に 基 づいた <strong>ARM</strong> ライブラリのバリアントです。<strong>ARM</strong> ライブラリのバリアントが <strong>ARM</strong><br />
ライブラリに 代 わってコーディングされます。ライブラリの 命 名 規 則 については、ADS<br />
コンパイラ / ライブラリガイドを 参 照 して 下 さい。<br />
6-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
ライブラリの 作 成 と 使 用<br />
armlink は 各 入 力 オブジェクトの 属 性 を 累 算 し、それらを 使 用 して 累 算 属 性 に 最 適 なラ<br />
イブラリバリアントを 選 択 します。 選 択 した 複 数 のライブラリが 同 等 に 適 している 場<br />
合 には、 最 初 に 選 択 されたライブラリが 保 存 され、 他 のライブラリは 破 棄 されます。<br />
最 終 リストには、armlink が 参 照 を 解 決 するためにスキャンする 全 てのライブラリが 含<br />
まれています。<br />
6.2.4 ライブラリのスキャン<br />
全 てのディレクトリが 検 索 されると、 最 も 互 換 性 の 高 いライブラリバリアントが 選 択<br />
されてライブラリリストに 追 加 され、 要 求 されたメンバをロードするために 各 ライブ<br />
ラリがスキャンされます。<br />
1. 現 時 点 で 未 解 決 の 非 弱 な 各 参 照 について、armlink は 一 致 する 定 義 を 求 めてライ<br />
ブラリリストをシーケンシャルに 検 索 します。 最 初 に 検 出 された 定 義 がステップ<br />
2 のためにマーキングされます。<br />
検 索 をシーケンシャルに 行 う 理 由 は、 複 数 のライブラリが 同 一 シンボルを 定 義 し<br />
ている 場 合 でも、armlink にリスト 内 で 最 初 に 出 現 したライブラリを 選 択 させる<br />
ためです。したがって、 使 用 するライブラリを 入 力 ファイルリストに 追 加 するこ<br />
とで、<strong>ARM</strong> C ライブラリなどの 他 のライブラリからの 関 数 定 義 をオーバライド<br />
することができます。<br />
2. ステップ 1 でマーキングされたライブラリメンバがロードされます。メンバが<br />
ロードされるたび、 場 合 によっては 弱 い 参 照 も 含 めた 未 解 決 参 照 の 幾 分 かが 満 た<br />
されます。また、ライブラリをロードすることにより、 未 解 決 の 弱 い 参 照 または<br />
非 弱 な 参 照 が 新 たに 作 成 される 可 能 性 があります。<br />
3. ステップ 1 と 2 のプロセスは、 全 ての 非 弱 な 参 照 が 解 決 されるまで、あるいはど<br />
のライブラリによっても 解 決 できなくなるまで 継 続 されます。<br />
スキャン 動 作 の 終 了 時 に 非 弱 な 参 照 が 未 解 決 のまま 残 っている 場 合 には、armlink はエ<br />
ラーメッセージを 生 成 します。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 6-5
ライブラリの 作 成 と 使 用<br />
6.3 <strong>ARM</strong> ライブラリアン<br />
<strong>ARM</strong> ライブラリアン armar により、ELF オブジェクトファイルセットをまとめてライ<br />
ブラリに 保 存 することができます。armlink には 複 数 のオブジェクトファイルの 代 わり<br />
にこのライブラリを 渡 すことができます。しかし、1 つのオブジェクトライブラリファ<br />
イルとリンクさせても、そのオブジェクトライブラリファイルに 収 集 された 全 てのオ<br />
ブジェクトファイルとリンクしたときと 同 じ 結 果 が 得 られるとは 限 りません。これは<br />
armlink が 入 力 リストとライブラリを 異 なる 方 法 で 処 理 するためです。<br />
• armlink -remove オプションが 指 定 されていれば 未 使 用 エリアは 削 除 されます<br />
が、 入 力 リスト 内 の 各 オブジェクトファイルは 無 条 件 に 出 力 に 出 現 します。<br />
• ライブラリファイルのメンバは、オブジェクトファイルまたはその 前 に 処 理 され<br />
たライブラリファイルによって 参 照 される 場 合 にのみ、 出 力 にインクルードされ<br />
ます。<br />
armlink の 入 力 ファイルの 処 理 方 法 については、 第 2 章 「armlink のコマンド 構 文 」を 参<br />
照 して 下 さい。<br />
6.3.1 ライブラリアンコマンドラインオプション<br />
以 下 は、ファイルまたはライブラリ 情 報 の 抽 出 に 使 用 する armar コマンド 構 文 を 示 して<br />
います。<br />
armar [ -help] [-C] [-entries] [-p] [-t] [-s] [-sizes] [-T] [-vsn] [-v]<br />
[-via option_file] [-x] [-zs] [-zt] library [file_list]<br />
以 下 は、ライブラリ 内 のファイルを 追 加 または 修 正 するときに 使 用 する 構 文 です。<br />
armar [ -help] [-create] [-c] [-d] [-m] [-q] [-r] [-u] [-vsn] [-v]<br />
[-via option_file] [ {-a|-b|-i} pos_name] library [file_list]<br />
オプションの 説 明 :<br />
-a library 内 の 新 しいファイルをファイル pos_name の 後 に 配 置 します。<br />
-b library 内 の 新 しいファイルをファイル pos_name の 前 に 配 置 します。<br />
-create<br />
library が 既 に 存 在 している 場 合 でも、 新 しいライブラリを 作 成 します。<br />
-c ライブラリの 作 成 時 に、 通 常 は 標 準 エラーに 書 き 込 まれる 診 断 メッセー<br />
ジを 抑 制 します。<br />
-C 抽 出 実 行 時 に、 既 存 ファイルを 似 た 名 前 のファイルと 置 き 換 えないよう<br />
にライブラリアンに 指 示 します。このオプションは、 短 縮 ファイル 名 が<br />
同 じ 接 頭 文 字 でファイルを 置 き 換 えないように -T を 一 緒 に 使 用 すると<br />
有 効 です。<br />
-d library から 1 つ 以 上 のファイルを 削 除 します。<br />
6-6 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
ライブラリの 作 成 と 使 用<br />
-entries<br />
file_list<br />
-help<br />
library 内 に 定 義 された 全 てのエントリポイントをリストします。リスト<br />
形 式 は 以 下 のとおりです。<br />
ENTRY at offset num in section name of member<br />
処 理 対 象 となるファイルのリストです。 各 ファイルは、そのパスと 名 前<br />
で 完 全 指 定 します。このパスには、 絶 対 パス、ドライブ / ルートに 対 す<br />
る 相 対 パス、カレントディレクトリに 対 する 相 対 パスのいずれかを 指 定<br />
することができます。<br />
ライブラリに 含 まれるファイルの 名 前 との 比 較 には、パスの 最 後 にある<br />
ファイル 名 だけが 使 用 されます。 複 数 のパスオペランドが 同 一 ファイル<br />
名 で 終 わっている 場 合 の 結 果 は 定 義 されていません。ファイルの 指 定 に<br />
は、ワイルドカード * および ? を 使 用 できます。<br />
これらのファイルの 1 つがライブラリである 場 合 、armar はその 入 力 ライ<br />
ブラリの 全 てのメンバをデスティネーションライブラリにコピーしま<br />
す。コマンドラインからの 入 力 項 目 の 順 序 がそのまま 保 たれます。した<br />
がって、ライブラリファイルを 与 えることは、その 全 てのメンバをライ<br />
ブラリに 保 存 したときの 順 序 で 与 えることと 論 理 的 には 同 じことです。<br />
armar コマンドの 詳 細 をオンラインで 提 供 します。<br />
-i library 内 の 新 しいファイルをメンバ pos_name の 前 に 配 置 します(-b と<br />
等 価 です)。<br />
library ライブラリファイルのパス 名 です。<br />
-m ファイルを 移 動 します。-a、-b、-i が pos_name に 指 定 されていると<br />
き、ファイルが 新 しい 位 置 に 移 動 されます。その 他 の 場 合 は、ファイル<br />
がライブラリの 終 わりに 移 動 されます。<br />
-n アーカイブシンボルテーブルを 抑 制 します。このオプションは、ライブ<br />
ラリがオブジェクトライブラリではない 場 合 に 使 用 します。<br />
-p library 内 のファイルの 内 容 を 標 準 出 力 に 印 字 します。<br />
pos_name 相 対 配 置 に 使 用 される 既 存 のライブラリメンバの 名 前 です。この 名 前 は、<br />
オプション -a、-b、あるいは -i を 付 けて 指 定 する 必 要 があります。<br />
-q -r のエイリアスです。<br />
-r library 内 のファイルを 置 換 、または 追 加 します。library が 存 在 しない 場<br />
合 は 新 しいライブラリファイルが 作 成 され、 診 断 メッセージが 標 準 エ<br />
ラーに 書 き 込 まれます。<br />
file_list が 指 定 されていないときにライブラリが 存 在 する 場 合 の 結 果 は 定<br />
義 されていません。 既 存 ファイルに 置 き 換 わるファイルが、ライブラリ<br />
の 順 序 を 変 更 することはありません。<br />
-u オプションが 使 用 されている 場 合 には、ライブラリファイルよりも 後<br />
の 修 正 日 付 を 持 つファイルだけが 置 き 換 えられます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 6-7
ライブラリの 作 成 と 使 用<br />
-a、-b、-i のいずれかのオプションを 使 用 するときは pos_name が 存 在<br />
していなければならず、 新 しいファイルを pos_name の 後 (-a)と 前 (-b<br />
または -i)のどちらに 配 置 するかを 指 定 する 必 要 があります。 指 定 され<br />
ていない 場 合 、 新 しいファイルは 最 後 に 配 置 されます。<br />
-t library の 内 容 を 印 字 します。 印 字 されるリストには file_list によって 指 定<br />
されたファイルが 含 まれます。file_list が 指 定 されていない 場 合 は、ライ<br />
ブラリ 内 の 全 てのファイルがアーカイブ 順 に 印 字 されます。<br />
-s アーカイブシンボルテーブルを 生 成 します。<br />
-sizes<br />
library に 含 まれる 各 メンバの Code、RO Data、RW Data、ZI Data、<br />
Debug のサイズをリストします。 以 下 はこの 出 力 例 です。<br />
Code RO Data RW data ZI Data Debug Object Name<br />
464 0 0 0 8612 app_1.o<br />
3356 0 0 10244 11848 app_2.o<br />
3820 0 0 10244 20460 TOTAL<br />
-T このオプションを 使 用 すると、ファイルシステムがサポートできる 長 さ<br />
よりもライブラリ 名 が 長 い 抽 出 ファイルの 名 前 を 短 縮 することができま<br />
す。デフォルトでは、 長 過 ぎる 名 前 のファイルを 抽 出 するとエラーが 生<br />
じます。この 場 合 は 診 断 メッセージが 書 き 込 まれ、そのファイルは 抽 出<br />
されません。<br />
-u 古 いファイルを 更 新 します。-r オプションと 組 み 合 わせて 使 用 した 場 合<br />
は、 対 応 ファイルの 修 正 時 間 が 少 なくともライブラリ 内 のファイルの 修<br />
正 時 間 と 同 じぐらい 最 近 の 場 合 にのみ、library 内 のファイルが 置 き 換 え<br />
られます。<br />
-via option_file<br />
ライブラリアンに option_file からオプションを 取 得 するように 命 令<br />
します。via ファイルの 記 述 については、ADS コンパイラ / ライブラリガ<br />
イドを 参 照 して 下 さい。<br />
-v verbose 出 力 を 与 えます。<br />
この 出 力 は、 他 に 使 用 されているオプションに 依 存 します。<br />
-d, -r or -x<br />
ライブラリ 作 成 のファイルごとの 記 述 、 構 成 ファイル、 保 守<br />
活 動 を 記 述 します。<br />
-p ファイル 自 体 を 標 準 出 力 に 書 き 込 む 前 に、ファイルの 名 前 を<br />
標 準 出 力 に 書 き 込 みます。<br />
-t ライブラリ 内 のファイルに 関 する 情 報 の 長 いリストを 含 み<br />
ます。<br />
-x 各 抽 出 前 にファイル 名 を 印 字 します。<br />
-vsn<br />
標 準 エラーにバージョン 番 号 を 印 字 します。<br />
6-8 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
ライブラリの 作 成 と 使 用<br />
-x library から file_list 内 のファイルを 抽 出 します。library の 内 容<br />
は 変 更 されません。ファイルオペランドが 指 定 されていない 場 合 は、<br />
library 内 の 全 ファイルが 抽 出 されます。ライブラリから 抽 出 された<br />
ファイルの 名 前 がデスティネーションディレクトリでサポートされてい<br />
る 長 さよりも 長 い 場 合 の 結 果 は 定 義 されていません。<br />
-zs<br />
-zt<br />
シンボルテーブルを 表 示 します。<br />
library に 含 まれるメンバのサイズおよびエントリポイントをリストしま<br />
す。 出 力 形 式 については、-sizes および -entries を 参 照 して 下 さい。<br />
注<br />
通 常 操 作 では、オプション -a、-b、-C、-i、-m、-T、-u、-v は 必 要 ありません。<br />
<strong>ARM</strong> ツールチェインではシンボルテーブルを 持 たないライブラリを 使 用 することがで<br />
きないため、ライブラリ 順 序 に 関 連 するオプション(-a、-b、-i、-m など)は 関 係<br />
ありません(シンボルテーブルが 存 在 すれば、 順 序 は 関 係 ありません)。<br />
ライブラリは 更 新 するよりも 再 構 築 することが 多 いため、ライブラリの 更 新 に 関 連 す<br />
るオプション(-C および -u)を 使 用 することはあまりありません。<br />
6.3.2 例<br />
例 6-1 ~ P. 6-10 例 6-7 は、 構 文 の 例 を 示 しています。<br />
例 6-1 新 しいライブラリの 作 成 と 全 オブジェクトファイルの 追 加<br />
armar -create mylib *.o<br />
例 6-2 目 次 のリスト<br />
armar -t mylib<br />
例 6-3 シンボルテーブルのリスト<br />
armar -zs mylib<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 6-9
ライブラリの 作 成 と 使 用<br />
例 6-4 ファイルの 追 加 (または 置 換 )<br />
armar -r my_lib obj1.o obj2.o obj3.o ...<br />
armar -ru mylib k*.o<br />
例 6-5 ファイルグループの 抽 出<br />
armar -x my_lib k*.o<br />
例 6-6 ファイルグループの 削 除<br />
armar -d my_lib sys_*<br />
例 6-7 ライブラリと 追 加 (または 置 換 )ファイルのマージ<br />
armar -r my_lib.a obj1.o my_lib.a other_lib.a obj2.o obj3.o<br />
6-10 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
第 7 章<br />
<strong>fromELF</strong> の 使 用<br />
本 章 では ADS に 収 録 されている <strong>fromELF</strong> ソフトウェアユーティリティについて 説 明 し<br />
ます。 本 章 は 以 下 のセクションから 構 成 されています。<br />
• <strong>fromELF</strong> について:P. 7-2<br />
• <strong>fromELF</strong> コマンドラインオプション:P. 7-3<br />
• <strong>fromELF</strong> の 使 用 例 :P. 7-10<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 7-1
<strong>fromELF</strong> の 使 用<br />
7.1 <strong>fromELF</strong> について<br />
<strong>fromELF</strong> ユーティリティは、armlink によって 生 成 された 実 行 リンク 形 式 (ELF)のイ<br />
メージファイルを、ROM ツールまたはメモリへの 直 接 ロードに 適 した 他 の 形 式 に 変 換<br />
します。また、このユーティリティを 使 用 して ELF オブジェクトに 関 する 様 々な 情 報<br />
を 表 示 させたり、その 情 報 を 含 むテキストファイルを 生 成 することもできます。<br />
<strong>fromELF</strong> は 以 下 のイメージ 形 式 を 出 力 します。<br />
• プレーンバイナリ 形 式<br />
• Motorola 32 ビット S レコード 形 式<br />
• Intel Hex-32 形 式<br />
• バイト 向 き(Verilog メモリモデル)16 進 形 式<br />
• ELF 形 式 (ELF で 再 保 存 することができます。 例 えば、-debug ELF イメージを<br />
-nodebug ELF イメージに 変 換 することが 可 能 です。)<br />
また <strong>fromELF</strong> を 使 用 することにより、 逆 アセンブリ 出 力 やシンボルリストなどの 入 力<br />
ファイルに 関 する 情 報 を、 標 準 出 力 またはテキストファイルに 印 字 させることも 可 能<br />
です。<br />
注<br />
-fieldoffsets <strong>fromELF</strong> ステップを 必 要 とする 場 合 は、-nodebug リンカオプション<br />
使 用 してイメージをリンクしないで 下 さい。デバッグ 情 報 なしでイメージが 生 成 され<br />
た 場 合 :<br />
• <strong>fromELF</strong> はそのイメージを 他 のファイル 形 式 に 変 換 することができません。<br />
• <strong>fromELF</strong> は 有 意 な 逆 アセンブリリストを 生 成 することができません。<br />
7.1.1 イメージ 構 造<br />
<strong>fromELF</strong> はファイルを ELF から 他 の 形 式 に 変 換 することができます。ただし、-base<br />
オプションが 使 用 されているときに Motorola S レコードまたは Intel Hex 出 力 のベース<br />
アドレスを 変 更 することを 除 いては、イメージの 構 造 もアドレスも 変 更 することがで<br />
きません。 分 散 ロードされる ELF イメージを 他 の 形 式 の 非 分 散 ロードイメージに 変 換<br />
することはできません。 構 造 またはアドレシングに 関 する 情 報 は、 全 てリンク 時 に<br />
armlink に 渡 す 必 要 があります。<br />
7-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
<strong>fromELF</strong>の 使 用<br />
7.2 <strong>fromELF</strong> コマンドラインオプション<br />
以 下 は、<strong>fromELF</strong> のコマンド 構 文 です。<br />
fromelf [-help] [-fieldoffsets [-select select_options ]] [-nolinkview]<br />
[-nodebug] [-vsn] [text_output_format| code_output_format] [-base n]<br />
[memory_config] [-output output_file] input_file<br />
オプションの 説 明 :<br />
-help<br />
-fieldoffsets<br />
ヘルプ 情 報 と 用 法 を 表 示 します。このオプションが 指 定 されてい<br />
るとき、 他 のコマンドラインオプションは 無 視 されます。パラ<br />
メータを 何 も 指 定 せずに <strong>fromELF</strong> を 呼 び 出 すと、 同 じヘルプ 情 報<br />
が 生 成 されます。<br />
C++ クラスまたは C 構 造 フィールドの 名 前 が、そのクラスまたは<br />
構 造 のベースからのオフセットを、また、アセンブリ 言 語 の 場 合<br />
の EQU ディレクティブのリストを 生 成 し、 標 準 出 力 に 書 き 込 みま<br />
す。この 入 力 ELF ファイルは 再 配 置 可 能 なオブジェクトまたはイ<br />
メージです。<br />
出 力 をファイルに 転 送 するには -o を 使 用 します。 生 成 されたファ<br />
イルをロードし、C++ クラスおよび C 構 造 のメンバにアセンブリ<br />
言 語 から 名 前 でアクセスするには、armasm から INCLUDE コマン<br />
ドを 使 用 します。armasm の 詳 細 については、ADS アセンブラガ<br />
イドを 参 照 して 下 さい。<br />
注<br />
ソースファイルにデバッグ 情 報 が 含 まれていない 場 合 は、このオ<br />
プションを 使 用 できません。また、このオプションを<br />
code_output_format と 一 緒 に 使 用 することはできません。<br />
-fieldoffsets は、 全 ての 構 造 情 報 を 出 力 します。 構 造 のサブ<br />
セットを 出 力 するには、-select select_options を 使 用 し<br />
ます。<br />
armasm に 入 力 可 能 なファイルを 必 要 としない 場 合 には、-text<br />
-a オプションを 使 用 することによって、 表 示 アドレスをさらに 読<br />
みやすい 形 式 にフォーマットすることができます。-a オプション<br />
は、イメージ 内 の 構 造 とスタティックデータのアドレス 情 報 のみ<br />
を 出 力 します。これは、それらのアドレスが 再 配 置 可 能 オブジェ<br />
クト 内 においては 未 知 であるためです。<br />
-select select_options<br />
-select select_option は、-fieldoffsets または -text<br />
-a のどちらかのオプションと 一 緒 に 使 用 することにより、オプ<br />
ションリスト 内 のパタンと 一 致 するフィールドだけを 選 択 する<br />
ことができます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 7-3
<strong>fromELF</strong> の 使 用<br />
複 数 フィールドの 選 択 には 特 殊 文 字 を 使 用 します。<br />
• リスト 内 のオプションを 結 合 するには a を 使 用 します( 例 :<br />
a*,b*,c*)<br />
• 任 意 の 名 前 とのマッチングには、ワイルドカード 文 字 * を<br />
使 用 できます。<br />
• 任 意 の 1 文 字 とのマッチングには、ワイルドカード 文 字 ?<br />
を 使 用 できます。<br />
• インクルードするフィールドは、select_option ストリ<br />
ングに 接 頭 文 字 a + を 付 けることによって 指 定 します。これ<br />
はデフォルトです。<br />
• 除 外 するフィールドは、select_option ストリングに 接<br />
頭 文 字 a ~ を 付 けることによって 指 定 します。<br />
Unix 上 で 特 殊 文 字 を 使 用 する 場 合 は、シェルが 選 択 を 拡 大 しない<br />
ように、オプションを 引 用 符 で 囲 む 必 要 があります。<br />
-nolinkview<br />
ELF イメージからセクションレベルのビュー(リンク 時 のビュー)<br />
を 破 棄 し、セグメントレベルのビュー(ロード 時 のビュー)だけ<br />
を 保 存 する 場 合 は -nolinkview を 使 用 します。セクションレベ<br />
ルのリンクビューを 破 棄 すると、 以 下 が 削 除 されます。<br />
• セクションヘッダテーブル<br />
• セクションヘッダストリングテーブル<br />
• ストリングテーブル<br />
• シンボルテーブル<br />
• 全 てのデバッグセクション<br />
出 力 に 残 るのはプログラムヘッダテーブルとプログラムセグメ<br />
ントだけです。ELF 仕 様 により、ELF ファイル 内 に 存 在 するもの<br />
でプログラムローダに 依 存 するものはこれだけです。<br />
注 意<br />
コマンドラインで -elf を 指 定 していないときにこのオプション<br />
を 使 用 すると、 予 期 しない 結 果 が 生 じることがあります。 正 しい<br />
用 例 については、P. 7-5 例 7-2 を 参 照 して 下 さい。<br />
7-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
<strong>fromELF</strong>の 使 用<br />
-nodebug<br />
このオプションを 使 用 すると、 出 力 ファイルにデバッグ 情 報 が 含<br />
まれません。バイナリイメージの 場 合 はこれがデフォルト 設 定 で<br />
す。-nodebug が 指 定 されていると、 全 ての 出 力 形 式 に 作 用 しま<br />
す。このオプションは -text -g オプションをオーバライドし<br />
ます。<br />
注 意<br />
コマンドラインで -elf を 指 定 していないときにこのオプション<br />
を 使 用 すると、 予 期 しない 結 果 が 生 じることがあります。 例 7-1<br />
のオプションは、 出 力 形 式 が 指 定 されていないためにテキスト<br />
ファイルを 生 成 します。<br />
例 7-1 テキスト 出 力<br />
fromelf -nodebug image -o image_nodb.asf<br />
ELF 形 式 の 出 力 を 得 るには、 例 7-2が 示 すオプションを 使 用 します。<br />
例 7-2 ELF 出 力<br />
fromelf -elf -nodebug image.axf -o image_ndb.axf<br />
-vsn<br />
<strong>fromELF</strong> のバージョン 情 報 を 表 示 します。<br />
text_output_format<br />
イメージ 情 報 をテキスト 形 式 で 表 示 させるには、テキスト 指 定<br />
( 例 :-text -c)を 使 用 します。このオプションを 使 用 して、ELF<br />
イメージまたはELFオブジェクトファイルをデコードすることが<br />
できます。このオプションはデフォルトです。テキスト 形 式 また<br />
は、コード 出 力 形 式 が 指 定 されていない 場 合 には、-text とみな<br />
されます。<br />
output_fileが-oオプションと 一 緒 に 指 定 されていない 場 合 に<br />
は、 情 報 は 標 準 出 力 に 表 示 されます。<br />
特 定 のテキストカテゴリを 指 定 していない 場 合 は、デフォルトで<br />
ヘッダ 情 報 が 出 力 されます。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 7-5
<strong>fromELF</strong> の 使 用<br />
指 定 する 場 合 、テキストカテゴリは 以 下 の 1 つ 以 上 の 要 素 で 構 成<br />
します。<br />
a グローバルアドレスとスタティックデータアドレス<br />
( 構 造 および 合 併 内 容 のアドレスを 含 む)を 印 字 しま<br />
す。このオプションは、デバッグ 情 報 を 含 むファイル<br />
にのみ 使 用 できます。データアドレスのサブセットを<br />
出 力 するには、-select オプションを 使 用 します。<br />
c コードを 逆 アセンブルします。<br />
d データセクションの 内 容 を 印 字 します。<br />
g デバッグ 情 報 を 印 字 します。<br />
r 再 配 置 情 報 を 印 字 します。<br />
s シンボルテーブルを 印 字 します。<br />
t ストリングテーブルを 印 字 します。<br />
v イメージの 各 セグメントとセクションヘッダに 関 する<br />
詳 細 情 報 を 印 字 します。<br />
z コードサイズとデータサイズを 印 字 します。<br />
上 記 のカテゴリセレクタは、 以 下 のいずれかで 指 定 することがで<br />
きます。<br />
• 個 々のオプション( 例 :-text -c -d)<br />
• 単 一 の 連 結 ストリング( 例 :-text -cd)<br />
• カテゴリセレクタのみ( 例 :-c -d)<br />
• スラッシュ 文 字 の 後 に 複 数 文 字 を 続 ける( 例 :-text/cd)<br />
出 力 形 式 が 指 定 されていない 場 合 は、デフォルト 出 力 形 式 -text<br />
が 使 用 され、 個 々のカテゴリセレクタが 認 識 されます。 別 の 出 力<br />
形 式 が 指 定 されている 場 合 、これらのセレクタは 無 視 されます。<br />
7-6 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
<strong>fromELF</strong>の 使 用<br />
code_output_format<br />
バイナリまたは ELF 出 力 ファイルオプションを 選 択 します。<br />
code_output_format には 以 下 のいずれかを 指 定 することがで<br />
きます。<br />
-bin プレーンバイナリ。memory_config オプションを 使<br />
用 して、このオプションからの 出 力 を 複 数 のファイル<br />
に 分 割 することができます。<br />
-ihf 拡 張 Intellec16 進 形 式 。この 出 力 のベースアドレスは<br />
-base オプションを 使 用 して 指 定 することができま<br />
す。(このオプションは 現 在 使 用 されておらず、 本 製 品<br />
の 今 後 のバージョンからは 削 除 される 予 定 です。)<br />
-m32 Motorola 32 ビット 形 式 (32 ビット S レコード)。この<br />
出 力 のベースアドレスは-base オプションを 使 用 して<br />
指 定 することができます。<br />
-i32 Intel Hex-32 形 式 。この 出 力 のベースアドレスは -base<br />
オプションを 使 用 して 指 定 することができます。<br />
-vhx バイト 向 け(Verilog メモリモデル)16 進 形 式 。この 形<br />
式 は、HDL シミュレータのメモリモデルへのロードに<br />
適 しています。memory_config オプションを 使 用 し<br />
て、このオプションからの 出 力 を 複 数 ファイルに 分 割<br />
することができます。<br />
-elf ELF 形 式 (ELF で 再 保 存 )。このオプションを 使 用 し<br />
て、デバッグ ELF イメージを 非 デバッグ ELF イメージ<br />
に 変 換 することができます。<br />
<strong>fromELF</strong> を 使 用 し、-bin、-ihf、-m32、-i32、-vhx オプショ<br />
ンのいずれかを 使 用 して 複 数 のロード 領 域 を 含 むELFイメージを<br />
バイナリ 形 式 に 変 換 する 場 合 、<strong>fromELF</strong> は output_file と 命 名<br />
された 出 力 ディレクトリを 作 成 し、 入 力 イメージ 内 の 各 ロード 領<br />
域 につき 1 つのバイナリ 出 力 ファイルを 生 成 します。<strong>fromELF</strong> は<br />
これらの 出 力 ファイルを output_file ディレクトリ 内 に 配 置 し<br />
ます。<br />
複 数 のロード 領 域 を 定 義 する 分 散 ロード 記 述 ファイルを 使 用 し<br />
て ELF イメージをビルドした 場 合 、この ELF イメージには 複 数<br />
のロード 領 域 が 含 まれます。<br />
-base n<br />
Motorola S レコード、Intel Hex、 拡 張 Intellec16 進 の 各 ファイル 形<br />
式 で 生 成 された 出 力 のベースアドレスを 指 定 します。このオプ<br />
ションは、 出 力 形 式 -m32、-i32、-ihf のいずれかが 指 定 され<br />
ている 場 合 にのみ 使 用 できます。<br />
ベースアドレスは 以 下 のどちらかで 指 定 することができます。<br />
• 10 進 数 ( 例 :-base 0)<br />
• 16 進 数 ( 例 :-base 0x8000)<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 7-7
<strong>fromELF</strong> の 使 用<br />
出 力 ファイルにエンコードされた 全 てのアドレスが、ベースアド<br />
レス n で 開 始 します。-base オプションを 指 定 していない 場 合 は、<br />
このベースアドレスがロード 領 域 アドレスから 取 得 されます。<br />
注<br />
. 複 数 のロード 領 域 が 存 在 する 場 合 、-base 値 は 各 出 力 ファイルに<br />
使 用 されます。つまり、この 値 が 全 てのロード 領 域 アドレスを<br />
オーバライドします。<br />
memory_config<br />
複 数 メモリバンクに 対 して 複 数 ファイルを 出 力 します。このオプ<br />
ションは、 出 力 形 式 として -vhx または -bin が 指 定 されている<br />
場 合 にのみ 使 用 できます。<br />
memory_config の 形 式 は -widthxbanks で 指 定 されます。 上 記<br />
において:<br />
width. ターゲットメモリシステムのメモリ 幅 (8 ビット、16<br />
ビット、32 ビット、あるいは 64 ビット)を 指 定 します。<br />
banks. ターゲットメモリシステム 内 のメモリバンクの 数 を 指<br />
定 します。<br />
以 下 は 有 効 なコンフィギュレーションです。<br />
-8x1<br />
-8x2<br />
-8x4<br />
-16x1<br />
-16x2<br />
-32x1<br />
-32x2<br />
-64x1<br />
複 数 のコンフィギュレーションが 指 定 されているとき、<strong>fromELF</strong><br />
は 最 後 に 指 定 されているコンフィギュレーションを 使 用 します。<br />
このオプションが -vhx または -bin 以 外 の 形 式 に 選 択 されてい<br />
る 場 合 は 無 視 されます。<br />
イメージが 1 つのロード 領 域 で 構 成 されている 場 合 、<strong>fromELF</strong> は<br />
以 下 の 命 名 規 則 を 使 用 して bank ファイルを 生 成 します。<br />
• 1 つのメモリバンクが 存 在 するとき(banks = 1)、 出 力 ファ<br />
イルは -o output_file 引 数 によって 命 名 されます。<br />
• 複 数 のメモリバンクが 存 在 する 場 合 (bank>1)、<strong>fromELF</strong> は<br />
output_file0 で 始 まり、output_file bank-1 で 終 わ<br />
る banks 個 のファイルを 生 成 します。 例 :<br />
fromelf -vhx -8x2 test.axf -o test<br />
は、test0 および test1 と 命 名 された 2 つのファイルを 生<br />
成 します。<br />
イメージが 複 数 のロード 領 域 で 構 成 されている 場 合 、<strong>fromELF</strong> は<br />
output_file という 名 前 のディレクトリを 作 成 し、load<br />
region0 から load region banks-1 の 間 で 命 名 された 各 ロー<br />
ド 領 域 のバンクファイルを 生 成 します。<br />
7-8 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
<strong>fromELF</strong>の 使 用<br />
width で 指 定 したメモリ 幅 は、イメージから 読 み 出 され、ファイ<br />
ルに 書 き 込 まれるチャンク 情 報 のサイズを 決 定 します。 最 初 に 読<br />
み 出 されたチャンクは 最 初 のファイル(output_file0)に 割 り<br />
当 てられ、 次 のチャンクは 次 のファイルに 割 り 当 てられます。<br />
チャンクが 最 後 のファイルに 割 り 当 てられると、 割 り 当 てが 最 初<br />
のファイルから 再 び 開 始 されます(つまり、この 割 り 当 てはファ<br />
イル 数 に 基 づくモジュロです)。 例 えば、<br />
memory_config が -8x4 の 場 合 :<br />
byte0 -> file0<br />
byte1 -> file1<br />
byte2 -> file2<br />
byte3 -> file3<br />
byte4 -> file0<br />
...<br />
memory_config が -16x2 の 場 合 :<br />
halfword0 -> file0<br />
halfword1 -> file1<br />
halfword3 -> file0<br />
...<br />
-output output_file<br />
このオプションは 出 力 ファイルの 名 前 、あるいは 複 数 の 出 力 ファ<br />
イルが 作 成 される 場 合 は 出 力 ディレクトリの 名 前 を 指 定 します<br />
(text_output_format および code_output_format の 説 明<br />
を 参 照 して 下 さい)。-text 出 力 オプションを 使 用 する 場 合 の 出<br />
力 ファイルの 指 定 は 任 意 ですが、 他 の 全 ての 出 力 では 必 ず 指 定 す<br />
る 必 要 があります。<br />
input_file 変 換 する ELF ファイルを 指 定 します。<br />
<strong>fromELF</strong> は、<strong>ARM</strong> 実 行 ELF ファイルと <strong>ARM</strong> オブジェクト ELF<br />
ファイル(.o)しか 受 け 取 りません。input_file が 複 数 のロー<br />
ド 領 域 を 含 む 分 散 ロードイメージであり、その 出 力 形 式 が -bin、<br />
-ihf、-m32、-i32、-vhx のいずれかである 場 合 、<strong>fromELF</strong> は 各<br />
ロード 領 域 に 別 々のファイルを 作 成 します。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 7-9
<strong>fromELF</strong> の 使 用<br />
7.3 <strong>fromELF</strong> の 使 用 例<br />
このセクションでは、<strong>fromELF</strong> を 使 用 したイメージ 形 式 の 変 更 方 法 、または ELF ファ<br />
イルからの 情 報 の 抽 出 方 法 を 示 した 例 を 紹 介 します。<br />
注<br />
Unix で *、?、~ などのワイルドカード 文 字 を 使 用 する 場 合 は、シェルが 選 択 を 拡 大 し<br />
ないように、これらのオプションを 引 用 符 で 囲 む 必 要 があります。<br />
例 えば、*, ~*.* ではなく、’*, ~*.*’ と 入 力 します。<br />
7.3.1 プレーンバイナリファイルの 生 成<br />
ELF ファイルをプレーンバイナリ(.bin)ファイルに 変 換 するには、 以 下 のように 入<br />
力 します。<br />
fromelf -bin -o outfile.bin infile.axf<br />
7.3.2 逆 アセンブリ<br />
ELF ファイルの 逆 アセンブリバージョンを 含 む 標 準 出 力 へのリストを 生 成 するには、 以<br />
下 のように 入 力 します。<br />
fromelf -c infile.axf<br />
ELF ファイルの 逆 アセンブリバージョンとシンボルテーブルを 含 むプレーンテキスト<br />
出 力 ファイルを 生 成 するには、 以 下 のように 入 力 します。<br />
fromelf -c -s -o outfile.lst infile.axf<br />
7.3.3 フィールドオフセットをアセンブリ 言 語 EQU としてリストする<br />
ファイル inputfile.o 内 に 存 在 する 全 ての 構 造 から、 全 てのフィールドオフセット<br />
を 含 む 標 準 出 力 への 出 力 リストを 生 成 するには、 以 下 のように 入 力 します。<br />
fromelf -fieldoffsets inputfile.o<br />
p で 始 まる 名 前 のファイル inputfile.o 内 の 構 造 から、outputfile.a にリストす<br />
る 全 てのフィールドオフセットを 含 む 出 力 ファイルを 生 成 するには、 以 下 のように 入<br />
力 します。<br />
fromelf -fieldoffsets -select p* -o outputfile.a inputfile.o<br />
tools または moretools の 名 前 を 持 つファイル inputfile.o 内 の 構 造 から、<br />
outputfile.a にリストする 全 てのフィールドオフセットを 含 む 出 力 ファイルを 生 成<br />
するには、 以 下 のように 入 力 します。<br />
fromelf -fieldoffsets -select tools.*, moretools.* -o outputfile.a inputfile.o<br />
7-10 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
<strong>fromELF</strong>の 使 用<br />
名 前 が 数 字 で 始 まり、ファイル inputfile.o 内 の 構 造 tools 内 の 構 造 フィールド<br />
top に 含 まれる 構 造 フィールドの、outputfile.a にリストする 全 てのフィールドオ<br />
フセットを 含 む 出 力 ファイルを 生 成 するには、 以 下 のように 入 力 します。<br />
fromelf -fieldoffsets -select tools.top.number* -o outputfile.a inputfile.o<br />
7.3.4 スタティックデータアドレスのリスト<br />
全 てのグローバル 変 数 とスタティックデータ 変 数 、ならびに 全 ての 構 造 フィールドア<br />
ドレスを 標 準 出 力 にリストするには、 以 下 のように 入 力 します。<br />
fromelf -text -a -select * infile.axf<br />
構 造 のみの 選 択<br />
inputfile.axf 内 の 全 ての 構 造 アドレスを 含 み、グローバル 変 数 またはスタティック<br />
データ 変 数 の 情 報 を 含 まないテキストファイルを 生 成 するには、 以 下 のように 入 力 し<br />
ます。<br />
fromelf -text -a -select *.* -o strucaddress.txt infile.axf<br />
入 れ 子 構 造 のみの 選 択<br />
入 れ 子 構 造 のアドレスのみを 含 むテキストファイルを 生 成 するには、 以 下 のように 入<br />
力 します。<br />
fromelf -text -a -select *.*.* -o strucaddress.txt infile.axf<br />
変 数 のみの 選 択<br />
inputfile.axf 内 のグローバル 変 数 またはスタティクデータ 変 数 の 情 報 を 含 み、 構 造<br />
アドレスは 含 まないテキストファイルを 生 成 するには、 以 下 のように 入 力 します。<br />
fromelf -text -a -select *, ~*.* -o strucaddress.txt infile.axf<br />
7.3.5 デバッグから 非 デバッグへの 変 換<br />
-debug オプションを 使 用 して 生 成 された ELF ファイルから、-nodebug オプションを<br />
使 用 したときと 同 様 の 新 しい 出 力 ファイルを 生 成 するには、 以 下 のように 入 力 します。<br />
fromelf -nodebug -elf -o outfile.axf infile.axf<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 7-11
<strong>fromELF</strong> の 使 用<br />
7-12 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
第 8 章<br />
<strong>ARM</strong> プロファイラの 使 用<br />
本 章 では、ADS に 収 録 されている <strong>ARM</strong> プロファイラについて 説 明 します。 本 章 は 以<br />
下 のセクションから 構 成 されています。<br />
• <strong>ARM</strong> プロファイラ:P. 8-2<br />
• プロファイラのコマンドラインオプション:P. 8-3<br />
• サンプル 出 力 :P. 8-4<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 8-1
<strong>ARM</strong> プロファイラの 使 用<br />
8.1 <strong>ARM</strong> プロファイラ<br />
<strong>ARM</strong> プロファイラ armprof は、<strong>ARM</strong> デバッガによって 生 成 されたプロファイルデータ<br />
ファイルから、プログラムの 実 行 プロファイルを 表 示 します。<br />
注<br />
<strong>ARM</strong> プロファイラは、 基 本 ATPCS 標 準 にコンパイルされた 単 純 なイメージに 対 して<br />
のみ 有 用 です。 分 散 ローディングなどを 使 用 している 場 合 には、 有 益 な 情 報 は 得 られ<br />
ません。<br />
<strong>ARM</strong> プロファイラは、プロファイルデータ 内 に 存 在 する 情 報 量 に 基 づいて、2 つのタ<br />
イプの 実 行 プロファイルのうち、どちらか 一 方 を 表 示 します。<br />
• pcサンプリング 情 報 だけが 存 在 する 場 合 、プロファイラは 各 関 数 に 費 やされた 時<br />
間 の 割 合 を 示 すフラットプロファイルだけを 表 示 することができます。 関 数 の 子<br />
に 費 やされた 時 間 は 表 示 されません。<br />
• 関 数 呼 び 出 しのカウント 情 報 が 存 在 する 場 合 、プロファイラは 各 関 数 に 費 やされ<br />
た 時 間 、 各 関 数 の 全 ての 子 への 呼 び 出 しごとに 計 算 された 時 間 、ならびに 異 なる<br />
親 からの 呼 び 出 しに 割 り 当 てられた 時 間 の 近 似 値 を 示 すコールグラフプロファ<br />
イルを 表 示 することができます。<br />
8-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
<strong>ARM</strong>プロファイラの 使 用<br />
8.2 プロファイラのコマンドラインオプション<br />
いくつかのオプションを 使 用 して、プロファイラ 出 力 内 の 形 式 と 情 報 量 を 制 御 するこ<br />
とができます。 以 下 は、このコマンド 構 文 を 示 しています。<br />
armprof [-parent|-noparent] [-child|-nochild] [-sort options] prf_file<br />
オプションの 説 明 :<br />
-parent<br />
-noparent<br />
-child<br />
-nochild<br />
プロファイルリスト 内 の 各 関 数 の 親 に 関 する 情 報 を 表 示 します。<br />
このオプションを 使 用 すると、それぞれの 親 からの 呼 び 出 しを 処<br />
理 する 各 関 数 に 費 やされた 時 間 の 近 似 情 報 を 得 ることができま<br />
す。<br />
親 のリスティングをオフにします。<br />
各 関 数 の 子 に 関 する 情 報 を 表 示 します。プロファイラは、 親 の 代<br />
わりに 処 理 を 実 行 するそれぞれの 子 に 費 やされた 近 似 時 間 を 表<br />
示 します。<br />
子 のリスティングをオフにします。<br />
-sort options<br />
以 下 のいずれか 1 つのオプションを 使 用 して、プロファイル 情 報<br />
をソートします。<br />
cumulative 各 関 数 と、その 全 ての 子 に 費 やされた 合 計 時<br />
間 で 出 力 をソートします。<br />
self<br />
各 関 数 に 費 やされた 時 間 (その 子 に 費 やされ<br />
た 時 間 は 除 く)で 出 力 をソートします。<br />
descendants 各 関 数 の 全 ての 子 に 費 やされた 時 間 ( 関 数 本<br />
体 に 費 やされた 時 間 は 除 く)で 出 力 をソート<br />
します。<br />
calls<br />
リスト 内 の 各 関 数 への 呼 び 出 しの 数 で 出 力<br />
をソートします。<br />
prf_file<br />
プロファイル 情 報 を 保 持 するファイルを 指 定 します。<br />
デフォルトでは、 子 関 数 はリストされますが 親 関 数 はリストされず、 出 力 が 累 算 時 間<br />
でソートされます。<br />
8.2.1 例<br />
armprof -parent sort.prf<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. 8-3
<strong>ARM</strong> プロファイラの 使 用<br />
8.3 サンプル 出 力<br />
プロファイラ 出 力 はいくつものセクションに 分 割 され、 各 セクションは 行 で 区 切 られ<br />
ます。 各 セクションは 1 つの 関 数 に 関 する 情 報 を 保 持 します。 親 関 数 の 情 報 も 子 関 数<br />
の 情 報 も 持 たないフラットプロファイルでは、 各 セクションが 1 行 で 構 成 されます。<br />
以 下 は、insert_sort および strcmp を 呼 ぶ 関 数 のサンプルセクションを 示 してい<br />
ます。<br />
Name cum% self% desc% calls<br />
-------------------------------------------------------<br />
main 17.69% 60.06% 1<br />
insert_sort 77.76% 17.69% 60.06% 1<br />
strcmp 60.06% 0.00% 243432<br />
-------------------------------------------------------<br />
qs_string_compare 3.21% 0.00% 13021<br />
shell_sort 3.46% 0.00% 14059<br />
insert_sort 60.06% 0.00% 243432<br />
strcmp 66.75% 66.75% 0.00% 270512<br />
-------------------------------------------------------<br />
8-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
用 語 集<br />
ADS <strong>ARM</strong> デベロッパスイート 参 照 。<br />
Angel<br />
ANSI<br />
API<br />
Architecture<br />
(アーキテクチャ)<br />
<strong>ARM</strong> ベースのハードウェアで 実 行 するアプリケーションの 開 発 とデバッグに 使 用 可 能<br />
なデバッグモニタプログラム。Angel は、<strong>ARM</strong> 状 態 または Thumb 状 態 で 動 作 するアプ<br />
リケーションをデバッグすることができます。<br />
米 国 規 格 協 会 (American National Standards Institute)。 他 の 中 でも 特 にコンピュータソフ<br />
トウェアの 規 格 を 規 定 する 団 体 です。<br />
アプリケーションプログラムインタフェース。<br />
同 様 の 特 長 を 持 つプロセッサグループの 識 別 に 使 用 される 用 語 。<br />
<strong>ARM</strong> Developer Suite(<strong>ARM</strong> デベロッパスイート)<br />
支 援 文 書 およびサンプルを 含 み、<strong>ARM</strong> ファミリの RISC プロセッサ 用 アプリケーショ<br />
ンを 記 述 してデバッグするためのアプリケーションスイート。<br />
<strong>ARM</strong>ulator<br />
命 令 セットシミュレータ。 各 種 <strong>ARM</strong> プロセッサの 命 令 セットとアーキテクチャをシ<br />
ミュレートするモジュールの 集 合 です。<br />
ATPCS<br />
<strong>ARM</strong>/Thumb プロシージャコール 標 準 。サブルーチンコールに 関 するレジスタとスタッ<br />
クの 使 用 方 法 を 定 義 します。<br />
Big-endian(ビッグ<br />
エンディアン)<br />
BNF<br />
ワードの 最 下 位 バイトが 最 上 位 バイトよりも 上 位 アドレスに 位 置 するメモリ 構 成 。<br />
バッカスノアフォーム。 論 理 構 造 を 定 義 する 数 学 表 記 です。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. Glossary-1
用 語 集<br />
Byte(バイト)<br />
8 ビットで 構 成 されるメモリ 域 の 単 位 。<br />
Deprecated<br />
廃 止 予 定 のオプションまたは 機 能 は、 使 用 しないことを 強 く 推 奨 します。 衰 退 オプショ<br />
( 廃 止 予 定 )<br />
ンおよび 機 能 は、 本 製 品 の 今 後 のバージョンではサポートしない 予 定 です。<br />
Double word<br />
64 ビット 単 位 の 情 報 。ダブルワードの 内 容 は、 指 定 されていない 限 り 符 号 なし 整 数 と<br />
(ダブルワード)<br />
みなされます。<br />
DWARF Debug With Arbitrary Record Format( 任 意 レコード 形 式 でのデバッグ)の 略 。<br />
ELF 実 行 リンク 形 式 。<br />
Environment( ( 環 境 ) アプリケーションを 実 行 する 実 ハードウェアとオペレーティングシステムのこと。<br />
Executable and linking format( ( 実 行 リンク 形 式 )<br />
<strong>ARM</strong> デベロッパスイートで 使 用 している 業 界 標 準 バイナリファイル 形 式 。ELF オブ<br />
ジェクト 形 式 は、armcc や armasm などの <strong>ARM</strong> オブジェクト 生 成 ツールによって 生 成<br />
されます。<strong>ARM</strong> リンカは ELF オブジェクトファイルを 受 け 取 り、ELF 実 行 ファイルま<br />
たは 部 分 リンク ELF オブジェクトを 出 力 することができます。<br />
Execution view<br />
( 実 行 ビュー)<br />
Flash memory<br />
(フラッシュメモリ)<br />
イメージがメモリにロードされて 実 行 を 開 始 した 後 の、 領 域 およびセクションのアド<br />
レス。<br />
アプリケーションコードの 保 持 に 頻 繁 に 使 用 される 不 揮 発 性 メモリ。<br />
Heap(ヒープ)<br />
新 しい 変 数 の 作 成 に 使 用 可 能 なコンピュータメモリの 一 部 分 。<br />
Host(ホスト)<br />
IDE<br />
Image(イメージ)<br />
Input section<br />
( 入 力 セクション)<br />
別 のコンピュータにデータや 他 のサービスを 提 供 するコンピュータ。<br />
統 合 開 発 環 境 ( 例 :CodeWarrior IDE)。<br />
実 行 を 目 的 にプロセッサにロードされた 実 行 可 能 ファイル。<br />
コードまたは 初 期 化 データを 保 持 する、あるいはアプリケーションの 起 動 前 にゼロに<br />
設 定 する 必 要 があるメモリフラグメントを 記 述 するセクション。<br />
出 力 セクション 参 照 。<br />
Interrupt( ( 割 り 込 み) 外 部 シグナルなどが 原 因 で、アプリケーションの 通 常 処 理 シーケンスに 変 更 が 生 じる<br />
こと。<br />
Interworking(インターワーキング)<br />
<strong>ARM</strong> コードと Thumb コードの 両 方 を 使 用 するアプリケーションの 生 成 。<br />
Library<br />
(ライブラリ)<br />
Linker(リンカ)<br />
Little-endian(リトル<br />
エンディアン)<br />
アセンブラまたはコンパイラの 出 力 オブジェクトの 集 合 をグループ 化 した 1 つの 構 成<br />
物 。<br />
1 つ 以 上 のソースアセンブラ / コンパイラ 出 力 オブジェクトから 1 つのイメージを 生 成<br />
するソフトウェア。<br />
ワードの 最 下 位 バイトが 最 上 位 バイトよりも 下 位 アドレスに 位 置 するメモリ 構 成 。<br />
Glossary-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
用 語 集<br />
Load view<br />
(ロードビュー)<br />
Output section<br />
( 出 力 セクション)<br />
イメージがメモリにロードされ、 実 行 がまだ 開 始 されていないときの 領 域 およびセク<br />
ションのアドレス。<br />
RO、RW、ZI のうちで 同 じ 属 性 を 持 った、 連 続 する 一 連 の 入 力 セクションから 構 成 さ<br />
れるセクション。 出 力 セクションは、 領 域 と 呼 ばれるさらに 大 きなフラグメントにグ<br />
ループ 化 されます。これらの 領 域 がグループ 化 されて 最 終 的 な 実 行 イメージが 生 成 さ<br />
れます。<br />
領 域 参 照 。<br />
PIC<br />
位 置 独 立 コード。<br />
ROPI 参 照 。<br />
PID<br />
位 置 独 立 データまたは <strong>ARM</strong> プラットフォーム 独 立 開 発 カード。<br />
RWPI 参 照 。<br />
Profiling<br />
(プロファイリング)<br />
パフォーマンスの 測 定 や 重 要 コードエリアの 特 定 を 目 的 に、デバッグ 対 象 プログラム<br />
の 実 行 中 の 統 計 データを 蓄 積 したもの。<br />
コールグラフプロファイリングでは 詳 細 な 情 報 を 得 られますが、 実 行 速 度 が 著 しく 低<br />
下 します。フラットプロファイリングでは 簡 単 な 統 計 データを 得 ることができ、 実 行<br />
速 度 への 影 響 もそれほどありません。<br />
Program image(プログラムイメージ)<br />
どちらのタイプのプロファイリングでも、 統 計 データ 収 集 動 作 間 の 時 間 間 隔 を 指 定 す<br />
ることができます。<br />
イメージ 参 照 。<br />
Redirection( ( 転 送 ) デフォルト 出 力 を 異 なるデスティネーションに 送 信 する、あるいはデフォルト 入 力 を<br />
異 なるソースから 受 信 するプロセス。 転 送 は、 転 送 しなければコンピュータ 画 面 に 表<br />
示 されるテキストをファイルに 出 力 する 目 的 で 使 用 するのが 一 般 的 です。<br />
Region( ( 領 域 ) イメージ 内 において、1 ~ 3 個 の 連 続 する 一 連 の 出 力 セクション(RO、RW、ZI)から<br />
構 成 される 領 域 。 領 域 は 一 般 的 に、ROM、RAM、ペリフェラルなどの 物 理 メモリデバ<br />
イスにマップされます。<br />
ルート 領 域 参 照 。<br />
Remapping<br />
( 再 マッピング)<br />
Retargeting<br />
( 再 対 象 化 )<br />
Root region<br />
(ルート 領 域 )<br />
ROPI<br />
物 理 メモリまたはデバイスのアドレスを、アプリケーションの 実 行 開 始 後 に 変 更 する<br />
こと。 通 常 、この 動 作 は 初 期 化 完 了 後 に ROM を RAM に 置 き 換 えるために 行 われます。<br />
ある 実 行 環 境 に 合 わせて 設 計 されたコードを 別 の 実 行 環 境 に 移 す 作 業 工 程 。<br />
イメージ 内 において、それ 自 身 のロードアドレスで 実 行 される 領 域 。 非 ルート 領 域 と<br />
は、そのロードアドレスから 実 行 アドレスにコピーする 必 要 がある 領 域 を 言 います。<br />
読 み 出 し 専 用 位 置 独 立 。コードおよび 読 み 出 し 専 用 データのアドレスはランタイムに<br />
変 更 することが 可 能 です。<br />
<strong>ARM</strong> DUI0151AJ-00 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. Glossary-3
用 語 集<br />
RTOS<br />
RWPI<br />
Scatter-loading<br />
( 分 散 ローディング)<br />
Sections<br />
(セクション)<br />
Semihosting<br />
(セミホスティング)<br />
Stack(スタック)<br />
SWI<br />
Target(ターゲット)<br />
リアルタイムオペレーティングシステム。<br />
読 み 出 し / 書 き 込 み 位 置 独 立 。 読 み 出 し / 書 き 込 みデータのアドレスはランタイムに 変<br />
更 することが 可 能 です。<br />
1 つの 大 きなブロックを 使 用 するのではなく、コードセクションとデータセクションの<br />
アドレスを 個 々に 割 り 当 て、これらをグループ 化 すること。<br />
イメージを 構 成 するソフトウェアコードまたはデータのブロック。<br />
入 力 セクション 参 照 。<br />
ターゲットがアプリケーションコード 内 で 発 生 した I/O 要 求 を、その I/O 自 体 をサポー<br />
トしようとするのではなく、ホストシステムに 通 知 するメカニズム。<br />
サブルーチンを 呼 び 出 すコードのリターンアドレスを 記 録 するために 使 用 されるメモ<br />
リの 部 分 。スタックは、パラメータおよび 一 時 変 数 にも 使 用 することができます。<br />
ソフトウェア 割 り 込 み。プロセッサにプログラマが 指 定 したサブルーチンを 呼 び 出 さ<br />
せる 命 令 。<strong>ARM</strong> によってセミホスティングを 処 理 するために 使 用 されます。<br />
ターゲットアプリケーションを 実 行 する 実 ターゲットプロセッサ( 実 際 の、またはシ<br />
ミュレートされたプロセッサ)。<br />
デバッギングセッションにおける 基 本 オブジェクト。デバッギングシステムの 基 礎 。<br />
ターゲットソフトウェアを 実 行 する 環 境 。 実 質 的 には、 実 際 の、またはシミュレート<br />
されたプロセッサの 集 合 を 意 味 します。<br />
Veneer(ベニア)<br />
プロセッサ 状 態 の 変 更 要 件 、あるいは 現 在 のプロセッサ 状 態 では 到 達 不 可 能 なアドレス<br />
への 分 岐 要 件 があるときに、サブルーチンコールに 使 用 される 小 さなコードブロック。<br />
Volatile( ( 揮 発 性 ) 内 容 を 実 行 中 のアプリケーションとは 無 関 係 に 変 更 し 得 るメモリアドレスは、 揮 発 性<br />
と 記 述 されます。 一 般 的 にはメモリマップされるペリフェラルを 指 します。<br />
メモリマップ 参 照 。<br />
VFP<br />
Word(ワード)<br />
ZI<br />
ベクタ 浮 動 小 数 点 。 複 数 のデータ 値 を 1 つの 命 令 で 処 理 できる 浮 動 小 数 点 コプロセッ<br />
サの 標 準 。<br />
32 ビット 単 位 の 情 報 。ワードの 内 容 は、 指 定 されていない 限 り 符 号 なし 整 数 とみなさ<br />
れます。<br />
ゼロ 初 期 化 。 初 期 値 を 持 たない 変 数 の 保 持 に 使 用 される R/W メモリです。 通 常 、この<br />
メモリはリセット 時 にゼロに 設 定 されます。<br />
Glossary-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI0151AJ-00
Index<br />
The items in this index are listed in alphabetical order, with symbols and numerics appearing at the end. The references given<br />
are to page numbers.<br />
A<br />
armar 6-6<br />
<strong>ARM</strong>LIB variable 6-4<br />
armprof 8-2<br />
C<br />
Call graph, profiling 8-2<br />
Command syntax<br />
fromelf 7-3<br />
librarian 6-6<br />
linker<br />
profiler 8-3<br />
D<br />
Disassembly 7-6<br />
E<br />
ELF 2-3<br />
ELF file format 2-8<br />
Entry point<br />
specifying to the linker 2-12, 2-13<br />
Execution<br />
profile 8-2<br />
regions and veneers 3-13<br />
F<br />
File formats<br />
ELF 2-8<br />
<strong>fromELF</strong> output 7-7<br />
symdefs 4-7<br />
Files<br />
scatter-loading 5-1<br />
steering 4-9<br />
symdefs 4-5<br />
via 2-20<br />
Function call count, profiling 8-2<br />
H<br />
Hiding and renaming symbols 2-18,<br />
4-9<br />
I<br />
Images<br />
complex 5-4<br />
examples, scatter-loaded 5-4<br />
regions, overview 3-3<br />
sections 5-7<br />
overview 3-3<br />
simple 3-14<br />
specifying a memory map 3-5<br />
structure of 3-2<br />
Image$$<br />
symbols not defined 5-2<br />
user_initial_stackheap() 5-2<br />
Interworking<br />
<strong>ARM</strong> and Thumb 1-2<br />
<strong>ARM</strong> DUI 0151A Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. Index-1
Index<br />
L<br />
Librarian 6-6<br />
Libraries<br />
and linker, see Linker, libraries<br />
Linker<br />
code and data sizes 2-17<br />
debug information<br />
turning on and off 2-11<br />
default addresses 2-9<br />
diagnostics 2-19<br />
entering commands via a file 2-20<br />
execution information 3-4<br />
help on 2-5, 2-17<br />
image<br />
construction 2-6<br />
entry point 2-12<br />
keeping sections 2-13<br />
load and execution views 3-4<br />
overview 3-2<br />
structure 3-2<br />
image-related information 2-7<br />
Image$$ errors 5-2<br />
information 2-16, 2-19, 2-20<br />
libraries<br />
defaults 2-16<br />
including during link step 6-2<br />
linker search path 2-16<br />
scanning 2-16<br />
load information 3-4<br />
local symbols 2-16<br />
memory attributes 2-20<br />
memory map information 2-2, 2-11,<br />
3-4<br />
messages 2-16, 2-19, 2-20<br />
output file 2-5, 2-8<br />
output formats 2-5<br />
output sections 3-3<br />
overview of 2-2<br />
partial linking 2-8<br />
regions 3-3<br />
RO section base address 2-9, 3-18<br />
RW section base address 2-10<br />
scatter-loading<br />
command-line option 2-6, 2-11<br />
software version 2-8<br />
sorting input sections 3-8<br />
standard output stream 2-19<br />
steering files 2-18, 4-9<br />
symbols 4-2, 5-2<br />
hiding and renaming 2-18, 4-9<br />
used in link step 2-18<br />
syntax 2-8<br />
undefined symbols 2-20<br />
unused sections 2-12, 2-17<br />
veneers 2-17<br />
version number 2-5<br />
via files 2-5, 2-20<br />
$$ symbols 4-2<br />
Linker options<br />
-edit 2-18, 4-9<br />
-elf 2-8<br />
-entry 2-12<br />
-errors 2-19<br />
-first 2-14<br />
-help 2-8<br />
-info 2-17<br />
-keep 2-13<br />
-last 2-15<br />
-libpath 2-16, 6-4<br />
-list 2-19<br />
-locals 2-16<br />
-mangled 2-19, 2-20<br />
-nodebug 2-11<br />
-nolocals 2-16<br />
-noremove 2-12<br />
-noscanlib 2-16<br />
-output 2-8<br />
-partial 2-8<br />
-remove 2-12<br />
-ro-base 2-9<br />
-ropi 2-9<br />
-rw-base 2-10<br />
-rwpi 2-10<br />
-scanlib 2-16<br />
-scatter 2-11, 5-4<br />
-split 2-10<br />
-strict 2-20<br />
-symbols 2-18<br />
-symdefs 2-18<br />
-unmangled 2-19<br />
-unresolved 2-20<br />
-verbose 2-19<br />
-via 2-20<br />
-vsn 2-8<br />
-xreffrom 2-19<br />
M<br />
Memory map<br />
describing to linker 5-7<br />
overlaid 5-14<br />
specifying 2-11<br />
uninitialized 5-14<br />
P<br />
Position independence 2-9<br />
Profiler 8-2<br />
S<br />
Scatter-loading<br />
description file 5-2<br />
area syntax 5-15<br />
execution region syntax 5-13<br />
FIRST 5-17<br />
LAST 5-17<br />
load region syntax 5-11<br />
pseudo-attributes 5-17<br />
sections 5-7<br />
synonyms in 5-17<br />
error Image$$ZI$$Limit 5-2<br />
linker command-line option 5-4<br />
region matching 5-18<br />
section placement 2-15<br />
section-related symbols 4-4<br />
symbols defined by linker 5-2<br />
+FIRST 2-15<br />
+LAST 2-15<br />
Sections<br />
aligning 3-11<br />
attributes 2-2<br />
in region 2-2<br />
input 3-3<br />
multiple matches in scatterloading<br />
5-18<br />
placement of 2-14, 2-15, 3-8, 5-7,<br />
5-17<br />
by attribute 3-9<br />
FIRST and LAST 3-10<br />
in region 3-3<br />
sorting rules 3-8<br />
unused 2-12, 2-17<br />
Index-2 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0151A
Index<br />
Steering files 2-18, 4-9<br />
Symbols<br />
hiding and renaming 4-9<br />
Image$$ undefined 5-2<br />
in another image 4-5<br />
input section-related 4-4<br />
linker 2-18, 4-2, 4-9<br />
region-related 4-2<br />
scatter-loading 5-2<br />
section-related 4-4<br />
stack 4-3<br />
undefined 2-20<br />
ZI 4-2<br />
$$ 4-2<br />
Symdefs file 4-5<br />
Symbols<br />
$$ symbols 4-2<br />
T<br />
Thumb<br />
code 1-2<br />
verneer 3-13<br />
U<br />
Uninitialized memory 5-14<br />
V<br />
Variables<br />
<strong>ARM</strong>LIB 6-4<br />
Veneers<br />
<strong>ARM</strong> to <strong>ARM</strong> 3-13<br />
<strong>ARM</strong> to Thumb 3-13<br />
size 2-17<br />
Thumb to <strong>ARM</strong> 3-13<br />
Verneers<br />
placing 5-22<br />
Via files 2-20<br />
Z<br />
ZI symbols 4-2<br />
<strong>ARM</strong> DUI 0151A Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. Index-3
Index<br />
Index-4 Copyright © 2001 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0151A