aboutsummaryrefslogtreecommitdiff
path: root/linker/linker_script.ld
diff options
context:
space:
mode:
Diffstat (limited to 'linker/linker_script.ld')
-rw-r--r--linker/linker_script.ld55
1 files changed, 55 insertions, 0 deletions
diff --git a/linker/linker_script.ld b/linker/linker_script.ld
new file mode 100644
index 0000000..9a9f5b3
--- /dev/null
+++ b/linker/linker_script.ld
@@ -0,0 +1,55 @@
+MEMORY
+{
+ flash : org = 0x08000000, len = 256k
+ sram1 : org = 0x20000000, len = 48k
+ sram2 : org = 0x10000000, len = 16k
+}
+
+SECTIONS
+{
+ /* This is where the code goes. */
+ . = ORIGIN(flash);
+ .text : {
+ *(.vectors); /* All .vector sections go here. */
+ *(.text); /* All .text sections go here. */
+ } >flash
+
+ .data : {
+ /* Data segment as defined in the flash. */
+ INIT_DATA_VALUES = LOADADDR(.data);
+
+ /* Data segment where it will be in memory. */
+ DATA_SEGMENT_START = .;
+ *(.data);
+ DATA_SEGMENT_STOP = .;
+
+ INIT_ROUTINES_FLASH_START =
+ LOADADDR(.data) + (DATA_SEGMENT_STOP - DATA_SEGMENT_START);
+
+ INITS_START = .;
+ *(.init0);
+ *(.init1);
+ *(.init2);
+ *(.init3);
+ *(.init4);
+ *(.init5);
+ *(.init6);
+ *(.init7);
+ INITS_END = .;
+
+ INIT_ROUTINES_FLASH_STOP =
+ LOADADDR(.data) + (INITS_END - DATA_SEGMENT_START);
+
+ /* Align by 4 so we can optimize the copier to use uint32's. */
+ . = ALIGN(0x04);
+
+ *(.noinit);
+ } >sram1 AT>flash
+
+ BSS_START = .;
+ .bss : {
+ *(.bss);
+ . = ALIGN(0x04);
+ } > sram1
+ BSS_END = .;
+}