Hi!
A customer is developing an application using the Cortex-M4 core on the Colibri iMX7D.
They’re reporting that they m_text memory is overflowing - which means their application is too large.
Here’s a log of a compilation:
-- TOOLCHAIN_DIR: /home/fnery/gcc-arm-none-eabi-4_9-2015q3/
-- BUILD_TYPE: Release
-- Configuring done
-- Generating done
-- Build files have been written to: /home/fnery/Vibracao/M4/firmware/rpmsg/str_echo_bm/armgcc/release
Scanning dependencies of target rpmsg_str_echo_bm
[ 1%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/porting/imx7d_m4/platform_info.c.obj
[ 1%] Building ASM object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/devices/MCIMX7D/startup/gcc/startup_MCIMX7D_M4.S.obj
[ 2%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/common/hil/hil.c.obj
[ 3%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/porting/imx7d_m4/platform.c.obj
[ 4%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/common/llist/llist.c.obj
[ 5%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/common/shm/sh_mem.c.obj
[ 6%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/porting/config/config.c.obj
[ 7%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/rpmsg/remote_device.c.obj
[ 8%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/rpmsg/rpmsg_ext.c.obj
[ 9%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/rpmsg/rpmsg.c.obj
[ 10%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/rpmsg/rpmsg_core.c.obj
[ 11%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/virtio/virtqueue.c.obj
[ 12%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/virtio/virtio.c.obj
[ 13%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/multicore/open-amp/porting/env/bm/rpmsg_porting.c.obj
[ 14%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/drivers/src/ccm_analog_imx7d.c.obj
[ 15%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/drivers/src/lmem.c.obj
[ 16%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/drivers/src/ccm_imx7d.c.obj
[ 17%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/drivers/src/rdc.c.obj
[ 18%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/drivers/src/wdog_imx.c.obj
[ 19%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/utilities/src/debug_console_imx.c.obj
[ 21%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/utilities/src/print_scan.c.obj
[ 21%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/devices/MCIMX7D/startup/system_MCIMX7D_M4.c.obj
[ 22%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/firmware/pin_mux.c.obj
[ 23%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/firmware/board.c.obj
[ 24%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/firmware/clock_freq.c.obj
[ 25%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/firmware/rpmsg/str_echo_bm/hardware_init.c.obj
[ 26%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/firmware/rpmsg/str_echo_bm/str_echo_bm.c.obj
[ 27%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/drivers/src/uart_imx.c.obj
[ 28%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/platform/drivers/src/mu_imx.c.obj
[ 29%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/common/rt_nonfinite.c.obj
[ 30%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/common/rtGetInf.c.obj
[ 31%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/common/rtGetNaN.c.obj
[ 32%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeAMR/computeAMR.c.obj
[ 33%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeAMR/computeAMR_initialize.c.obj
[ 34%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeAMR/computeAMR_terminate.c.obj
[ 35%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeAren/computeAren_initialize.c.obj
[ 36%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeAren/computeAren.c.obj
[ 37%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeAren/computeAren_terminate.c.obj
[ 38%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeCrestFactor/computeCrestFactor.c.obj
[ 39%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeCrestFactor/computeCrestFactor_initialize.c.obj
[ 40%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeCrestFactor/computeCrestFactor_terminate.c.obj
[ 41%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeFT/computeFT_data.c.obj
[ 42%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeFT/computeFT.c.obj
[ 43%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeFT/computeFT_emxAPI.c.obj
[ 44%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeFT/computeFT_emxutil.c.obj
[ 45%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeFT/computeFT_initialize.c.obj
[ 46%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeFT/computeFT_terminate.c.obj
[ 47%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeFT/updateFT.c.obj
[ 48%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeMSDV/computeMSDV.c.obj
[ 49%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeMSDV/computeMSDV_initialize.c.obj
[ 50%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeMSDV/computeMSDV_terminate.c.obj
[ 51%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeMSDV/updateMSDV.c.obj
[ 52%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeMTVV/computeMTVV.c.obj
[ 53%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeMTVV/computeMTVV_data.c.obj
[ 54%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeMTVV/computeMTVV_initialize.c.obj
[ 55%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeMTVV/computeMTVV_terminate.c.obj
[ 56%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computePeak/computePeak.c.obj
[ 57%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computePeak/computePeak_initialize.c.obj
[ 58%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computePeak/computePeak_terminate.c.obj
[ 59%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computePeak/computePeak_data.c.obj
[ 60%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeRMSAcc/computeRMSAcc.c.obj
[ 61%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeRMSAcc/computeRMSAcc_data.c.obj
[ 62%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeRMSAcc/computeRMSAcc_initialize.c.obj
[ 63%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeRMSAcc/computeRMSAcc_terminate.c.obj
[ 64%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeRunningRMSAcc/computeRunningRMSAcc.c.obj
[ 65%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeRunningRMSAcc/computeRunningRMSAcc_data.c.obj
[ 66%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeRunningRMSAcc/computeRunningRMSAcc_initialize.c.obj
[ 67%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeRunningRMSAcc/computeRunningRMSAcc_terminate.c.obj
[ 68%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDV/computeVDV_data.c.obj
[ 69%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDV/computeVDV.c.obj
[ 70%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDV/computeVDV_initialize.c.obj
[ 71%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDV/computeVDV_terminate.c.obj
[ 72%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDV/updateVDV.c.obj
[ 73%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDVExp/computeVDVExp_initialize.c.obj
[ 74%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDVExp/computeVDVExp.c.obj
[ 75%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDVExp/computeVDVExp_terminate.c.obj
[ 76%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDVR/computeVDVR.c.obj
[ 77%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDVR/computeVDVR_initialize.c.obj
[ 78%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/computeVDVR/computeVDVR_terminate.c.obj
[ 79%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWb.c.obj
[ 80%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWb_data.c.obj
[ 81%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWb_initialize.c.obj
[ 82%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWb_terminate.c.obj
[ 83%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWc.c.obj
[ 84%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWd.c.obj
[ 85%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWe.c.obj
[ 86%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWf.c.obj
[ 87%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWh.c.obj
[ 88%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWj.c.obj
[ 89%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWk.c.obj
[ 90%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filterWb/filterWm.c.obj
[ 91%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filtroAntiAlias/filtroAntiAlias.c.obj
[ 92%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filtroAntiAlias/filtroAntiAlias_data.c.obj
[ 93%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filtroAntiAlias/filtroAntiAlias_initialize.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/filtroAntiAlias/filtroAntiAlias_terminate.c.obj
[ 95%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/octaveFilters/octaveFilters.c.obj
[ 96%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/octaveFilters/octaveFilters_data.c.obj
[ 97%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/octaveFilters/octaveFilters_emxutil.c.obj
[ 98%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/octaveFilters/octaveFilters_initialize.c.obj
[ 99%] Building C object CMakeFiles/rpmsg_str_echo_bm.dir/home/fnery/Vibracao/M4/middleware/lib/octaveFilters/octaveFilters_terminate.c.obj
[100%] Linking C executable rpmsg_str_echo_bm.elf
CMakeFiles/rpmsg_str_echo_bm.dir/build.make:2660: recipe for target 'rpmsg_str_echo_bm.elf' failed
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/rpmsg_str_echo_bm.dir/all' failed
Makefile:83: recipe for target 'all' failed
/home/fnery/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: rpmsg_str_echo_bm.elf section `.text' will not fit in region `m_text'
/home/fnery/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: region `m_text' overflowed by 884 bytes
collect2: error: ld returned 1 exit status
make[2]: *** [rpmsg_str_echo_bm.elf] Error 1
make[1]: *** [CMakeFiles/rpmsg_str_echo_bm.dir/all] Error 2
make: *** [all] Error 2
They want to know if they can change the m_text and m_data allocation sizes on the linker script and make sure that the Linux side on the A7 core is aware of that.
Their goal is to run the application as fast as possible, but they’re aware the TCM memory is kind of low (32kB). So they also want to know how much space they have in OCRAM for the M4 and in the case of DDR, how much DDR they can allocate without affecting Linux (I know this is too application specific, but they want general pointers).