일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- kakao
- 농구
- nba
- 카카오택시
- 팬텍
- Google Now
- 안드로이드
- 안드로이드 앱
- Google 피트니스
- 안드로이드 어플
- 영화리뷰
- Windows
- 크롬
- 구글
- 아이폰
- 네이버
- Linux
- 보안
- 다음카카오
- 안드로이드 어플 추천
- It
- 구글 나우
- 베가아이언2
- 페이스북
- 양반탈 이야기
- 카카오톡
- 인스타그램
- 카카오
- OTP
- Today
- Total
아마추어 팀블로그
8 byte alignment C코드 본문
AAPCS(Procedure Call Standard for the ARM Architecture)란 것이 있습니다. ARM 아키텍처에서의 호출규약이라고 부를까요? 이 용어의 정의는 ARM의 inforcenter에서 제공하는 "Procedure Call Standard for the ARM Architecture(문서번호 IHI0042F)"에 잘 나와 있습니다. 이 문서 자체가 호출규약을 명시하고 있기 때문에 용어 정리는 필수지요.
The AAPCS defines how subroutines can be separately written, separately compiled, and separately assembled to work together. It describes a contract between a calling routine and a called routine. > 서브루틴들을 따로 작성, 컴파일하고 오브젝트 파일을 만들어 함께 동작시키기 위한 방법을 정의하며, 콜러와 콜리 간의 규약을 규정한다, 정도로 번역할 수 있겠네요.
Eight-byte stack alignment는 AAPCS의 요구사항입니다. 함수는 스택을 8바이트로 Align되게 관리를 해야한다는 것이죠. 즉 SP(Stack Pointer; 스택 포인터) 값을 8의 배수로 두어야 한다는 뜻입니다.
아래는 어떤 주소값(__ZI_LIMIT__)이 주어졌을 때 이를 8 바이트 align시킨 주소값(__HEAP_BASE__)을 얻어내는 C 코드입니다. 풀어 말하자면, ZI Limit 값을 통해 heap base를 얻어내는 과정으로, C Startup 코드에서 heap의 시작점을 결정할 때 사용됩니다.
unsigned char __ZI_LIMIT__= 0x????????;
__HEAP_BASE__ = ((unsigned int)&__ZI_LIMiT__ + 7) & ~7;