X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm%2Faltos-loader.ld;h=0753f5f7288d45ae9805a7a625d23688b8d46a02;hb=4e1b134e29313a1bdac18de57fe547299e5ded2a;hp=5e10e5bade2b4c79f1dc9b404ed800f82e7d57f1;hpb=a2e0676f476b0e2bdd5102315ebd5904b57f384a;p=fw%2Faltos diff --git a/src/stm/altos-loader.ld b/src/stm/altos-loader.ld index 5e10e5ba..0753f5f7 100644 --- a/src/stm/altos-loader.ld +++ b/src/stm/altos-loader.ld @@ -32,17 +32,14 @@ SECTIONS { .text : { __text_start__ = .; *(.interrupt) /* Interrupt vectors */ - *(.romconfig*) - *(.text) /* Executable code */ - . = ALIGN(4); - *(.rodata*) /* Constants */ - . = ALIGN(4); - } > rom - .ARM.exidx : { - . = ALIGN(4); + . = ORIGIN(rom) + 0x100; + + ao_romconfig.o(.romconfig*) + ao_product.o(.romconfig*) + *(.text*) /* Executable code */ *(.ARM.exidx* .gnu.linkonce.armexidx.*) - . = ALIGN(4); + *(.rodata*) /* Constants */ } > rom __text_end__ = .; @@ -53,15 +50,23 @@ SECTIONS { .boot (NOLOAD) : { __boot_start__ = .; *(.boot) - . = ALIGN(4); __boot_end__ = .; } >ram - /* Functions placed in RAM (required for flashing) */ - .textram : { + /* Functions placed in RAM (required for flashing) + * + * Align to 8 bytes as that's what the ARM likes text + * segment alignments to be, and if we don't, then + * we end up with a mismatch between the location in + * ROM and the desired location in RAM. I don't + * entirely understand this, but at least this appears + * to work... + */ + + .textram BLOCK(8): { __data_start__ = .; __text_ram_start__ = .; - *(.text.ram) + *(.ramtext) __text_ram_end = .; } >ram AT>rom