You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.9 KiB
187 lines
5.9 KiB
/**************************************************************************** |
|
* examples/nxflat/gnu-nxflat-gotoff.ld |
|
* |
|
* Copyright (C) 2009, 2012 Gregory Nutt. All rights reserved. |
|
* Author: Gregory Nutt <gnutt@nuttx.org> |
|
* |
|
* Redistribution and use in source and binary forms, with or without |
|
* modification, are permitted provided that the following conditions |
|
* are met: |
|
* |
|
* 1. Redistributions of source code must retain the above copyright |
|
* notice, this list of conditions and the following disclaimer. |
|
* 2. Redistributions in binary form must reproduce the above copyright |
|
* notice, this list of conditions and the following disclaimer in |
|
* the documentation and/or other materials provided with the |
|
* distribution. |
|
* 3. Neither the name NuttX nor the names of its contributors may be |
|
* used to endorse or promote products derived from this software |
|
* without specific prior written permission. |
|
* |
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
* POSSIBILITY OF SUCH DAMAGE. |
|
* |
|
****************************************************************************/ |
|
|
|
MEMORY |
|
{ |
|
ISPACE : ORIGIN = 0x0, LENGTH = 2097152 |
|
DSPACE : ORIGIN = 0x0, LENGTH = 2097152 |
|
} |
|
|
|
/**************************************************************************** |
|
* The XFLAT program image is divided into two segments: |
|
* |
|
* (1) ISpace (Instruction Space). This is the segment that contains |
|
* code (.text). Everything in the segment should be fetch-able |
|
* machine PC instructions (jump, branch, call, etc.). |
|
* (2) DSpace (Data Space). This is the segment that contains both |
|
* read-write data (.data, .bss) as well as read-only data (.rodata). |
|
* Everything in this segment should be access-able with machine |
|
* PIC load and store instructions. |
|
* |
|
* Older versions of GCC (at least up to GCC 4.3.3), use GOT-relative |
|
* addressing to access RO data. In that case, read-only data (.rodata) must |
|
* reside in D-Space and this linker script should be used. |
|
* |
|
* Newer versions of GCC (at least as of GCC 4.6.3), use PC-relative |
|
* addressing to access RO data. In that case, read-only data (.rodata) must |
|
* reside in I-Space and this linker script should NOT be used with those |
|
* newer tools. |
|
* |
|
****************************************************************************/ |
|
|
|
SECTIONS |
|
{ |
|
.text 0x00000000 : |
|
{ |
|
/* ISpace is located at address 0. Every (unrelocated) ISpace |
|
* address is an offset from the begining of this segment. |
|
*/ |
|
|
|
text_start = . ; |
|
|
|
*(.text) |
|
*(.text.*) |
|
*(.gnu.warning) |
|
*(.stub) |
|
*(.glue_7) |
|
*(.glue_7t) |
|
*(.jcr) |
|
|
|
/* C++ support: The .init and .fini sections contain XFLAT- |
|
* specific logic to manage static constructors and destructors. |
|
*/ |
|
|
|
*(.gnu.linkonce.t.*) |
|
*(.init) |
|
*(.fini) |
|
|
|
/* This is special code area at the end of the normal |
|
text section. It contains a small lookup table at |
|
the start followed by the code pointed to by entries |
|
in the lookup table. */ |
|
|
|
. = ALIGN (4) ; |
|
PROVIDE(__ctbp = .); |
|
*(.call_table_data) |
|
*(.call_table_text) |
|
|
|
_etext = . ; |
|
|
|
} > ISPACE |
|
|
|
/* DSpace is also located at address 0. Every (unrelocated) DSpace |
|
* address is an offset from the begining of this segment. |
|
*/ |
|
|
|
.data 0x00000000 : |
|
{ |
|
/* In this model, .rodata is access using PC-relative addressing |
|
* and, hence, must also reside in the .text section. |
|
*/ |
|
|
|
__data_start = . ; |
|
*(.rodata) |
|
*(.rodata1) |
|
*(.rodata.*) |
|
*(.gnu.linkonce.r*) |
|
|
|
*(.data) |
|
*(.data1) |
|
*(.data.*) |
|
*(.gnu.linkonce.d*) |
|
*(.data1) |
|
*(.eh_frame) |
|
*(.gcc_except_table) |
|
|
|
*(.gnu.linkonce.s.*) |
|
*(__libc_atexit) |
|
*(__libc_subinit) |
|
*(__libc_subfreeres) |
|
*(.note.ABI-tag) |
|
|
|
/* C++ support. For each global and static local C++ object, |
|
* GCC creates a small subroutine to construct the object. Pointers |
|
* to these routines (not the routines themselves) are stored as |
|
* simple, linear arrays in the .ctors section of the object file. |
|
* Similarly, pointers to global/static destructor routines are |
|
* stored in .dtors. |
|
*/ |
|
|
|
*(.gnu.linkonce.d.*) |
|
|
|
_ctors_start = . ; |
|
*(.ctors) |
|
_ctors_end = . ; |
|
_dtors_start = . ; |
|
*(.dtors) |
|
_dtors_end = . ; |
|
|
|
_edata = . ; |
|
edata = ALIGN( 0x10 ) ; |
|
} > DSPACE |
|
|
|
.bss : |
|
{ |
|
__bss_start = _edata ; |
|
*(.dynsbss) |
|
*(.sbss) |
|
*(.sbss.*) |
|
*(.scommon) |
|
*(.dynbss) |
|
*(.bss) |
|
*(.bss.*) |
|
*(.bss*) |
|
*(.gnu.linkonce.b*) |
|
*(COMMON) |
|
end = ALIGN( 0x10 ) ; |
|
_end = ALIGN( 0x10 ) ; |
|
} > DSPACE |
|
|
|
.got 0 : { *(.got.plt) *(.got) } |
|
.junk 0 : { *(.rel*) *(.rela*) } |
|
/* Stabs debugging sections. */ |
|
.stab 0 : { *(.stab) } |
|
.stabstr 0 : { *(.stabstr) } |
|
.stab.excl 0 : { *(.stab.excl) } |
|
.stab.exclstr 0 : { *(.stab.exclstr) } |
|
.stab.index 0 : { *(.stab.index) } |
|
.stab.indexstr 0 : { *(.stab.indexstr) } |
|
.comment 0 : { *(.comment) } |
|
.debug_abbrev 0 : { *(.debug_abbrev) } |
|
.debug_info 0 : { *(.debug_info) } |
|
.debug_line 0 : { *(.debug_line) } |
|
.debug_pubnames 0 : { *(.debug_pubnames) } |
|
.debug_aranges 0 : { *(.debug_aranges) } |
|
}
|
|
|