You copied the Doc URL to your clipboard.

ARM Compiler armlink User Guide : Reserving an empty region

Reserving an empty region

You can reserve an empty block of memory with a scatter file, such as the area used for the stack. Use the EMPTY attribute for the execution region in the scatter-loading description.

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:

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


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 (+offset) 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


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.