Entry Point에 대해 질문이 있습니다. (임베디드 초보입니다)
*개발환경: OS: Cobuntu 11.10, CrossCompiler: Sourcery_G++_Lite
-------------------------------------------------
1 #include
2
3 int main(void)
4 {
5 printf("Hello Mango64\n");
6
7 return 0;
8 }
-------------------------------------------------
ARM11기반의 보드를 사용하고 있습니다.
안드로이드1.5를 올린상태이며
위와같이 간단한 출력 프로그램을 작성하고, 크로스 컴파일러를 통해 컴파일하였습니다.
단 링커 옵션에서 '-emain'으로 Entry Point를 main으로 지정한 경우
Hello Mango64까지 출력한후 'Segmentation fault'가 납니다.
-emain 옵션을 주지 않으면 출력이 잘되구요.
그런데 이런 간단한 출력프로그램을 돌릴때 바로 Entry Point를 main으로 두어도
잘 동작할거 같은데 왜 segmentation 오류가나는지 알고 싶습니다.
또한 -e로 Entrypoint를 지정하지 않으면
어떤책에서는 _start가 Entry symbol이다하고, 어떤책에서는 __main이나 _main이 EntryPoint라고
하는데.. 어떤게 맞는건지 모르겠네요 ㅎ 확인할수있는 방법도 없을지 궁금합니다.
윽.. 글이 3개나 올라갔네요.. 이거 삭제방법
윽.. 글이 3개나 올라갔네요.. 이거 삭제방법 없나요? ㅠ
링커 스크립트에 따라
링커 스크립트에 따라 다릅니다.
arm-none-linux-gnueabi-ld --verbose 로 출력되는 디폴트 링커 스크립트의 ENTRY()를 확인하시면 엔트리포인트를 확인하실 수 있습니다.
main함수로 진입하기 전에 필요한 작업들을 c startup code에서 해주기 때문에 엔트리포인트를 임의로 변경하시면 data영역이나 bss영역이 제대로 초기화되지 않을 가능성이 있고 이에 따라 예상치 못한 오작동이 있을 수 있으니 엔트리포인트를 임의로 변경하지 않으시는 것이 좋을 것 같습니다.
아 그렇군요. 감사드립니다. ㅎ 그렇다면 혹시 c
아 그렇군요. 감사드립니다. ㅎ
그렇다면 혹시 c startup code를 볼수는 없는건가요? ㅎ
댓글 달기