According to ARM document pasted below, __main always calls __scatterload. But I got a .elf file whose dissambly code doesn't contain the __scatterload function. Any idea in what situation the __scatterload will not be compiled and used ?
I use armclang 6 to compile the source files into the .elf.
Thanks and best regards,
Xinwei
The function __main is the entry point to the C library. Unless you change it, __main is the default entry point to the ELF image that the ARM linker (armlink) uses when creating the image. Figure 1 shows the functions called by__main during the C library startup.
Figure 1 Overview of the functions called during the C library startup
__rt_entry and the functions called by __rt_entry are described in Functions called by __rt_entry.
Application code and data can be in a root region or a non-root region. Root regions have the same load-time and execution-time addresses. Non-root regions have different load-time and execution-time addresses. The root region contains a region table output by the ARM linker.
The region table contains the addresses of the non-root code and data regions that require initialization. The region table also contains a function pointer that indicates what initialization is needed for the region, for example a copying, zeroing, or decompressing function.
__scatterload goes through the region table and initializes the various execution-time regions. The function:
__main always calls this function during startup before calling __rt_entry.
I got the answer.
As the document says, __scatterload is to initialize the ZI region and map the load regions to the execution regions. So, if there are no uninitialized array in the code , and no non-root region specified in the scatter file, then the __scatterload function wont be used so it won't be linked to the .elf.
Xinwei said:he region table contains the addresses of the non-root code and data regions that require initialization.
I think your code must have RW data region that require initalization. They need to be put into RAM before go into main function.