明日にはでっかい太陽が昇るかもしれません。

「覚悟」とは!! 暗闇の荒野に!!進むべき道を切り開く事だッ!

U-Boot (aarch64) on Qemu を動作させたい (7)

なんとか、 DDR の SDP も実装し、 board_f.c の init_sequence_f の初期化シーケンスについては抜けられるようになった。

だが、どこかでハングが発生して、プロンプトまでは到達していない。

u-boot の処理では、プログラムのリロケーションが実行されており、ブレイクポイントは張れなくなっている。

調べると、 gdb ではリロケーション後のシンボル読み込みにも対応していることがわかった。

### リロケーション後のアドレスを確認する
(gdb) p/x gd->relocaddr
$1 = 0xffcfb000

### 現在のシンボルの破棄
(gdb) symbol-file
Discard symbol table from `/path/to/u-boot-qoriq-2016.09+fslgit-r0/build_ls1046ardb_emmc/u-boot'? (y or n) y
No symbol file now.

### リロケーション後アドレスにシンボルを読み込み
(gdb) add-symbol-file u-boot 0xffcfb000
add symbol table from file "u-boot" at
        .text_addr = 0xffcfb000
(y or n) y
Reading symbols from u-boot...done.

### ブレイクポイントの貼り直し
(gdb) b ../arch/arm/lib/crt0_64.S:110
Breakpoint 6 at 0xffd00c90: file ../arch/arm/lib/crt0_64.S, line 110.

### ブレイクポイントの動作確認
(gdb) c
Continuing.

Breakpoint 6, _main () at ../arch/arm/lib/crt0_64.S:110
110             bl      c_runtime_cpu_setup             /* still call old routine */