5.2.5. 입력 섹션 설명

입력 섹션 설명은 다음을 통해 입력 섹션을 식별하는 패턴입니다.

Figure 5.8은 일반적인 입력 섹션 설명의 구성요소를 보여줍니다.

Figure 5.8. 입력 섹션 설명의 구성요소

입력 섹션 설명의 구성요소

BNF 구문은 다음과 같습니다.

input_section_description ::= 

  module_select_pattern 
      ["(" 
        ("+" input_section_attr | input_section_pattern | input_symbol_pattern) 
        ("," "+" input_section_attr | "," input_section_pattern | ","  
         input_symbol_pattern)* 
       ")"]

다음은 각 요소에 대한 설명입니다.

module_select_pattern

리터럴 텍스트에서 생성된 패턴. 와일드카드 문자 *은 0개 이상의 문자에 해당하며 ?은 단일 문자에 해당합니다.

일치는 대소문자를 구분하는 파일 명명을 가진 호스트에서도 대소문자를 구분하지 않습니다.

모든 오브젝트와 일치시키려면 *.o를 사용합니다. 모든 오브젝트 파일 및 라이브러리와 일치시키려면 *을 사용합니다.

입력 섹션은 module_select_pattern이 다음 중 하나와 일치하는 경우 모듈 선택기 패턴과 일치합니다.

  • 섹션을 포함하는 오브젝트 파일의 이름

  • 라이브러리 구성원의 이름(선행 경로 이름 없음)

  • 섹션이 추출된 라이브러리의 전체 이름(경로 이름 포함). 이름에 공백이 포함된 경우 검색을 단순화하기 위해 와일드카드를 사용합니다. 예를 들어, *libname.lib를 사용하여 C:\lib dir\libname.lib와 일치시킵니다.

특수한 모듈 선택기 패턴인 .ANY를 사용하면 상위 모듈에 관계없이 입력 섹션을 실행 영역에 할당할 수 있습니다. .ANY를 사용하여 실행 영역을 모듈과 관계없는 할당으로 채웁니다.

Note

  • module_select_pattern과 적어도 하나의 input_section_attr 또는 input_section_pattern과 일치하는 입력 섹션만 실행 영역에 포함됩니다.

    (+ input_section_attr)(input_section_pattern)을 생략하면 기본값은 +RO입니다.

  • 컴파일러에서 생성하거나 ARM 라이브러리 코드가 사용하는 입력 섹션 이름은 사용하지 마십시오. 이들은 예를 들어, 다른 컴파일러 옵션을 사용하는 경우 컴파일 사이에서 변경될 수 있습니다. 또한, 컴파일러가 사용하는 섹션 명명 규칙은 릴리스 사이에서 변경되지 않는다고 보장할 수 없습니다.

input_section_attr

입력 섹션 특성에 대해 일치하는 특성 선택기. 각 input_section_attr 뒤에는 +가 옵니다.

입력 섹션 이름과 일치하는 패턴을 지정하는 경우 이름 앞에는 +가 와야 합니다. + 바로 앞에는 쉼표를 생략할 수 있습니다.

선택기는 대소문자를 구분하지 않습니다. 다음 선택기가 인식됩니다.

  • RO-CODE

  • RO-DATA

  • RO, RO-CODERO-DATA 모두 선택

  • RW-DATA

  • RW-CODE

  • RW, RW-CODERW-DATA 모두 선택

  • ZI

  • ENTRY, 즉, ENTRY 포인트를 포함하는 섹션

다음 동의어가 인식됩니다.

  • RO-CODE의 경우 CODE

  • RO-DATA의 경우 CONST

  • RO의 경우 TEXT

  • RW의 경우 DATA

  • ZI의 경우 BSS

다음 의사 특성이 인식됩니다.

  • FIRST

  • LAST

FIRSTLAST는 배치 순서가 중요한 경우(예를 들어, 특정 입력 섹션이 영역의 첫 번째여야 하고 체크섬을 포함하는 입력 섹션은 마지막이어야 하는 경우), 실행 영역의 첫 번째와 마지막 섹션을 표시하는 데 사용할 수 있습니다. input_section_attrFIRST 또는 LAST이 처음 사용되면 목록이 종료됩니다.

