RealView ® CompilationTools 컴파일러 및 라이브러리 설명서

버전 3.0


Table of Contents

서문
설명서 정보
대상 독자
설명서 사용
표기 규칙
추가 정보
사용자 의견
RealView Compilation Tools에 대한 의견
설명서에 대한 의견
1. 소개
1.1. RVCT 정보
1.1.1. 예제 사용
1.2. ARM 컴파일러 및 라이브러리
1.2.1. ARM 컴파일러
1.2.2. C 및 C++ 라이브러리
1.2.3. 레거시 오브젝트 및 라이브러리와의 호환성
2. ARM 컴파일러 사용
2.1. ARM 컴파일러 정보
2.1.1. 표준 및 호환성
2.1.2. ARM 컴파일러 호출
2.1.3. multifile 컴파일
2.1.4. 링커 피드백
2.1.5. 인라인 및 임베디드 어셈블리 언어
2.1.6. 세미호스팅
2.1.7. 라이브러리 지원
2.2. 파일 사용
2.2.1. 명명 규칙
2.2.2. 포함된 파일
2.2.3. 사전 컴파일된 헤더 파일
2.3. armcc 명령 구문
2.3.1. 명령 행 옵션
2.3.2. ARM 컴파일러 호출
2.3.3. 소스 언어 설정
2.3.4. 검색 경로 지정
2.3.5. PCH 처리 옵션
2.3.6. 선처리 프로세서 옵션 설정
2.3.7. Syntax-checking
2.3.8. C++ 언어 구성 및 오브젝트 생성
2.3.9. 출력 포맷 지정
2.3.10. 타겟 프로세서 또는 아키텍처 지정
2.3.11. 디버그 정보 생성
2.3.12. 코드 생성 제어
2.3.13. 심볼 버전 추가
2.3.14. 기본 오브젝트 확장명
2.3.15. 오브젝트 관련 정보
2.3.16. 진단 메시지
2.3.17. AAPCS 옵션 사용
3. ARM 컴파일러 참조
3.1. 컴파일러 관련 기능
3.1.1. Pragma
3.1.2. Weak 함수
3.1.3. 연산자
3.1.4. Intrinsic 함수
3.1.5. 타입 한정자
3.1.6. TLS(Thread LocalStorage)
3.1.7. 8 바이트 정렬 기능
3.2. C 및 C++ 언어 확장
3.2.1. C 및 C++ 언어 확장
3.2.2. C 언어 확장
3.2.3. C++ 언어 확장
3.3. ARM 컴파일러에 대한 GNU 확장
3.3.1. 정렬
3.3.2. 대체 키워드
3.3.3. 어셈블러 레이블
3.3.4. 특성 구문
3.3.5. Builtin 함수
3.3.6. C++ 주석
3.3.7. 케이스 범위
3.3.8. 공용체의 캐스트
3.3.9. 문자 escape
3.3.10. 복합 리터럴
3.3.11. 조건부
3.3.12. 지정된 이니셜라이저
3.3.13. 달러 부호
3.3.14. 함수 특성
3.3.15. Function names
3.3.16. 함수 프로토타입
3.3.17. Hex floats
3.3.18. Incomplete enums
3.3.19. Initializers
3.3.20. Inline
3.3.21. 지역 레이블
3.3.22. Long long
3.3.23. Lvalues
3.3.24. 포인터 산술
3.3.25. 반환 및 프레임 주소
3.3.26. 문 식
3.3.27. Subscripting struct
3.3.28. 타입 특성
3.3.29. typeof
3.3.30. 명명되지 않은 필드
3.3.31. 변수 특성
3.3.32. Variadic 매크로
3.3.33. 길이가 0인 배열
3.4. 사전 정의된 매크로
3.5. C 및 C++ 구현 정보
3.5.1. 문자 세트와 식별자
3.5.2. 기본 데이터 타입
3.5.3. 기본 데이터 타입에 대한 연산
3.5.4. 구조체, 공용체, 열거, 비트필드
3.5.5. Variadic 매크로
3.5.6. ::operator new 함수의 사용
3.5.7. 임시 배열
3.5.8. C++ 함수의 구식 C 매개변수
3.5.9. 구식 표현
3.5.10. 템플릿 인스턴스화
3.5.11. 네임스페이스
3.5.12. C++ 예외 처리
3.5.13. Extern 인라인 함수
4. 인라인 및 임베디드 어셈블러
4.1. 인라인 어셈블러
4.1.1. 인라인 어셈블러 구문
4.1.2. 인라인 어셈블리 연산의 제한
4.1.3. 가상 레지스터
4.1.4. 상수
4.1.5. 명령어 확장
4.1.6. 조건 플래그
4.1.7. 피연산자
4.1.8. 함수 호출 및 분기
4.1.9. 레이블
4.1.10. 이전 버전 ARM C/C++ 컴파일러와의 차이점
4.2. 임베디드 어셈블러
4.2.1. 임베디드 어셈블러 구문
4.2.2. 임베디드 어셈블리 연산의 제한
4.2.3. 임베디드 어셈블리 식과 C 또는 C++ 식의 차이점
4.2.4. 임베디드 어셈블리 함수의 생성
4.2.5. __cpp 키워드
4.2.6. 수동으로 오버로드 해결
4.2.7. 관련된 기본 클래스에 대한 키워드
4.2.8. 멤버 함수 클래스에 대한 키워드
4.2.9. 비정적 멤버 함수 호출
4.2.10. 이전 버전 ARM C/C++ 컴파일러와의 차이
4.3. sp, lr 또는 pc에 액세스하는 레거시 인라인 어셈블러
4.3.1. 레거시 코드에서 sp (r13), lr (r14) 및 pc (r15)액세스
4.4. 인라인 어셈블리 코드와 임베디드 어셈블리 코드의 차이점
5. C 및 C++ 라이브러리
5.1. 런타임 라이브러리 정보
5.1.1. ABI for the ARM Architecture규격 준수
5.1.2. C 및 C++ 라이브러리의 기능
5.1.3. 네임스페이스
5.1.4. 빌드 옵션 및 라이브러리 변형
5.1.5. 라이브러리 디렉토리 구조
5.1.6. VFP 지원 라이브러리 사용
5.1.7. Thumb C 라이브러리
5.2. 재진입 및 thread 안전 코드 작성
5.2.1. 재진입 및 thread 안전성 소개
5.2.2. C 라이브러리에서 정적 데이터 사용
5.2.3. __user_libspace 정적 데이터 영역
5.2.4. 멀티 thread 응용 프로그램의 잠금 관리
5.2.5. multi thread 응용 프로그램과 함께 ARM C 라이브러리사용
5.2.6. ARM C 라이브러리의 thread 안전성
5.2.7. ARM C++ 라이브러리의 thread안전성
5.3. C 라이브러리로 응용 프로그램 빌드
5.3.1. 라이브러리를 응용 프로그램과 함께 사용
5.3.2. 세미호스팅된 환경을 위한 응용 프로그램 빌드
5.3.3. 세미호스팅되지 않은 환경에 대한 응용 프로그램 빌드
5.4. C 라이브러리 없이 응용 프로그램 빌드
5.4.1. 정수 및 FP 도우미 함수
5.4.2. 베어 시스템 정수 C
5.4.3. 부동 소수점을 사용하는 베어 시스템 C
5.4.4. C 라이브러리 사용
5.4.5. 독립 실행형 C 라이브러리 함수
5.5. 새로운 실행 환경에 맞게 C 라이브러리 조정
5.5.1. C 및 C++ 프로그램의 세미호스팅 함수 사용법
5.5.2. __rt_entry
5.5.3. 프로그램에서 종료
5.5.4. __rt_exit()
5.5.5. __rt_lib_init()
5.5.6. __rt_lib_shutdown()
5.6. 정적 데이터 액세스 조정
5.7. 로케일 및 CTYPE 조정
5.7.1. 링크 타임 시 로케일 선택
5.7.2. 런타임 시 로케일 선택
5.7.3. 매크로 및 유틸리티 함수
5.7.4. _get_lc_ctype()
5.7.5. _get_lc_collate()
5.7.6. _get_lc_monetary()
5.7.7. _get_lc_numeric()
5.7.8. _get_lc_time()
5.7.9. _get_lconv()
5.7.10. localeconv()
5.7.11. setlocale()
5.7.12. _findlocale()
5.7.13. __LC_CTYPE_DEF
5.7.14. __LC_COLLATE_DEF
5.7.15. __LC_TIME_DEF
5.7.16. __LC_NUMERIC_DEF
5.7.17. __LC_MONETARY_DEF
5.7.18. __LC_INDEX_END
5.7.19. lconv 구조
5.8. 오류 신호, 오류 처리 및 프로그램 종료 조정
5.8.1. _sys_exit()
5.8.2. errno
5.8.3. __rt_errno_addr()
5.8.4. __raise()
5.8.5. __rt_raise()
5.8.6. __default_signal_handler()
5.8.7. _ttywrch()
5.8.8. __rt_fp_status_addr()
5.9. 스토리지 관리 조정
5.9.1. ARM에서 제공되는 힙 및 힙 사용함수를 사용 안 함
5.9.2. malloc에 대한 지원
5.9.3. 자체 스토리지 관리 시스템 만들기
5.9.4. __Heap_Descriptor
5.9.5. __Heap_Initialize()
5.9.6. __Heap_DescSize()
5.9.7. __Heap_ProvideMemory()
5.9.8. __Heap_Alloc()
5.9.9. __Heap_Free()
5.9.10. __Heap_Realloc()
5.9.11. __Heap_Stats()
5.9.12. __Heap_Valid()
5.9.13. __Heap_Full()
5.9.14. __Heap_Broken()
5.10. 런타임 메모리 모델 조정
5.10.1. 메모리 모델
5.10.2. 런타임 메모리 모델 제어
5.10.3. 자체 메모리 모델 작성
5.10.4. __user_initial_stackheap()
5.10.5. __user_setup_stackheap()
5.10.6. __user_heap_extend()
5.10.7. __user_heap_extent()
5.10.8. __user_stack_cleanup_space()
5.10.9. __rt_stackheap_init()
5.10.10. __rt_stack_overflow()
5.10.11. __rt_heap_extend()
5.10.12. __rt_stack_postlongjmp()
5.10.13. __user_stack_slop()
5.11. 입력/출력 함수 조정
5.11.1. 하위 수준 함수에 대한 종속성
5.11.2. 타겟 종속 입력/출력 지원 함수
5.11.3. _sys_open()
5.11.4. _sys_close()
5.11.5. _sys_read()
5.11.6. _sys_write()
5.11.7. _sys_ensure()
5.11.8. _sys_flen()
5.11.9. _sys_seek()
5.11.10. _sys_istty()
5.11.11. _sys_tmpnam()
5.11.12. _sys_command_string()
5.12. 기타 C 라이브러리 함수 조정
5.12.1. clock()
5.12.2. _clock_init()
5.12.3. time()
5.12.4. remove()
5.12.5. rename()
5.12.6. system()
5.12.7. getenv()
5.12.8. _getenv_init()
5.13. 실시간 나누기 선택
5.14. ISO 구현 정의
5.14.1. ISO C 라이브러리 구현 정의
5.14.2. 표준 C++ 라이브러리 구현 정의
5.15. C 라이브러리 확장
5.15.1. atoll()
5.15.2. strtoll()
5.15.3. strtoull()
5.15.4. printf()
5.15.5. snprintf()
5.15.6. vsnprintf()
5.15.7. lldiv()
5.15.8. llabs()
5.15.9. wcstombs()
5.15.10. alloca()
5.15.11. strlcpy()
5.15.12. strlcat()
5.15.13. _fisatty()
5.15.14. __heapstats()
5.15.15. __heapvalid()
5.16. 라이브러리 명명 규칙
5.16.1. ARM 라이브러리 배치
5.16.2. 도우미 라이브러리
5.16.3. 라이브러리 변형 식별
6. 부동 소수점 지원
6.1. 부동 소수점 지원 정보
6.2. 소프트웨어 부동 소수점 라이브러리 fplib
6.2.1. fplib(부동 소수점 라이브러리)의 기능
6.2.2. 특정 포맷의 숫자에 대한 산술
6.2.3. float, double 및 int간 변환
6.2.4. long long과 기타 숫자 포맷 간의 변환
6.2.5. 부동 소수점 비교
6.2.6. C99 함수
6.3. 부동 소수점 환경 제어
6.3.1. __ieee_status()
6.3.2. __fp_status()
6.3.3. __vfp_status()
6.3.4. Microsoft 호환 함수
6.3.5. C99 호환 함수
6.3.6. ARM 컴파일러 C99 인터페이스 확장
6.4. 수학 라이브러리 mathlib
6.4.1. Mathlib의 범위 축소
6.4.2. 부동 소수점 숫자의 타입 판단(fpclassify)
6.4.3. 숫자가 유한 값인지 판단(isfinite)
6.4.4. 숫자가 무한 값인지 판단(isinf)
6.4.5. 숫자가 NaN인지 판단(isnan)
6.4.6. 숫자가 표준 값인지 판단(isnormal)
6.4.7. 숫자의 부호 비트 반환(signbit)
6.4.8. 부호 함수 복사(copysign,copysignf)
6.4.9. 비교 매크로(isgreater,isgreaterequal, isless, islessequal, islessgreater, isunordered)
6.4.10. 역쌍곡선 함수(acosh, asinh,atanh)
6.4.11. 세제곱근(cbrt)
6.4.12. 오류 함수(erf, erfc)
6.4.13. exp(x )보다1 작음(expm1)
6.4.14. 감마 함수(gamma, gamma_r)
6.4.15. 사변 함수(hypot)
6.4.16. 제1종 베셀 함수(j0, j1, jn)
6.4.17. 감마 함수의 로그(lgamma, lgamma_r)
6.4.18. x보다 1 많은 로그(log1p)
6.4.19. IEEE 754 나머지 함수(remainder)
6.4.20. IEEE 정수로 반올림 연산(rint)
6.4.21. 숫자의 분수 부분 반환(significand)
6.4.22. 제2종 베셀 함수(y0, y1, yn)
6.4.23. 레거시, 숫자의 지수(ilogb,ilogbf, ilogbl)
6.4.24. 레거시, 숫자가 유한 값인지판단(finite)
6.4.25. 레거시, 숫자가 NaN인지 판단(isnan)
6.5. IEEE 754 산술
6.5.1. 기본 데이터 타입
6.5.2. 산술과 반올림
6.5.3. 예외
7. 세미호스팅
7.1. 세미호스팅 정보
7.1.1. 세미호스팅이란?
7.1.2. 세미호스팅 인터페이스
7.2. 세미호스팅 구현
7.2.1. RealView ARMulator ISS
7.2.2. RealView ICE
7.2.3. Multi-ICE
7.2.4. 명령어 세트 시스템 모델
7.2.5. RealMonitor
7.3. 세미호스팅 SVC
7.3.1. SYS_OPEN (0x01)
7.3.2. SYS_CLOSE (0x02)
7.3.3. SYS_WRITEC (0x03)
7.3.4. SYS_WRITE0 (0x04)
7.3.5. SYS_WRITE (0x05)
7.3.6. SYS_READ (0x06)
7.3.7. SYS_READC (0x07)
7.3.8. SYS_ISERROR (0x08)
7.3.9. SYS_ISTTY (0x09)
7.3.10. SYS_SEEK (0x0A)
7.3.11. SYS_FLEN (0x0C)
7.3.12. SYS_TMPNAM (0x0D)
7.3.13. SYS_REMOVE (0x0E)
7.3.14. SYS_RENAME (0x0F)
7.3.15. SYS_CLOCK (0x10)
7.3.16. SYS_TIME (0x11)
7.3.17. SYS_SYSTEM (0x12)
7.3.18. SYS_ERRNO (0x13)
7.3.19. SYS_GET_CMDLINE(0x15)
7.3.20. SYS_HEAPINFO (0x16)
7.3.21. SYS_ELAPSED (0x30)
7.3.22. SYS_TICKFREQ (0x31)
7.4. 디버그 에이전트 상호작용 SVC
7.4.1. angel_SWIreason_EnterSVC (0x17)
7.4.2. angel_SWIreason_ReportException (0x18)
A. via 파일 구문
A.1. via 파일 개요
A.1.1. Via 파일 평가
A.2. 구문
B. 표준 C 구현 정의
B.1. 구현 정의
B.1.1. 변환
B.1.2. 환경
B.1.3. 식별자
B.1.4. 문자
B.1.5. 정수
B.1.6. 부동 소수점
B.1.7. 배열과 포인터
B.1.8. 레지스터
B.1.9. 구조체, 공용체, 열거 및 비트 필드
B.1.10. 한정자
B.1.11. 선언자
B.1.12. 문
B.1.13. 사전 처리 지시문
B.1.14. 라이브러리 함수
C. 표준 C++ 구현 정의
C.1. 정수 변환
C.2. 순수 가상 함수의 호출
C.3. 언어 지원의 주요 기능
C.4. 표준 C++ 라이브러리 구현 정의
D. C 및 C++ 컴파일러 구현 한계
D.1. C++ ISO/IEC 표준 한계
D.2. 내부 한계
D.3. 정수의 한계
D.4. 부동 소수점 숫자의 한계
E. 이전 옵션 사용
E.1. 이전 도구 이름을 사용하여 ARM 컴파일러 호출
E.2. 이전 컴파일러 옵션을 새 릴리스로 매핑
E.2.1. RVCT의 경고 메시지
E.2.2. 추가 정보 얻기
F. NEON Intrinsic
F.1. 소개
F.2. 벡터 데이터 타입
F.2.1. 벡터 타입의 배열
F.3. intrinsic
F.3.1. 더하기
F.3.2. 곱하기
F.3.3. 빼기
F.3.4. 비교
F.3.5. 절대 차이
F.3.6. 최대/최소/합계
F.3.7. Folding maximum
F.3.8. Folding minimum
F.3.9. Reciprocal/Sqrt
F.3.10. signed 변수 기준 시프트
F.3.11. 상수 기준 시프트
F.3.12. 삽입하여 시프트
F.3.13. 단일 벡터의 로드 및 저장
F.3.14. N 요소 구조체의 로드 및 저장
F.3.15. 벡터에서 레인 추출
F.3.16. 벡터 내에 레인 설정
F.3.17. 비트 패턴에서 벡터 초기화
F.3.18. 모든 레인을 같은 값으로 설정
F.3.19. 벡터 결합
F.3.20. 벡터 분할
F.3.21. 벡터 변환
F.3.22. 테이블 조회
F.3.23. 확장된 테이블 조회 intrinsic
F.3.24. 스칼라 값이 있는 연산
F.3.25. 벡터 추출
F.3.26. 벡터 요소 반전(엔디안 스왑)
F.3.27. 기타 단일 피연산자 산술
F.3.28. 논리 연산
F.3.29. 이항 연산
F.3.30. 벡터 재해석 캐스트 연산

List of Tables

2.1. 파일 확장명에 따라 조정되는 시작 구성
2.2. 옵션을 재정의하여 조정되는 시작 구성
2.3. 구성 예
2.4. Include 파일 검색 경로
2.5. 진단 메시지의 심각도
2.6. 진단 메시지 식별
3.1. ARM 컴파일러가 인식하는 Pragma
3.2. 지원되는 GNU 확장
3.3. 사전 정의된 매크로
3.4. 현재 릴리스의 매크로 값
3.5. 문자 확장 코드
3.6. 데이터 타입의 크기와 정렬
4.1. 인라인 어셈블러와 임베디드 어셈블러의 차이점
5.1. thread로부터 안전한 함수
5.2. thread로부터 안전하지 않은 함수
5.3. 직접적 세미호스팅 SVC 종속
5.4. 간접적 세미호스팅 SVC 종속
5.5. 발표된 API 정의
5.6. C 라이브러리 콜아웃
5.7. 기본 ISO8859-1 로케일
5.8. 기본 Shift-JIS 및 UTF-8 로케일
5.9. 로케일 범주 구현
5.10. 로케일 블록의 매크로 및 함수
5.11. 트랩 및 오류 처리
5.12. 힙 함수
5.13. 메모리 모델 초기화
5.14. 메모리 모델 함수
5.15. 입력/출력 종속성
5.16. I/O 지원 함수
5.17. ISO C 라이브러리 함수
5.18. 수학 함수
5.19. 신호 함수
5.20. perror() 메시지
5.21. 표준 C++ 라이브러리 차이점
5.22. C 라이브러리 확장
6.1. 산술 루틴
6.2. 숫자 포맷 변환 루틴
6.3. long long 포맷과 관련된 변환 루틴
6.4. 부동 소수점 비교 루틴
6.5. C99 루틴
6.6. 상태어 비트 수정
6.7. 반올림 모드 제어
6.8. _controlfp 인수 매크로
6.9. FE_EX_INTYPE_MASK 피연산자 타입 플래그
6.10. FE_EX_OUTTYPE_MASK 피연산자 타입 플래그
6.11. FE_EX_FN_MASK 연산 타입 플래그
6.12. FE_EX_CMPRET_MASK 비교 타입 플래그
6.13. 비교 매크로
6.14. 예제 단정밀도 부동 소수점 값
6.15. 예제 배정밀도 부동 소수점 값
7.1. 세미호스팅 SVC
7.2. 모드 값
7.3. 하드웨어 벡터 이유 코드
7.4. 소프트웨어 이유 코드
C.1. 언어에 대한 주요 기능 지원
D.1. 구현 한계
D.2. 내부 한계
D.3. 정수 범위
D.4. 부동 소수점 한계
D.5. 기타 부동 소수점 특징
E.1. 이전 도구 이름에 기반한 시작 구성
E.2. 컴파일러 옵션의 매핑
E.3. 경고 메시지 제어
F.1. 벡터 데이터 타입

