Newlib with "nano" option enabled fails to link

dastoned
Posts: 50
Joined: Fri May 29, 2020 2:52 pm

Newlib with "nano" option enabled fails to link

Postby dastoned » Fri May 29, 2020 3:47 pm

Hi!

I have a not-very-complex firmware project where the bulk of code space is taken up by the Google IoT Core library and its many dependencies. The final binary is slightly above 1 MB (although my own code is only around 15 KB) and doesn't fit into the default partition scheme. Although I could go and resize the partitions, this is still a very heavy image and I'd like to reduce it first.

To reduce size, an obvious remedy is switching to the "nano" version of newlib which has reduced output formatting. Note that _before_ enabling the "nano" option, the binary linked just fine, but was a bit too large to fit into the 1 MB partition:

Code: Select all

Total sizes:
DRAM .data size:   16536 bytes
DRAM .bss  size:   29544 bytes
Used static DRAM:   46080 bytes ( 134656 available, 25.5% used)
Used static IRAM:   90127 bytes (  40945 available, 68.8% used)
Flash code:  762267 bytes
Flash rodata:  207484 bytes
Total image size:~1076414 bytes (.bin may be padded larger)
So I used "idf.py menuconfig" to set "CONFIG_NEWLIB_NANO_FORMAT=y", ran a fullclean and tried building. Now the linker fails with the following message:

Code: Select all

$ ESPBAUD=921600 idf.py -p /dev/EWK001_uart size flash monitor                                                                                    
Adding "size"'s dependency "app" to list of commands with default set of options.
Adding "flash"'s dependency "all" to list of commands with default set of options.
Executing action: app
Running ninja in directory /home/tarmo/projects/ubik/dcov/src/fv_comms/build
Executing "ninja app"...
[0/1] Re-running CMake...
-- Project version: a142608
-- Building ESP-IDF components for target esp32
Loading defaults file /home/tarmo/projects/ubik/dcov/src/fv_comms/sdkconfig.defaults...
-- Adding linker script /home/tarmo/projects/ubik/dcov/src/fv_comms/build/esp-idf/esp32/esp32_out.ld
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp32/ld/esp32.project.ld.in
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp32/ld/esp32.peripherals.ld
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-time.ld
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom/esp32/ld/esp32.rom.ld
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom/esp32/ld/esp32.rom.libgcc.ld
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-data.ld
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom/esp32/ld/esp32.rom.syscalls.ld
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-funcs.ld
-- Adding linker script /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-nano.ld
-- Components: app_trace app_update bootloader bootloader_support cxx driver efuse esp32 esp_common esp_eth esp_event esp_netif esp_ringbuf esp_rom esp_wifi espcoredump esptool_py freertos gcp_iot_sdk heap log l
wip main mbedtls newlib nvs_flash partition_table perfmon pthread soc spi_flash tcpip_adapter vfs wpa_supplicant xtensa
-- Component paths: /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/app_trace /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/app_update /home/tarmo/projects/ubik/scov/lib/src/esp-idf/compone
nts/bootloader /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/bootloader_support /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/cxx /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components
/driver /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/efuse /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp32 /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_common /home/
tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_eth /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_event /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_netif /home/tarmo/pro
jects/ubik/scov/lib/src/esp-idf/components/esp_ringbuf /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi /home/tarmo/projects/ub
ik/scov/lib/src/esp-idf/components/espcoredump /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esptool_py /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/freertos /home/tarmo/projects/ubik/dc
ov/src/fv_comms/components/gcp_iot_sdk /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/heap /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/log /home/tarmo/projects/ubik/scov/lib/src/esp-idf/
components/lwip /home/tarmo/projects/ubik/dcov/src/fv_comms/main /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/mbedtls /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/newlib /home/tarmo/pro
jects/ubik/scov/lib/src/esp-idf/components/nvs_flash /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/partition_table /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/perfmon /home/tarmo/projec
ts/ubik/scov/lib/src/esp-idf/components/pthread /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/soc /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/spi_flash /home/tarmo/projects/ubik/scov/li
b/src/esp-idf/components/tcpip_adapter /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/vfs /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/wpa_supplicant /home/tarmo/projects/ubik/scov/lib/sr
c/esp-idf/components/xtensa
-- Configuring done
-- Generating done
-- Build files have been written to: /home/tarmo/projects/ubik/dcov/src/fv_comms/build

...

