You copied the Doc URL to your clipboard.

Using __at sections to place sections at a specific address

You can give a section a special name that encodes the address where it must be placed. You specify the name as follows:




is the required address of the section, normalized to eight hexadecimal digits. You can specify this in hexadecimal or decimal. Sections in the form of .ARM.__at_address are referred to by the abbreviation __at.

In the compiler, you can assign variables to __at sections by:

  • explicitly naming the section using the __attribute__((section("name")))

  • using the attribute __at that sets up the name of the section for you.

// place variable1 in a section called .ARM.__AT_0x00008000
int variable1 __attribute__((at(0x8000))) = 10;

// place variable2 in a section called .ARM.__at_0x8000
int variable2 __attribute__((section(".ARM.__at_0x8000"))) = 10;


When using __attribute__((at(address))), the part of the __at section name representing address is normalized to an eight digit hexadecimal number. The name of the section is only significant if you are trying to match the section by name in a scatter file. Without overlays, the linker automatically assigns __at sections when you use the --autoat command-line option. This option is the default. If you are using overlays, then you cannot use --autoat to place __at sections.