5.2.6. 다중 일치 확인

섹션이 둘 이상의 실행 영역과 일치하면 일치는 아래 설명대로 확인됩니다. 그러나 고유한 일치를 찾을 수 없는 경우 링커에서 스캐터 로딩 설명을 사용하면 오류가 발생합니다. 각 섹션은 module_select_patterninput_section_selector에 의해 선택됩니다.

module_select_pattern 사양의 예제는 다음과 같습니다.

module_select_pattern 사양의 예제는 다음과 같습니다.

다음 변수가 다중 일치를 설명하는 데 사용됩니다.

다중 일치의 경우, 링커는 가장 명확한 module_select_patterninput_section_selector 쌍을 기준으로 입력 섹션을 할당할 영역을 결정합니다.

예를 들어, 입력 섹션 A가 실행 영역 R1의 경우 m1,s1과 일치하고 A가 실행 영역 R2의 경우 m2,s2와 일치하는 경우 링커는 다음과 같이 합니다.

armlink가 가장 명확한 module_select_pattern, input_section_selector 쌍을 결정하기 위해 사용하는 시퀀스는 다음과 같습니다.

  1. 모듈 선택기 패턴의 경우:

    텍스트 문자열 m1m2 패턴과 일치하고 텍스트 문자열 m2m1 패턴과 일치하지 않는 경우 m1m2보다 명확합니다.

  2. 입력 섹션 선택기의 경우:

    • s1s2가 둘 다 패턴 일치 섹션 이름인 경우 모듈 선택기 패턴에 대해 동일한 정의가 사용됩니다.

    • s1, s2 중 하나가 입력 섹션 이름과 일치하고 다른 하나는 입력 섹션 특성과 일치하는 경우 s1s2는 순서가 지정되지 않고 설명은 오류로 진단됩니다.

    • s1s2가 둘 다 입력 섹션 특성과 일치하면 s1s2보다 더 명확한지 여부의 결정은 아래와 같은 관계에 의해 결정됩니다.

      • ENTRYRO-CODE, RO-DATA, RW-CODE 또는 RW-DATA보다 명확합니다.

      • RO-CODERO보다 명확합니다.

      • RO-DATARO보다 명확합니다.

      • RW-CODERW보다 명확합니다.

      • RW-DATARW보다 명확합니다.

      • 섹션 특성 사이의 관계(s1s2보다 명확한)에는 다른 구성원이 없습니다.

  3. module_select_pattern, input_section_selector 쌍의 경우, 다음 중 하나가 참인 경우에만 m1,s1m2,s2보다 명확합니다.

    • s1은 리터럴 입력 섹션 이름(즉, 패턴 문자를 포함하지 않음)이고 s2+ENTRY가 아닌 입력 섹션 특성과 일치합니다.

    • m1m2보다 명확합니다.

    • s1s2보다 명확합니다.

이 일치 전략의 결과는 다음과 같습니다.

Example 5.1은 여러 실행 영역과 패턴 일치를 보여줍니다.

Example 5.1. 여러 실행 영역과 패턴 일치

LR_1 0x040000            
{                            
    ER_ROM 0x040000              ; The startup exec region address is the same
    {	                            ; as the load address.  
        application.o (+ENTRY)   ; The section containing the entry point from
    }	                            ; the object is placed here.
    ER_RAM1 0x048000      
    {
        application.o (+RO-CODE) ; Other RO code from the object goes here
    }
    ER_RAM2 0x050000     
    {
        application.o (+RO-DATA) ; The RO data goes here
    }
    ER_RAM3 0x060000 
    {
        application.o (+RW)      ; RW code and data go here
    }
    ER_RAM4 +0                   ; Follows on from end of ER_R3
    {
        *.o (+RO, +RW, +ZI)      ; Everything except for application.o goes here
    }
}
Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0206GK
Non-Confidential