금요일, 7월 08, 2005

use_semi, use_no_semi Link Error

ARM compiler를 이용해 개발하다보면 use_semi, use_no_semi 어쩌구 저쩌구 하는 링크 에러 때문에 고생해본 경험들이 한번쯤 있을 것이다. 한 경력 5년을 넘어가는 시점에 고까짓 링크 에러 때문에 몇 시간씩 해매고 있는 자신을 발견하면 한심하기 짝이없다는 자괴감이 들기 시작하고 확 때려치우고 싶은 생각이 들만도 한데... 밥줄인지라 그러지는 못하고 어떻게 할까?

위와 같은 semi hosting에 관련된 링크에러를 해결하는 Tip을 정리해보고자 한다. 다음에 또 이런 링크에러가 발생하면 재빨리 이 페이지를 참고하여 번개같이 해결하도록 하자!

1. 우선 Link시 Error와 Map 파일을 생성하여 도데체 어떤 놈이 Semihosting 관련 함수를 호출하는지 찾을 수 있도록 한다.

2. ARM Compiler Guide 4-9 페이지를 참조하면 (페이지가 정확할런지 모르겠는데) semihosting 관련 함수 목록이 테이블로 제공되는데 해당 함수들을 이 잡듯이 Map, Error 파일에서 찾는다.

3. 찾았다! 그럼 해당 C 모듈로 가서 그 함수를 지우고 Source Control 시스템에서 도데체 어떤 놈이 이 코드를 Check-in해서 생고생을 시켰는지 확인하여 때려준다.

4. 특히, ARM의 Heap 메모리 매니저를 사용하는 경우 Default __user_initial_stackheap 함수를 링크하게 되는 경우 동일한 링크 에러가 발생하니 주의하도록 하고 C++의 경우 new operator를 호출하면 결국 malloc을 사용하게 된다는 것도 유념하도록 하자!

댓글 없음: