Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.

We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.

Thank you for your understanding.


This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

cannot use LENGTH() in memory definition in linker file for arm gcc 8-2018-q4-major

Recently we have updated the armgcc toolchain version to 8-2018-q4-major, and we found that our previous memory definition way in linker file is invalid.

Previously, we are using below LENGTH() way to calculate the origin for a defined memory:

IMAGE_START_ADDR = DEFINED(XIP_IMAGE) ? 0x10000000 : 0x00000000;
DATA_START_ADDR = DEFINED(XIP_IMAGE) ? 0x00000004 : 0x20000000;
TEXT_SECTION_SIZE = DEFINED(XIP_IMAGE) ? 0x00FFFE3C : 0x0002FE3C;
DATA_SECTION_SIZE = DEFINED(XIP_IMAGE) ? 0x0002FFFC : 0x00028000;

/* Specify the memory areas */
MEMORY
{
m_interrupts (RX) : ORIGIN = IMAGE_START_ADDR, LENGTH = 0x000001C4
m_text (RX) : ORIGIN = IMAGE_START_ADDR + LENGTH(m_interrupts), LENGTH = TEXT_SECTION_SIZE
m_data (RW) : ORIGIN = DATA_START_ADDR, LENGTH = DATA_SECTION_SIZE
m_usb_sram (RW) : ORIGIN = 0x40100000, LENGTH = 0x00002000
}

AND there will show build error as below:

/usr/local/gcc-arm-none-eabi-8-2018-q4-major/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld: invalid origin for memory region m_text

After replace the  LENGTH(m_interrupts) with Immediate walmartone 0x000001C4, the compile error gone.

No such issue with armgcc version 7-2018-q2-update, so, why gcc8 cannot support the way in memory definition?