| |||
| Home > Using scatter files > Scatter file to ELF mapping | |||
For simple images, ELF executable files contain segments:
a load region is represented by an ELF Program Segment with type PT_LOAD
an execution region is represented by up to three ELF Sections:
one for RO
one for RW
one for ZI.
For example, you might have a scatter file similar to the following:
Example 37. Scatter file
LOAD 0x8000
{
EXEC_ROM +0
{
*(+RO)
}
RAM +0
{
*(+RW,+ZI)
}
HEAP +0x100 EMPTY 0x100
{
}
STACK +0 EMPTY 0x400
{
}
}
This scatter file creates a single Program Segment with type
PT_LOAD for the load region with address 0x8000.
A single Output Section with type SHT_PROGBITS is created to represent the contents of EXEC_ROM. Two Output Sections are created to represent RAM. The first has a type SHT_PROGBITS and contains the initialized read/write data. The second has a type of SHT_NOBITS and describes the zero-initialized data.
The heap and stack are described in the ELF file by SHT_NOBITS sections.
Enter the following fromelf command to see the scatter-loaded sections in the image:
fromelf --text -v my_image.axf
To display the symbol table, enter the command:
fromelf --text -s -v my_image.axf
The following is an example of the fromelf output
showing the LOAD, EXEC_ROM, RAM, HEAP,
and STACK sections:
Example 38. Scatter-loaded sections in the ELF image
...
========================================================================
** Program header #0
Type : PT_LOAD (1)
File Offset : 52 (0x34)
Virtual Addr : 0x00008000
Physical Addr : 0x00008000
Size in file : 764 bytes (0x2fc)
Size in memory: 2140 bytes (0x85c)
Flags : PF_X + PF_W + PF_R + PF_ARM_ENTRY (0x80000007)
Alignment : 4
========================================================================
** Section #1
Name : EXEC_ROM
...
Addr : 0x00008000
File Offset : 52 (0x34)
Size : 740 bytes (0x2e4)
...
====================================
** Section #2
Name : RAM
...
Addr : 0x000082e4
File Offset : 792 (0x318)
Size : 20 bytes (0x14)
...
====================================
** Section #3
Name : RAM
...
Addr : 0x000082f8
File Offset : 812 (0x32c)
Size : 96 bytes (0x60)
...
====================================
** Section #4
Name : HEAP
...
Addr : 0x00008458
File Offset : 812 (0x32c)
Size : 256 bytes (0x100)
...
====================================
** Section #5
Name : STACK
...
Addr : 0x00008558
File Offset : 812 (0x32c)
Size : 1024 bytes (0x400)
...