도와주세요!!
글 수 15,339
2008.12.19 08:50:06 (*.138.139.23)
23588
임베디드 리눅스 시스템 콜 호출과정을 보다가 아래와 같은 부분에서 의문점이 있었습니다. 그 내용은 아래와 같습니다.
linux-2.6.21\arch\arm\kernel\entry-common.S 파일내에 121번째 줄에 보시면 다음과 같은 내용이 있습니다.
.align 5
ENTRY(vector_swi)
sub sp, sp, #S_FRAME_SIZE
stmia sp, {r0 - r12} @ Calling r0 - r12
add r8, sp, #S_PC
stmdb r8, {sp, lr}^ @ Calling sp, lr
mrs r8, spsr @ called from non-FIQ mode, so ok.
str lr, [sp, #S_PC] @ Save calling PC
str r8, [sp, #S_PSR] @ Save CPSR
str r0, [sp, #S_OLD_R0] @ Save OLD_R0
zero_fp
linux-2.6.21\arch\arm\kernel\asm-offsets.c 파일내에 40번째 줄에 보시면 아래와 같은 정의가 있습니다.
#define DEFINE(sym, val)
asm volatile("n->" #sym " %0 " #val : : "i" (val))
또한 같은 파일의 86번째 줄에 보시면,
DEFINE(S_FRAME_SIZE, sizeof(struct pt_regs));
이렇게 선언되어 있습니다.
그런데, 제가 질문드리는 사항은
#define DEFINE(sym, val)
asm volatile("n->" #sym " %0 " #val : : "i" (val))
이부분이
실제 어셈블리어로 풀어쓰면 어떤 모양이 되는가 입니다.
제가 생각한 형태는 이와 같습니다.
asm volatile ("n->" #S_FRAME_SIZE " %0 " #sizeof(struct pt_regs) : : "i" (sizeof(struct pt_regs))
이구 이것을 다시 풀어쓰면
->#S_FRAME_SIZE i(sizeof(struct pt_regs)) #sizeof(struct pt_regs)
라고 마지막 형태가 나오지 안을까 생각하고 있습니다.
이렇게 되는것이 맞는지 몰라 문의 드립니다. 혹시 아시는 분 있으시면 자세히 알려주시면 정말 감사하겠습니다.
linux-2.6.21\arch\arm\kernel\entry-common.S 파일내에 121번째 줄에 보시면 다음과 같은 내용이 있습니다.
.align 5
ENTRY(vector_swi)
sub sp, sp, #S_FRAME_SIZE
stmia sp, {r0 - r12} @ Calling r0 - r12
add r8, sp, #S_PC
stmdb r8, {sp, lr}^ @ Calling sp, lr
mrs r8, spsr @ called from non-FIQ mode, so ok.
str lr, [sp, #S_PC] @ Save calling PC
str r8, [sp, #S_PSR] @ Save CPSR
str r0, [sp, #S_OLD_R0] @ Save OLD_R0
zero_fp
linux-2.6.21\arch\arm\kernel\asm-offsets.c 파일내에 40번째 줄에 보시면 아래와 같은 정의가 있습니다.
#define DEFINE(sym, val)
asm volatile("n->" #sym " %0 " #val : : "i" (val))
또한 같은 파일의 86번째 줄에 보시면,
DEFINE(S_FRAME_SIZE, sizeof(struct pt_regs));
이렇게 선언되어 있습니다.
그런데, 제가 질문드리는 사항은
#define DEFINE(sym, val)
asm volatile("n->" #sym " %0 " #val : : "i" (val))
이부분이
실제 어셈블리어로 풀어쓰면 어떤 모양이 되는가 입니다.
제가 생각한 형태는 이와 같습니다.
asm volatile ("n->" #S_FRAME_SIZE " %0 " #sizeof(struct pt_regs) : : "i" (sizeof(struct pt_regs))
이구 이것을 다시 풀어쓰면
->#S_FRAME_SIZE i(sizeof(struct pt_regs)) #sizeof(struct pt_regs)
라고 마지막 형태가 나오지 안을까 생각하고 있습니다.
이렇게 되는것이 맞는지 몰라 문의 드립니다. 혹시 아시는 분 있으시면 자세히 알려주시면 정말 감사하겠습니다.