ARM Compiler toolchain Using the Linker - ARM Information Center
ARM Compiler toolchain Using the Linker - ARM Information Center
ARM Compiler toolchain Using the Linker - ARM Information Center
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
9.7 Example GNU ld script for linking an <strong>ARM</strong> Linux executable<br />
GNU ld script support in armlink<br />
The following ld script is sufficient to link a “hello world” application. The most important parts<br />
are:<br />
• The initial . = 0x00008000 + SIZEOF_HEADERS;<br />
The linker can include <strong>the</strong> ELF Header and Program Header into <strong>the</strong> first page.<br />
• The alignment expressions that force <strong>the</strong> RW into a separate page.<br />
• The output sections for <strong>the</strong> metadata needed by <strong>the</strong> dynamic linker.<br />
Use <strong>the</strong> armlink --linker_script command-line option to specify an ld script file.<br />
SECTIONS<br />
{<br />
PROVIDE(__executable_start = 0x0008000);<br />
. = 0x00008000 + SIZEOF_HEADERS;<br />
.interp : { *(.interp) }<br />
.hash : { *(.hash) }<br />
.gnu.hash : { *(.gnu.hash) }<br />
.dynsym : { *(.dynsym) }<br />
.dynstr : { *(.dynstr) }<br />
.version : { *(.version) }<br />
.version_d : { *(.version_d) }<br />
.version_r : { *(.version_r) }<br />
.rel.dyn : { *(.rel.dyn) }<br />
.rel.plt : { *(.rel.plt) }<br />
.init : { KEEP (*(.init)) }<br />
.plt : { *(.plt) }<br />
.text : { *(.text .text.*) }<br />
.fini : { KEEP (*(.fini)) }<br />
.rodata : { *(.rodata .rodata.*) }<br />
.<strong>ARM</strong>.extab : { *(.<strong>ARM</strong>.extab*) }<br />
__exidx_start = .;<br />
.<strong>ARM</strong>.exidx : { *(.<strong>ARM</strong>.exidx*) }<br />
__exidx_end = .;<br />
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT<br />
(MAXPAGESIZE) - 1));<br />
. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));<br />
.tdata : { *(.tdata .tdata.*) }<br />
.tbss : { *(.tbss .tbss.*) }<br />
.preinit_array :<br />
{<br />
PROVIDE_HIDDEN (__preinit_array_start = .);<br />
KEEP (*(.preinit_array))<br />
PROVIDE_HIDDEN (__preinit_array_end = .);<br />
}<br />
.init_array :<br />
{<br />
PROVIDE_HIDDEN (__init_array_start = .);<br />
KEEP (*(SORT(.init_array.*)))<br />
KEEP (*(.init_array))<br />
PROVIDE_HIDDEN (__init_array_end = .);<br />
}<br />
.fini_array :<br />
{<br />
PROVIDE_HIDDEN (__fini_array_start = .);<br />
KEEP (*(.fini_array))<br />
KEEP (*(SORT(.fini_array.*)))<br />
PROVIDE_HIDDEN (__fini_array_end = .);<br />
<strong>ARM</strong> DUI 0474C Copyright © 2010-2011 <strong>ARM</strong>. All rights reserved. 9-12<br />
ID080411 Non-Confidential