aboutsummaryrefslogtreecommitdiffstats
path: root/link.ld
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2018-03-25 21:16:33 -0400
committerClyne Sullivan <tullivan99@gmail.com>2018-03-25 21:16:33 -0400
commit603d04992cbf6c02cfc16f06ffab7d014d817634 (patch)
treebb31f0fe50f322c44a6d637b55cc02583b5b08d2 /link.ld
parent5c5c93db40c6412fb46a09383640db01b4c6db4e (diff)
added licensing
Diffstat (limited to 'link.ld')
-rw-r--r--link.ld244
1 files changed, 82 insertions, 162 deletions
diff --git a/link.ld b/link.ld
index 4819a3c..be1c523 100644
--- a/link.ld
+++ b/link.ld
@@ -1,162 +1,82 @@
-/*
-*****************************************************************************
-**
-
-** File : LinkerScript.ld
-**
-** Abstract : Linker script for STM32L476RGTx Device with
-** 1024KByte FLASH, 96KByte RAM
-**
-** Set heap size, stack size and stack location according
-** to application requirements.
-**
-** Set memory bank area and size if external memory is used.
-**
-** Target : STMicroelectronics STM32
-**
-**
-** Distribution: The file is distributed as is, without any warranty
-** of any kind.
-**
-** (c)Copyright Ac6.
-** You may use this file as-is or modify it according to the needs of your
-** project. Distribution of this file (unmodified or modified) is not
-** permitted. Ac6 permit registered System Workbench for MCU users the
-** rights to distribute the assembled, compiled & linked contents of this
-** file as part of an application binary file, provided that it is built
-** using the System Workbench for MCU toolchain.
-**
-*****************************************************************************
-*/
-
-/* Entry Point */
-ENTRY(Reset_Handler)
-
-/* Highest address of the user mode stack */
-_estack = 0x20018000; /* end of RAM */
-
-/* Specify the memory areas */
-MEMORY
-{
- FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K
-}
-
-/* Define output sections */
-SECTIONS
-{
- /* The startup code goes first into FLASH */
- .isr_vector :
- {
- . = ALIGN(8);
- KEEP(*(.isr_vector)) /* Startup code */
- . = ALIGN(8);
- } >FLASH
-
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(8);
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.glue_7) /* glue arm to thumb code */
- *(.glue_7t) /* glue thumb to arm code */
- *(.eh_frame)
-
- KEEP (*(.init))
- KEEP (*(.fini))
-
- . = ALIGN(8);
- _etext = .; /* define a global symbols at end of code */
- } >FLASH
-
- /* Constant data goes into FLASH */
- .rodata :
- {
- . = ALIGN(8);
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
- . = ALIGN(8);
- } >FLASH
-
- .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
- .ARM : {
- __exidx_start = .;
- *(.ARM.exidx*)
- __exidx_end = .;
- } >FLASH
-
- .preinit_array :
- {
- PROVIDE_HIDDEN (__preinit_array_start = .);
- KEEP (*(.preinit_array*))
- PROVIDE_HIDDEN (__preinit_array_end = .);
- } >FLASH
- .init_array :
- {
- PROVIDE_HIDDEN (__init_array_start = .);
- KEEP (*(SORT(.init_array.*)))
- KEEP (*(.init_array*))
- PROVIDE_HIDDEN (__init_array_end = .);
- } >FLASH
- .fini_array :
- {
- PROVIDE_HIDDEN (__fini_array_start = .);
- KEEP (*(SORT(.fini_array.*)))
- KEEP (*(.fini_array*))
- PROVIDE_HIDDEN (__fini_array_end = .);
- } >FLASH
-
- /* used by the startup to initialize data */
- _sidata = LOADADDR(.data);
-
- /* Initialized data sections goes into RAM, load LMA copy after code */
- .data :
- {
- . = ALIGN(8);
- _sdata = .; /* create a global symbol at data start */
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(8);
- _edata = .; /* define a global symbol at data end */
- } >RAM AT> FLASH
-
-
- /* Uninitialized data section */
- . = ALIGN(4);
- .bss :
- {
- /* This is used by the startup in order to initialize the .bss secion */
- _sbss = .; /* define a global symbol at bss start */
- __bss_start__ = _sbss;
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ebss = .; /* define a global symbol at bss end */
- __bss_end__ = _ebss;
- } >RAM
-
- /* User_heap_stack section, used to check that there is enough RAM left */
- ._user_heap_stack :
- {
- . = ALIGN(8);
- *(._user_heap_stack)
- . = ALIGN(8);
- } >RAM
-
-
-
- /* Remove information from the standard libraries */
- /DISCARD/ :
- {
- libc.a ( * )
- libm.a ( * )
- libgcc.a ( * )
- }
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
-
+/**
+ * @file linker.ld
+ *
+ * Copyright (C) 2018 Clyne Sullivan
+ *
+ * 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, either version 3 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/* enter at the reset handler */
+ENTRY(Reset_Handler)
+
+/* description of memory regions */
+MEMORY {
+ FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
+ RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 96K
+}
+
+/* description of ELF sections */
+SECTIONS {
+ /* keep startup code at beginning */
+ .isr_vector : {
+ . = ALIGN(8);
+ KEEP(*(.isr_vector))
+ . = ALIGN(8);
+ } > FLASH
+
+ /* code sections */
+ .text : {
+ . = ALIGN(8);
+ *(.text)
+ . = ALIGN(8);
+ } > FLASH
+
+ /* readonly data */
+ .rodata : {
+ . = ALIGN(8);
+ *(.rodata)
+ . = ALIGN(8);
+ } > FLASH
+
+ /* init_array/fini_array (TODO understand this) */
+ .init_array : {
+ PROVIDE_HIDDEN(__init_array_start = .);
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN(__init_array_end = .);
+ } > FLASH
+
+ .fini_array : {
+ PROVIDE_HIDDEN(__fini_array_start = .);
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN(__fini_array_end = .);
+ } > FLASH
+
+ /* initialized data */
+ _sidata = LOADADDR(.data);
+ .data : {
+ . = ALIGN(8);
+ _sdata = .;
+ *(.data)
+ . = ALIGN(8);
+ _edata = .;
+ } > RAM AT > FLASH
+
+ /* uninitialized data */
+ .bss : {
+ . = ALIGN(8);
+ __bss_start__ = .;
+ *(.bss)
+ __bss_end__ = .;
+ } > RAM
+}