[ARM프로세서] 익셉션(Exception) 관련 코드는 어디에 구현됐을까?
By Guillermo Austin Kim | 2020년 10월 8일 |
많은 소프트웨어 개발자는 예제 코드를 보면서 새로운 기능이나 개념을 배우는데, 이는 가장 효율적인 학습 방법 중 하나입니다. 대부분 코드의 구현부는 물론이고 사용 예시까지 분석합니다. 그런데 여러분들은 이전 절에서 설명된 익셉션의 구현 원리를 읽은 후 익셉션과 관련된 코드의 구현부가 무엇인지 의문을 품어 본 적이 있나요? 이번 절에서는 익셉션과 관련된 코드의 구현부에 대해서 살펴보겠습니다. 익셉션과 관련된 코드는 무엇일까 익셉션과 같은 ARM의 주요 기능을 공부할 때, 스스로 다음과 같이 질문을 던지면서 분석하면 더 많은 내용을 얻을 수 있습니다. ❑ 첫째, 해당 기능은 왜 알아야 할까? ❑ 둘째, 해당 기능은 어떤 코드로 구현됐을까? 다음 그림을 보면서 익셉션
[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
[Arm프로세서][트러스트존] Armv8: 시큐어 월드에서 Trusted OS는 어떻게 구동할까?
By Guillermo Austin Kim | 2022년 1월 9일 |
논 시큐어 월드에는 우리가 알고 있는 운영체제의 커널이 구동됩니다. 예를 들어 리눅스 커널이나 윈도우 커널이 논 시큐어 월드에서 실행됩니다. 그렇다면 시큐어 월드에는 어떤 소프트웨어가 구동될까요? 바로 RTOS가 실행됩니다. 여기서 기억해야 할 사실은 트러스트 존의 RTOS는 독자적으로 스케줄링하면서 시스템을 제어하는게 아니라, 논 시큐어 월드에 의존적으로 동작한다는 점입니다. 대부분의 경우 논 시큐어 월드에서 실행 중인 커널에서 smc(Secure Monitor Call) 명령어를 실행하면, 이에 반응해 시큐어 월드의 RTOS는 동작하게 됩니다. 쉽게 설명드리면 시큐어 월드의 RTOS는 마치 시스템 콜 핸들러와 유사하게 동작한다고 보면 됩니다. 시스템 콜 핸들러는 스스로 실행하지 않습니다. 유저 공간
[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