7.8.10. IMPORT 및 EXTERN

이러한 지시어는 현재 어셈블리에 정의되어 있지 않은 이름을 어셈블러에 제공합니다.

구문

directive symbol {[type]}
directive symbol [attr{,type}]
directive symbol [WEAK{,attr}{,type}]

인수 설명:

지시어

다음 중 하나일 수 있습니다.

IMPORT

기호를 무조건 가져옵니다.

EXTERN

현재 어셈블리에서 기호를 참조하는 경우에만 기호를 가져옵니다.

symbol

별도로 어셈블된 소스 파일, 객체 파일 또는 라이브러리에 정의된 기호 이름입니다. 기호 이름은 대소문자를 구분합니다.

WEAK

기호가 다른 위치에 정의되어 있지 않은 경우 링커에서 오류 메시지를 생성하지 않도록 합니다. 또한 링커에서 아직 포함되어 있지 않은 라이브러리를 검색하지 않도록 합니다.

attr

다음 중 하나일 수 있습니다.

DYNAMIC

ELF 기호 표시를 STV_DEFAULT로 설정합니다.

PROTECTED

ELF 기호 표시를 STV_PROTECTED로 설정합니다.

HIDDEN

ELF 기호 표시를 STV_HIDDEN으로 설정합니다.

INTERNAL

ELF 기호 표시를 STV_INTERNAL로 설정합니다.

type

기호 형식을 지정합니다.

DATA

symbol은 소스를 어셈블 및 링크할 때 데이터로 간주됩니다.

CODE

symbol은 소스를 어셈블 및 링크할 때 코드로 간주됩니다.

ELFTYPE=n

symboln 값으로 지정되는 특정 ELF 기호로 간주됩니다. 여기서 n0에서 15 사이의 숫자일 수 있습니다.

지정하지 않는 경우 링커가 가장 적합한 형식을 결정합니다.

사용법

이름은 링크 타임에 별도의 객체 파일에 정의되어 있는 기호로 확인됩니다. 기호는 프로그램 주소로 처리됩니다. [WEAK]를 지정하지 않으면 링크 타임에 해당 기호를 찾을 수 없는 경우 링커에서 오류 메시지를 생성합니다.

[WEAK]를 지정했지만 링크 타임에 해당 기호를 찾을 수 없는 경우 다음과 같이 됩니다.

  • 참조가 B 또는 BL 명령어의 대상일 경우 기호 값이 그 다음 명령어의 주소로 지정됩니다. 이 경우 B 또는 BL 명령어를 효과적으로 NOP로 만들 수 있습니다.

  • 그렇지 않으면 기호 값이 0으로 지정됩니다.

기호 표시에 대한 자세한 내용은 www.infocenter.arm.com의 ARM 아키텍처용 ELF ABI 설명서를 참조하십시오.

예제

이 예제에서는 C++ 라이브러리가 링크되었고 결과에 따라 조건부로 분기되는지 여부를 테스트합니다.

    AREA    Example, CODE, READONLY
    EXTERN  __CPP_INITIALIZE[WEAK]  ; If C++ library linked, gets the address of
                                    ; __CPP_INITIALIZE function.
    LDR     r0,=__CPP_INITIALIZE    ; If not linked, address is zeroed.
    CMP     r0,#0                   ; Test if zero.
    BEQ     nocplusplus             ; Branch on the result.
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential