|
|||||||||||
Technical Support On-Line Manuals Linker User Guide ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Automatic placement of __at sections
7.2.8 Automatic placement of __at sectionsThe linker automatically places The automatic placement of
__at sections is
enabled by default. This feature is controlled by the linker command-line option, --autoat .NoteYou 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:
ExampleThe following example shows the manual placement of variables is achieved
in C or C++ code, with the sections
.ARM.__at_ type RO, .ARM.__at_ type RW,
.ARM.__at_ type ZI, and .ARM.__at_ type ZI:// place the RO variable in a section called The following scatter file shows how the placement of
__at
sections is achieved automatically:LR1 0x0 { ER_RO 0x0 0x2000 { *(+RO) ; .ARM.__at_0x00000000 lies within the bounds of ER_RO } ER_RW 0x2000 0x2000 { *(+RW) ; .ARM.__at_0x00002000 lies within the bounds of ER_RW } ER_ZI 0x4000 0x2000 { *(+ZI) ; .ARM.__at_0x00004000 lies within the bounds of ER_ZI } } ; The linker creates a load and execution region for the __at section ; .ARM.__at_0x00008000 because it lies outside all candidate regions. Related conceptsRelated referenceRelated information | ||||||||||
|
Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.