The input section properties and ordering are shown in the following
table:
Table
C6-1 Input section properties for placement of .ANY sections
Name |
Size |
sec1 |
0x4
|
sec2 |
0x4
|
sec3 |
0x4
|
sec4 |
0x4
|
sec5 |
0x4
|
sec6 |
0x4
|
The scatter file that the examples use is:
LR 0x100
{
ER_1 0x100 0x10
{
.ANY
}
ER_2 0x200 0x10
{
.ANY
}
}
Note:
These examples have --any_contingency
disabled.
Example for first_fit, next_fit, and best_fit
This example shows the image memory map where several sections of equal
size are assigned to two regions with one selector. The selectors are equally specific,
equivalent to .ANY(+R0)
and have no priority.
Execution Region ER_1 (Base: 0x00000100, Size: 0x00000010, Max: 0x00000010, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x00000100 0x00000004 Code RO 1 sec1 sections.o
0x00000104 0x00000004 Code RO 2 sec2 sections.o
0x00000108 0x00000004 Code RO 3 sec3 sections.o
0x0000010c 0x00000004 Code RO 4 sec4 sections.o
Execution Region ER_2 (Base: 0x00000200, Size: 0x00000008, Max: 0x00000010, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x00000200 0x00000004 Code RO 5 sec5 sections.o
0x00000204 0x00000004 Code RO 6 sec6 sections.o
In this example:
- For
first_fit
, the linker first assigns
all the sections it can to ER_1
, then moves on to ER_2
because that is the next available region.
- For
next_fit
, the linker does the same as first_fit
. However, when ER_1
is full it is marked as FULL
and is not considered again. In this example, ER_1
is full. ER_2
is then considered.
- For
best_fit
, the linker assigns sec1
to ER_1
. It then has two
regions of equal priority and specificity, but ER_1
has
less space remaining. Therefore, the linker assigns sec2
to ER_1
, and continues assigning sections until ER_1
is full.
Example for worst_fit
This example shows the image memory map when using the worst_fit
algorithm.
Execution Region ER_1 (Base: 0x00000100, Size: 0x0000000c, Max: 0x00000010, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x00000100 0x00000004 Code RO 1 sec1 sections.o
0x00000104 0x00000004 Code RO 3 sec3 sections.o
0x00000108 0x00000004 Code RO 5 sec5 sections.o
Execution Region ER_2 (Base: 0x00000200, Size: 0x0000000c, Max: 0x00000010, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x00000200 0x00000004 Code RO 2 sec2 sections.o
0x00000204 0x00000004 Code RO 4 sec4 sections.o
0x00000208 0x00000004 Code RO 6 sec6 sections.o
The linker first assigns sec1
to ER_1
. It then has two equally specific and priority regions. It
assigns sec2
to the one with the most free space, ER_2
in this example. The regions now have the same amount of
space remaining, so the linker assigns sec3
to the first
one that appears in the scatter file, that is ER_1
.
Note:
The behavior of worst_fit
is the default behavior in this version of the linker, and it is the only algorithm
available in earlier linker versions.