/var/log/messages

May 8, 2014 - 1 minute read - Comments - programming

ベクタテーブル

_start の直後で 0x0 番地にコピィされる割り込みベクタテーブルの記述があって、実行する時の挙動がイメージできてなかったんですが、よくよく見れば簡単な話で

_start:
        ldr    pc, reset_handler
        ldr    pc, undefined_handler
        ldr    pc, swi_handler
        ldr    pc, prefetch_handler
        ldr    pc, data_handler
        ldr    pc, unused_handler
        ldr    pc, irq_handler
        ldr    pc, fiq_handler

reset_handler:      .word reset
undefined_handler:  .word hang
swi_handler:        .word hang
prefetch_handler:   .word hang
data_handler:       .word hang
unused_handler:     .word hang
irq_handler:        .word irq
fiq_handler:        .word irq

reset:

ってなってた時に最初の ldr で reset なアドレスが pc に代入されてそのまま jmp になっちゃうんですね。頭いいなぁ。