(toppers-users 1413) Re: JSPカーネル 1.4のC++バインディングについて

高木信尚 takagi @ oct.zaq.ne.jp
2004年 3月 20日 (土) 10:48:40 JST


LSIシステムズ 宇佐美様

C++バインディング担当の高木と申します。よろしくお願いいたします。

> ドキュメントのc++.txtを参考にしています。
> 4.開発環境の構築では、gccにパッチをあてることとなっています。
> ダウンロードしたJSPカーネルには付属していないようですが、このパッチは
> どこから入手できるのでしょうか?

GCCに対するパッチという性質上、TOPPERSプロジェクトからの公式
リリースに含めることができませんでした。
非常に申し訳ないのですが、公式には下記からダウンロードしていただ
くことになります。
http://www.oss2003.toppers-open.org:8080/

ただ、パッチを入手するだけの目的であれば、SourceForge.jpからも
ダウンロードできるようにしましたので、ご利用ください。
http://sourceforge.jp/projects/toppers-cpp/files/
あわせて、jsp/systask/cxxrt.cも差し替えていただいた方が安全です。

> また、ドキュメント中ではgccは3.2.3が例に出ていますが、3.3.3まで
> リリースされています。
> パッチの名称がgcc-3.2.3_gthr-toppers-1.patchとなっていますが、
> gccのバージョンに依存するものなのでしょうか?

対象となるGCCのバージョンを選定する時点では、3.3が最新版だったの
ですが、sh-hitachi-elfをターゲットにすると正しく構築できなかったため
に3.2.3を選定しました。(実際には3.2.3でもCygwin上で構築する場合は
若干の障害が発生しますが...)
gcc/version.cに対するパッチ(バージョン文字列)を除けば、GCCの他の
バージョン(2.x系は無理です)でも問題なく利用できると思いますが、
現時点では未確認です。

> また、sh2上でC++を使用する際の注意点等ありましたら、どんな情報でも
> 結構ですので、よろしくお願いします。

SH2に限らず、g++を使用するためには、crtbegin.oとcrtend.oを適切な順序で
リンクする必要があります。(ELF以外では少し事情が異なります)
jsp/config/sh3/Makefile.config を参考に、START_OBJS と END_OBJS の定義を
行うようにしてください。
ターゲット依存部を独自に記述する場合、C++から呼び出す可能性のある
非インライン関数には、例外指定 throw() を付けることをお勧めします。
throw() を付けることで、空間効率・速度効率ともにかなり変わってきます。

今回、GCCに施したパッチは、C++の例外処理をマルチタスク動作させる
ために必要なものですので、例外処理が必要ない場合はパッチなしでも
動作すると思います。
その場合、libstdc++のnew演算子は内部的に例外処理を使用していますので、
置き換える必要があります。これは new(nothrow) を用いた場合も同様です。

また、何かありましたらご連絡ください。

-------------------
高木信尚