[556/557] Linking CXX executable fv_comms.elf
FAILED: fv_comms.elf
: && /home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-g++  -mlongcalls -Wno-frame-address   CMakeFiles/fv_comms.elf.dir/project_elf_src.c.obj CMakeFiles/fv_comms.elf.dir/gcp_private_key.pem.S.obj  -o fv_comms.elf  esp-idf/xtensa/libxtensa.a  esp-idf/esp_ringbuf/libesp_ringbuf.a  esp-idf/app_update/libapp_update.a  esp-idf/spi_flash/libspi_flash.a  esp-idf/bootloader_support/libbootloader_support.a  esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a  esp-idf/nvs_flash/libnvs_flash.a  esp-idf/pthread/libpthread.a  esp-idf/espcoredump/libespcoredump.a  esp-idf/perfmon/libperfmon.a  esp-idf/esp32/libesp32.a  esp-idf/esp_common/libesp_common.a  esp-idf/soc/libsoc.a  esp-idf/esp_eth/libesp_eth.a  esp-idf/tcpip_adapter/libtcpip_adapter.a  esp-idf/esp_netif/libesp_netif.a  esp-idf/esp_event/libesp_event.a  esp-idf/wpa_supplicant/libwpa_supplicant.a  esp-idf/esp_wifi/libesp_wifi.a  esp-idf/lwip/liblwip.a  esp-idf/log/liblog.a  esp-idf/heap/libheap.a  esp-idf/app_trace/libapp_trace.a  esp-idf/freertos/libfreertos.a  esp-idf/vfs/libvfs.a  esp-idf/newlib/libnewlib.a  esp-idf/cxx/libcxx.a  esp-idf/gcp_iot_sdk/libgcp_iot_sdk.a  esp-idf/main/libmain.a  -Wl,--cref -Wl,--Map=/home/tarmo/projects/ubik/dcov/src/fv_comms/build/fv_comms.map  -fno-rtti  -fno-lto  -Wl,--start-group  esp-idf/gcp_iot_sdk/libgcp_iot_sdk.a  esp-idf/xtensa/libxtensa.a  esp-idf/esp_ringbuf/libesp_ringbuf.a  esp-idf/app_update/libapp_update.a  esp-idf/spi_flash/libspi_flash.a  esp-idf/bootloader_support/libbootloader_support.a  esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a  esp-idf/nvs_flash/libnvs_flash.a  esp-idf/pthread/libpthread.a  esp-idf/espcoredump/libespcoredump.a  esp-idf/perfmon/libperfmon.a  esp-idf/esp32/libesp32.a  esp-idf/esp_common/libesp_common.a  esp-idf/soc/libsoc.a  esp-idf/esp_eth/libesp_eth.a  esp-idf/tcpip_adapter/libtcpip_adapter.a  esp-idf/esp_netif/libesp_netif.a  esp-idf/esp_event/libesp_event.a  esp-idf/wpa_supplicant/libwpa_supplicant.a  esp-idf/esp_wifi/libesp_wifi.a  esp-idf/lwip/liblwip.a  esp-idf/log/liblog.a  esp-idf/heap/libheap.a  esp-idf/app_trace/libapp_trace.a  esp-idf/freertos/libfreertos.a  esp-idf/vfs/libvfs.a  esp-idf/newlib/libnewlib.a  esp-idf/cxx/libcxx.a  esp-idf/mbedtls/mbedtls/library/libmbedtls.a  esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a  esp-idf/mbedtls/mbedtls/library/libmbedx509.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libcoexist.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libcore.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libespnow.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libmesh.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libnet80211.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libpp.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/librtc.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libsmartconfig.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libphy.a  esp-idf/xtensa/libxtensa.a  esp-idf/esp_ringbuf/libesp_ringbuf.a  esp-idf/app_update/libapp_update.a  esp-idf/spi_flash/libspi_flash.a  esp-idf/bootloader_support/libbootloader_support.a  esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a  esp-idf/nvs_flash/libnvs_flash.a  esp-idf/pthread/libpthread.a  esp-idf/espcoredump/libespcoredump.a  esp-idf/perfmon/libperfmon.a  esp-idf/esp32/libesp32.a  esp-idf/esp_common/libesp_common.a  esp-idf/soc/libsoc.a  esp-idf/esp_eth/libesp_eth.a  esp-idf/tcpip_adapter/libtcpip_adapter.a  esp-idf/esp_netif/libesp_netif.a  esp-idf/esp_event/libesp_event.a  esp-idf/wpa_supplicant/libwpa_supplicant.a  esp-idf/esp_wifi/libesp_wifi.a  esp-idf/lwip/liblwip.a  esp-idf/log/liblog.a  esp-idf/heap/libheap.a  esp-idf/app_trace/libapp_trace.a  esp-idf/freertos/libfreertos.a  esp-idf/vfs/libvfs.a  esp-idf/newlib/libnewlib.a  esp-idf/cxx/libcxx.a  esp-idf/mbedtls/mbedtls/library/libmbedtls.a  esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a  esp-idf/mbedtls/mbedtls/library/libmbedx509.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libcoexist.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libcore.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libespnow.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libmesh.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libnet80211.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libpp.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/librtc.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libsmartconfig.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libphy.a  esp-idf/xtensa/libxtensa.a  esp-idf/esp_ringbuf/libesp_ringbuf.a  esp-idf/app_update/libapp_update.a  esp-idf/spi_flash/libspi_flash.a  esp-idf/bootloader_support/libbootloader_support.a  esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a  esp-idf/nvs_flash/libnvs_flash.a  esp-idf/pthread/libpthread.a  esp-idf/espcoredump/libespcoredump.a  esp-idf/perfmon/libperfmon.a  esp-idf/esp32/libesp32.a  esp-idf/esp_common/libesp_common.a  esp-idf/soc/libsoc.a  esp-idf/esp_eth/libesp_eth.a  esp-idf/tcpip_adapter/libtcpip_adapter.a  esp-idf/esp_netif/libesp_netif.a  esp-idf/esp_event/libesp_event.a  esp-idf/wpa_supplicant/libwpa_supplicant.a  esp-idf/esp_wifi/libesp_wifi.a  esp-idf/lwip/liblwip.a  esp-idf/log/liblog.a  esp-idf/heap/libheap.a  esp-idf/app_trace/libapp_trace.a  esp-idf/freertos/libfreertos.a  esp-idf/vfs/libvfs.a  esp-idf/newlib/libnewlib.a  esp-idf/cxx/libcxx.a  esp-idf/mbedtls/mbedtls/library/libmbedtls.a  esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a  esp-idf/mbedtls/mbedtls/library/libmbedx509.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libcoexist.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libcore.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libespnow.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libmesh.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libnet80211.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libpp.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/librtc.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libsmartconfig.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libphy.a  esp-idf/xtensa/libxtensa.a  esp-idf/esp_ringbuf/libesp_ringbuf.a  esp-idf/app_update/libapp_update.a  esp-idf/spi_flash/libspi_flash.a  esp-idf/bootloader_support/libbootloader_support.a  esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a  esp-idf/nvs_flash/libnvs_flash.a  esp-idf/pthread/libpthread.a  esp-idf/espcoredump/libespcoredump.a  esp-idf/perfmon/libperfmon.a  esp-idf/esp32/libesp32.a  esp-idf/esp_common/libesp_common.a  esp-idf/soc/libsoc.a  esp-idf/esp_eth/libesp_eth.a  esp-idf/tcpip_adapter/libtcpip_adapter.a  esp-idf/esp_netif/libesp_netif.a  esp-idf/esp_event/libesp_event.a  esp-idf/wpa_supplicant/libwpa_supplicant.a  esp-idf/esp_wifi/libesp_wifi.a  esp-idf/lwip/liblwip.a  esp-idf/log/liblog.a  esp-idf/heap/libheap.a  esp-idf/app_trace/libapp_trace.a  esp-idf/freertos/libfreertos.a  esp-idf/vfs/libvfs.a  esp-idf/newlib/libnewlib.a  esp-idf/cxx/libcxx.a  esp-idf/mbedtls/mbedtls/library/libmbedtls.a  esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a  esp-idf/mbedtls/mbedtls/library/libmbedx509.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libcoexist.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libcore.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libespnow.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libmesh.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libnet80211.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libpp.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/librtc.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libsmartconfig.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32/libphy.a  /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/xtensa/esp32/libhal.a  -u esp_app_desc  -u pthread_include_pthread_impl  -u pthread_include_pthread_cond_impl  -u pthread_include_pthread_local_storage_impl  -L /home/tarmo/projects/ubik/dcov/src/fv_comms/build/esp-idf/esp32  -T esp32_out.ld  -u app_main  -L /home/tarmo/projects/ubik/dcov/src/fv_comms/build/esp-idf/esp32/ld  -T esp32.project.ld  -L /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp32/ld  -T esp32.peripherals.ld  -u call_user_start_cpu0  -u ld_include_panic_highint_hdl  -Wl,--gc-sections  -L /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_rom/esp32/ld  -T esp32.rom.newlib-time.ld  -T esp32.rom.ld  -T esp32.rom.libgcc.ld  -T esp32.rom.newlib-data.ld  -T esp32.rom.syscalls.ld  -T esp32.rom.newlib-funcs.ld  -T esp32.rom.newlib-nano.ld  -L /home/tarmo/projects/ubik/scov/lib/src/esp-idf/components/esp_wifi/lib/esp32  esp-idf/app_trace/libapp_trace.a  -lgcov  esp-idf/app_trace/libapp_trace.a  -lgcov  -Wl,--undefined=uxTopUsedPriority  -u vfs_include_syscalls_impl  -lc_nano  -lm  esp-idf/newlib/libnewlib.a  -u newlib_include_locks_impl  -u newlib_include_heap_impl  -u newlib_include_syscalls_impl  -u newlib_include_pthread_impl  -lgcc  -u __cxa_guard_dummy  -lstdc++  esp-idf/pthread/libpthread.a  -u __cxx_fatal_exception && :

