7.8.2. AREA

AREA 지시어는 새 코드 또는 데이터 섹션을 어셈블하도록 어셈블러에 지시합니다. 섹션은 링커에서 조작하는 코드 또는 데이터의 더 이상 나눌 수 없는 독립적인 명명된 청크입니다. 자세한 내용은 ELF 섹션 및 AREA 지시어를 참조하십시오.

구문

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

인수 설명:

sectionname

섹션에 지정할 이름입니다.

아무 이름이나 선택할 수 있지만 영문자 이외의 문자로 시작하는 이름은 막대로 묶어야 합니다. 그렇지 않으면 섹션 이름이 없다는 오류 메시지가 생성됩니다. 예를 들면 |1_DataArea|와 같습니다.

일부 이름은 기존 방식을 사용하여 지정됩니다. 예를 들어 |.text|는 C 컴파일러가 생성한 코드 섹션이나 C 라이브러리와 다른 방식으로 연결된 코드 섹션에 사용됩니다.

attr

하나 이상의 콤마로 구분된 섹션 특성입니다. 유효한 특성은 다음과 같습니다.

ALIGN=expression

기본적으로 ELF 섹션은 4바이트 단위로 정렬됩니다. expression은 0에서 31 사이의 모든 정수 값을 가질 수 있습니다. 섹션은 2expression-바이트 경계를 기준으로 정렬됩니다. 예를 들어 expression이 10이면 섹션은 1KB 경계를 기준으로 정렬됩니다.

이 지시어는 ALIGN 지시어와 다른 방법으로 지정됩니다. 자세한 내용은 ALIGN을 참조하십시오.

Note

ARM 코드 섹션에 ALIGN=0 또는 ALIGN=1을 사용하면 안 됩니다.

Thumb 코드 섹션에 ALIGN=0을 사용하면 안 됩니다.

ASSOC=section

section은 연결된 ELF 섹션을 지정합니다. sectionnamesection이 들어 있는 모든 링크에 포함되어야 합니다.

CODE

시스템 명령어를 포함합니다. READONLY가 기본값입니다.

CODEALIGN

ALIGN 지시어가 다른 패딩을 지정하지 않는 경우, 섹션 내의 ARM 또는 Thumb 명령어 뒤에 ALIGN 지시어가 사용되면 NOP 명령어를 삽입하도록 어셈블러에 지시합니다.

COMDEF

공통 섹션 정의입니다. 이 ELF 섹션은 코드나 데이터를 포함할 수 있으며 다른 소스 파일에서 같은 이름을 가진 다른 모든 섹션과 동일해야 합니다.

같은 이름을 가진 동일한 ELF 섹션은 링커에서 같은 메모리 섹션에 겹쳐서 배치합니다. 다른 ELF 섹션이 있을 경우 링커에서 경고를 생성하고 섹션을 겹쳐서 배치하지 않습니다. 링커 사용 설명서에서 3장 기본 링커 기능 사용을 참조하십시오.

COMGROUP=symbol_name

공통 그룹 섹션입니다. 공통 그룹 안의 모든 섹션은 공통입니다. 객체가 링크될 때 다른 객체 파일에 symbol_name 서명이 포함된 GROUP이 있을 수 있습니다. 한 그룹만 최종 이미지에 유지됩니다.

COMMON

공통 데이터 정의입니다. 이 안에 들어 있는 코드나 데이터는 사용자가 정의할 수 없으며 링커에서 0으로 초기화합니다. 같은 이름을 가진 모든 공통 섹션은 링커에서 같은 메모리 섹션에 겹쳐서 배치합니다. 이러한 공통 섹션은 모두 크기가 달라야 합니다. 링커에서는 각 이름의 가장 큰 공통 섹션에 필요한 공간을 할당합니다.

DATA

명령어가 아니라 데이터를 포함합니다. READWRITE가 기본값입니다.

FINI_ARRAY

현재 영역의 ELF 형식을 SHT_FINI_ARRAY로 설정합니다.

