From: Nobuyoshi Nakada Date: 2007-08-14T04:43:54+09:00 Subject: [ruby-dev:31402] Re: Ruby load problem on AIX なかだです。 At Tue, 14 Aug 2007 03:01:39 +0900, Yutaka Kanemoto wrote in [ruby-dev:31401]: > とりあえず、1.8と1.9両方のパッチを添付します。 * gcc以外は、LDSHAREDはldではなく$(CC) * -Gを*LDFLAGSからLDSHAREDに移す * -brtlをXLDFLAGSだけにする ということでいいんでしょうか。 > また、1.9の方はjsonライブラリのgenerator.cのstring.hの位置がAIXで > 不都合があったので順番を変えたのと、.cのファイルでc++スタイルの > コメントが使えるようにCFLAGSに-qcpluscmtというのを加えてあります。 これは逆にそういうコメントを消すほうが望ましいんですが、vm.c以外 にもありますか。というか、一度全部消したと思うんですが。 > あと、AIXで--enable-sharedをデフォルトにしてみたのですが、 > 何かstaticにしたほうがいい理由などはありますでしょうか? そのへんはOSの都合とかメンテナの方針とかでしょうね。むしろデフォ ルトで--enable-sharedにしたほうがいいかも。 > このpatchで対応できるのは、結局環境変数でOBJECT_MODE=64というのが > 設定されていてIBM XL C Compilerを使っていたときだけで、 > gccには対応できません。gccはOBJECT_MODEなんぞ知らないのに、 > 中で呼ばれるOS付属のリンカが64ビットで動いてしまいます。 > > また、以前 > >環境変数 OBJECT_MODE=64 で一切合財設定不要になるようなのですが、 > >rbconfig.rb に痕跡が残らないと後々 extconf.rb するときにハマリそうに思います。 > という要望があったのが気になっていたので、両方を解決できるように > ためしに--enable-aix64なるオプションを作ったりしてみたのですが、 > gcc に -maix32を渡しても、アセンブラに-a32を渡してくれないので、 > OBJECT_MODE=64が設定されている場合に対応できません。 > 仮に-Wa,-a32とオプションをつけても、asに-a32を渡してくれませんでした。 gcc側で対応してもらわない限り、なんともならないかもしれませんね。 Index: configure.in =================================================================== --- configure.in (revision 12928) +++ configure.in (working copy) @@ -1043,9 +1043,9 @@ if test "$with_dln_a_out" != yes; then : ${LDSHARED='$(CC) -shared'} else - : ${LDSHARED='/usr/ccs/bin/ld'} + : ${LDSHARED='$(CC)'} fi - DLDFLAGS="${linker_flag}-G"' -eInit_$(TARGET)' - LDFLAGS="${LDFLAGS} ${linker_flag}-brtl" - XLDFLAGS="${linker_flag}-bE:ruby.imp" + LDSHARED="$LDSHARED ${linker_flag}-G" + DLDFLAGS='-eInit_$(TARGET)' + XLDFLAGS="${linker_flag}-bE:ruby.imp ${linker_flag}-brtl" : ${ARCHFILE="ruby.imp"} TRY_LINK='$(CC) $(LDFLAGS) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)' @@ -1360,5 +1360,5 @@ if test "$enable_shared" = 'yes'; then ;; aix*) - LIBRUBY_DLDFLAGS="${linker_flag}-G ${linker_flag}-bnoentry $XLDFLAGS" + LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS" LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}' SOLIBS='-lm -lc' Index: vm.c =================================================================== --- vm.c (revision 12928) +++ vm.c (working copy) @@ -238,9 +238,11 @@ vm_make_env_each(rb_thread_t *th, rb_con for (i = 0; i <= local_size; i++) { env->env[i] = envptr[-local_size + i]; - // dp(env->env[i]); +#if 0 + dp(env->env[i]); if (RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) { /* clear value stack for GC */ - // envptr[-local_size + i] = 0; + envptr[-local_size + i] = 0; } +#endif } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