스터디 참가는 못하고 혼자 공부하는 중인데요.
trap_init() 과 아래 코드에 대해서 이해가 안갑니다. 혹시 아시는 분이 계시면 갈쳐주세요.
왜 vector_irq 에 stubs_offset (0x424) 를 더하는 건지 이해가 안갑니다.
갈켜주세용~ ㅠ,.ㅠ
1005 .globl __vectors_start
1006 __vectors_start:
1007 swi SYS_ERROR0
1008 b vector_und + stubs_offset
1009 ldr pc, .LCvswi + stubs_offset
1010 b vector_pabt + stubs_offset
1011 b vector_dabt + stubs_offset
1012 b vector_addrexcptn + stubs_offset
1013 b vector_irq + stubs_offset
1014 b vector_fiq + stubs_offset
1015
1016 .globl __vectors_end
1017 __vectors_end:
trap_init() 과 아래 코드에 대해서 이해가 안갑니다. 혹시 아시는 분이 계시면 갈쳐주세요.
왜 vector_irq 에 stubs_offset (0x424) 를 더하는 건지 이해가 안갑니다.
갈켜주세용~ ㅠ,.ㅠ
1005 .globl __vectors_start
1006 __vectors_start:
1007 swi SYS_ERROR0
1008 b vector_und + stubs_offset
1009 ldr pc, .LCvswi + stubs_offset
1010 b vector_pabt + stubs_offset
1011 b vector_dabt + stubs_offset
1012 b vector_addrexcptn + stubs_offset
1013 b vector_irq + stubs_offset
1014 b vector_fiq + stubs_offset
1015
1016 .globl __vectors_end
1017 __vectors_end:
댓글 3
-
백창우
2008.11.19 00:02
-
이수연
2008.11.19 04:46
-
이창만
2008.11.19 09:30
아항~ 답변 감사합니다.
상대주소로 점프하는 거네요..
여기에서
[0xc000f688] b vector_und + stubs_offset (-0x28 + 0x424)
여기로 복사되고
[0xffff0004] b (-0x28 + 0x424)
Exception 이 발생하면,
(stubs_end - exception handler의 offset) 주소로 Jump 하네요.
ㅎㅎ.. 덕분에 막혔던 부분이 뚫렸습니다. 감솨해요~~
.
exception vector에서 0x200 떨어진 위치에 __stubs_start가 복사 되나보네요. 즉 high vector address라 0xFFFF0000에 evt가 위치하고 각 exception handler는 0xFFFF0200 위치부터 위치하겠네요.
offset 값에 주목하지 마시고,,, exception vector과 exception handler가 나중에 해당 위치로 옮겨진다는걸 전제하고 고민해보세요. 그럼 쉽게 이해가 되실겁니다.