[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.14 出力をセクション(text, data, …)に分割する

あるオブジェクトファイルは、異なる型のデータを含む幾つかの セクションに分けられる。 最も共通のケースとして、三つのセクションがある。 テキスト・セクションは、機械命令と読みだし専用のデータを含む。 データ・セクションは、初期された書き込み可能なデータを含む。 BSS セクション は、非初期化データを含む。 システムによっては、他の種類のセクションを持つ。

コンパイラはアセンブラに対していつセクションを切り替えるかの指示を 出さなくてはならない。以下のマクロ群は、アセンブラに対してこの切替えを 指示するコマンドの制御を行なう。

TEXT_SECTION_ASM_OP

機械命令と読みだし専用データの直前に現れる必要があるアセンブラ命令を表す 文字列を値として持つ C の式である。 普通は ".text" となる。

DATA_SECTION_ASM_OP

後続のデータが初期化済の書き込み可能なデータであることを 指示するアセンブラ命令を表す文字列を値として持つ C の式である。 普通は ".data" となる。

SHARED_SECTION_ASM_OP

定義されている場合は、後続のデータが共有データであることを特定する アセンブラ命令を表す文字列を値として持つ C の式である。 定義されていない場合は、DATA_SECTION_ASM_OP が使われる。

BSS_SECTION_ASM_OP

定義されている場合は、後続のデータが非初期化データであることを 指示するアセンブラ命令を表す文字列を値として持つ C の式である。 これが定義されておらず、かつ ASM_OUTPUT_BSSASM_OUTPUT_ALIGNED_BSS も定義されていない場合は、 非初期化グローバルデータは ‘-fno-common’ が指定されている場合は、 データセクションに出力され、それ以外の場合は ASM_OUTPUT_COMMON が 使われる。

SHARED_BSS_SECTION_ASM_OP

定義されている場合は、後続のデータが非初期化共有データであることを 指示するアセンブラ命令を表す文字列を値として持つ C の式である。 これが定義されておらず、かつ BSS_SECTION_ASM_OP が 定義されている場合は、BSS_SECTION_ASM_OP が使われる。

INIT_SECTION_ASM_OP

定義されている場合は、後続のデータが初期化コードであることを 指示するアセンブラ命令を表す文字列を値として持つ C の式である。 定義されていない場合は、GNU CC はこのようなセクションは存在しないと 仮定する。

EXTRA_SECTIONS

標準の二つのセクション、in_textin_data 以外の 他のセクションの名前のリストである。 (GCC が使わなければならない)他のセクションが存在しないシステムでは、 このマクロを定義する必要はない。

EXTRA_SECTION_FUNCTIONS

varasm.c’ で定義されるべき関数を 1 個以上ならべたもの。 ここで指定した関数の仕事は、関数 text_sectiondata_section が行なう作業と同様な作業を追加のセクションに対して行なうことである。 EXTRA_SECTIONS を定義しない場合には、このマクロは定義しないこと。

READONLY_DATA_SECTION

多くのマシンでは、読みだし専用変数、定数、ジャンプ表はテキストセクションに 置かれる。 これにあてはまらないマシンの場合は、このマクロには、読みだし専用のデータに 使われるセクションへの切替えを行なう関数名(data_sectionEXTRA_SECTIONS で定義されている関数のどれか)を定義する必要がある。

読みだし専用のデータがテキストセクションに置かれるべきものなら、 このマクロは定義するべきでない。

SELECT_SECTION (exp, reloc)

exp を出力するのに適したセクションへの切替えを行なう C の一個の文か 複数の文。 expVAR_DECL ノードか、ある種類の定数と仮定して良い。 reloc は、exp の初期値がリンク時に再配置を必要とするか どうかを指示する。 text_section か、他のセクション向けの関数を呼び出すことで セクションを選択するようにする。

全ての読みだし専用変数と定数を読みだし専用セクション(普通は テキストセクション)に置く場合は、このマクロを定義しないこと。

SELECT_RTX_SECTION (mode, rtx)

rtx をモード mode で出力するのに適したセクションへの 切替えを行なう C の一個の文か複数の文。 rtx は、RTL 中のある種類の定数と仮定して良い。 引数 mode は、const_int rtx の場合は冗長である。 text_section か、他のセクション向けの関数を呼び出すことで セクションを選択するようにする。

定数は全て、読みだし専用データセクションにおくなら、このマクロを 定義しないこと。

JUMP_TABLES_IN_TEXT_SECTION

ジャンプ表(insn tablejump 向け)は、アセンブラ命令と一緒に テキストセクションに置くべきなら、このマクロをゼロでない値を 持つ式として定義する。 それ以外の場合は、読みだし専用データセクションが使われる。

このマクロは、独立した読みだし専用データセクションがない場合には 関係してこない。

ENCODE_SECTION_INFO (decl)

シンボルへの参照を、そのシンボルにより指定される変数や関数についての 何かの情報に依存して、取扱を変えなくてはならない場合に、このマクロを定義する。 例えば、そのシンボルがどのセクションに属するかといった情報である。

このマクロは、定義されていれば、decl についての rtl が生成され、 DECL_RTL (decl) に格納された直後に実行される。 この rtl の値は、アドレスが symbol_ref である mem になる。

このマクロで通常行なうべきことは、SYMBOL_REF_FLAG のような、 symbol_ref 内のフラグを記録したり、(1ビットでは表せない情報であれば) symbol_ref 内の修正された名前の文字列を格納することである。

STRIP_NAME_ENCODING (var, sym_name)

セクション情報をエンコードする文字群なしで、sym_name をデコードし、 var の実際の名前の部分を格納する。 ENCODE_SECTION_INFO がシンボル名文字列を書き換える場合は このマクロを定義する。

UNIQUE_SECTION_P (decl)

ターゲット固有の理由により、decl がある一意的なセクションに 置かれるべきであるなら、評価すると真になるような C の式。 このマクロを定義しない場合のデフォルトは、‘0’ である。 ‘-ffunction-sections’ オプションを指定することでも、 関数を一意的なセクションに置かれる事に注意。

UNIQUE_SECTION (decl, reloc)

一意的なセクション名を組み立てる C の式で、STRING_CST ノードとして 表され、‘DECL_SECTION_NAME (decl)’ に代入される。 reloc で、exp の初期値がリンク時の再配置を必要とするかどうかを 指定する。 このマクロを定義しない場合は、GNU CC はシンボル名の前に ‘.’ を 付けたものをセクション名として使う。


This document was generated using texi2html 1.78.