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 one or more of the following ELF
sections:
Note:
If XO and RO are mixed within an execution region, that execution region is treated as RO.
For example, you might have a scatter file similar to the following:
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:
…
========================================================================
** 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)
…