前田です。

In message "[ruby-list:4850] Re: _muldi3 included in libgcc.a(Re: rbc.rb)"
"EGUCHI Osamu" <eguchi / shizuokanet.or.jp> wrote:

|> :通常 _muldi3 は、 libgcc.a に含まれています。
|> 
|> なるほど. gcc -shared だと -lgcc とかがつかないんだ.
|> -lgcc を追加するのが簡単ですね.
|
|たぶんそれでもうまく行きます。。

最初-lgccを付けただけではやはり同じ症状でしたので,

#ifdef linux
static void dummy()
{
    __muldi3();
    __moddi3();
    __divdi3();
}
#endif

としたらSegmentation faultしてしまいました:-(
_muldi3.oなどをlibgcc.aから取り出して直接リンクしてもやはり
Segmentation faultしてしまいました。

(gdb) run ../../ruby/rbc.rb
Starting program: /home/shugo/src/ruby-1.1a9/ruby ../../ruby/rbc.rb
rbc0> require 'java'

Program received signal SIGSEGV, Segmentation fault.
0x402f24c3 in _sched_unlock ()
    at ../../../../src/genunix/java/green_threads/src/signals.c:585
../../../../src/genunix/java/green_threads/src/signals.c:585: No such file or directory.
(gdb) bt
#0  0x402f24c3 in _sched_unlock ()
    at ../../../../src/genunix/java/green_threads/src/signals.c:585
#1  0x402f18c1 in sysMonitorEnter ()
    at ../../../../src/genunix/java/green_threads/src/monitor_md.c:337
#2  0x402f0a33 in open ()
    at ../../../../src/genunix/java/green_threads/src/iomgr.c:1461
#3  0x402f0a51 in open ()

|どうも libjava は、古い(あるいは改造された) gcc でコンパイル
|されているのではないかと思います。

Javaをコンパイルし直すのがてっとり早いような気がするのですが,
きっとソースを貰うためにはライセンスを受けたりしないといけな
いのでしょうね...。

|別件ですが Java の long って gcc の long long でないですか?
|手元に動く Java の処理系がないので、確認できないのですが。
|もし long long と、jri:ext/java/java.c の INT2NUM() で
|jlong を 変換しているあたりでオーバーフローしますね。

sizeof(jlong): 8

でした:-(
LONGLONG2NUMとか用意しないといけないですね...。

-- 
前田 修吾