특수한 모듈 선택기 패턴인 .ANY를 사용하면 상위 모듈에 관계없이 입력 섹션을 실행 영역에 할당할 수 있습니다. 하나 이상의 .ANY 패턴을 사용하여 실행 영역을 모듈과 관계없는 할당으로 채웁니다. 대부분의 경우 .ANY 하나를 사용하는 것은 * 모듈 선택기를 사용하는 것과 같습니다.

스캐터 로딩 설명 파일에는 두 개의 * 선택기가 있을 수 없습니다. 그러나 *A*B와 같은 수정된 선택기는 두 개를 사용할 수 있으며, .ANY 선택기를 * 모듈 선택기와 함께 사용할 수 있습니다. * 모듈 선택기는 .ANY보다 우선순위가 높습니다. 파일에서 * 선택기가 포함된 부분이 제거되면 .ANY 선택기가 활성화됩니다.

.ANY 모듈 선택기 패턴을 가진 입력 섹션 설명은 모든 다른(.ANY가 아닌) 입력 섹션 설명이 확인된 후 확인됩니다. 실행 영역에 할당되지 않은 모든 섹션은 .ANY 영역으로 할당됩니다.둘 이상의 .ANY 패턴이 있는 경우 링커는 실행 영역에 할당되지 않은 섹션 중 크기가 가장 큰 섹션을 선택하여 빈 공간이 충분하고 가장 명확한 .ANY 실행 영역에 할당합니다. 이 경우 armlink에서는 .ANY(.text).ANY(+RO)보다 더 명확한 것으로 간주됩니다.

여러 실행 영역이 똑같이 명확하면 섹션은 사용 가능한 남은 공간이 가장 많은 실행 영역에 할당됩니다.

예를 들면 다음과 같습니다.

  • 동등하게 명확한 두 실행 영역 중 하나는 크기 제한이 0x2000이고 다른 하나는 제한이 없는 경우, 모든 섹션은 크기 제한이 없는 두 번째 .ANY 영역에 할당됩니다.

  • 동등하게 명확한 두 실행 영역 중 하나는 크기 제한이 0x2000이고 다른 하나는 크기 제한이 0x3000인 경우 배치할 첫 번째 섹션은 두 번째 .ANY의 남은 크기가 0x2000으로 줄어들 때까지 크기 제한이 0x3000.ANY 영역에 할당됩니다. 그리고 이 지점부터 섹션은 두 .ANY 실행 영역에 번갈아 할당됩니다.

input_section_pattern

입력 섹션 이름에 대해 대소문자 구분이 없이 일치하는 패턴. 이것은 리터럴 텍스트에서 생성됩니다. 와일드카드 문자 *은 0개 이상의 문자에 해당하며 ?은 단일 문자에 해당합니다.

Note

둘 이상의 input_section_pattern을 사용하는 경우 모호한 오류를 피하기 위해 다른 실행 영역에 중복 패턴이 없도록 하십시오.

input_symbol_pattern

섹션이 정의하는 글로벌 심볼의 이름별로 입력 섹션을 선택할 수 있습니다. 따라서 부분적으로 링크된 오브젝트에서 동일한 이름을 가진 개별 섹션을 선택할 수 있습니다.

:gdef: 접두사는 전역 심볼 패턴을 섹션 패턴과 구별합니다. 예를 들어, :gdef:mysym을 사용하여 mysym을 정의하는 섹션을 선택합니다. 다음 예제는 ExecReg1이 전역 심볼 mysym1을 정의하는 섹션과 전역 심볼 mysym2를 포함하는 섹션을 포함하는 설명 파일을 보여줍니다.

LoadRegion 0x8000
{
    ExecReg1 +0
    {
        *(:gdef:mysym1)
        *(:gdef:mysym2)
    }
    .
	.
}

Note

둘 이상의 input_symbol_pattern을 사용하는 경우 모호한 오류를 피하기 위해 다른 실행 영역에 중복 패턴이 없도록 하십시오.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0206GK
Non-Confidential