소유권 고지 사항

® 또는 ™ 표시가 있는 단어와 로고는 ARM Limited 소유의등록 상표 또는 상표입니다. 이 설명서에 언급된 기타 브랜드와 이름은 해당 소유권자의 상표일 수 있습니다.

이 설명서에 게재된 전체 또는 일부 정보 및 여기 설명된 제품은 해당 저작권 소유자의 사전 서면 승인 없이어떤 형태로도 개조되거나 복제될 수 없습니다.

이 설명서에 설명된 제품은 지속적으로 개발 및 개선될 수 있습니다. ARM은 상호 신뢰 하에 이 설명서에포함된 모든 제품 명세와 해당 사용법을 제공합니다. 그러나 ARM에서는 상품성 또는 특정 목적에의 적합성을 비롯하여그 밖의 묵시적이거나 명시적인 모든 보증을 부인합니다.

이 설명서는 제품 사용자를 지원하는 용도로만 제작된 것입니다. ARM Limited는 이 설명서 정보의사용, 정보의 오류나 누락 또는 제품의 잘못된 사용에 따른 어떠한 손실이나 손상도 책임지지 않습니다.

기밀 상태

이 설명서는 기밀 문서가 아닙니다. 이 설명서의사용, 복사 및 공개에 대한 권한은 ARM과 ARM으로부터이 설명서를 제공받은 당사자가 동의한 계약 조건에따라 라이센스 제한의 적용을 받을 수 있습니다.

제품 상태

이 설명서의 정보는 개발된 제품에 대한 최종정보입니다.

Revision History
Revision A 2002년8월 릴리스 1.2
Revision B 2003년1월 릴리스 2.0
Revision C 2003년9월 RVDS 버전 2.0용 릴리스 2.0.1
Revision D 2004년1월 RVDS 버전 2.1용 릴리스 2.1
Revision E 2004년12월 RVDS 버전 2.2용 릴리스 2.2
Revision F 2005년5월 RVDS 버전 2.2 SP1용 릴리스 2.2
Revision G 2006년3월 RVDS 버전 3.0용 릴리스 3.0
Copyright © 2002-2006 ARM Limited. All rights reserved. ARM DUI 0205GK
Non-Confidential