/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/lib/no-rtti/libc.a(lib_a-svfiprintf.o): in function `__ssprint_r':
/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:272: multiple definition of `__ssprint_r'; /home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/lib/no-rtti/libc_nano.a(lib_a-nano-svfprintf.o):/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/nano-vfprintf.c:248: first defined here
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/lib/no-rtti/libc.a(lib_a-svfiprintf.o): in function `_svfiprintf_r':
/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:661: multiple definition of `_svfiprintf_r'; /home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/lib/no-rtti/libc_nano.a(lib_a-nano-svfprintf.o):/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/nano-vfprintf.c:472: first defined here
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/lib/no-rtti/libc.a(lib_a-svfiprintf.o): in function `_svfiprintf_r':
/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:922:(.text+0x6aa): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1685:(.text+0x21cd): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1685:(.text+0x221d): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1689:(.text+0x2272): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1691:(.text+0x22be): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1695:(.text+0x2311): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1695:(.text+0x2365): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1698:(.text+0x23b1): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1698:(.text+0x2401): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1764:(.text+0x244e): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1768:(.text+0x24a9): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1768:(.text+0x24ea): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1773:(.text+0x2516): dangerous relocation: call8: call target out of range: __ssprint_r
/home/tarmo/projects/ubik/scov/bin/espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.2.0/../../../../xtensa-esp32-elf/bin/ld: /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1781:(.text+0x2535): dangerous relocation: call8: call target out of range: __ssprint_r
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
ninja failed with exit code 1
There seem to be two different problems here.

Firstly, both libc.a and libc_nano.a are linked in simultaneously and have conflicting definitions of __ssprint_r and a few other functions. I don't understand how that happens, because the linker command line doesn't specify either of those libraries.

Secondly, there seem to be some library compiled without "-mlongcalls" so it can't address far-laying functions. It seems to me that the culprit is libc itself. This could be a side-effect of the first problem.

Anyway, this is a C++ project on ESP IDF 4.1 (latest code and tools from git branch "release/v4.1").

What could I do to solve this issue?

dastoned
Posts: 50
Joined: Fri May 29, 2020 2:52 pm

Re: Newlib with "nano" option enabled fails to link

Postby dastoned » Mon Jun 01, 2020 8:22 am

Hmm, I can see a commit named

Code: Select all

cc1d28713 newlib: use --specs=nano.specs to enable "nano" version of C library
in the v4.2 branch, but it's missing in v4.1. Could it be that v4.1 simply doesn't support "nano" option, although the menuconfig option is already there?

ESP_Angus
Posts: 2344
Joined: Sun May 08, 2016 4:11 am

Re: Newlib with "nano" option enabled fails to link

Postby ESP_Angus » Tue Jun 02, 2020 4:53 am

Hi dastoned,

Thanks for the detailed bug report. You're right that this issue is fixed on master branch but hasn't been fixed on release/v4.1 branch yet. We're about to update the toolchain for V4.1 release to esp2020r2 and the fix for this problem is included in that update, it should merge to GitHub in the next week or so.

dastoned
Posts: 50
Joined: Fri May 29, 2020 2:52 pm

Re: Newlib with "nano" option enabled fails to link

Postby dastoned » Tue Jun 02, 2020 7:03 am

Great, thank you for the information.

I moved my project to v4.2 branch and here the newlib with "nano" option enabled both links and works as expected (reducing binary size).

Who is online

Users browsing this forum: Bing [Bot], Google [Bot], grginho and 282 guests