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

Migrate from armcc v4.1 to the armclang v6.16

Hello to all,

I am trying to port the old arm project written in C language and partly in assembly that was compiled with the armcc version 4.1. And I must mention I am not an expert on this, still learning, reading the arm documentation.

The selected new compiler is armclang v6.16. For the assembly code I am still using the armasm.

I have read the migration document and the difference between the old arm v5 and new arm v6 compiler and adapted the compiler/linker flags accordingly.

Everything is ok with the build, but the linking is failing with the error:

Error: L6291E: Cannot assign Fixed Execution Region ... Load Address:0x000179b4. Load Address must be greater than or equal to next available Load Address:0x00017f7c.

and what I could see from the map file, using fromelf for specific object file is that the build output from the armclang is bigger than when I used the older compiler. I did some basic test to compile empty functions and found out the following:

- Using old compiler: building the empty function void and non-void creates function of size 2 bytes when I look in the object file using fromelf or in the map file (Memory map of the image)

- Using the new compiler:

     - building the empty function void creates function size of 2 bytes

     - building the empty non void function creates function size of 4 bytes. (Very strange why additional 2 bytes). 

For the code optimization I am using flag -oz as we are not using LTO in the project.

For the moment I am still trying to find out the reason, also checking if I misses any specific compiler flags.

Thank you for any useful information that could help me solve this mystery, Iknerf