| |||
| Home > Using scatter files > Reserving an empty region | |||
You can use the EMPTY attribute in an execution
region scatter-loading description to reserve an empty block of
memory for the stack.
The block of memory does not form part of the load region, but is assigned for use at execution time. Because it is created as a dummy ZI region, the linker uses the following symbols to access it:
Image$$region_name$$ZI$$Base
Image$$region_name$$ZI$$Limit
Image$$region_name$$ZI$$Length.
If the length is given as a negative value, the address is taken to be the end address of the region. This must be an absolute address and not a relative one.
In the following example, the execution region definition STACK
0x800000 EMPTY -0x10000 defines a region called STACK that
starts at address 0x7F0000 and ends at address 0x800000:
Example 32. Reserving a region for the stack
LR_1 0x80000 ; load region starts at 0x80000
{
STACK 0x800000 EMPTY -0x10000 ; region ends at 0x800000 because of the
; negative length. The start of the region
; is calculated using the length.
{
; Empty region used to place stack
}
HEAP +0 EMPTY 0x10000 ; region starts at the end of previous
; region. End of region calculated using
; positive length
{
; Empty region used to place heap
}
. .. ; rest of scatter-loading description...
}
The dummy ZI region that is created for an EMPTY execution
region is not initialized to zero at runtime.
If the address is in relative (+)
form and the length is negative, the linker generates an error.offset
The following figure shows a diagrammatic representation for this example.
In this example, the linker generates the symbols:
Image$$STACK$$ZI$$Base = 0x7f0000 Image$$STACK$$ZI$$Limit = 0x800000 Image$$STACK$$ZI$$Length = 0x10000 Image$$HEAP$$ZI$$Base = 0x800000 Image$$HEAP$$ZI$$Limit = 0x810000 Image$$HEAP$$ZI$$Length = 0x10000
The EMPTY attribute applies only to an
execution region. The linker generates a warning and ignores an EMPTY attribute
used in a load region definition.
The linker checks that the address space used for the EMPTY region
does not coincide with any other execution region.
Linker Reference: