지난주 gcc 스터디 정리

이수연 2008.11.27 14:59 조회 수 : 12449 추천:7


지난주 스터디한 내용은 대략 다음과 같습니다.

1. gcc 컴파일 전체 과정

source code -> generic -> gimple -> rtl -> machine language

컴파일 중간 단계의 코드들을 살펴볼 수 있는 gcc 옵션으로 -fdump-tree-all 등과
어셈파일을 생성해 주는 -S 옵션을 주어서 간단한 테스트 코드를 직접 작성해 보면 이해가
빠를듯 합니다.

나머지 gcc 옵션은 gcc 소스에 포함되어 있는 문서를 보거나 첨부된 complete reference gcc

문서를 보시면 될 듯합니다.

2. 최적화
GCC internal 문서의 10장과 11장에 해당하는 GIMPLE 트리의 최적화와 loop 최적화를
공부했는데 어렵군요... 누가 강의좀 해주시면 좋겠네여... ㅇㅁㅇ;;;

3. 공유 라이브러리와 실행파일 포맷
리눅스에서 실행파일을 실행하는 과정을 잠시 논의했던 것 같습니다. 더불어 .a 라이브러리와
.so 라이브러리에 대한 차이도 얘기를 하며 gcc 옵션중 -static 옵션을 준경우와 그렇지 않은경
우의 실행에서의 차이점을 얘기했습니다.

예전 박은병님께서 올리신 질문을 참조하면 좋을것 같습니다.

http://www.iamroot.org/bbs/view.php?id=qna&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=35

4. 소스분석

main() -> toplev_main() -> general_init() -> hex_init()
                                                                      init_gcc()

소스는 얼마 나가지 못했군요...

main함수에서는 단순히 toplev_main 함수를 호출하고 끝나네여

toplev_main 함수에서는 전체과정을 수행하고 리턴하는 코드까지 대략 함수 3-4개만

달랑있는데  대략 앞으로 1년여를 이 함수 3개를 분석하는데 써야한다는 말이군여 ㅡ.ㅡ;;;;;

init_gcc 함수에서는 먼저 프로그램 이름 ( "gcc" 가 돼겠네여 ) 을 따로 저장하는거 같은데

왜 쓸데없이 저장하는지는 모르겠네여...

소스에 써있는 16진 문자 0-9 , a-f 를 빠르게 변환하기 위해 hex_init() 함수에서는

_hex_value[] 테이블을 만드네요

init_gcc() 함수에서는 페이지를 할당 받은후 /dev/zero 를 통해서 페이지를 비우는 부분까지

분석을 하고 끝났네요.. 이번주는 이부분 부터 분석을 하면 될듯 합니다.

지난주 스터디에서 앞으로는 소스분석과 알고리즘 이해를 위한 문서분석을 함께 진행하기로

했습니다. 두번째 첨부하는 문서는 백창우 님께서 추천하신 호랑이책입니다. C 버젼은 찾기가

힘드네여.. 도서관에서 C 버젼과 java 버젼을 비교해 봤는데 대략적인 내용은 동일한듯 해서

java 버젼으로 봐도 크게 무리는 없을듯 합니다.
XE Login