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:
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 – defines a region called
STACK that starts at address
and ends at address
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 for placing the stack
HEAP +0 EMPTY 0x10000 ; region starts at the end of previous
; region. End of region calculated using
; positive length
; Empty region for placing the heap
… ; rest of scatter-loading description
NoteThe 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.
The following figure shows a diagrammatic representation for this example.
Figure 7-5 Reserving a region for the stack
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
EMPTY attribute applies only to an execution region. The linker
generates a warning and ignores an
EMPTY attribute used in a load region
The linker checks that the address space used for the
EMPTY region does
not coincide with any other execution region.