Hello Peter, Eli,
I have linked the binary using the verbose option and could see I was missing “crti.o”, “crtbegin.o”, “crt0.o”, “crtend.o” and “crtn.o” object files. GCC from the ARM GNU GCC Toolchain figures it out on its own for the specific architecture, even if the “-nostdlib” command line is used. “-nostartfiles” prevents it from linking those object files on its own.
After linking “crt*” objects for the Clang build the error recurred. I get the “got” section with one entry and the exceptions are not working properly. I am able to use the same set of arguments for GCC, though, except the “–target” option. Linking the final executable with Clang:
/home/kacper/Workspace/Aura/device/…/build/common_dependencies/llvm-src/bin/clang++ --target=armv7em-none-eabi -Wall -Wextra -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nodefaultlibs --sysroot=/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi -fno-pic -fdata-sections -ffunction-sections -isystem /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi/include/c++/10.3.1/ -isystem /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi/include/c++/10.3.1//arm-none-eabi/thumb/v7e-m+fp/hard/ -g -Wall -Wextra -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nodefaultlibs --sysroot=/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi -fno-pic -Wl,–sysroot=/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi -Wl,–gc-sections -Wl,-Map=output.map -Wl,-nostdlib -L/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi/lib/thumb/v7e-m+fp/hard/ -L/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/ -o test_logs_uncaught_exception /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crti.o /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtbegin.o CMakeFiles/test_logs_uncaught_exception.dir/test_logs_uncaught_exception.cpp.obj …/…/…/libdevice_specific.a …/…/…/cube/libcube.a …/setup/libdevice_test_setup.a …/…/…/_deps/unity_project-build/libunity.a libtest_logs_uncaught_exception_runner.a …/…/…/_deps/unity_project-build/libunity.a …/setup/libunity_putchar.a …/…/…/serial_logger/libserial_logger.a …/…/…/cube/libcube.a …/…/…/libfreertos.a …/…/…/_deps/printf_library-build/lib/libprintf.a -lstdc++ -lm -lc -Wl,–start-group -lgcc -lg -lc -Wl,–end-group -Wl,–start-group -lgcc -lc -lnosys -Wl,–end-group /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtend.o /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtn.o -T/home/kacper/Workspace/Aura/device/cube/Aura/STM32L432KCUx_FLASH.ld
With GCC:
/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/bin/arm-none-eabi-g++ --target=armv7em-none-eabi -Wall -Wextra -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nodefaultlibs --sysroot=/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi -fno-pic -fdata-sections -ffunction-sections -isystem /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi/include/c++/10.3.1/ -isystem /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi/include/c++/10.3.1//arm-none-eabi/thumb/v7e-m+fp/hard/ -g -Wall -Wextra -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nodefaultlibs --sysroot=/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi -fno-pic -Wl,–sysroot=/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi -Wl,–gc-sections -Wl,-Map=output.map -Wl,-nostdlib -L/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi/lib/thumb/v7e-m+fp/hard/ -L/home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/ -o test_logs_uncaught_exception /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crti.o /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtbegin.o CMakeFiles/test_logs_uncaught_exception.dir/test_logs_uncaught_exception.cpp.obj …/…/…/libdevice_specific.a …/…/…/cube/libcube.a …/setup/libdevice_test_setup.a …/…/…/_deps/unity_project-build/libunity.a libtest_logs_uncaught_exception_runner.a …/…/…/_deps/unity_project-build/libunity.a …/setup/libunity_putchar.a …/…/…/serial_logger/libserial_logger.a …/…/…/cube/libcube.a …/…/…/libfreertos.a …/…/…/_deps/printf_library-build/lib/libprintf.a -lstdc++ -lm -lc -Wl,–start-group -lgcc -lg -lc -Wl,–end-group -Wl,–start-group -lgcc -lc -lnosys -Wl,–end-group /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtend.o /home/kacper/Workspace/Aura/device/…/build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtn.o -T/home/kacper/Workspace/Aura/device/cube/Aura/STM32L432KCUx_FLASH.ld -nostartfiles
For GCC everything works as expected, for Clang doesn’t. Using “-Wl,–reproduce” generates “-Bstatic” file which can be found here:
https://drive.google.com/file/d/1Wvx4JPXpPWefV1AZCp4czWOqCXV3Rukx/view?usp=sharing
I will try to compile libcxx and libcxxabi to be tinier according to Peter’s tips and will try to figure out whether aligned allocation could be omitted somehow.
Kind regards,
Kacper