지난주 스터디한 내용은 대략 다음과 같습니다.
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 버젼으로 봐도 크게 무리는 없을듯 합니다.
댓글 5
-
백창우
2008.11.28 08:05
-
백창우
2008.11.28 08:11
은병씨와 정우씨도 다 같은 공범입니다. ㅡ_ㅡ -
박은병
2008.11.28 09:00
네..ㅋㅋ
현재로서는 감을 거의 못잡고 있는 상태입니다.
어플리케이션 주제에 엄청 방대해 보이더라구요..ㅋㅋ
커널은 소스분석 -> 삽질 -> 이해 가 가능했는데..
요놈은 어떻게 접근해야될지 감이 안잡히네염.ㅋ
1. 알고리즘 이해(문서,책) -> 소스분석 -> 삽질 -> 잘모름
2. 소스분석 -> 삽질 -> 알고리즘 이해(문서,책) -> 잘모름
2주째 1번과 2번을 번갈아가며 고뇌하고 있습니다.하하.. -
송선희
2008.11.28 20:24
안녕하세요~
저는 내일부터 처음 스터디에 가게 되는데;;
스터디 내용을 읽어 보니 아직 이해가 잘~~ ㅡ,ㅡ
내일 어떤것을 준비해 가면 될까요/?
노트와 필기류 정도면 될까요?
그리고 제가 내일 아침에 약속이 있어서 좀 늦을 수도 있어요.
그렇게 많이 늦지는 않을 테지만 내일 연락을 드리겠습니다. ^_^ -
이수연
2008.11.28 21:50
백창우님께서 저에게 원한을 품고 계시군여... 기억할께여 으흐흐 @ㅁ@;;
스터디 준비물은 사실 노트북이 가장 좋고요... 메모하시는 것도 좋습니다.
소스 분석시에 참고할 문서는 GCC internal 문서와 저 위에 두번째 첨부파
일 modern compiler implementation in C ( JAVA) 정도가 돼겠네요..
그래도 역시나 노트북 하나 가져오시느니만 못하겠지염...
.
그런 의미에서 최적화 알고리즘이 중요하긴 하지만 분석하면서 최적화 알고리즘을 하나씩 다 분석한다면 너무 많은 시간이 걸릴것 같습니다. GCC 4.x대는 컴파일 단계를 약 100 단계 이상을 거치는데 사용되는 최적화 종류는 약 20가지 내외 입니다.
이 20가지를 분석하는것도 중요하지만 전체적인 흐름을 정리하는 것이 더 중요할것 같습니다. 그리고 GIMPLE 같은 경우에는 그다지 쓸일이 없겠지만 RTL은 포팅을 하는데 있어 중요합니다.
때문에 RTL도 정리가 되면 여러모로 도움이 될겁니다. 그러니 이번에는 꼭꼭 전체 흐름과 RTL 정도는 정리해주세요.
네. 수연씨?