지난 스터디에서 .got 섹션에 대한 이야기가 있었습니다.
궁금해서 찾아봤는데, 아래 링크의 글이 참조가 될 것 같습니다.
http://lists.linaro.org/pipermail/linaro-toolchain/2011-April/001108.html
요는 Position Independent Code로 컴파일하기 위해 -fpic 옵션을 주고 컴파일해서 생기는 섹션이고,
dynamic linker가 사용하는데, 이는 OS에 포함되어 동작하므로 현재 그 쓰임새는 없다 이 정도 아닐까요?
head.S는 이미 pc-relative 참조하도록 코딩되어 있지요?
c 소스도 이렇게 컴파일하기 위해서 필요한 것 같습니다.'
혹시 제가 잘못 이해하고 있는 점 있으면 지적해주세요.
댓글 4
-
백창우
2013.07.29 12:19
-
백창우
2013.07.29 13:17
맞습니다. 압축 해제하는 코드를 위한 .got 섹션입니다.
./arch/arm/boot/compressed/Makefile:EXTRA_CFLAGS := -fpic -fno-builtin
-
쿨쿨
2013.07.29 12:39
arch/arm/boot/compressed/vmlinux.lds 화일을 보면 .got 섹션을 잡아주고 있고
실제로 vmlinux 에 약 0x30 정도 크기의 .got 섹션이 있습니다.
.got섹션은 보통 shared library 사용을 위한 섹션이고,
현재 OS상에서 움직이지 않는데, 이 섹션이 왜 필요할까 의문이 있었습니다.
커널이미지 압축을 해제하는 코드는 모두 relocatable 해야하는 것 아닌지 궁금합니다.
또 헷갈리네요;;;;
-
조성진
2013.07.29 18:49
머리말이 안붙어 있어서, 우리팀과 같은 고민을 하나 했네요 ㅎㅎ
벌써 답변을 주셨군요!! 일단 정리해두고, 찬찬히 읽어보도록 하겠습니다.
아 그리고.. 그때 망고보드라고 말씀드렸는데, 연구실에서 이번에 이것저것 많이 구매해서 혼란이 왔네요.
(사실 석사생이 구입해서 신경을 못썼네요^^;)
언급하셨던 Andaleboard가 맞습니다. 근데 찾아보니 망고보드도 Mango520 이 Exynos 5250을 사용하긴 하네요.
.
head.S는 PIC 코드이지만, C 부분은 PIC 코드가 아닙니다.
정확하게 어떤 말씀을 하시는지 몰라 이정도 밖에 말씀드릴게 없을것 같네요.