非常に大きい配列の要素が初期化されると、その配列全体のデータがオブジェクトファイルに書き込まれます。再配置可能オブジェクトファイルまたは実行可能ファイルのサイズは、非常に大きくなることがあります。SHT_SUNW_move セクションは、このようなファイルを圧縮するために導入されています。
コンパイラまたはリンカーで作成されるオブジェクトには、部分的に初期化されたシンボルに対して移動セクションが存在することがあります。このセクションは、SHT_SUNW_move 型で定義されます。このセクションには、ELF32_Move/Elf64_Move 型の複数のエントリが存在します。これらのエントリは以下のように定義されます。
typedef struct {
Elf32_Lword m_value;
Elf32_Word m_info;
Elf32_Word m_poffset;
Elf32_Half m_repeat;
Elf32_Half m_stride;
} Elf32_Move;
#define ELF32_M_SYM(info) ((info)>>8)
#define ELF32_M_SIZE(info) ((unsigned char)(info))
#define ELF32_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))
typedef struct {
Elf64_Lword m_value;
Elf64_Xword m_info;
Elf64_Xword m_poffset;
Elf64_Half m_repeat;
Elf64_Half m_stride;
} Elf64_Move;
#define ELF64_M_SYM(info) ((info)>>8)
#define ELF64_M_SIZE(info) ((unsigned char)(info))
#define ELF64_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))
|
これは、シンボルからの相対オフセットです。
この構成要素は、移動を行わなければならないシンボルテーブルインデックスと、移動されるオブジェクトの大きさ (単位: バイト) を与えます。構成要素の下位 8 ビットは大きさを保持し、上位バイトはシンボルインデックスを保持します。大きさは、1、2、4、または 8 です。
この構成要素は、繰り返し回数です。
この構成要素は、1 つのオブジェクトを初期化するごとに飛び越えるオブジェクトの数を示します。この値が 0 の場合、初期化を m_repeat 回数連続して行うことを意味します。
この構成要素は、初期化値です。