AAPCS 소개

AAPCS(Procedure Call Standard for ARM Architecture)는 ARM 아키텍처에서 사용되는 응용 프로그램 바이너리 인터페이스이다. ARM 아키텍처에 대한 전체 ABI 사양의 일부를 구성한다.

설계 목표

AAPCS의 설계 목표는 다음과 같다.

  • Thumb-state 와 Arm-state 동일 지원
  • Thumb-state 와 Arm-state 간 연동 지원
  • Arm 아키텍처의 고성능 구현에서 효율적인 실행 지원
  • 필수 요구사항과 구현 재량권을 명확하게 구분
  • ATPCS와의 바이너리 비호환성 최소화

함수 호출 규칙

  • AAPCS는 함수 호출에 대한 규칙을 정의한다. 이 규칙은 매개변수 전달, 반환 값 처리, 레지스터 사용 등을 다룬다. 함수 호출 시 매개변수는 레지스터와 스택을 통해 전달되며, 반환 값은 R0 레지스터를 통해 전달된다. 또한, 호출된 함수는 호출한 함수가 사용한 레지스터의 값을 유지해야 한다.

데이터 유형 정렬

  • AAPCS는 C 및 C++의 Plain Old Data(POD) 유형의 크기, 정렬 및 레이아웃을 정의한다. 이는 기본 데이터 유형, 구조체, 열거형, 비트 필드 유형, C++의 특정 유형(참조 및 멤버 포인터) 등을 포함한다. 데이터 유형의 정렬은 메모리 접근의 효율성과 이식성을 보장하기 위해 중요하다.

스택 사용 및 관리

  • AAPCS는 런타임 스택의 사용과 관리에 대한 규칙을 정의한다. 스택은 지역 변수, 함수 호출 시의 스택 프레임 등을 저장하는 데 사용된다. AAPCS는 스택 프레임의 정렬 및 크기를 명시하고, 함수 호출 전후에 스택의 일관성을 유지해야 함을 요구한다.

매개변수 전달 방식

  • AAPCS는 매개변수 전달 방식을 정의한다. 매개변수는 레지스터와 스택을 통해 전달되는데, 처음 네 개의 매개변수는 R0부터 R3 레지스터를 통해 전달되며, 나머지 매개변수는 스택을 통해 전달된다. 매개변수의 전달 순서는 함수 호출 규칙에 따라 결정된다.

AAPCS는 ARM 아키텍처 응용 프로그램 개발을 위한 중요한 표준 인터페이스히다. 함수 호출 규칙, 데이터 유형 정렬, 스택 사용 및 관리, 매개변수 전달 방식 등의 규칙을 준수하여 일관성 있는 프로그래밍을 지원한다. 이를 통해 ARM 기반 시스템에서 응용 프로그램을 개발하고 실행할 때 이식성과 호환성을 보장하며, 효율적인 코드를 작성할 수 있도록 한다.

참고

AAPCS 소개
AAPCS와 EABI의 관계
AAPCS: 데이터 타입과 정렬
AAPCS: 레지스터 사용
AAPCS: 프로세스 메모리 및 스택
AAPCS: Subroutine Calls(서브루틴 호출)

답글 남기기