아마추어 팀블로그

8 byte alignment C코드 본문

IT/IT 개발

8 byte alignment C코드

탓치 2016. 1. 13. 14:42

​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;


Comments