9.7 ARM Linux 実行可能ファイルをリンクするための GNU ld スクリプトの例

この例では、ld スクリプトを使用して、hello world アプリケーションをリンクする方法を紹介しています。

以下の ld スクリプトだけで、hello world アプリケーションをリンクできます。最も重要な部分を以下に示します。

  • 最初の .= 0x00008000+SIZEOF_HEADERS;

    リンカは、ELF ヘッダとプログラムヘッダを最初のページに含めることができます。

  • RW を別のページに含める境界調整式

  • ダイナミックリンカが必要とするメタデータの出力セクション

ld スクリプトファイルを指定するには、armlink --linker_script コマンドラインオプションを使用します。

SECTIONS {   PROVIDE(__executable_start = 0x0008000);   .= 0x00008000 + SIZEOF_HEADERS;   .interp         :{ *(.interp) }   .hash           :{ *(.hash) }   .gnu.hash       :{ *(.gnu.hash) }   .dynsym         :{ *(.dynsym) }   .dynstr         :{ *(.dynstr) }   .version        :{ *(.version) }   .version_d      :{ *(.version_d) }   .version_r      :{ *(.version_r) }   .rel.dyn        :{ *(.rel.dyn) }   .rel.plt        :{ *(.rel.plt) }   .init           :{ KEEP (*(.init)) }   .plt            :{ *(.plt) }   .text           :{ *(.text .text.*) }   .fini           :{ KEEP (*(.fini)) }   .rodata         :{ *(.rodata .rodata.*) }   .ARM.extab   :{ *(.ARM.extab*) }    __exidx_start = .;   .ARM.exidx   :{ *(.ARM.exidx*) }    __exidx_end = .;   .= ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .)& (CONSTANT (MAXPAGESIZE) - 1));   .= DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));   .tdata             :{ *(.tdata .tdata.*) }   .tbss              :{ *(.tbss .tbss.*) }   .preinit_array     :{      PROVIDE_HIDDEN (__preinit_array_start = .);       KEEP (*(.preinit_array))      PROVIDE_HIDDEN (__preinit_array_end = .);    }   .init_array     :{      PROVIDE_HIDDEN (__init_array_start = .);       KEEP (*(SORT(.init_array.*)))      KEEP (*(.init_array))      PROVIDE_HIDDEN (__init_array_end = .);    }   .fini_array     :{      PROVIDE_HIDDEN (__fini_array_start = .);       KEEP (*(.fini_array))      KEEP (*(SORT(.fini_array.*)))      PROVIDE_HIDDEN (__fini_array_end = .);    }   .dynamic        :{ *(.dynamic) }   .got            :{ *(.got.plt) *(.got) }   .data           :{     *(.data .data.*)   }   .bss            :{    *(.bss .bss.*)    .= ALIGN(.!= 0 ?32 / 8 :1);   } }
関連する概念
9.1 GNU ld スクリプトのサポートと制限について
関連する参考文書
12.88 --linker_script=ld_script
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.