aboutsummaryrefslogtreecommitdiffstats
path: root/examples/baremetal/stm32f4discovery/blueblink/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'examples/baremetal/stm32f4discovery/blueblink/gcc')
-rw-r--r--examples/baremetal/stm32f4discovery/blueblink/gcc/flash.ld185
-rw-r--r--examples/baremetal/stm32f4discovery/blueblink/gcc/startup.s211
2 files changed, 396 insertions, 0 deletions
diff --git a/examples/baremetal/stm32f4discovery/blueblink/gcc/flash.ld b/examples/baremetal/stm32f4discovery/blueblink/gcc/flash.ld
new file mode 100644
index 000000000..2e1896f3f
--- /dev/null
+++ b/examples/baremetal/stm32f4discovery/blueblink/gcc/flash.ld
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of Qbs.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/* Entry point (defined in assembled file). */
+ENTRY(reset_handler)
+
+/* End of RAM, it is the user mode stack pointer address. */
+_end_of_stack = 0x20020000;
+
+/* Generate a link error if heap and stack don't fit into RAM. */
+_size_of_heap = 0x200; /* Required amount of heap. */
+_size_of_stack = 0x400; /* Required amount of stack. */
+
+MEMORY {
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
+ CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
+ FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
+}
+
+SECTIONS {
+ /* The vectors table goes into FLASH. */
+ .isr_vector : {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code. */
+ . = ALIGN(4);
+ } > FLASH
+
+ /* The program code and other data goes into FLASH. */
+ .text : {
+ . = ALIGN(4);
+ *(.text)
+ *(.text*)
+ *(.glue_7) /* Glue arm to thumb code. */
+ *(.glue_7t) /* Glue thumb to arm code. */
+ *(.eh_frame)
+ KEEP(*(.init))
+ KEEP(*(.fini))
+ . = ALIGN(4);
+ _end_of_text_section = .; /* Export global symbol at end of code. */
+ } > FLASH
+
+ /* Constant data goes into FLASH. */
+ .rodata : {
+ . = ALIGN(4);
+ *(.rodata)
+ *(.rodata*)
+ . = ALIGN(4);
+ } > 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
+
+ _start_of_init_data_section = LOADADDR(.data);
+
+ /* Initialized data sections goes into RAM, load LMA copy after code. */
+ .data : {
+ . = ALIGN(4);
+ _start_of_data_section = .; /* Export global symbol at data start. */
+ *(.data)
+ *(.data*)
+ . = ALIGN(4);
+ _end_of_data_section = .; /* Export global symbol at data end. */
+ } > RAM AT > FLASH
+
+ _start_of_iccm_ram_section = LOADADDR(.ccmram);
+
+ /* CCM-RAM section. */
+ .ccmram : {
+ . = ALIGN(4);
+ _start_of_ccmram_section = .; /* Export global symbol at ccmram start. */
+ *(.ccmram)
+ *(.ccmram*)
+ . = ALIGN(4);
+ _end_of_ccmram_section = .; /* Export global symbol at ccmram end. */
+ } > CCMRAM AT > FLASH
+
+ /* Uninitialized data section. */
+ . = ALIGN(4);
+ .bss : {
+ /* This is used by the startup in order to initialize the .bss secion. */
+ _start_of_bss_section = .; /* Export global symbol at bss start. */
+ __bss_start__ = _start_of_bss_section;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ _end_of_bss_section = .; /* Export global symbol at bss end. */
+ __bss_end__ = _end_of_bss_section;
+ } > RAM
+
+ /* Used to check that there is enough RAM left. */
+ ._user_heap_stack : {
+ . = ALIGN(4);
+ PROVIDE(end = .);
+ PROVIDE(_end = .);
+ . = . + _size_of_heap;
+ . = . + _size_of_stack;
+ . = ALIGN(4);
+ } > RAM
+
+ /* Remove information from the standard libraries. */
+ /DISCARD/ : {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : {
+ *(.ARM.attributes)
+ }
+}
diff --git a/examples/baremetal/stm32f4discovery/blueblink/gcc/startup.s b/examples/baremetal/stm32f4discovery/blueblink/gcc/startup.s
new file mode 100644
index 000000000..d6a2104d1
--- /dev/null
+++ b/examples/baremetal/stm32f4discovery/blueblink/gcc/startup.s
@@ -0,0 +1,211 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of Qbs.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+.syntax unified
+.cpu cortex-m4
+.fpu softvfp
+.thumb
+
+// These symbols are exported from the linker script.
+.word _start_of_init_data_section
+.word _start_of_data_section
+.word _end_of_data_section
+.word _start_of_bss_section
+.word _end_of_bss_section
+.word _end_of_stack
+
+// Define the 'reset_handler' function, which is an entry point.
+.section .text.reset_handler
+.weak reset_handler
+.type reset_handler, %function
+reset_handler:
+ // Set the stack pointer.
+ ldr sp, =_end_of_stack
+
+ // Copy the data segment initializers from flash to SRAM.
+ movs r1, #0
+ b _loop_copy_data_init
+_copy_data_init:
+ ldr r3, =_start_of_init_data_section
+ ldr r3, [r3, r1]
+ str r3, [r0, r1]
+ adds r1, r1, #4
+_loop_copy_data_init:
+ ldr r0, =_start_of_data_section
+ ldr r3, =_end_of_data_section
+ adds r2, r0, r1
+ cmp r2, r3
+ bcc _copy_data_init
+ ldr r2, =_start_of_bss_section
+ b _loop_fill_zero_bss
+
+ // Zero fill the bss segment.
+_fill_zero_bss:
+ movs r3, #0
+ str r3, [r2], #4
+_loop_fill_zero_bss:
+ ldr r3, = _end_of_bss_section
+ cmp r2, r3
+ bcc _fill_zero_bss
+
+ // Call the static constructors.
+ bl __libc_init_array
+
+ // Call the application's entry point.
+ bl main
+ bx lr
+.size reset_handler, .-reset_handler
+
+// Define the empty vectors table.
+.section .isr_vector,"a",%progbits
+.type _vectors_table, %object
+.size _vectors_table, .-_vectors_table
+_vectors_table:
+ // Generic interrupts offset.
+ .word _end_of_stack // Initial stack pointer value.
+ .word reset_handler // Reset.
+ .word 0 // NMI.
+ .word 0 // Hard fault.
+ .word 0 // Memory management fault.
+ .word 0 // Bus fault.
+ .word 0 // Usage fault.
+ .word 0 // Reserved.
+ .word 0 // Reserved.
+ .word 0 // Reserved.
+ .word 0 // Reserved.
+ .word 0 // SVC.
+ .word 0 // Debug monitor.
+ .word 0 // Reserved.
+ .word 0 // PendSV.
+ .word 0 // SysTick.
+
+ // External interrupts offset.
+ .word 0 // Window WatchDog.
+ .word 0 // PVD through EXTI Line detection.
+ .word 0 // Tamper and TimeStamps through the EXTI line.
+ .word 0 // RTC Wakeup through the EXTI line.
+ .word 0 // FLASH.
+ .word 0 // RCC.
+ .word 0 // EXTI Line0.
+ .word 0 // EXTI Line1.
+ .word 0 // EXTI Line2.
+ .word 0 // EXTI Line3.
+ .word 0 // EXTI Line4.
+ .word 0 // DMA1 Stream 0.
+ .word 0 // DMA1 Stream 1.
+ .word 0 // DMA1 Stream 2.
+ .word 0 // DMA1 Stream 3.
+ .word 0 // DMA1 Stream 4.
+ .word 0 // DMA1 Stream 5.
+ .word 0 // DMA1 Stream 6.
+ .word 0 // ADC1, ADC2 and ADC3s.
+ .word 0 // CAN1 TX.
+ .word 0 // CAN1 RX0.
+ .word 0 // CAN1 RX1.
+ .word 0 // CAN1 SCE.
+ .word 0 // External Line[9:5]s.
+ .word 0 // TIM1 Break and TIM9.
+ .word 0 // TIM1 Update and TIM10.
+ .word 0 // TIM1 Trigger and Commutation and TIM11.
+ .word 0 // TIM1 Capture Compare.
+ .word 0 // TIM2.
+ .word 0 // TIM3.
+ .word 0 // TIM4.
+ .word 0 // I2C1 Event.
+ .word 0 // I2C1 Error.
+ .word 0 // I2C2 Event.
+ .word 0 // I2C2 Error.
+ .word 0 // SPI1.
+ .word 0 // SPI2.
+ .word 0 // USART1.
+ .word 0 // USART2.
+ .word 0 // USART3.
+ .word 0 // External Line[15:10]s.
+ .word 0 // RTC Alarm (A and B) through EXTI Line.
+ .word 0 // USB OTG FS Wakeup through EXTI line.
+ .word 0 // TIM8 Break and TIM12.
+ .word 0 // TIM8 Update and TIM13.
+ .word 0 // TIM8 Trigger and Commutation and TIM14.
+ .word 0 // TIM8 Capture Compare.
+ .word 0 // DMA1 Stream7.
+ .word 0 // FSMC.
+ .word 0 // SDIO.
+ .word 0 // TIM5.
+ .word 0 // SPI3.
+ .word 0 // UART4.
+ .word 0 // UART5.
+ .word 0 // TIM6 and DAC1&2 underrun errors.
+ .word 0 // TIM7.
+ .word 0 // DMA2 Stream 0.
+ .word 0 // DMA2 Stream 1.
+ .word 0 // DMA2 Stream 2.
+ .word 0 // DMA2 Stream 3.
+ .word 0 // DMA2 Stream 4.
+ .word 0 // Ethernet.
+ .word 0 // Ethernet Wakeup through EXTI line.
+ .word 0 // CAN2 TX.
+ .word 0 // CAN2 RX0.
+ .word 0 // CAN2 RX1.
+ .word 0 // CAN2 SCE.
+ .word 0 // USB OTG FS.
+ .word 0 // DMA2 Stream 5.
+ .word 0 // DMA2 Stream 6.
+ .word 0 // DMA2 Stream 7.
+ .word 0 // USART6.
+ .word 0 // I2C3 event.
+ .word 0 // I2C3 error.
+ .word 0 // USB OTG HS End Point 1 Out.
+ .word 0 // USB OTG HS End Point 1 In.
+ .word 0 // USB OTG HS Wakeup through EXTI.
+ .word 0 // USB OTG HS.
+ .word 0 // DCMI.
+ .word 0 // CRYP crypto.
+ .word 0 // Hash and Rng.
+ .word 0 // FPU.