Consider the following source files:
init.c
------
int foo() __attribute__((section("INIT")));
int foo() {
return 1;
}
int bar() {
return 2;
}
data.c
------
const long padding=123;
int z=5;
The following scatter file shows how to place a named section
explicitly:
LR1 0x0 0x10000
{
; Root Region, containing init code
ER1 0x0 0x2000
{
init.o (INIT, +FIRST) ; place init code at exactly 0x0
*(+RO) ; rest of code and read-only data
}
; RW & ZI data to be placed at 0x400000
RAM_RW 0x400000 (0x1FF00-0x2000)
{
*(+RW)
}
RAM_ZI +0
{
*(+ZI)
}
; execution region at 0x1FF00
; maximum space available for table is 0xFF
DATABLOCK 0x1FF00 0xFF
{
data.o(+RO-DATA) ; place RO data between 0x1FF00 and 0x1FFFF
}
}
In this example, the scatter-loading description places:
The initialization code is placed in the INIT
section in the
init.o file. This example shows that the code from
the INIT
section is placed first, at address 0x0
, followed by the remainder
of the RO code and all of the RO data except for the RO data in the object
data.o.
All global RW variables in RAM at 0x400000
.
A table of RO-DATA
from data.o at
address 0x1FF00
.
The resulting image memory map is as follows:
Memory Map of the image
Image entry point : Not specified.
Load Region LR1 (Base: 0x00000000, Size: 0x00000018, Max: 0x00010000, ABSOLUTE)
Execution Region ER1 (Base: 0x00000000, Size: 0x00000010, Max: 0x00002000, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x00000000 0x00000008 Code RO 4 INIT init.o
0x00000008 0x00000008 Code RO 1 .text init.o
0x00000010 0x00000000 Code RO 16 .text data.o
Execution Region DATABLOCK (Base: 0x0001ff00, Size: 0x00000004, Max: 0x000000ff, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x0001ff00 0x00000004 Data RO 19 .rodata data.o
Execution Region RAM_RW (Base: 0x00400000, Size: 0x00000004, Max: 0x0001df00, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x00400000 0x00000000 Data RW 2 .data init.o
0x00400000 0x00000004 Data RW 17 .data data.o
Execution Region RAM_ZI (Base: 0x00400004, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x00400004 0x00000000 Zero RW 3 .bss init.o
0x00400004 0x00000000 Zero RW 18 .bss data.o