[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(toppers-users 3212) Re: GCCでリンクエラー (hardware_init_hook、software_init_hook)



 あすかさま
 
 ありがとうございます。grepの対象に*.ldを加えれば見つかったんですね。
 
 これを使えば、関数や変数を固定番地で割り当てることが可能になりますね。
 リンカスクリプトで割り付けた番地も利用できるのですね。
SECTIONS
{
  .text :
    {
      *(.text)
      _etext = .;
      PROVIDE(etext = .);
    }
... }
}
 これが出来るなら、制限付コンパイラの場合はバッファ割り当てなど便利に使えそうです。
 感謝、感激!
 
以上

2010年6月4日15:47 choronos <asuka.choronos@gmail.com>:
あすかと申します。

> Linkのオプションの秘密か

ご推測のとおり、リンク設定で行っているはずです。
厳密には、リンカスクリプトファイルに

PROVIDE(_hardware_init_hook = 0);
PROVIDE(_software_init_hook = 0);
#アンダースコアは環境依存なので適宜置き換えが必要です

と記述すると、undefinedであればNULL(=0)にリンカが
割付けを行うようになっています。
定義がある場合は、そちらの実アドレスでリンクされます。

GNU環境のJSP、ASPに入っている*.ldファイルを
ご参照いただければ実際の記載が見つかると思います。

以上、よろしくお願いします。


(2010/06/04 15:37), koizumi yoshiyuki wrote:
>   こいさんです
>
>   今更聞けない問題に遭遇しています。少々恥ずかしいですが、どなたかお教え願えませんでしょうか?
>
>   GCCを使っていますが、makeでbuildはしていません、とあるIDEを使っています。そこではLinkでエラーが出ます。
>
> undefined reference to `software_init_hook'
> undefined reference to `hardware_init_hook'
>
> start.Sではsoftware_init_hook、hardware_init_hook'がNULLなら呼び出さないようにしています。ソースコードをgrepしましたが、software_init_hook、hardware_init_hook'は見つかりません。私の認識ではundefinedで正しいと思うのですが、TOPPERSのBuildではなぜ2つの関数名はundefinedではなくNULLとなるのでしょうか。Linkのオプションの秘密か、makeにがありそうです。
>
>   とりあえずは、voif software_init_hook(void){}で逃げていますが、聞くは一時の恥。
>
>   よろしくお願いします。
>
>   追伸
>
> 以上