*/
MEMORY {
- rom (rx) : ORIGIN = 0x00000000, LENGTH = 32K
- ram (!w) : ORIGIN = 0x10000000, LENGTH = 4K - 512
- stack (!w) : ORIGIN = 0x10000000 + 4K - 512, LENGTH = 512
+ rom (rx) : ORIGIN = 0x00001000, LENGTH = 28K
+ ram (!w) : ORIGIN = 0x10000000, LENGTH = 4K - 128
+ usb (!x) : ORIGIN = 0x20004000 + 2K - 256, LENGTH = 256
+ stack (!w) : ORIGIN = 0x10000000 + 4K - 128, LENGTH = 128
}
INCLUDE registers.ld
* Rom contents
*/
- .text ORIGIN(rom) : {
- __text_start__ = .;
+ .interrupt ORIGIN(ram) : AT (ORIGIN(rom)) {
+ __interrupt_start__ = .;
+ __interrupt_rom__ = ORIGIN(rom);
*(.interrupt) /* Interrupt vectors */
+ __interrupt_end__ = .;
+ } > ram
- . = ORIGIN(rom) + 0x100;
+ .text ORIGIN(rom) + 0x100 : {
+ __text_start__ = .;
ao_romconfig.o(.romconfig*)
ao_product.o(.romconfig*)
__text_end__ = .;
} > rom
+ /* 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 : {
+ __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 : AT (ADDR(.ARM.exidx) + SIZEOF (.ARM.exidx)) {
__data_start__ = .;
*(.data) /* initialized data */
__data_end__ = .;
} >ram
.bss : {
+ __bss_start__ = .;
*(.bss)
*(COMMON)
__bss_end__ = .;
} >ram
+ PROVIDE(end = .);
PROVIDE(__stack__ = ORIGIN(stack) + LENGTH(stack));
- PROVIDE(end = .);
}
ENTRY(start);