| |||
| Home > Using Scatter-loading Description Files > Equivalent scatter-loading descriptions for simple images > Type 1 | |||
An image of this type consists of a single load region in the load view and three execution regions in the execution view. The execution regions are placed contiguously in the memory map.
--ro-base specifies
the load and execution address of the region containing the RO output
section. Example 5.10 shows
the scatter-loading description equivalent to using address--ro-base
0x040000.
Example 5.10. Single load region and contiguous execution regions
LR_1 0x040000 ; Define the load region name as LR_1, the region starts at 0x040000.
{
ER_RO +0 ; First execution region is called ER_RO, region starts at end of previous region.
; However, since there was no previous region, the address is 0x040000.
{
* (+RO) ; All RO sections go into this region, they are placed consecutively.
}
ER_RW +0 ; Second execution region is called ER_RW, the region starts at the end of the
; previous region . The address is 0x040000 + size of ER_RO region.
{
* (+RW) ; All RW sections go into this region, they are placed consecutively.
}
ER_ZI +0 ; Last execution region is called ER_ZI, the region starts at the end of the
; previous region at 0x040000 + the size of the ER_RO regions + the size of
; the ER_RW regions.
{
* (+ZI) ; All ZI sections are placed consecutively here.
}
}
The description shown in Example 5.10 creates an image with one load region
called LR_1, whose load address is 0x040000.
The image has three execution regions, named ER_RO, ER_RW,
and ER_ZI, that contain the RO, RW, and ZI output
sections respectively. RO, RW are root regions. ZI is created dynamically
at runtime. The execution address of ER_RO is 0x040000.
All three execution regions are placed contiguously in the memory
map by using the + form
of the base designator for the execution region description. This
enables an execution region to be placed immediately following the
end of the preceding execution region.offset
The --reloc option is used to make relocatable
images. Used on its own, --reloc makes an image
similar to simple type 1, but the single load region has the RELOC attribute.
In this variant, the execution regions are placed contiguously
in the memory map. However, --ropi marks the load
and execution regions containing the RO output section as position-independent.
Example 5.11 shows the
scatter-loading description equivalent to using --ro-base 0x010000 --ropi.
Example 5.11. Position-independent code
LR_1 0x010000 PI ; The first load region is at 0x010000.
{
ER_RO +0 ; The PI attribute is inherited from parent.
; The default execution address is 0x010000, but the code can be moved.
{
* (+RO) ; All the RO sections go here.
}
ER_RW +0 ABSOLUTE ; PI attribute is overridden by ABSOLUTE.
{
* (+RW) ; The RW sections are placed next . They cannot be moved.
}
ER_ZI +0 ; ER_ZI region placed after ER_RW region.
{
* (+ZI) ; All the ZI sections are placed consecutively here.
}
}
Shown in Example 5.11, ER_RO,
the RO execution region, inherits the PI attribute
from the load region LR_1. The next execution
region, ER_RW, is marked as ABSOLUTE and
uses the + form
of base designator. This prevents offsetER_RW from inheriting
the PI attribute from ER_RO.
Also, because the ER_ZI region has an offset
of +0, it inherits the ABSOLUTE attribute
from the ER_RW region.