23.10.2014 Views

fromELF - ARM Information Center

fromELF - ARM Information Center

fromELF - ARM Information Center

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!