X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fstm%2Faltos.ld;h=e352ed36601d85409801dc8c605a8a49a07536e7;hp=d218e992ad8aa5e835c951d94bd8b97e93e6cac1;hb=c6e57291d91f1f6c4de5c54a5cfd3eef66d9f830;hpb=1e9b405e939136d25d937334d1f14f06c7d6127b diff --git a/src/stm/altos.ld b/src/stm/altos.ld index d218e992..e352ed36 100644 --- a/src/stm/altos.ld +++ b/src/stm/altos.ld @@ -3,7 +3,8 @@ * * This program 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; version 2 of the License. + * 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 @@ -16,7 +17,7 @@ */ MEMORY { - rom (rx) : ORIGIN = 0x08000000, LENGTH = 128K + rom (rx) : ORIGIN = 0x08001000, LENGTH = 124K ram (!w) : ORIGIN = 0x20000000, LENGTH = 15872 stack (!w) : ORIGIN = 0x20003e00, LENGTH = 512 } @@ -36,9 +37,19 @@ SECTIONS { . = ORIGIN(rom) + 0x100; + + /* Ick. What I want is to specify the + * addresses of some global constants so + * that I can find them across versions + * of the application. I can't figure out + * how to make gnu ld do that, so instead + * we just load the two files that include + * these defines in the right order here and + * expect things to 'just work'. Don't change + * the contents of those files, ok? + */ ao_romconfig.o(.romconfig*) ao_product.o(.romconfig*) - *(.text*) /* Executable code */ *(.rodata*) /* Constants */ @@ -46,21 +57,34 @@ SECTIONS { .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) - __text_end__ = .; } > rom + __text_end__ = .; + + /* Boot data which must live at the start of ram so that + * the application and bootloader share the same addresses. + * This must be all uninitialized data + */ + .boot (NOLOAD) : { + __boot_start__ = .; + *(.boot) + . = ALIGN(4); + __boot_end__ = .; + } >ram /* Data -- relocated to RAM, but written to ROM */ - .data ORIGIN(ram) : AT (ADDR(.ARM.exidx) + SIZEOF (.ARM.exidx)) { - __data_start__ = .; + .data : { + _start__ = .; *(.data) /* initialized data */ - __data_end__ = .; - __bss_start__ = .; - } >ram + . = ALIGN(4); + _end__ = .; + } >ram AT>rom .bss : { + __bss_start__ = .; *(.bss) *(COMMON) + . = ALIGN(4); __bss_end__ = .; } >ram