[Arm프로세서] AAPCS: Armv7: 함수 인자의 갯수는 4개 이하로 제한
By Guillermo Austin Kim | 2021년 7월 5일 |
함수에 전달되는 인자는 4개 이하로 제한하는 것이 좋습니다. 함수의 인자의 갯수가 5개를 넘어가면, 프로세스의 스택 공간에 인자를 저장해 전달하기 때문입니다. 이번에는 함수에 5개의 인자를 전달하는 예제 코드를 분석하면서, 이 내용에 대해 조금 더 짚어봅시다. 01 int add_func(int a, int b, int c, int d, int e)02 {03int result = a + b + c + d + e;04printf("a:%d, b:%d, c:%d, d:%d, e:%d \n", 05a, b, c, d, e);0607return result;08 }0910 int main(void) 11 {12int a = 1, b = 2, c = 3, d = 4, e = 5; 1314
[ARMv7] 익셉션 벡터 처리 방식(vector_und 분석)
By Guillermo Austin Kim | 2020년 8월 14일 |
이번 포스트에서는 리눅스 커널에서 undefined instruction 익셉션을 처리하는 방식을 설명합니다. 리눅스 커널에서 undefined instruction 익셉션이 발생하면 ARM 프로세서는 프로그램 카운터를 0xFFFF0004 주소로 변경합니다.아래는 익셉션 벡터 테이블의 구현부인데 02번째 줄을 눈여겨봅시다. 01 NSR:FFFF0000|EA0003FF b 0xFFFF1004 ; vector_rst 02 NSR:FFFF0004|EA000465 b 0xFFFF11A0 ; vector_und03 NSR:FFFF0008|E59FFFF0 ldr pc,0xFFFF100004 NSR:FFFF000C|EA000443 b
[Arm프로세서] 하이퍼바이저를 왜 알아야 할까?
By Guillermo Austin Kim | 2022년 1월 19일 |
하이퍼바이저가 무엇인지 알고 나면 "하이퍼바이저를 왜 배워야 할까?"라는 의문이 생길 가능성이 높습니다. 사실 하이퍼바이저는 x86 기반 CPU에서 Vmware나 IBM과 같은 업체에서 50년전 부터 꾸준히 개발돼 왔습니다. 그래서 x86 CPU에서 데스트 탑이나 서버에서 개발됐던 기술인데, Armv8 아키텍처에서 하이퍼바이저를 왜 알아야 하는지 궁금할 것입니다. 하이퍼바이저를 배워야 하는 가장 큰 이유는 시스템 소프트웨어에서 하이퍼바이저 기법을 많이 활용하는 추세이기 때문입니다. 2020년 이후 소프트웨어 업계를 이끄는 기술은 AI와 Big Data와 클라우드인데, 3가지 기술들이 다양한 제품군의 생태계에 영향을 끼치고 있습니다. 하이퍼바이저는 클라우드 분야에서 활발히 적용되고 있는 아키텍처 중 하나입니
[Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - sub
By Guillermo Austin Kim | 2021년 8월 2일 |
sub는 지정된 상수만큼 감소시키는 연산을 수행하는 명령어인데, stp 명령어 전 후로 'sub sp, sp, #16'와 같이 SP 레지스터의 값을 감소시키는 명령어를 볼 수 있습니다. 이 동작은 Armv7 아키텍처에서 배운 내용과 같으며, 다음과 같이 해석할 수 있습니다. “함수 내에 선언된 지역 변수를 사용하기 위해 스택 공간을 확보한다.” sub 명령어로 SP 레지스터의 값을 변경하는 동작은 Armv7와 Armv8 아키텍처에 같이 적용되는 내용입니다. Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자