aboutsummaryrefslogtreecommitdiffstats
path: root/src/generic/armcm_link.lds.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/generic/armcm_link.lds.S')
-rw-r--r--src/generic/armcm_link.lds.S63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/generic/armcm_link.lds.S b/src/generic/armcm_link.lds.S
new file mode 100644
index 00000000..8014a490
--- /dev/null
+++ b/src/generic/armcm_link.lds.S
@@ -0,0 +1,63 @@
+// Generic ARM Cortex-M linker script
+//
+// Copyright (C) 2019 Kevin O'Connor <kevin@koconnor.net>
+//
+// This file may be distributed under the terms of the GNU GPLv3 license.
+
+#include "autoconf.h" // CONFIG_FLASH_START
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+
+MEMORY
+{
+ rom (rx) : ORIGIN = CONFIG_FLASH_START , LENGTH = CONFIG_FLASH_SIZE
+ ram (rwx) : ORIGIN = CONFIG_RAM_START , LENGTH = CONFIG_RAM_SIZE
+}
+
+SECTIONS
+{
+ .text : {
+ . = ALIGN(4);
+ KEEP(*(.vector_table))
+ *(.text .text.*)
+ *(.rodata .rodata*)
+ } > rom
+
+ . = ALIGN(4);
+ _data_flash = .;
+
+ .data : AT (_data_flash)
+ {
+ . = ALIGN(4);
+ _data_start = .;
+ *(.ramfunc .ramfunc.*);
+ *(.data .data.*);
+ . = ALIGN(4);
+ _data_end = .;
+ } > ram
+
+ .bss (NOLOAD) :
+ {
+ . = ALIGN(4);
+ _bss_start = .;
+ *(.bss .bss.*)
+ *(COMMON)
+ . = ALIGN(4);
+ _bss_end = .;
+ } > ram
+
+ _stack_start = CONFIG_RAM_START + CONFIG_RAM_SIZE - CONFIG_STACK_SIZE ;
+ .stack _stack_start (NOLOAD) :
+ {
+ . = . + CONFIG_STACK_SIZE;
+ _stack_end = .;
+ } > ram
+
+ /DISCARD/ : {
+ // The .init/.fini sections are used by __libc_init_array(), but
+ // that isn't needed so no need to include them in the binary.
+ *(.init)
+ *(.fini)
+ }
+}