diff --git a/Firmware/Board/v3/Middlewares/Third_Party/FreeRTOS/Source/tasks.c b/Firmware/Board/v3/Middlewares/Third_Party/FreeRTOS/Source/tasks.c index 32c83890..220b867b 100644 --- a/Firmware/Board/v3/Middlewares/Third_Party/FreeRTOS/Source/tasks.c +++ b/Firmware/Board/v3/Middlewares/Third_Party/FreeRTOS/Source/tasks.c @@ -369,7 +369,7 @@ typedef tskTCB TCB_t; /*lint -e956 A manual analysis and inspection has been used to determine which static variables must be declared volatile. */ -PRIVILEGED_INITIALIZED_DATA TCB_t * volatile pxCurrentTCB __attribute__((used)) = NULL; +__attribute__((used)) PRIVILEGED_INITIALIZED_DATA TCB_t * volatile pxCurrentTCB = NULL; /* Lists for ready and blocked tasks. --------------------*/ PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ];/*< Prioritised ready tasks. */ diff --git a/Firmware/Tupfile.lua b/Firmware/Tupfile.lua index ff0cf41e..bd59d526 100644 --- a/Firmware/Tupfile.lua +++ b/Firmware/Tupfile.lua @@ -158,6 +158,9 @@ toolchain = GCCToolchain('arm-none-eabi-', 'build', FLAGS, LDFLAGS) -- Load list of source files Makefile that was autogenerated by CubeMX vars = parse_makefile_vars(board.dir..'/Makefile') + +-- ASM sources must precede C sources due to LTO removing weak symbols which appear after strong symbols +-- in the call to the linker: https://bugs.launchpad.net/gcc-arm-embedded/+bug/1747966 all_stm_sources = (vars['ASM_SOURCES'] or '')..' '..(vars['CPP_SOURCES'] or '')..' '..(vars['C_SOURCES'] or '') for src in string.gmatch(all_stm_sources, "%S+") do stm_sources += board.dir..'/'..src