FC2ブログ

[LM32]elfの逆アセンブル

pmi_def.vがBlack Boxだった事に気付き、Lattice Diamondインストール場所から
必要なmoduleをコンパイルした事で、Black Boxが解消され、初期値ファイル.mem
が読み込まれた。

また、ModelSimでSegmentation Faultで進めなかったが、Veritakを使う事で
シミュレーション動いた。しかし、まだLEDチカチカ動かない。

elfを逆アセンブルして、GPIOへのライト箇所を見てみよう。

$ lm32-elf-objdump.exe -d sw/Debug/test.elf | grep -A 5 800
2bc: 78 01 80 00 mvhi r1,0x8000
2c0: 38 21 00 00 ori r1,r1,0x0
2c4: 34 02 ff ff mvi r2,-1
2c8: 58 22 00 00 sw (r1+0),r2
2cc: 78 01 80 00 mvhi r1,0x8000
2d0: 38 21 00 00 ori r1,r1,0x0
2d4: 34 02 00 00 mvi r2,0
2d8: 58 22 00 00 sw (r1+0),r2
2dc: 78 01 80 00 mvhi r1,0x8000


GPIOは0x80000000なので、ここが以下のようにFFFFと0000をライトしている箇所と思う。

#define GPIO *(volatile int *)0x80000000
GPIO = 0xffffffff;
GPIO = 0x00000000;
GPIO = 0xffffffff;
GPIO = 0x00000000;


試しにGPIOの番地を0x90000000に変えたelf見てみると確かに同じ箇所がアドレスだけ変わってる。

$ lm32-elf-objdump.exe -d ../sw/Debug/test.elf | grep -A 5 900
2bc: 78 01 90 00 mvhi r1,0x9000
2c0: 38 21 00 00 ori r1,r1,0x0
2c4: 34 02 ff ff mvi r2,-1
2c8: 58 22 00 00 sw (r1+0),r2
2cc: 78 01 90 00 mvhi r1,0x9000
2d0: 38 21 00 00 ori r1,r1,0x0
2d4: 34 02 00 00 mvi r2,0
2d8: 58 22 00 00 sw (r1+0),r2
2dc: 78 01 90 00 mvhi r1,0x9000



2bc番地のコードでGPIOへ最初のライトをすると。
よって、2bcは10進数で700、さらに.memは4番地毎にコードが書かれているから、700/4=175で
0番地から開始だから175+1で.memの176行目にあると理解出来る。

.memを見ると、確かに逆アセンブルした結果と一致する。

<.memの176行目から抜粋>
78018000
38210000
3402ffff
58220000
78018000
38210000
34020000
58220000
78018000



この番地の実行でなぜGPIOへライトされないかを探れば原因がわかるかな?
スポンサーサイト



コメントの投稿

非公開コメント

カレンダー
07 | 2021/08 | 09
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード