%includes; ]> &header;

2000 年 9 月 15 日: Andrew Gallatin 氏および Sean O'Connell 氏が IBM 社の JDK 1.3 に取り組んでいます. これを FreeBSD で動かすには FreeBSD のソースに, いくつかの修正パッチを適用する必要があります. 修正パッチは, 各バージョン向けに以下のところで提供されています.
4.0-RELEASE
4.0-STABLE
-CURRENT (SMPng 導入前)

Drew 氏のメッセージより引用:

ついに IBM jdk 1.3 を動作させることができました.  まだ十分なテストを
行なっていませんが, AWT 関連はきちんと動いているようです.

SMPng が導入される前の -current に対応した, 新しい修正パッチセットです.
この修正パッチセットは, 以下のような変更を行ないます.

- MINSIGSTKSZ を 8192 から 2048 へ変更.
- linux_rt_sendsig() および linux_rt_sigreturn() を実装.
- linux_rt_sigreturn() 用にユーザランドの sigtramp コードを実装.
- linux_rt_sigreturn() での膨大なカットアンドペーストを避け, 
  linux_sigaltstack にあったバグを修正するために
  linux_to_bsd_sigaltstack および bsd_to_linux_sigaltstack() を実装.
  これにより, Sun の 1.3 JDK で見られた "Java HotSpot(TM) Client VM warning:
  cannot uninstall alt signal stack" という不具合も修正されます.
- LINUX_MAP_GROWSDOWN mmaps 用の MAP_STACK フラグを MAP_ANON に変更.
  これは動作させるために必要な最後のステップでした.
  linux スレッドの自動成長スタック (autogrowing linux thread stack) は
  明らかに問題を抱えているのですが, VM グル (訳注: guru(導師, 達人)級の
  人のこと) の方, これについて議論しませんか?  

修正パッチはこちら: http://www.cs.duke.edu/~gallatin/linux_sa_siginfo/diff

[*]この「問題」とは, メインプロセスのスタックにおいてスタック部分かどうかを
vm_map_growstack() を使った実験的な方法で判別しているという点です.
現在, わたしたちが用いている方法は以下のとおりです.

        is_procstack = addr >= (vm_offset_t)vm->vm_maxsaddr;

ここで vm->vm_maxsaddr は, exec_new_vmspace() から得られる値です.
        vmspace->vm_maxsaddr = (char *)USRSTACK - MAXSSIZ; 

IBM 社の JDK におけるメインスレッドは, まずスタックサイズを
rlim_cur=2040*1024 まで減らします.  そして, そのスレッド用のスタックを
p->p_rlimit[RLIMIT_STACK].rlim_cur で定義されるメインプロセスの
スタックの底より小さく, vm_maxsaddr より大きいアドレスに生成します.
スレッドがこの領域を大きくしなければならないようなアクセスを初めて
行なった時, 動作がおかしくなってしまうのです.

Sean 氏のメールからの引用:

わたしは  IBM Java SDK を動作させた Andrew Gallatin 氏の成果を
単純 (Quick&Dirty) に MFC しました (訳注: Merge From Current;
一般的に, -CURRENT から -STABLE へのコードの取り込みを指します).
appletviewer でデモプログラムのうちの一つを実行することができ,
それはきちんと動作しましたが, それ以上のことは良く分かりません.

修正パッチはすべて, /usr/src を起点としたもの (すべて sys にあるので,
/ と考えることもできます) になっています.

修正パッチの大部分は /sys/i386/linux にあるファイルに対するものです.
修正パッチを適用して /sys/modules/linux にカレントディレクトリを
変更し, make; kldunload linux; make install; kldload linux と順に
入力してください.

修正パッチには sys/sys/signal.h の MINSIGSTKSZ を 2048 にする修正も
含まれています.  これを有効にするには, カーネルの再構築が必要です.

2000 年 7 月 18 日: Ernst de Haan 氏は Sun の Linux JDK 1.3.0b9 を 4.0-STABLE で動作させることに成功しました. .java_wrapper ファイルは ここにおかれています (これを .java_wrapper という名前に変更することを忘れないでください).

Ernst 氏のメールより引用:

もう一つだけヒント: jre/lib/jvm.cfg を変更して, 先頭に最後の行を
入れてみてください.  そうすると, 以下のようになるはずです.

   -classic
   -hotspot
   -server

ただし, Swing アプリケーションを実行すると必ず警告が表示されます.

   Warning: Cannot convert string "MetaCtrl<Key>Insert" to type VirtualBinding 

Ernst


Ernst de Haan wrote:
> Hi folkz,
> 
> Sun JDK 1.3.0 for Linux のベータ 9 を FreeBSD 4.0-STABLE システムで
> 動作させることができました.  きちんと動作しているみたいです.
>
> java -version は次のように表示されます.
>
>    bash-2.04$ java -version
>    expr: syntax error
>    java version "1.3.0beta_refresh"
>    Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0beta_refresh-b09)
>    Classic VM (build 1.3.0beta_refresh-b09, green threads, nojit)
> 
> 最初の行は, .java_wrapper の文法エラーのために表示されているもので,
> 深刻なものではありません.  わたしは JDK を動作させるために .java_wrapper に
> いくつか手を加える必要がありました.  今使っているものを添付しておきます.
> 
> まだ十分にテストしていないのですが, Swing アプリケーションを一つ
> 試してみました. フォントがちょっと違っていたことを除けば, ほぼすべてが
> きちんと高速に動作しているみたいです :)
>
> うん, FreeBSD はすぐにものすごい数の JDK が動くプラットフォームに
> なるでしょうね.  WINE が動くようになれば, Windows の JDK だって
> 動くでしょうし, あとは AS/400 エミュレータを書いて, それから.... ;-)
> 
> 
> Ernst
> 
> P.S.  わたしを正しい方向に導いてくれた Victor Salaman 氏に感謝します.
>       彼は本当に長い間, Sun JDK 1.3 for Linux を使っていました.

2000 年 1 月 29 日: JDK 1.3 の移植は始まっていません. JDK 1.2 がリリースされた後になるまで JDK 1.3 の作業は始められません.

&footer;