/* * \brief Linker script for Genode programs * \author Christian Helmuth * \date 2006-04-12 */ /* * Copyright (C) 2006-2013 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ /* values taken from Codezero's mm0 linker script */ /*physical_base = 0x00208000;*/ /*virtual_base = 0xe0000000;*/ /*offset = virtual_base - physical_base;*/ /* * Addresses correspond to the linker script generated by * the Codezero build system. */ vma_start = 0x100000; lma_start = 0x40000; offset = vma_start - lma_start; ENTRY(_start) PHDRS { ro PT_LOAD; rw PT_LOAD; } SECTIONS { . = vma_start; .text : AT (ADDR(.text) - offset) { /* begin of program image (link address) */ _prog_img_beg = .; *(.text.crt0) *(.init) *(.text .text.* .gnu.linkonce.t.*) *(.fini) *(.rodata .rodata.* .gnu.linkonce.r.*) . = ALIGN(0x08); _ctors_start = .; KEEP (*(.ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.init_array)) /* list of constructors specific for ARM eabi */ _ctors_end = .; _dtors_start = .; KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) _dtors_end = .; } : ro = 0x90909090 /* Linux: exception section for uaccess mechanism */ __ex_table : { *(__ex_table) } .eh_frame_hdr : { *(.eh_frame_hdr) } . = ALIGN(0x1000); _prog_img_data = .; .data : AT (ADDR(.data) - offset) { /* * Leave space for parent capability parameters at start of data * section. The protection domain creator is reponsible for storing * sane values here. */ _parent_cap = .; LONG(0xffffffff); LONG(0xffffffff); _vma_start = .; LONG(vma_start); _lma_start = .; LONG(lma_start); *(.data .data.* .gnu.linkonce.d.*) } : rw /* exception frames for C++ */ .eh_frame : { __eh_frame_start__ = .; KEEP (*(.eh_frame)) LONG(0) } : rw .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); } .gcc_except_table : { KEEP(*(.gcc_except_table)) } .dynamic : { *(.dynamic) } /* .ARM.exidx is sorted, so has to go in its own output section */ __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } __exidx_end = .; .ARM.extab : { *(.ARM.extab*) } : rw . = ALIGN(4); .bss : AT (ADDR(.bss) - offset) { *(.bss .bss.* .gnu.linkonce.b.* COMMON) } /* end of program image -- must be after last section */ _prog_img_end = .; /DISCARD/ : { *(.note) *(.note.ABI-tag) *(.comment) } }