-/*
- ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
-
- This file is part of ChibiOS/RT.
-
- ChibiOS/RT 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 3 of the License, or
- (at your option) any later version.
-
- ChibiOS/RT 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, see <http://www.gnu.org/licenses/>.
-
- ---
-
- A special exception to the GPL can be applied should you wish to distribute
- a combined work that includes ChibiOS/RT, without being obliged to provide
- the source code for any proprietary components. See the file exception.txt
- for full details of how and when the exception can be applied.
-*/
-
/*
* ST32F103 memory setup.
*/
-__main_stack_size__ = 0x0400;
-__process_stack_size__ = 0x0200;
-__stacks_total_size__ = __main_stack_size__ + __process_stack_size__;
+__main_stack_size__ = 0x0080; /* Exception handlers */
+__process0_stack_size__ = 0x0100; /* main */
+__process1_stack_size__ = 0x01a0; /* ccid */
+__process2_stack_size__ = 0x0180; /* rng */
+__process3_stack_size__ = 0x1640; /* gpg */
+__process4_stack_size__ = 0; /* --- */
+__process5_stack_size__ = @MSC_SIZE@; /* msc */
+__process6_stack_size__ = @TIM_SIZE@; /* intr: timer */
+__process7_stack_size__ = @EXT_SIZE@; /* intr: ext */
MEMORY
{
- flash : org = @ORIGIN@, len = @FLASH_SIZE@k
- ram : org = 0x20000000, len = 20k
+ flash0 : org = @ORIGIN@, len = 4k
+ flash : org = @ORIGIN@+0x1000, len = @FLASH_SIZE@k - 4k
+ ram : org = 0x20000000, len = @MEMORY_SIZE@k
}
__ram_start__ = ORIGIN(ram);
{
. = 0;
+ .sys : ALIGN(4) SUBALIGN(4)
+ {
+ _sys = .;
+ KEEP(*(.vectors))
+ . = ALIGN(16);
+ KEEP(*(.sys.version))
+ KEEP(*(.sys.board_id))
+ KEEP(*(.sys.board_name))
+ build/sys-*.o(.text)
+ build/sys-*.o(.text.*)
+ build/sys-*.o(.rodata)
+ build/sys-*.o(.rodata.*)
+ . = ALIGN(1024);
+ *(.sys.0)
+ *(.sys.1)
+ *(.sys.2)
+ } > flash0
+
+ _text = .;
+
+ .startup : ALIGN(128) SUBALIGN(128)
+ {
+ KEEP(*(.startup.vectors))
+ . = ALIGN (16);
+ } > flash =0xffffffff
+
.text : ALIGN(16) SUBALIGN(16)
{
- _text = .;
- KEEP(*(vectors))
+ *(.text.startup.*)
*(.text)
*(.text.*)
*(.rodata)
*(.glue_7t)
*(.glue_7)
*(.gcc*)
+ . = ALIGN(8);
} > flash
- .ctors :
- {
- PROVIDE(_ctors_start_ = .);
- KEEP(*(SORT(.ctors.*)))
- KEEP(*(.ctors))
- PROVIDE(_ctors_end_ = .);
- } > flash
-
- .dtors :
- {
- PROVIDE(_dtors_start_ = .);
- KEEP(*(SORT(.dtors.*)))
- KEEP(*(.dtors))
- PROVIDE(_dtors_end_ = .);
- } > flash
+ .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} > flash
- .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)}
+ .ARM.exidx : {
+ PROVIDE(__exidx_start = .);
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ PROVIDE(__exidx_end = .);
+ } > flash
- __exidx_start = .;
- .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash
- __exidx_end = .;
+ .eh_frame_hdr : {*(.eh_frame_hdr)} > flash
- .eh_frame_hdr : {*(.eh_frame_hdr)}
+ .eh_frame : ONLY_IF_RO {*(.eh_frame)} > flash
- .eh_frame : ONLY_IF_RO {*(.eh_frame)}
+ .textalign : ONLY_IF_RO { . = ALIGN(8); } > flash
- . = ALIGN(4);
_etext = .;
_textdata = _etext;
+ .stacks :
+ {
+ . = ALIGN(8);
+ __main_stack_base__ = .;
+ . += __main_stack_size__;
+ . = ALIGN(8);
+ __main_stack_end__ = .;
+ __process0_stack_base__ = .;
+ . += __process0_stack_size__;
+ . = ALIGN(8);
+ __process0_stack_end__ = .;
+ __process1_stack_base__ = .;
+ . += __process1_stack_size__;
+ . = ALIGN(8);
+ __process1_stack_end__ = .;
+ __process2_stack_base__ = .;
+ . += __process2_stack_size__;
+ . = ALIGN(8);
+ __process2_stack_end__ = .;
+ __process3_stack_base__ = .;
+ . += __process3_stack_size__;
+ . = ALIGN(8);
+ __process3_stack_end__ = .;
+ __process4_stack_base__ = .;
+ . += __process4_stack_size__;
+ . = ALIGN(8);
+ __process4_stack_end__ = .;
+ __process5_stack_base__ = .;
+ . += __process5_stack_size__;
+ . = ALIGN(8);
+ __process5_stack_end__ = .;
+ __process6_stack_base__ = .;
+ . += __process6_stack_size__;
+ . = ALIGN(8);
+ __process6_stack_end__ = .;
+ __process7_stack_base__ = .;
+ . += __process7_stack_size__;
+ . = ALIGN(8);
+ __process7_stack_end__ = .;
+ . = ALIGN(8);
+ } > ram
+
.data :
{
- _data = .;
+ . = ALIGN(4);
+ PROVIDE(_data = .);
*(.data)
. = ALIGN(4);
*(.data.*)
. = ALIGN(4);
*(.ramtext)
. = ALIGN(4);
- _edata = .;
+ PROVIDE(_edata = .);
} > ram AT > flash
.bss :
{
- _bss_start = .;
+ . = ALIGN(4);
+ PROVIDE(_bss_start = .);
*(.bss)
. = ALIGN(4);
*(.bss.*)
. = ALIGN(4);
*(COMMON)
. = ALIGN(4);
- _bss_end = .;
+ PROVIDE(_bss_end = .);
} > ram
+ . = ALIGN(16);
PROVIDE(end = .);
_end = .;
. = ALIGN(512);
+
_regnual_start = .;
@CERTDO_SUPPORT_START@
{
. = ALIGN (@FLASH_PAGE_SIZE@);
ch_certificate_start = .;
- LONG(0xffffffff);
- . += 1920;
+ LONG(0xffffffff);
+ . += 1920;
. = ALIGN (@FLASH_PAGE_SIZE@);
} > flash =0xffffffff
@CERTDO_SUPPORT_END@
.gnuk_flash :
{
. = ALIGN (@FLASH_PAGE_SIZE@);
- _data_pool = .;
- KEEP(*(.gnuk_data))
- . = ALIGN(@FLASH_PAGE_SIZE@);
- . += @FLASH_PAGE_SIZE@;
- _keystore_pool = .;
- . += 512*3;
- . = ALIGN(@FLASH_PAGE_SIZE@);
+ _keystore_pool = .;
+ . += 512;
+ . = ALIGN(@FLASH_PAGE_SIZE@);
+ . += 512;
+ . = ALIGN(@FLASH_PAGE_SIZE@);
+ . += 512;
+ . = ALIGN(@FLASH_PAGE_SIZE@);
+ _updatekey_store = .;
+ . += 1024;
+ . = ALIGN(@FLASH_PAGE_SIZE@);
+ _data_pool = .;
+ KEEP(*(.gnuk_data))
+ . = ALIGN(@FLASH_PAGE_SIZE@);
+ . += @FLASH_PAGE_SIZE@;
} > flash =0xffffffff
}
__heap_base__ = _end;
-__heap_end__ = __ram_end__ - __stacks_total_size__;
+__heap_end__ = __ram_end__;