Linker Script부분과 종합된 질문

조회 수 1037 추천 수 0 2010.03.17 03:11:50

 

define 되어있는 부분들을 수정해서 아래와 같이 치환해두었습니다.

 

static const struct kernel_symbol __ksymtab_cpu_number __used    \
__attribute__((section("__ksymtab" sec), unused))                        \
= { (unsigned long)&cpu_number, __kstrtab_cpu_number }

 

근대, __ksymtab 이라는 희야한 Section을 발견하고, 있나 찾아봤더니 있더군요 ...

대충 의미는 Kernel SYMbol TABle 이겠죠 머 ...

 

include/asm-generic/vmlinux.lds.h 부분에서 발견했습니다.

 

 

 

#define RO_DATA(align)                                                  \
        . = ALIGN((align));                                             \
        .rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {           \
                VMLINUX_SYMBOL(__start_rodata) = .;                     \
                *(.rodata) *(.rodata.*)                                 \
                *(__vermagic)           /* Kernel version magic */      \
                *(__markers_strings)    /* Markers: strings */          \
                *(__tracepoints_strings)/* Tracepoints: strings */      \
        }                                                               \
                                                                        \
        .rodata1          : AT(ADDR(.rodata1) - LOAD_OFFSET) {          \
                *(.rodata1)                                             \
        }                                                               \
                                                                        \

                                              \
        BUG_TABLE                      \

 

(중략)

 

        TRACEDATA                                                       \
                                                                        \
        /* Kernel symbol table: Normal symbols */                       \
        __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
                VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
                *(__ksymtab)                                            \
                VMLINUX_SYMBOL(__stop___ksymtab) = .;                   \
        }                    

 

질문 사항들

 

1. 이부분에서 BUG_TABLE이라던지 TRACEDATA는 무엇을 하는 부분입니까 ?

    그리고 BUG_TABLE과 TRACEDATA는 어디에 정의되어 있는 겁니까?

 

2. AT(), ADDR() 은 무엇을 하는 것이고, 어디에 정의되어있는 알고 싶습니다.

 

3. VMLINUX_SYMBOL(__start___ksymtab) = .; <<<---- 이건 도대체 뭐하는 걸까요 ... ?

    *(__ksymtab)  <--- 이 부분은 아마도 현재 주소값을 포인팅하는 것이라고 생각됩니다 ?

    VMLINUX_SYMBOL(__stop___ksymtab) = .;

    정의를 찾아보니 아래와 같이 정의되어있습니다만 ...

    #define VMLINUX_SYMBOL(_sym_) _sym_   <<<--- 뭔가 이상한 거라고 생각되네요 ...

    또한, 위처럼 표기하면 Memory 구성이 어떻게 하는 겁니까 ?

 


백창우

2010.03.17 09:03:42
*.101.140.214

1. 질문만으로는 소스를 확인해보아야 하니 패스하겠습니다.

 

2. AT(lma)은 VMA와 LMA가 다를 경우 LMA를 명시해주는 함수입니다.

그리고 ADDR(section)은 섹션의 VMA를 반환하는 함수입니다.

이해가 안되시면 아래 메뉴얼을 참고하시기 바랍니다.

http://korea.gnu.org/manual/release/ld/ld-sjp/

 

3. __start___ksymtab의 주소를 현재 주소(.)로 하라는 의미입니다.

Memory 구성은 위 링크된 메뉴얼을 보고나면 이해하실 겁니다.

 

이상훈

2010.03.17 19:40:47
*.36.40.20

감사합니다 ^^;ㅎ

이상훈

2010.03.17 19:41:18
*.36.40.20

감사합니다 ^^;ㅎ

링커 스크립트 부분에 있었군요 ...

워낙 해매고 다녀서 태깅을 안했었는데 ... ㅎㅎ

List of Articles
번호 제목 글쓴이 날짜 조회 수
» Linker Script부분과 종합된 질문 [4] 이상훈 2010-03-17 1037
101 sbrk() 의 정확한 역할 ... [3] 이상훈 2010-03-17 1072
100 엄청난 오개념 [4] 이상훈 2010-03-16 986
99 커널 스터디 관련 질문입니다. [1] 이준명 2010-03-16 965
98 용어적인 질문 [2] 이상훈 2010-03-16 938
97 spin_lock , zone, cgroup 에 관한질문.. [4] 강진성 2010-03-13 1088
96 환경 변수 설정관련 질문 ... [3] 이상훈 2010-03-11 969
95 네트워크 인터페이스 할당 변경에 관련하여 문의드립니다. [3] 송인재 2010-03-10 1025
94 percpu_read 와 __attribute__(__section__) [5] 이상훈 2010-03-08 1123
93 cpu_number 정의가 어디있는건가요 ? [2] 이상훈 2010-03-07 1002
92 add_preempt_count() 에 대해서 ... [3] 이상훈 2010-03-07 1044
91 기계어 질문 [7] 이상훈 2010-03-06 1072
90 스터디 시간 좀 늦춰주실 수 없나요 ? [3] 이상훈 2010-03-06 956
89 백창우님 질문입니다 [4] 이상훈 2010-03-06 1103
88 __ASSEMBLY__ 의 의미는 무엇인가요 ? [2] 이상훈 2010-03-05 1122
87 신기한 것 발견 ... [2] 이상훈 2010-03-03 1231
86 제일 궁금한부분입니다 ㅡ_ㅡ;;; [2] 이상훈 2010-03-03 999
85 질문입니다 [2] 이상훈 2010-03-02 1019
84 $(TOPDIR)/Makefile 질문 [4] 이상훈 2010-03-02 1044
83 모듈 단위로 분석하는 것의 한계점 [5] Linux 2010-02-28 1053



XE Login