7.2.7 Automatically placing __at sections

The linker automatically places __at sections, but you can override this feature.

The automatic placement of __at sections is enabled by default. Use the linker command-line option, --no_autoat to disable this feature.


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

When linking with the --autoat option, the linker does not place __at sections with 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 execution regions created by --autoat 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 execution region created by --autoat must have a base address that is at least 4 byte-aligned. If any region is incorrectly aligned, the linker produces an error message.

A compatible region is one where:

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

// place the RO variable in a section called .ARM.__at_0x0000
const int foo __attribute__((section(".ARM.__at_0x0000"))) = 10;
// place the RW variable in a section called .ARM.__at_0x4000
int bar __attribute__((section(".ARM.__at_0x4000"))) = 100;
// place "variable" in a section called .ARM.__at_0x00008000
int variable __attribute__((section(".ARM.__at_0x00008000")));

The following scatter file shows how automatically to place these __at sections:

LR1 0x0
    ER_RO 0x0 0x4000
        *(+RO)      ; .ARM.__at_0x0000 lies within the bounds of ER_RO
    ER_RW 0x4000 0x2000
        *(+RW)      ; .ARM.__at_0x4000 lies within the bounds of ER_RW
    ER_ZI 0x6000 0x2000
; The linker creates a load and execution region for the __at section
; .ARM.__at_0x8000 because it lies outside all candidate regions.
Non-ConfidentialPDF file icon PDF versionDUI0803J
Copyright © 2014–2017, 2019 Arm Limited or its affiliates. All rights reserved.