MicroAPRS/bertos/cpu/arm/scripts/arm7tdmi_ram.ld

136 lines
3.1 KiB
Plaintext

/**
* \file
* <!--
* This file is part of BeRTOS.
*
* Bertos is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* As a special exception, you may use this file as part of a free software
* library without restriction. Specifically, if other files instantiate
* templates or use macros or inline functions from this file, or you compile
* this file and link it with other files to produce an executable, this
* file does not by itself cause the resulting executable to be covered by
* the GNU General Public License. This exception does not however
* invalidate any other reasons why the executable file might be covered by
* the GNU General Public License.
*
* Copyright 2010 Develer S.r.l. (http://www.develer.com/)
*
* -->
*
* \author Daniele Basile <asterix@develer.com>
*
* \brief Linker Script for Atmel AT91SAM7 family processors, RAM execution.
*
*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
/*
* Define stack size here
*/
FIQ_STACK_SIZE = 0x0100;
IRQ_STACK_SIZE = 0x0400;
ABT_STACK_SIZE = 0x0100;
UND_STACK_SIZE = 0x0100;
SVC_STACK_SIZE = 0x1000;
/*
* Allocate section memory
*/
SECTIONS
{
.text :
{
KEEP(*(.vectors));
. = ALIGN (4);
KEEP(*(.exceptions));
. = ALIGN (4);
*(.init);
. = ALIGN (4);
*(.rodata .rodata.*);
. = ALIGN (4);
*(.text .text.*);
. = ALIGN (4);
*(.glue_7t);
. = ALIGN(4);
*(.glue_7);
. = ALIGN(4);
*(.gcc*);
. = ALIGN(4);
*(.ctors);
. = ALIGN(4);
*(.dtors);
_etext = .;
PROVIDE (__etext = .);
} > ram
.data : AT (_etext)
{
PROVIDE (__data_start = .);
*(.data .data.*)
. = ALIGN (4);
_edata = .;
PROVIDE (__data_end = .);
} > ram
.bss :
{
PROVIDE (__bss_start = .);
*(.bss .bss.*)
. = ALIGN(4);
*(COMMON)
. = ALIGN(4);
PROVIDE (__bss_end = .);
} > ram
/*
* Allocate stack at the end of bss section.
* Data heap is allocated at end of stack.
*/
PROVIDE (__stack_start = .);
PROVIDE (__stack_fiq_start = .);
. += FIQ_STACK_SIZE;
. = ALIGN(8);
PROVIDE (__stack_fiq_end = .);
PROVIDE (__stack_irq_start = .);
. += IRQ_STACK_SIZE;
. = ALIGN(8);
PROVIDE (__stack_irq_end = .);
PROVIDE (__stack_abt_start = .);
. += ABT_STACK_SIZE;
. = ALIGN(8);
PROVIDE (__stack_abt_end = .);
PROVIDE (__stack_und_start = .);
. += UND_STACK_SIZE;
. = ALIGN(8);
PROVIDE (__stack_und_end = .);
PROVIDE (__stack_svc_start = .);
. += SVC_STACK_SIZE;
. = ALIGN(8);
PROVIDE (__stack_svc_end = .);
PROVIDE (__stack_end = .);
PROVIDE (__heap_start = .);
}