7.7.2. AREA

The AREA directive instructs the assembler to assemble a new code or data section. Sections are independent, named, indivisible chunks of code or data that are manipulated by the linker. See ELF sections and the AREA directive for more information.

Syntax

AREA sectionname{,attr}{,attr}...

where:

sectionname

is the name that the section is to be given.

You can choose any name for your sections. However, namesstarting with a digit must be enclosed in bars or a missing section name error is generated. For example, |1_DataArea|.

Certain names are conventional. For example, |.text| is used for code sections produced by the C compiler, or for code sections otherwise associated with the C library.

attr

are one or more comma-delimited section attributes. Valid attributes are:

ALIGN=expression

By default, ELF sections are aligned on a 4-byte boundary. expression can have any integer value from 0 to 31. The section is aligned on a 2expression-byte boundary. For example, if expression is 10, the section is aligned on a 1KB boundary. This is not the same as the way that the ALIGN directive is specified. See ALIGN.

Note

Do not use ALIGN=0 or ALIGN=1 for code sections.

ASSOC=section

section specifies an associated ELF section. sectionnamemust be included in any link that includes section

CODE

Contains machine instructions. READONLY is the default.

COMDEF

Is a common section definition. This ELF section can contain code or data. It must be identical to any other section of the same name in other source files.

Identical ELF sections with the same name are overlaid in the same section of memory by the linker. If any are different, the linker generates a warning and does not overlay the sections. See the Linker chapter in ADS Linker and Utilities Guide.

COMMON

Is a common data section. You must not define any code or data in it. It is initialized to zeroes by the linker. All common sections with the same name are overlaid in the same section of memory by the linker. They do not all need to be the same size. The linker allocates as much space as is required by the largest common section of each name.

DATA

Contains data, not instructions. READWRITE is the default.

NOINIT

Indicates that the data section is uninitialized, or initialized to zero. It contains only space reservation directives SPACE or DCB, DCD, DCDU, DCQ, DCQU, DCW, or DCWU with initialized values of zero. You can decide at link time whether an AREA is uninitialized or zero-initialized (see the Linker chapter in ADS Linker and Utilities Guide).

READONLY

Indicates that this section should not be written to. This is the default for Code areas.

READWRITE

Indicates that this section can be read from and written to. This is the default for Data areas.

Usage

Use the AREA directive to subdivide your source file into ELF sections. You can use the same name in more than one AREA directive. All areas with the same name are placed in the same ELF section.

You should normally use separate ELF sections for code and data. Large programs can usually be conveniently divided into several code sections. Large independent data sets are also usually best placed in separate sections.

The scope of local labels is defined by AREA directives, optionally subdivided by ROUT directives (see Local labels and ROUT).

There must be at least one AREA directive for an assembly.

Example

The following example defines a read-only code section named Example.

    AREA    Example,CODE,READONLY   ; An example code section.
            ; code
Copyright © 2000, 2001 ARM Limited. All rights reserved.ARM DUI 0068B
Non-Confidential