(toppers-users 377) Re: hardware-init-hook の呼び出しについて

Takayuki WAKABAYASHI takayuki @ ertl.ics.tut.ac.jp
2002年 4月 7日 (日) 23:17:36 JST


豊橋技術科学大学の若林です。

"Susumu Kawai" <shounan @ ma.neweb.ne.jp>さんは書きました:
 > スタートアップモジュール(start.S)にある以下の部分で"hardware_init_hook"が
 > "0"に設定されています。
 > 「PROVIDE(hardware_init_hook = 0);」
 > 実際にサンプルを使用してロードモジュールを生成しターゲットで実行してみるとこ
 > の設定でいくと"hardware_init_hook"を呼び出さないはずだと思いますが何故か"0"
 > 以外の値が設定されており"hardware_init_hook"が呼び出されてしまいます。
 > 「PROVIDE(hardware_init_hook = 0);」以外の設定が他に必要なのでしょうか?

PROVIDE(hardware_init_hook = 0); という記述はリンクスクリプトの中にあると
思います。このPROVIDEというのは、詳細はinfoを参照されるとよいと思いますが、
「参照されているが "定義されていない" シンボルに与える値を設定する」と
いうものです。そのため、どこかにhardware_init_hookが定義されていた場合、
そちらの定義が優先されてしまいますので、スタートアップはフックを実行します。

ARM7TDMIですと、システムとしてevaluator_7tが設定されていると思います。
この場合、evaluator_7t用のターゲット依存部(sys_support.S)の中に
hardware_init_hookがありますので、このラベルを削除するか、名前を変えるか、
関数を削除すればスタートアップ時に実行されることはなくなります。

ちなみにPROVIDE(...);という定義は、hardware_init_hookが未定義のときに、
gccが"未定義シンボルの参照"エラーを出力するのを抑えるためです。

//-------------------------------------------------
//Takayuki WAKABAYASHI (わかばやし たかゆき)
//  mailto: takayuki @ ertl.ics.tut.ac.jp
//-------------------------------------------------
//豊橋技術科学大学 工学研究科 情報工学専攻
//  組込みリアルタイムシステム研究室
//    Embedded and realtime system laboratory
//      Dept. of information and computer science
//        Toyohashi univ. of technology