label 과 SYMBOL_NAME 매크로...질문입니다.
글쓴이: hwandori / 작성시간: 수, 2004/10/13 - 11:24오후
어셈블리어를 잘몰라서일까요..개념을 잘못잡고 있는거 같아 질문드립니다.
커널소스의 arch/i386/kernel/head.S 에 보면
.globl SYMBOL_NAME(idt) .globl SYMBOL_NAME(gdt) ALIGN .word 0 idt_descr: .word IDT_ENTRIES*8-1 # idt contains 256 entries SYMBOL_NAME(idt): .long SYMBOL_NAME(idt_table)
그리고 include/asm/desc.h를 보면
extern struct desc_struct *idt, *gdt; struct Xgt_desc_struct { unsigned short size; unsigned long address __attribute__((packed)); }; #define idt_descr (*(struct Xgt_desc_struct *)((char *)&idt - 2))
이런코드가 있습니다.
질문은 어셈블리어에서 Label은 Location counter의 주소가 아닌가요?
그럼
idt_descr:
.word IDT_ENTRIES*8-1 # idt contains 256 entries
SYMBOL_NAME(idt):
.long SYMBOL_NAME(idt_table)
에서 idt자체가 idt_table의 주소를 가지고 있는 곳의 위치카운터이기때문에
extern struct desc_struct *idt
이 부분이 extern struct desc_struct **idt 이런식으로 되야할것 같은데
이해가 잘 안갑니다.
또한 SYMBOL_NAME은
include/linux/linkage.h에
#define SYMBOL_NAME(X) X
이렇게 되어있고 gcc -E 옵션으로 프리프로세싱해보니 SYMBOL_NAME
매크로를 안한것과 같은 결과 소스가 나오는데 왜 하는것인지 궁금합니다.
기초가 중요하다는 사실을 여실히 느끼고 있는 중입니다. :)
--------------
프로그래밍QA에 잘못올렸다가 옮겨왔어요..^^
Forums:
댓글 달기