なかだです。

At Wed, 9 Sep 2009 23:20:59 +0900,
Yutaka Kanemoto wrote in [ruby-dev:39276]:
> > Init_などをはじめとして、公開する必要のない関数はできればexport
> > しないようにしたいと思っています。Yuguiさんにも、internalと明示
> > されていない関数は公開APIと見なすよ、と脅かされているので。
> > objcopyがなくても済むように、リンカオプションでできるのであれば
> > MS-Windows(含cygwin)やDarwinのようにそこで処理したいのですが。
> 添付のパッチでは、expallをやめて、nmの出力からInit_つきのものを
> 抜いたファイルを作ってエクスポートするようにしてみたのですが、
> いかがでしょうか?
> ついでに今回はエクスポートなので、.expに変えてみました。

これだと、LIBRUBY_DLDFLAGSには-bexpallがついて-bE:${ARCHFILE}が
含まれなくなるように見えます。

gccなら-gxcoffを指定していますが、man gccではなんとなくどこで
も-ggdbを指定しておけばよさそうな気もしなくもありません。

ちなみに、-bEに指定するシンボルって、データだけじゃなくてテキス
トについても有効なんでしょうか。今のところテキストシンボルは入れ
ていないはずなので、もしかしたら_Init_つきを入れても入れなくても
アクセスできてしまうとか。


Index: configure.in =================================================================== --- configure.in (revision 24823) +++ configure.in (working copy) @@ -240,11 +240,17 @@ AC_PROG_CC AC_PROG_CXX AC_PROG_GCC_TRADITIONAL -test $ac_cv_prog_cc_g = yes && : ${debugflags=-g} if test "$GCC" = yes; then linker_flag=-Wl, : ${optflags=-O3} + case "$target_os" in + when(aix*) + : ${debugflags=-gxcoff};; + when(linux*|cygwin*|mingw*|darwin*) + : ${debugflags=-ggdb};; + esac else linker_flag= fi +test $ac_cv_prog_cc_g = yes && : ${debugflags=-g} RUBY_PROG_GNU_LD @@ -1606,4 +1612,7 @@ when(linux* | gnu* | k*bsd*-gnu | bsdi* LDFLAGS="$LDFLAGS -rdynamic" fi;; +when(aix*) + LDFLAGS="$LDFLAGS ${linker_flag}-bmaxdata:0x80000000" + ;; esac LIBEXT=a @@ -1746,7 +1755,7 @@ if test "$with_dln_a_out" != yes; then LDSHARED="$LDSHARED ${linker_flag}-G" DLDFLAGS='-eInit_$(TARGET)' - XLDFLAGS="${linker_flag}-bE:ruby.imp ${linker_flag}-brtl" + XLDFLAGS="${linker_flag}"'-bE:$(ARCHFILE)'" ${linker_flag}-brtl" XLDFLAGS="$XLDFLAGS ${linker_flag}-blibpath:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}" - : ${ARCHFILE="ruby.imp"} + : ${ARCHFILE="ruby.exp"} TRY_LINK='$(CC) $(LDFLAGS) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)' TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)' Index: common.mk =================================================================== --- common.mk (revision 24823) +++ common.mk (working copy) @@ -170,6 +170,8 @@ $(STATIC_RUBY)$(EXEEXT): $(MAINOBJ) $(DL $(PURIFY) $(CC) $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(XLDFLAGS) -ruby.imp: $(EXPORTOBJS) - @$(NM) -Pgp $(EXPORTOBJS) | awk 'BEGIN{print "#!"}; $$2~/^[BD]$$/{print $$1}' | sort -u -o $@ +ruby.exp: $(EXPORTOBJS) + @$(NM) -Pgp $(EXPORTOBJS) | \ + awk 'BEGIN{print "#!"}; $$2~/^[B-DST]$$/&&$$1!~/^_Init_/{print $$1}' | \ + sort -u -o $@ install: install-nodoc $(RDOCTARGET)
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