06.02.2013 Views

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

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!