状況整理

まとめないと、自分ですら何が起きているのか分からなくなってきました。

初期化値を代入しない変数の作り方

変数を、".bss."で始まる名前のセクションに配置すると、そのセクションはNOBITSになるため、初期値をロードしません。この方法でメモリ・マップド・レジスタに値をロードせずにすみます。
bfin-elf-gdbではこの方法でうまくいきます。

U-BOOTの問題

U-BOOTのBOOTELFコマンドはELFのNOBITSであるセクションを問答無用に0にします。
これについては近いうちにU-BOOTのMLに意見投稿するつもりですが、どうころんでも近いうちの解決はないでしょう。

プログラムヘッダのLOADフラグを切る

プログラムヘッダを新規に定義することでロードしないセグメントを作ることが出きるはずですが、gdbへのロード時にエラーが発生します。そもそも、LDスクリプトが不必要に複雑化しますのでU-BOOTの間違った仕様を回避するためにわざわざここまでしたくありません。

現実的な回避策はobjcopy -R

objcopy -R コマンドを使うと、特定のセクションを削除できます。これでgdbへのロードもU-BOOTもうまくいきます。ただし、Makefileが汚れます。Blackfinだけで使う分には問題ないのですが。

Eclipse/gdbで大域変数を見ることができない。

Variable Viewに大域変数を登録すると、必ずエラーがおきます。

まさに問題山積

まぁ、文句はいえませんな。粛々と解決策を探るだけ。しかし、世の組み込みgdbユーザーは、メモリ・マップド・レジスタをどうやってみているのでしょう。