프로그래머가 코딩을 처음 배울 때, 아주아주 처음 배우면 먼저 해보는 Helloworld!.
#include<stdio.h> int main(int argc, char **argv) { printf("Hello World\n"); return 0; } |
이 코드를 작성해서 터미널에
gcc helloworld.c -o helloworld 라고 명령어를 치거나, Visual-Studio를 통해서 Run 버튼을 누르면, 결과창에 나타나는 것은 Hello World라는 한 줄이다.
왜 인지는 모르지만, main 이라는 함수를 실행하는거 보니, 이 프로그램은 main 이라는 함수가 시작지점 즉, Entry-point 인가 보다 하면서 공부를 시작했던게 기억난다. 시간이 지나고 보니 내가 했던 생각은 맞기도, 틀리기도 한 내용이다. 엄밀히 말하면 틀리기 보다는 똑똑한 운영체제가 나 대신에 Entry-point를 main함수로 지정해 준 것이라는걸(운영체제가 main함수를 엔트리 포인트로 하고 있는, 디폴트 링커스크립트를 제공해준다는 걸) 나중에 머리가 조금 크고 나니 알게 되었다.
프로그램을 작성하려면 내 코드를 기계어로 바꿔주는 컴파일러에게 "내가 만든 이 코드들을 여기부터 시작해야되!" 라는 힌트를 제공해주어야 한다. 사실, Entry-point 말고도 여러가지 힌트들을 제공해주어야 하는데 링커스크립트를 통해서 제공해준다.
바로 위 문장을 보고나면 아래와 같은 질문들이 생긴다.
- 링커스크립트(Linker-Script)가 뭔대?!
- 어떠한 힌트들을 제공해 주는데?
- Entry-point에 대한 힌트는 어떻게 제공하는데?
<linux/arch/arm64/kernel/vmlinux.lds.S>
이렇게 _text라는 심볼을 리눅스의 처음 시작 지점으로 할게! 라고 컴파일러에게 정보를 제공해주고 있다.
이처럼 링커스크립트에서 ENTRY라는 지시어는 프로그램의 시작지점 즉 엔트리 포인트를 지정해주는 지시어! 이다.
'전공공부 > ARM' 카테고리의 다른 글
ARM Relocations (adrp) (0) | 2020.10.18 |
---|---|
[ARM] Alignment가 무엇인가?! (0) | 2019.02.17 |
GICv3 LPI, ITS (0) | 2018.07.18 |
interrupt status - level sensitive (0) | 2018.07.17 |
ARMv8 HPPIR/IAR, AHPPIR/AIAR (0) | 2018.03.27 |