GROUP=symbol_name

그룹에 대한 서명이며 소스 파일이나 소스 파일에 포함된 파일로 정의되어야 합니다. 동일한 symbol_name 서명이 포함된 모든 AREAS가 동일한 그룹에 배치됩니다. 그룹 내의 섹션은 유지되거나 함께 검색됩니다.

INIT_ARRAY

현재 영역의 ELF 형식을 SHT_INIT_ARRAY로 설정합니다.

LINKORDER=section

이미지에서 현재 섹션의 상대 위치를 지정합니다. 그러면 LINKORDER 속성을 포함하는 모든 섹션의 순서가 서로에 대해 이미지의 명명된 해당 sections 순서와 같아집니다.

MERGE=n

링커가 MERGE=n 속성을 사용하여 현재 섹션을 다른 섹션과 병합할 수 있음을 나타냅니다. n은 섹션의 요소 크기 (예: 문자의 경우 n은 1) 입니다. 그러나 이 속성이 링커가 섹션을 병합하도록 지시하는 것은 아니므로, 섹션이 병합될 것이라고 간주하면 안 됩니다.

NOALLOC

타겟 시스템의 메모리가 현재 영역에 할당되지 않았음을 나타냅니다.

NOINIT

데이터 섹션이 초기화되지 않았거나 0으로 초기화되었음을 나타냅니다. 여기에는 공간 예약 지시어인 SPACE나 0으로 초기화된 값이 있는 DCB, DCD, DCDU, DCQ, DCQU, DCW 또는 DCWU만 포함될 수 있습니다. 영역이 초기화되지 않았는지 아니면 0으로 초기화되었는지 여부는 링크 타임에 확인할 수 있습니다. 링커 사용 설명서에서 3장 기본 링커 기능 사용을 참조하십시오.

PREINIT_ARRAY

현재 영역의 ELF 형식을 SHT_PREINIT_ARRAY로 설정합니다.

READONLY

현재 섹션에서 쓰기 작업을 수행할 수 없음을 나타냅니다. 이 값이 코드 영역의 기본값입니다.

READWRITE

현재 섹션에서 읽기 및 쓰기 작업을 수행할 수 있음을 나타냅니다. 이 값이 데이터 영역의 기본값입니다.

SECFLAGS=n

n으로 표시되는 하나 이상의 ELF 플래그를 현재 섹션에 추가합니다.

SECTYPE=n

현재 섹션의 ELF 형식을 n으로 설정합니다.

STRINGS

SHF_STRINGS 플래그를 현재 섹션에 추가합니다. STRINGS 속성을 사용하려면 MERGE=1 속성도 사용해야 합니다. 섹션의 내용은 DCB 지시어를 사용하여 Null로 끝나는 문자열이어야 합니다.

사용법

AREA 지시어를 사용하여 소스 파일을 여러 ELF 섹션으로 나눕니다. 둘 이상의 AREA 지시어에 같은 이름을 사용할 수 있습니다. 같은 이름을 가진 모든 영역은 동일한 ELF 섹션에 배치됩니다. 이 경우 첫 번째 AREA 지시어의 특성만 적용됩니다.

일반적으로 코드와 데이터에 대해 각기 다른 ELF 섹션을 사용해야 합니다. 큰 프로그램은 보통 여러 코드 섹션으로 쉽게 나눌 수 있습니다. 대개 큰 독립적 데이터 세트는 여러 섹션에 배치하는 것이 좋습니다.

지역 레이블의 범위는 AREA 지시어에 의해 정의되며, 경우에 따라 ROUT 지시어에 의해 나뉩니다 (지역 레이블ROUT 참조).

어셈블리에 대한 AREA 지시어는 최소한 하나 이상 있어야 합니다.

예제

다음 예제에서는 Example이라는 읽기 전용 코드 섹션을 정의합니다.

    AREA    Example,CODE,READONLY   ; An example code section.
            ; code
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential