Guillermo Austin Kim

Sources

Posts

998 posts

[Arm프로세서] AAPCS: Armv7: 함수 인자의 갯수는 4개 이하로 제한

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

[리눅스커널] 리눅스 커널을 컨트리뷰션하는 6가지 방법

Guillermo Austin Kim|2021년 6월 30일

From: lkml.org/lkml/2021/6/21/342 'Qu Wenruo' 개발자께서 리눅스 커널을 컨트리뷰션하는 방법을lkml에서 공유했습니다. ... - Better kernel CI/Zero-day testing One of the better example is Intel LKP, it caught quite some bugs. (although sometimes not that reproducible) If you guys could have such facility running for not only upstream kernels but also maintainers' trees, I have no doubt it will be well received. * 현

[Arm프로세서] AAPCS: Armv7: AAPCS와 C 코드 최적화

Guillermo Austin Kim|2021년 6월 28일

이제까지 다룬 Armv7 아키텍처에서 정의된 AAPCS를 배우고 나면 자연스럽게 다음과 같은 의문이 생길 가능성이 높습니다. "AAPCS와 관련된 내용을 실무에 어떻게 활용할 수 있을까?" 이번 장의 앞 부분에서 강조했지만, Armv7 아키텍처를 구성하는 다른 내용보다도 AAPCS는 실무에 활용될 내용이 많습니다. 특히 AAPCS는 최적화를 이야기할 때 항상 논의됩니다. 사실 개발자들이 주어진 스팩이나 시나리오에 맞게 기능을 구현한 후, 어느 정도 시점이 지나면 최적화 작업을 시작하는 경우가 많습니다. 작성된 코드를 최적화해야, 맡은 기능이 제대로 동작하는 경우가 있습니다. 가끔 소리가 끊기거나 화면이 부드럽게 출력되지 않는 상황입니다. 임베디드 시스템 개발자 관점으로는 성능을 최적화하면 전

[Arm프로세서] AAPCS: Armv7: 함수를 호출할 때 쓰이는 R0 ~ R3 레지스터와 명령어 분석

Guillermo Austin Kim|2021년 6월 24일

SP 레지스터, LR 레지스터(R14)와 더불어 눈여겨봐야 할 레지스터가 R0 ~ R3 레지스터입니다.함수를 호출할 때 전달되는 인자는 R0 ~ R3 레지스터에 저장되고, 함수가 반환하는 값은 R0 레지스터로 저장되기 때문입니다. R0 ~ R3 레지스터의 역할: 함수에 전달된 인자 저장 다음 예제 코드를 보면서 함수에 인자가 전달될 때의 세부 동작을 알아봅시다. 01 0001047c :0203 int main(void)04 {05 1047c: e92d4800 push {fp, lr}06 10480: e28db004 add fp, sp, #407 10484: e24dd010 sub s

[Arm프로세서] AAPCS: Armv7: LR(R14) 링크 레지스터와 어셈블리 명령어 분석

Guillermo Austin Kim|2021년 6월 23일

SP 레지스터보다 링크 레지스터인 LR(R14)는 '함수 호출'에서 가장 중요한 역할을 수행합니다. 함수를 호출한 다음에 복귀할 주소를 LR(R14) 레지스터가 저장하기 때문입니다. 우리가 함수를 작성하면 어디선가 함수를 호출할 것이라 예상합니다. 그런데 함수를 호출한 다음에, 호출된 함수의 실행이 종료되면, 함수를 호출한 바로 아랫 부분에 있는 코드가 실행됩니다. LR 레지스터와 관련된 예제 코드 분석 이번에는 아래와 같이 main() 함수의 코드(C 코드와 어셈블리 코드로 같이 변환)을 보면서 이 내용에 대해 조금 더 알아봅시다. 01 0001047c :0203 int main(void)04 {05 1047c: e92d4800 push {fp