diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index ad2fe34..393f546 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -14,14 +14,17 @@ jobs: runs-on: ubuntu-latest container: - image: px4io/px4-dev-nuttx-focal:2021-09-08 + image: igormisic/improject:v1.0.2 options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} - + + - name: Mark repository as safe + run: git config --global --add safe.directory $GITHUB_WORKSPACE + - name: Check format run: make check_format diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index ab49873..3bbb477 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -36,7 +36,7 @@ jobs: ] container: - image: px4io/px4-dev-nuttx-focal:2021-09-08 + image: igormisic/improject:v1.0.2 options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined steps: - uses: actions/checkout@v2 diff --git a/Bootloader/STM32/Src/syscalls.c b/Bootloader/STM32/Src/syscalls.c new file mode 100644 index 0000000..1afe1af --- /dev/null +++ b/Bootloader/STM32/Src/syscalls.c @@ -0,0 +1,172 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeMX + * @brief Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2020-2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + + +char* __env[1] = { 0 }; +char** environ = __env; + + +/* Functions */ +void +initialise_monitor_handles() { +} + +int +_getpid(void) { + return 1; +} + +int +_kill(int pid, int sig) { + (void)pid; + (void)sig; + errno = EINVAL; + return -1; +} + +void +_exit (int status) { + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char* ptr, int len) { + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) { + *ptr++ = __io_getchar(); + } + + return len; +} + +__attribute__((weak)) int _write(int file, char* ptr, int len) { + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) { + __io_putchar(*ptr++); + } + return len; +} + +int +_close(int file) { + (void)file; + return -1; +} + + +int +_fstat(int file, struct stat* st) { + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int +_isatty(int file) { + (void)file; + return 1; +} + +int +_lseek(int file, int ptr, int dir) { + (void)file; + (void)ptr; + (void)dir; + return 0; +} + +int +_open(char* path, int flags, ...) { + (void)path; + (void)flags; + /* Pretend like we always fail */ + return -1; +} + +int +_wait(int* status) { + (void)status; + errno = ECHILD; + return -1; +} + +int +_unlink(char* name) { + (void)name; + errno = ENOENT; + return -1; +} + +int +_times(struct tms* buf) { + (void)buf; + return -1; +} + +int +_stat(char* file, struct stat* st) { + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int +_link(char* old, char* new) { + (void)old; + (void)new; + errno = EMLINK; + return -1; +} + +int +_fork(void) { + errno = EAGAIN; + return -1; +} + +int +_execve(char* name, char** argv, char** env) { + (void)name; + (void)argv; + (void)env; + errno = ENOMEM; + return -1; +} diff --git a/Bootloader/STM32/Src/sysmem.c b/Bootloader/STM32/Src/sysmem.c new file mode 100644 index 0000000..3630277 --- /dev/null +++ b/Bootloader/STM32/Src/sysmem.c @@ -0,0 +1,77 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeMX + * @brief System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the newlib libc manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t* __sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void* +_sbrk(ptrdiff_t incr) { + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t* max_heap = (uint8_t*)stack_limit; + uint8_t* prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) { + errno = ENOMEM; + return (void*) -1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void*)prev_heap_end; +} diff --git a/Linker/STM32F7xx.ld b/Linker/STM32F7xx.ld index 5092f79..7c4d570 100644 --- a/Linker/STM32F7xx.ld +++ b/Linker/STM32F7xx.ld @@ -79,13 +79,15 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >FLASH - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -93,7 +95,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -102,7 +104,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -112,7 +114,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Linker/STM32F7xx_RAM.ld b/Linker/STM32F7xx_RAM.ld index 16af89a..a7137a8 100644 --- a/Linker/STM32F7xx_RAM.ld +++ b/Linker/STM32F7xx_RAM.ld @@ -81,13 +81,15 @@ SECTIONS . = ALIGN(4); } >RAM2 - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >RAM2 - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -95,7 +97,7 @@ SECTIONS . = ALIGN(4); } >RAM2 - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -104,7 +106,7 @@ SECTIONS . = ALIGN(4); } >RAM2 - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -114,7 +116,7 @@ SECTIONS . = ALIGN(4); } >RAM2 - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Linker/STM32F7xx_RAM_SIGNATURE.ld b/Linker/STM32F7xx_RAM_SIGNATURE.ld index 61ee553..3f90248 100644 --- a/Linker/STM32F7xx_RAM_SIGNATURE.ld +++ b/Linker/STM32F7xx_RAM_SIGNATURE.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >RAM2 - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >RAM2 - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >RAM2 - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >RAM2 - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >RAM2 - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Linker/STM32F7xx_SIGNATURE.ld b/Linker/STM32F7xx_SIGNATURE.ld index be9e5d6..cf65a24 100644 --- a/Linker/STM32F7xx_SIGNATURE.ld +++ b/Linker/STM32F7xx_SIGNATURE.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >FLASH - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Linker/STM32H7xx.ld b/Linker/STM32H7xx.ld index 6b9f4eb..2071745 100644 --- a/Linker/STM32H7xx.ld +++ b/Linker/STM32H7xx.ld @@ -107,27 +107,32 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Linker/STM32H7xx_RAM.ld b/Linker/STM32H7xx_RAM.ld index cc990fe..8eb5c90 100644 --- a/Linker/STM32H7xx_RAM.ld +++ b/Linker/STM32H7xx_RAM.ld @@ -107,27 +107,32 @@ SECTIONS . = ALIGN(4); } >RAM_D1 - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >RAM_D1 - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >RAM_D1 + + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >RAM_D1 - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >RAM_D1 - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >RAM_D1 - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Linker/STM32H7xx_RAM_SIGNATURE.ld b/Linker/STM32H7xx_RAM_SIGNATURE.ld index 7cddc84..02c948c 100644 --- a/Linker/STM32H7xx_RAM_SIGNATURE.ld +++ b/Linker/STM32H7xx_RAM_SIGNATURE.ld @@ -112,27 +112,32 @@ SECTIONS . = ALIGN(4); } >RAM_D1 - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >RAM_D1 - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >RAM_D1 + + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >RAM_D1 - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >RAM_D1 - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >RAM_D1 - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Linker/STM32H7xx_SIGNATURE.ld b/Linker/STM32H7xx_SIGNATURE.ld index 8200402..d28de17 100644 --- a/Linker/STM32H7xx_SIGNATURE.ld +++ b/Linker/STM32H7xx_SIGNATURE.ld @@ -112,27 +112,32 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Linker/STM32L4xx.ld b/Linker/STM32L4xx.ld index 2aadb77..beb5dd0 100644 --- a/Linker/STM32L4xx.ld +++ b/Linker/STM32L4xx.ld @@ -102,21 +102,23 @@ SECTIONS . = ALIGN(8); } >FLASH - .ARM.extab : + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(8); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(8); } >FLASH - .ARM : { - . = ALIGN(8); + + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(8); __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; . = ALIGN(8); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(8); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -125,7 +127,7 @@ SECTIONS . = ALIGN(8); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(8); PROVIDE_HIDDEN (__init_array_start = .); @@ -134,7 +136,7 @@ SECTIONS PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(8); } >FLASH - .fini_array : + .fini_array (READONLY) : { . = ALIGN(8); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Linker/STM32L4xx_SIGNATURE.ld b/Linker/STM32L4xx_SIGNATURE.ld index 9bf518b..17d8d8e 100644 --- a/Linker/STM32L4xx_SIGNATURE.ld +++ b/Linker/STM32L4xx_SIGNATURE.ld @@ -108,13 +108,15 @@ SECTIONS . = ALIGN(8); } >FLASH - .ARM.extab : + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(8); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(8); } >FLASH - .ARM : { + + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(8); __exidx_start = .; *(.ARM.exidx*) @@ -122,7 +124,7 @@ SECTIONS . = ALIGN(8); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(8); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -130,8 +132,8 @@ SECTIONS PROVIDE_HIDDEN (__preinit_array_end = .); . = ALIGN(8); } >FLASH - - .init_array : + + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(8); PROVIDE_HIDDEN (__init_array_start = .); @@ -140,7 +142,8 @@ SECTIONS PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(8); } >FLASH - .fini_array : + + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(8); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Makefile b/Makefile index 242c288..6431107 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,8 @@ Bootloader/Adapters/Src/security_adapter.c \ Bootloader/Adapters/Src/system_adapter.c \ Bootloader/Adapters/Src/system_clock_adapter.c \ Bootloader/Library/Src/software_info.c \ +Bootloader/STM32/Src/syscalls.c \ +Bootloader/STM32/Src/sysmem.c \ Bootloader/Utility/Src/base64.c \ Bootloader/Utility/Src/crc/crc32_base.c \ Bootloader/Utility/Src/crc/crc32_variants/crc32_bzip2.c \ diff --git a/Makefile.common b/Makefile.common index 77704ce..a989799 100644 --- a/Makefile.common +++ b/Makefile.common @@ -76,7 +76,8 @@ LDFLAGS = $(MCU) -specs=nano.specs -TLinker/$(LD_NAME)$(LD_SUFFIX) $(LIBDIR) $(L LDFLAGS_SIGNATURE = $(MCU) -specs=nano.specs -TLinker/$(LD_NAME)_SIGNATURE$(LD_SUFFIX) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections # default action: build all -all: debug signed +all: debug signed + arm-none-eabi-gcc -v debug: $(TARGET_DIR)/$(TARGET).elf $(TARGET_DIR)/$(TARGET).hex $(TARGET_DIR)/$(TARGET).bin