Automatic placement of __at sections

The automatic placement of __at sections is enabled by default. This feature is controlled by the linker command-line option, --autoat.

Note

You cannot use __at section placement with position independent execution regions.

When linking with the --autoat option, the __at sections are not placed by the scatter-loading selectors. Instead, the linker places the __at section in a compatible region. If no compatible region is found, the linker creates a load and execution region for the __at section.

All linker --autoat created execution regions have the UNINIT scatter-loading attribute. If you require a ZI __at section to be zero-initialized then it must be placed within a compatible region. A linker --autoat created execution region must have a base address that is at least 4 byte-aligned. The linker produces an error message if any region is incorrectly aligned.

A compatible region is one where:

The following example shows the sections .ARM.__at_0x0 type RO, .ARM.__at_0x2000 type RW, .ARM.__at_0x4000 type ZI, and .ARM.__at_0x8000 type ZI:

Example 20. Placement of the variables in C or C++ code

// place the RW variable in a section called .ARM.__at_0x2000
int foo __attribute__((section(".ARM.__at_0x2000"))) = 100;

// place the ZI variable in a section called .ARM.__at_0x4000
int bar __attribute__((section(".ARM.__at_0x4000"), zero_init));

// place the ZI variable in a section called .ARM.__at_0x8000
int variable __attribute__((section(".ARM.__at_0x8000"), zero_init));

Example 21. Automatic placement of __at sections

LR1 0x0
{
    ER_RO 0x0 0x2000
    {
        *(+RO)      ; .ARM.__at_0x0 lies within the bounds of ER_RO
    }
    ER_RW 0x2000 0x2000
    {
        *(+RW)      ; .ARM.__at_0x2000 lies within the bounds of ER_RW
    }
    ER_ZI 0x4000 0x2000
    {
        *(+ZI)      ; .ARM.__at_0x4000 lies within the bounds of ER_ZI
    }
}

; the linker creates a load and execution region for the __at section
; .ARM.__at_0x8000 because it lies outside all candidate regions.

Show/hideSee also

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0474F
Non-ConfidentialID091611