diff -aruN shujit-0.3.0a/ChangeLog shujit/ChangeLog --- shujit-0.3.0a/ChangeLog Mon May 24 19:53:36 1999 +++ shujit/ChangeLog Mon Jul 5 21:25:36 1999 @@ -1,5 +1,50 @@ $Id$ +[19990705] + +ELF の FreeBSD (>= 3.0) に対応した。 + - gentable.rb にて、シンボル名先頭の `_' を取り去るのは + FreeBSD 2.X の場合のみに。 + +0.3.1 リリース。 + +[19990701] + +configure が ruby コマンドを見付けられない場合、 +警告を発して終了するようにした。 +(configure.in) + +Makefile の名前を以前のように GNUmakefile に戻した。 +(configure.in) + +make distclean だけでなく、 +make clean で config.cache を削除するようにした。 +(GNUmakefile.in) + +[19990630] + +signal handler で、SIGSEGV, SIGBUS だけでなく、 +除算 (idiv, irem, ldiv, lrem) で発生する SIGFPE も扱うようにした。 +0 除算で ArithmeticException を発生させ、 +MIN_VALUE / -1 で結果を MIN_VALUE に、MIN_VALUE % -1 で結果を 0 にする。 +ただし、long 型の MIN_VALUE [/%] -1 については +ライブラリ関数が適切に扱うことを期待して何もしない。 +(compiler.c, compiler.h, compile.c, code.c, computil.c) + +従来のマクロ EXC_BY_SIGNAL を NULLEXC_BY_SIGNAL に変更し、 +ARITHEXC_BY_SIGNAL を新設。 +EXC_BY_SIGNAL はこの 2つの or とした。 +(compiler.h, code.h, compiler.c) + +構造体 throwentry にメンバ opcode を追加、 +throwtableAdd() にて opcode も登録するようにした。 +(compiler.h, computil.c) + +ldiv, lrem のネイティブコードにて、 +%ebp レジスタをスタックに積んで保存するようにした。 +0 除算の際に signal handler が利用する。 +(code.c, compiler.c) + [19990524] code.c のコンパイルフラグに -fno-omit-frame-pointer を追加。 diff -aruN shujit-0.3.0a/GNUmakefile shujit/GNUmakefile --- shujit-0.3.0a/GNUmakefile Thu Jan 1 09:00:00 1970 +++ shujit/GNUmakefile Mon Jul 5 21:34:05 1999 @@ -0,0 +1,183 @@ +# $Id$ + +# feature + +CODE_DB = yes +GDBM = yes + +METAVM = +METAVM_NO_ARRAY = + +# environment + +JDK_VER = 12 +J_INCDIR = /usr/local/java/include-old + +GCC27 = + +# command + + +CC = /usr/bin/egcs +LD_DYNAMIC = ${CC} -shared# for GCC and GNU binutils +#LD_DYNAMIC = ld -Bdynamic# for SunOS 4 +ASFLAGS = +OBJDUMP = /usr/bin/objdump +RUBY = /usr/local/bin/ruby +CI = /usr/bin/ci +CO = /usr/bin/co +RM = /bin/rm +WC = /usr/bin/wc +ETAGS = /usr/bin/etags +JAVA = /usr/local/java/bin/java +JAVAC = /usr/local/java/bin/javac +JAVAH = /usr/local/java/bin/javah +ifeq (${JDK_VER}, 11) +JAVAH_OLD = ${JAVAH} +JAVAH_JNI = ${JAVAH} -jni +else +JAVAH_OLD = ${JAVAH} -old +JAVAH_JNI = ${JAVAH} +endif +JAR = /usr/local/java/bin/jar +JAVADOC = /usr/local/java/bin/javadoc + + +GENCONST = gentable.rb +POSTPROC = postcmpl.rb + +INCDIR = -I${J_INCDIR} -I${J_INCDIR}/genunix -I${J_INCDIR}/linux -I${J_INCDIR}/freebsd -I/usr/local/include + +OPTFLAGS = -O2 +CDEBUGFLAGS =# -g -DCOMPILE_DEBUG -DRUNTIME_DEBUG# -DNO_CHECK +NOOPTCFLAGS = -pipe -fPIC ${CDEBUGFLAGS} ${INCDIR} +CFLAGS = ${OPTFLAGS} ${NOOPTCFLAGS} +LIBS = + +ifeq (${METAVM}, yes) +TARGET = libmetavm.so +else +TARGET = libshujit.so +endif +GENEDHDR = constants.h +GENEDOBJ = constants.o +TOOLS = codedbinfo +TOOLSOBJ = codedbinfo.o +# source code +HDR = compiler.h code.h +OBJ = code.o compiler.o invoker.o computil.o opcodes.o compile.o\ + runtime.o x86tsc.o +ifneq (${JDK_VER}, 11) + OBJ += linker.o +endif + +ifeq (${CODE_DB}, yes) + OBJ += codedb.o + CFLAGS += -I/usr/local/include +# LIBS += -L/usr/local/lib +ifeq (${GDBM}, yes) + DBLIB = -lgdbm +else + DBLIBS = -lndbm +endif +endif +# subdirectories +SUBDIR = + +# for JIT Distributed Object +ifeq (${METAVM}, yes) + SUBDIR += NET/shudo/metavm metavm + OBJ += metavm/objectid.o metavm/vmop.o metavm/controller.o \ + metavm/proxy.o metavm/byvalue.o metavm/type.o + JARFILE = MetaVM.jar +endif + + +# +# rules +# + +all: ${TARGET} + +${TARGET}: subdir ${OBJ} ${GENEDOBJ} + ${LD_DYNAMIC} -o $@ ${OBJ} ${GENEDOBJ} ${LIBS} + +subdir: +ifdef SUBDIR + @for subdir in ${SUBDIR}; do \ + (cd $$subdir && ${MAKE} all CFLAGS="${CFLAGS}") \ + done +endif + +tool: codedbinfo + +jar: ${JARFILE} +${JARFILE}: NET/shudo/metavm/*.class + ${JAR} cvf ${JARFILE} NET/shudo/metavm/*.class + + +# generate code.o +ifeq (${GCC27}, yes) +tmp.s: code.c ${POSTPROC} + ${CC} -S -fno-omit-frame-pointer ${NOOPTCFLAGS} -o tmp.s $< +code.s: tmp.s + ${RUBY} ${POSTPROC} < $< > $@ +# ${RM} -f $< +code.o: code.s +else +code.o: code.c + ${CC} -fno-omit-frame-pointer ${NOOPTCFLAGS} -c $< +code.s: code.c code.h + ${CC} -S -fno-omit-frame-pointer ${NOOPTCFLAGS} $< +endif + + +${GENEDHDR}: code.o ${GENCONST} + ${OBJDUMP} -dx $< | ${RUBY} ${GENCONST} +${GENEDOBJ:.o=.c}: code.o ${GENCONST} + ${OBJDUMP} -dx $< | ${RUBY} ${GENCONST} + +compile.o: compiler.h ${GENEDHDR} ${GENEDOBJ:.o=.c} +compiler.o: compiler.c compiler.h +runtime.o: runtime.c compiler.h +computil.o: compiler.h +codedb.o: compiler.h + +codedbinfo.o: compiler.h +codedbinfo: codedbinfo.o + ${CC} -o $@ $< ${DBLIBS} + +# for JDK 1.2 +linker.o: java_util_Vector.h java_lang_ClassLoader_NativeLibrary.h +java_util_Vector.h: + $(JAVAH_OLD) java.util.Vector +java_lang_ClassLoader_NativeLibrary.h: + $(JAVAH_OLD) java.lang.ClassLoader\$$NativeLibrary + + +distclean: clean + ${RM} -f Makefile config.h config.status config.log + ${RM} -f metavm/Makefile NET/shudo/metavm/Makefile + +clean: subdirclean + ${RM} -f config.cache + ${RM} -f TAGS *~ ${TARGET} *.o ${GENEDHDR} ${GENEDOBJ} ${GENEDOBJ:.o=.c} *.s ${TOOLS} ${TOOLSOBJ} java_*.h +ifeq (${METAVM}, yes) + ${RM} -f ${JARFILE} +endif + +subdirclean: +ifdef SUBDIR + @for subdir in ${SUBDIR}; do \ + (cd $$subdir && ${MAKE} clean) \ + done +endif + +objclean: + ${RM} -f `${FIND} . -name '*.o' -print` + +tag: + ${ETAGS} *.[hc] + +wc: + ${WC} ${OBJ:.o=.c} ${HDR} ${GENCONST} ${TOOLSOBJ:.o=.c} diff -aruN shujit-0.3.0a/GNUmakefile.in shujit/GNUmakefile.in --- shujit-0.3.0a/GNUmakefile.in Thu Jan 1 09:00:00 1970 +++ shujit/GNUmakefile.in Mon Jul 5 20:50:39 1999 @@ -0,0 +1,183 @@ +# $Id$ + +# feature + +CODE_DB = @ac_codedb@ +GDBM = @ac_libgdbm@ + +METAVM = @ac_metavm@ +METAVM_NO_ARRAY = @ac_metavm_no_array@ + +# environment + +JDK_VER = @ac_jver@ +J_INCDIR = @ac_jincdir@ + +GCC27 = @ac_gcc27@ + +# command + +@SET_MAKE@ +CC = @ac_cc@ +LD_DYNAMIC = ${CC} -shared# for GCC and GNU binutils +#LD_DYNAMIC = ld -Bdynamic# for SunOS 4 +ASFLAGS = @ac_asflags@ +OBJDUMP = @ac_objdump@ +RUBY = @ac_ruby@ +CI = @ac_ci@ +CO = @ac_co@ +RM = @ac_rm@ +WC = @ac_wc@ +ETAGS = @ac_etags@ +JAVA = @ac_java@ +JAVAC = @ac_javac@ +JAVAH = @ac_javah@ +ifeq (${JDK_VER}, 11) +JAVAH_OLD = ${JAVAH} +JAVAH_JNI = ${JAVAH} -jni +else +JAVAH_OLD = ${JAVAH} -old +JAVAH_JNI = ${JAVAH} +endif +JAR = @ac_jar@ +JAVADOC = @ac_javadoc@ + + +GENCONST = gentable.rb +POSTPROC = postcmpl.rb + +INCDIR = -I${J_INCDIR} -I${J_INCDIR}/genunix -I${J_INCDIR}/linux -I${J_INCDIR}/freebsd -I/usr/local/include + +OPTFLAGS = -O2 +CDEBUGFLAGS =# -g -DCOMPILE_DEBUG -DRUNTIME_DEBUG# -DNO_CHECK +NOOPTCFLAGS = -pipe -fPIC ${CDEBUGFLAGS} ${INCDIR} +CFLAGS = ${OPTFLAGS} ${NOOPTCFLAGS} +LIBS = + +ifeq (${METAVM}, yes) +TARGET = libmetavm.so +else +TARGET = libshujit.so +endif +GENEDHDR = constants.h +GENEDOBJ = constants.o +TOOLS = codedbinfo +TOOLSOBJ = codedbinfo.o +# source code +HDR = compiler.h code.h +OBJ = code.o compiler.o invoker.o computil.o opcodes.o compile.o\ + runtime.o x86tsc.o +ifneq (${JDK_VER}, 11) + OBJ += linker.o +endif + +ifeq (${CODE_DB}, yes) + OBJ += codedb.o + CFLAGS += -I/usr/local/include +# LIBS += -L/usr/local/lib +ifeq (${GDBM}, yes) + DBLIB = -lgdbm +else + DBLIBS = -lndbm +endif +endif +# subdirectories +SUBDIR = + +# for JIT Distributed Object +ifeq (${METAVM}, yes) + SUBDIR += NET/shudo/metavm metavm + OBJ += metavm/objectid.o metavm/vmop.o metavm/controller.o \ + metavm/proxy.o metavm/byvalue.o metavm/type.o + JARFILE = MetaVM.jar +endif + + +# +# rules +# + +all: ${TARGET} + +${TARGET}: subdir ${OBJ} ${GENEDOBJ} + ${LD_DYNAMIC} -o $@ ${OBJ} ${GENEDOBJ} ${LIBS} + +subdir: +ifdef SUBDIR + @for subdir in ${SUBDIR}; do \ + (cd $$subdir && ${MAKE} all CFLAGS="${CFLAGS}") \ + done +endif + +tool: codedbinfo + +jar: ${JARFILE} +${JARFILE}: NET/shudo/metavm/*.class + ${JAR} cvf ${JARFILE} NET/shudo/metavm/*.class + + +# generate code.o +ifeq (${GCC27}, yes) +tmp.s: code.c ${POSTPROC} + ${CC} -S -fno-omit-frame-pointer ${NOOPTCFLAGS} -o tmp.s $< +code.s: tmp.s + ${RUBY} ${POSTPROC} < $< > $@ +# ${RM} -f $< +code.o: code.s +else +code.o: code.c + ${CC} -fno-omit-frame-pointer ${NOOPTCFLAGS} -c $< +code.s: code.c code.h + ${CC} -S -fno-omit-frame-pointer ${NOOPTCFLAGS} $< +endif + + +${GENEDHDR}: code.o ${GENCONST} + ${OBJDUMP} -dx $< | ${RUBY} ${GENCONST} +${GENEDOBJ:.o=.c}: code.o ${GENCONST} + ${OBJDUMP} -dx $< | ${RUBY} ${GENCONST} + +compile.o: compiler.h ${GENEDHDR} ${GENEDOBJ:.o=.c} +compiler.o: compiler.c compiler.h +runtime.o: runtime.c compiler.h +computil.o: compiler.h +codedb.o: compiler.h + +codedbinfo.o: compiler.h +codedbinfo: codedbinfo.o + ${CC} -o $@ $< ${DBLIBS} + +# for JDK 1.2 +linker.o: java_util_Vector.h java_lang_ClassLoader_NativeLibrary.h +java_util_Vector.h: + $(JAVAH_OLD) java.util.Vector +java_lang_ClassLoader_NativeLibrary.h: + $(JAVAH_OLD) java.lang.ClassLoader\$$NativeLibrary + + +distclean: clean + ${RM} -f Makefile config.h config.status config.log + ${RM} -f metavm/Makefile NET/shudo/metavm/Makefile + +clean: subdirclean + ${RM} -f config.cache + ${RM} -f TAGS *~ ${TARGET} *.o ${GENEDHDR} ${GENEDOBJ} ${GENEDOBJ:.o=.c} *.s ${TOOLS} ${TOOLSOBJ} java_*.h +ifeq (${METAVM}, yes) + ${RM} -f ${JARFILE} +endif + +subdirclean: +ifdef SUBDIR + @for subdir in ${SUBDIR}; do \ + (cd $$subdir && ${MAKE} clean) \ + done +endif + +objclean: + ${RM} -f `${FIND} . -name '*.o' -print` + +tag: + ${ETAGS} *.[hc] + +wc: + ${WC} ${OBJ:.o=.c} ${HDR} ${GENCONST} ${TOOLSOBJ:.o=.c} diff -aruN shujit-0.3.0a/Makefile.in shujit/Makefile.in --- shujit-0.3.0a/Makefile.in Mon May 24 19:32:57 1999 +++ shujit/Makefile.in Thu Jan 1 09:00:00 1970 @@ -1,182 +0,0 @@ -# $Id$ - -# feature - -CODE_DB = @ac_codedb@ -GDBM = @ac_libgdbm@ - -METAVM = @ac_metavm@ -METAVM_NO_ARRAY = @ac_metavm_no_array@ - -# environment - -JDK_VER = @ac_jver@ -J_INCDIR = @ac_jincdir@ - -GCC27 = @ac_gcc27@ - -# command - -@SET_MAKE@ -CC = @ac_cc@ -LD_DYNAMIC = ${CC} -shared# for GCC and GNU binutils -#LD_DYNAMIC = ld -Bdynamic# for SunOS 4 -ASFLAGS = @ac_asflags@ -OBJDUMP = @ac_objdump@ -RUBY = @ac_ruby@ -CI = @ac_ci@ -CO = @ac_co@ -RM = @ac_rm@ -WC = @ac_wc@ -ETAGS = @ac_etags@ -JAVA = @ac_java@ -JAVAC = @ac_javac@ -JAVAH = @ac_javah@ -ifeq (${JDK_VER}, 11) -JAVAH_OLD = ${JAVAH} -JAVAH_JNI = ${JAVAH} -jni -else -JAVAH_OLD = ${JAVAH} -old -JAVAH_JNI = ${JAVAH} -endif -JAR = @ac_jar@ -JAVADOC = @ac_javadoc@ - - -GENCONST = gentable.rb -POSTPROC = postcmpl.rb - -INCDIR = -I${J_INCDIR} -I${J_INCDIR}/genunix -I${J_INCDIR}/linux -I${J_INCDIR}/freebsd -I/usr/local/include - -OPTFLAGS = -O2 -CDEBUGFLAGS =# -g -DCOMPILE_DEBUG -DRUNTIME_DEBUG# -DNO_CHECK -NOOPTCFLAGS = -pipe -fPIC ${CDEBUGFLAGS} ${INCDIR} -CFLAGS = ${OPTFLAGS} ${NOOPTCFLAGS} -LIBS = - -ifeq (${METAVM}, yes) -TARGET = libmetavm.so -else -TARGET = libshujit.so -endif -GENEDHDR = constants.h -GENEDOBJ = constants.o -TOOLS = codedbinfo -TOOLSOBJ = codedbinfo.o -# source code -HDR = compiler.h code.h -OBJ = code.o compiler.o invoker.o computil.o opcodes.o compile.o\ - runtime.o x86tsc.o -ifneq (${JDK_VER}, 11) - OBJ += linker.o -endif - -ifeq (${CODE_DB}, yes) - OBJ += codedb.o - CFLAGS += -I/usr/local/include -# LIBS += -L/usr/local/lib -ifeq (${GDBM}, yes) - DBLIB = -lgdbm -else - DBLIBS = -lndbm -endif -endif -# subdirectories -SUBDIR = - -# for JIT Distributed Object -ifeq (${METAVM}, yes) - SUBDIR += NET/shudo/metavm metavm - OBJ += metavm/objectid.o metavm/vmop.o metavm/controller.o \ - metavm/proxy.o metavm/byvalue.o metavm/type.o - JARFILE = MetaVM.jar -endif - - -# -# rules -# - -all: ${TARGET} - -${TARGET}: subdir ${OBJ} ${GENEDOBJ} - ${LD_DYNAMIC} -o $@ ${OBJ} ${GENEDOBJ} ${LIBS} - -subdir: -ifdef SUBDIR - @for subdir in ${SUBDIR}; do \ - (cd $$subdir && ${MAKE} all CFLAGS="${CFLAGS}") \ - done -endif - -tool: codedbinfo - -jar: ${JARFILE} -${JARFILE}: NET/shudo/metavm/*.class - ${JAR} cvf ${JARFILE} NET/shudo/metavm/*.class - - -# generate code.o -ifeq (${GCC27}, yes) -tmp.s: code.c ${POSTPROC} - ${CC} -S -fno-omit-frame-pointer ${NOOPTCFLAGS} -o tmp.s $< -code.s: tmp.s - ${RUBY} ${POSTPROC} < $< > $@ -# ${RM} -f $< -code.o: code.s -else -code.o: code.c - ${CC} -fno-omit-frame-pointer ${NOOPTCFLAGS} -c $< -code.s: code.c code.h - ${CC} -S -fno-omit-frame-pointer ${NOOPTCFLAGS} $< -endif - - -${GENEDHDR}: code.o ${GENCONST} - ${OBJDUMP} -dx $< | ${RUBY} ${GENCONST} -${GENEDOBJ:.o=.c}: code.o ${GENCONST} - ${OBJDUMP} -dx $< | ${RUBY} ${GENCONST} - -compile.o: compiler.h ${GENEDHDR} ${GENEDOBJ:.o=.c} -compiler.o: compiler.c compiler.h -runtime.o: runtime.c compiler.h -computil.o: compiler.h -codedb.o: compiler.h - -codedbinfo.o: compiler.h -codedbinfo: codedbinfo.o - ${CC} -o $@ $< ${DBLIBS} - -# for JDK 1.2 -linker.o: java_util_Vector.h java_lang_ClassLoader_NativeLibrary.h -java_util_Vector.h: - $(JAVAH_OLD) java.util.Vector -java_lang_ClassLoader_NativeLibrary.h: - $(JAVAH_OLD) java.lang.ClassLoader\$$NativeLibrary - - -distclean: clean - ${RM} -f Makefile config.h config.status config.log config.cache - ${RM} -f metavm/Makefile NET/shudo/metavm/Makefile - -clean: subdirclean - ${RM} -f TAGS *~ ${TARGET} *.o ${GENEDHDR} ${GENEDOBJ} ${GENEDOBJ:.o=.c} *.s ${TOOLS} ${TOOLSOBJ} java_*.h -ifeq (${METAVM}, yes) - ${RM} -f ${JARFILE} -endif - -subdirclean: -ifdef SUBDIR - @for subdir in ${SUBDIR}; do \ - (cd $$subdir && ${MAKE} clean) \ - done -endif - -objclean: - ${RM} -f `${FIND} . -name '*.o' -print` - -tag: - ${ETAGS} *.[hc] - -wc: - ${WC} ${OBJ:.o=.c} ${HDR} ${GENCONST} ${TOOLSOBJ:.o=.c} diff -aruN shujit-0.3.0a/NET/shudo/metavm/GNUmakefile shujit/NET/shudo/metavm/GNUmakefile --- shujit-0.3.0a/NET/shudo/metavm/GNUmakefile Thu Jan 1 09:00:00 1970 +++ shujit/NET/shudo/metavm/GNUmakefile Mon Jul 5 21:34:05 1999 @@ -0,0 +1,49 @@ +# $Id$ + +# command + +CI = /usr/bin/ci +CO = /usr/bin/co +RM = /bin/rm +WC = /usr/bin/wc +JAVAC = /usr/local/java/bin/javac +COMPILE.java = ${JAVAC} ${JFLAGS} + + +# sources +SRC = Protocol.java VMAddress.java Proxy.java \ + MetaVMServer.java Skeleton.java ExpirationDaemon.java \ + ExportTable.java \ + DistObjectOutputStream.java DistObjectInputStream.java \ + ArrayOfObjectWrapper.java ArrayOfIntWrapper.java \ + VMOperations.java MetaVM.java \ + ThreadPool.java ThreadPoolHook.java \ + TypeUtil.java \ + ByValue.java ByValueUtil.java \ + ClassDistributionDaemon.java ClassDistributor.java \ + LocalClassLoader.java RemoteClassLoader.java \ + MetaVMController.java + +# flags +JDEBUGFLAGS = -O -g +JFLAGS = ${JDEBUGFLAGS} + + +all: ${SRC:.java=.class} + +clean: + ${RM} -f *.class *~ *.bak + +include ../../../cmd.mk + + +# Rules +.java.class: + ${COMPILE.java} $< + +%.class: %.java + ${COMPILE.java} $< + +# for 'make classname' +%: %.java + ${COMPILE.java} $< diff -aruN shujit-0.3.0a/NET/shudo/metavm/GNUmakefile.in shujit/NET/shudo/metavm/GNUmakefile.in --- shujit-0.3.0a/NET/shudo/metavm/GNUmakefile.in Thu Jan 1 09:00:00 1970 +++ shujit/NET/shudo/metavm/GNUmakefile.in Sun May 23 03:49:41 1999 @@ -0,0 +1,49 @@ +# $Id$ + +# command + +CI = @ac_ci@ +CO = @ac_co@ +RM = @ac_rm@ +WC = @ac_wc@ +JAVAC = @ac_javac@ +COMPILE.java = ${JAVAC} ${JFLAGS} + + +# sources +SRC = Protocol.java VMAddress.java Proxy.java \ + MetaVMServer.java Skeleton.java ExpirationDaemon.java \ + ExportTable.java \ + DistObjectOutputStream.java DistObjectInputStream.java \ + ArrayOfObjectWrapper.java ArrayOfIntWrapper.java \ + VMOperations.java MetaVM.java \ + ThreadPool.java ThreadPoolHook.java \ + TypeUtil.java \ + ByValue.java ByValueUtil.java \ + ClassDistributionDaemon.java ClassDistributor.java \ + LocalClassLoader.java RemoteClassLoader.java \ + MetaVMController.java + +# flags +JDEBUGFLAGS = -O -g +JFLAGS = ${JDEBUGFLAGS} + + +all: ${SRC:.java=.class} + +clean: + ${RM} -f *.class *~ *.bak + +include ../../../cmd.mk + + +# Rules +.java.class: + ${COMPILE.java} $< + +%.class: %.java + ${COMPILE.java} $< + +# for 'make classname' +%: %.java + ${COMPILE.java} $< diff -aruN shujit-0.3.0a/NET/shudo/metavm/Makefile.in shujit/NET/shudo/metavm/Makefile.in --- shujit-0.3.0a/NET/shudo/metavm/Makefile.in Sun May 23 03:49:41 1999 +++ shujit/NET/shudo/metavm/Makefile.in Thu Jan 1 09:00:00 1970 @@ -1,49 +0,0 @@ -# $Id$ - -# command - -CI = @ac_ci@ -CO = @ac_co@ -RM = @ac_rm@ -WC = @ac_wc@ -JAVAC = @ac_javac@ -COMPILE.java = ${JAVAC} ${JFLAGS} - - -# sources -SRC = Protocol.java VMAddress.java Proxy.java \ - MetaVMServer.java Skeleton.java ExpirationDaemon.java \ - ExportTable.java \ - DistObjectOutputStream.java DistObjectInputStream.java \ - ArrayOfObjectWrapper.java ArrayOfIntWrapper.java \ - VMOperations.java MetaVM.java \ - ThreadPool.java ThreadPoolHook.java \ - TypeUtil.java \ - ByValue.java ByValueUtil.java \ - ClassDistributionDaemon.java ClassDistributor.java \ - LocalClassLoader.java RemoteClassLoader.java \ - MetaVMController.java - -# flags -JDEBUGFLAGS = -O -g -JFLAGS = ${JDEBUGFLAGS} - - -all: ${SRC:.java=.class} - -clean: - ${RM} -f *.class *~ *.bak - -include ../../../cmd.mk - - -# Rules -.java.class: - ${COMPILE.java} $< - -%.class: %.java - ${COMPILE.java} $< - -# for 'make classname' -%: %.java - ${COMPILE.java} $< diff -aruN shujit-0.3.0a/README shujit/README --- shujit-0.3.0a/README Mon May 24 19:51:24 1999 +++ shujit/README Mon Jul 5 21:10:30 1999 @@ -13,15 +13,12 @@ Working on the following platforms is confirmed. - Linux + - JDK 1.2 pre-release 2, egcs 1.0.3, glibc2.0.7 and Linux 2.2.9 - JDK 1.1.7v3, egcs 1.0.3, glibc2.0.7 and Linux 2.2.9 - - JDK 1.2 pre-release 1, egcs 1.0.3, glibc2.0.7 and Linux 2.2.9 - JDK 1.1.7v1a, egcs 1.0.3, libc5.4.38 and Linux 2.0.35 - FreeBSD - - Not confirmed yet. - I don't have a FreeBSD system with egcs. - -Current version of shuJIT can't work with Java 2 SDK (JDK 1.2). + - JDK 1.1.8 (ELF, V99-6-3), egcs 1.1.2, FreeBSD 3.2R * Installation @@ -59,6 +56,7 @@ - Ruby A script which generate some tables is written in Ruby. http://www.netlab.co.jp/ruby/ +- GNU make 1. Run configure script. % ./configure diff -aruN shujit-0.3.0a/code.c shujit/code.c --- shujit-0.3.0a/code.c Sun May 23 01:43:17 1999 +++ shujit/code.c Wed Jun 30 22:23:47 1999 @@ -1723,50 +1723,67 @@ CODE_ARITH_INT(xor, xor, "^"); /* idiv, irem */ -#define INT_TEST(VOP, STATE, DIVIDER) \ - asm("testl " #DIVIDER "," #DIVIDER "\n\t"\ - "jnz i" #VOP "_st" #STATE "_1");\ +#ifdef ARITHEXC_BY_SIGNAL +# define INT_TEST(VOP, LABEL, STATE, DIVISOR) +#else +# define INT_TEST(VOP, LABEL, STATE, DIVISOR) /* dividend is %eax */\ + asm("testl " #DIVISOR "," #DIVISOR "\n\t"\ + "jnz " LABEL "_1");\ SIGNAL_ERROR0(ArithmeticException, STATE);\ - asm("i" #VOP "_st" #STATE "_1:") + asm(LABEL "_1:");\ + asm("cmpl $-1," #DIVISOR "\n\t"\ + "jne " LABEL "_2\n\t"\ + "cmpl $0x80000000,%eax\n\t"\ + "jne " LABEL "_2\n\t"\ + /* %eax,%edx must be 0x80000000,0 */\ + "xorl %edx,%edx\n\t"\ + "jmp " LABEL "_done");\ + asm(LABEL "_2:"); +#endif #define CODE_ARITH_INT_TEST(VOP, RESULT_REG) \ - CODE(opc_i##VOP, i##VOP, ST0, ST3, 0) {\ + CODE(opc_i##VOP, i##VOP, ST0, ST3, 1) {\ asm("popl %ecx"); /* now state 3 */\ - INT_TEST(VOP, 0, %ecx);\ asm("popl %eax\n\t"\ "xorl %edx,%edx\n\t"\ - "cdq\n\t"\ - "idivl %ecx\n\t"\ + "cdq");\ + INT_TEST(VOP, "i" #VOP "_st0", 0, %ecx);\ + asm("idivl %ecx\n\t"\ + "i" #VOP "_st0_done:"\ "movl " #RESULT_REG ",%ecx");\ }\ - CODE(opc_i##VOP, i##VOP, ST1, ST3, 0) {\ - INT_TEST(VOP, 1, %edx);\ + CODE(opc_i##VOP, i##VOP, ST1, ST3, 1) {\ asm("popl %eax\n\t"\ "movl %edx,%ecx\n\t"\ - "cdq\n\t"\ - "idivl %ecx\n\t"\ + "cdq");\ + INT_TEST(VOP, "i" #VOP "_st1", 1, %edx);\ + asm("idivl %ecx\n\t"\ + "i" #VOP "_st1_done:"\ "movl " #RESULT_REG ",%ecx");\ }\ - CODE(opc_i##VOP, i##VOP, ST2, ST3, 0) {\ - INT_TEST(VOP, 2, %ecx);\ + CODE(opc_i##VOP, i##VOP, ST2, ST3, 1) {\ asm("movl %edx,%eax\n\t"\ - "cdq\n\t"\ - "idivl %ecx\n\t"\ + "cdq");\ + INT_TEST(VOP, "i" #VOP "_st2", 2, %ecx);\ + asm("idivl %ecx\n\t"\ + "i" #VOP "_st2_done:"\ "movl " #RESULT_REG ",%ecx");\ }\ - CODE(opc_i##VOP, i##VOP, ST3, ST3, 0) {\ - INT_TEST(VOP, 3, %ecx);\ + CODE(opc_i##VOP, i##VOP, ST3, ST3, 1) {\ asm("popl %eax\n\t"\ - "cdq\n\t"\ - "idivl %ecx\n\t" /* %eax ... %edx = %edx:%eax / %ecx */\ + "cdq");\ + INT_TEST(VOP, "i" #VOP "_st3", 3, %ecx);\ + asm("idivl %ecx\n\t" /* %eax ... %edx = %edx:%eax / %ecx */\ + "i" #VOP "_st3_done:"\ "movl " #RESULT_REG ",%ecx");\ }\ - CODE(opc_i##VOP, i##VOP, ST4, ST3, 0) {\ - INT_TEST(VOP, 4, %edx);\ + CODE(opc_i##VOP, i##VOP, ST4, ST3, 1) {\ asm("movl %ecx,%eax\n\t"\ "movl %edx,%ecx\n\t"\ - "cdq\n\t"\ - "idivl %ecx\n\t"\ + "cdq");\ + INT_TEST(VOP, "i" #VOP "_st4", 4, %edx);\ + asm("idivl %ecx\n\t"\ + "i" #VOP "_st4_done:"\ "movl " #RESULT_REG ",%ecx");\ } @@ -1927,49 +1944,54 @@ asm("popl %eax\n\t" /* eax = v1[0:31] */\ "popl %edi"); /* edi = v1[32:63] */\ FUNCCALL_IN(0);\ + asm("pushl %ebp\n\t"); /* back up for signal handler */\ asm("pushl " #OPTOP2_REG "\n\t" /* push v2[32:63] */\ "pushl " #OPTOP1_REG "\n\t" /* push v2[0:31] */\ "pushl %edi\n\t" /* push v1[32:63] */\ "pushl %eax\n\t" /* push v1[0:31] */\ "call " ROP "@PLT\n\t"\ - "addl $16,%esp");\ + "addl $20,%esp");\ asm(/* movl %edx,%edx */\ "movl %eax,%ecx");\ FUNCCALL_OUT(0) /* now state 2 */ -#define LONG_TEST_ST24(VOP, STATE) \ - /* if ((%edx == 0) && (%ecx == 0)) throw Arith.Exc.; */\ +#ifdef ARITHEXC_BY_SIGNAL +# define LONG_TEST_ST24(VOP, LABEL, STATE) +#else +# define LONG_TEST_ST24(VOP, LABEL, STATE) \ + /* if ((%edx == 0) && (%ecx == 0)) throw ArithmeticException; */\ asm("movl %edx,%eax\n\t"\ "orl %ecx,%eax\n\t"\ - "jnz l" #VOP "_st" #STATE "_1");\ + "jnz " LABEL "_1");\ SIGNAL_ERROR0(ArithmeticException, STATE);\ - asm("l" #VOP "_st" #STATE "_1:") + asm(LABEL "_1:") /* now state [24] */ +#endif #define CODE_ARITH_LONG_TEST(VOP, ROP, SYM) \ - CODE(opc_l##VOP, l##VOP, ST0, ST2, 0) {\ + CODE(opc_l##VOP, l##VOP, ST0, ST2, 1) {\ asm("popl %ecx\n\t"\ "popl %edx"); /* now state 2 */\ - LONG_TEST_ST24(VOP, 0);\ + LONG_TEST_ST24(VOP, "l" #VOP "_st0", 0);\ ARITH_LONG_CALL_ST24(ROP, %ecx, %edx, SYM);\ }\ - CODE(opc_l##VOP, l##VOP, ST1, ST2, 0) {\ + CODE(opc_l##VOP, l##VOP, ST1, ST2, 1) {\ asm("popl %ecx"); /* now state 4 */\ - LONG_TEST_ST24(VOP, 1);\ + LONG_TEST_ST24(VOP, "l" #VOP "_st1", 1);\ ARITH_LONG_CALL_ST24(ROP, %edx, %ecx, SYM);\ }\ - CODE(opc_l##VOP, l##VOP, ST2, ST2, 0) {\ - LONG_TEST_ST24(VOP, 2);\ + CODE(opc_l##VOP, l##VOP, ST2, ST2, 1) {\ + LONG_TEST_ST24(VOP, "l" #VOP "_st2", 2);\ ARITH_LONG_CALL_ST24(ROP, %ecx, %edx, SYM);\ }\ - CODE(opc_l##VOP, l##VOP, ST3, ST2, 0) {\ + CODE(opc_l##VOP, l##VOP, ST3, ST2, 1) {\ asm("popl %edx"); /* now state 2 */\ - LONG_TEST_ST24(VOP, 3);\ + LONG_TEST_ST24(VOP, "l" #VOP "_st3", 3);\ ARITH_LONG_CALL_ST24(ROP, %ecx, %edx, SYM);\ }\ - CODE(opc_l##VOP, l##VOP, ST4, ST2, 0) {\ - LONG_TEST_ST24(VOP, 4);\ + CODE(opc_l##VOP, l##VOP, ST4, ST2, 1) {\ + LONG_TEST_ST24(VOP, "l" #VOP "_st4", 4);\ ARITH_LONG_CALL_ST24(ROP, %edx, %ecx, SYM);\ } diff -aruN shujit-0.3.0a/code.h shujit/code.h --- shujit-0.3.0a/code.h Sat May 22 19:30:25 1999 +++ shujit/code.h Mon Jul 5 20:24:02 1999 @@ -110,7 +110,7 @@ "pushl %eax"); #elif defined(__FreeBSD__) # define PUSH_STDOUT \ - asm("movl ___sF@GOT(%ebx),%eax\n\t"\ + asm("movl " SYMBOL(__sF) "@GOT(%ebx),%eax\n\t"\ "leal 88(%eax),%eax\n\t"\ "pushl %eax"); #elif defined(sun) && defined(__svr4__) @@ -186,7 +186,7 @@ SIGNAL_ERROR0(NullPointerException, STATE);\ asm(LABEL ":") -#if !defined(NO_CHECK) && !defined(EXC_BY_SIGNAL) +#if !defined(NO_CHECK) && !defined(NULLEXC_BY_SIGNAL) # define NULL_TEST(REG, LABEL, STATE) \ NULL_TEST_CANT_BE_ELIMINATED(REG, LABEL, STATE) #else diff -aruN shujit-0.3.0a/codedbinfo.c shujit/codedbinfo.c --- shujit-0.3.0a/codedbinfo.c Sat May 22 19:14:03 1999 +++ shujit/codedbinfo.c Wed Jun 30 18:12:34 1999 @@ -1,6 +1,6 @@ /* - This file is part of shuJIT, - Just In Time compiler for Sun Java Virtual Machine. + This file is part of shuJIT, Just In Time compiler + for Sun Java Virtual Machine. Copyright (C) 1998,1999 SHUDO Kazuyuki @@ -18,8 +18,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - $Id$ -*/ + $Id$ */ #include #include /* for lseek(), getopt() */ diff -aruN shujit-0.3.0a/compile.c shujit/compile.c --- shujit-0.3.0a/compile.c Sun May 23 01:40:11 1999 +++ shujit/compile.c Wed Jun 30 19:28:49 1999 @@ -831,9 +831,10 @@ #ifdef EXC_BY_SIGNAL if (nativecode[-1]) { - /* these native code may throw NullPointerException */ - throwtableAdd(info, - nativeoff, (uint16_t)codep->length, (uint16_t)pctable->byteoff); + /* these native code may throw + NullPointerException or ArithmeticException */ + throwtableAdd(info, nativeoff, (uint16_t)codep->length, + (unsigned char)pctable->byteoff, (unsigned char)opcode); #ifdef COMPILE_DEBUG printf("throwtableAdd(): opc %x, byte 0x%x, native 0x%x - 0x%x\n", opcode, pctable->byteoff, nativeoff, nativeoff + codep->length); diff -aruN shujit-0.3.0a/compiler.c shujit/compiler.c --- shujit-0.3.0a/compiler.c Sat May 22 16:59:17 1999 +++ shujit/compiler.c Sat Jul 3 04:05:58 1999 @@ -666,6 +666,7 @@ #endif /* EXC_BY_SIGNAL || GET_SIGCONTEXT */ #ifdef EXC_BY_SIGNAL throwentry *tentry; + uint32_t jump_target = 0; #endif /* EXC_BY_SIGNAL */ #ifdef RUNTIME_DEBUG @@ -673,15 +674,37 @@ showStackFrames(EE()); #endif + #if defined(EXC_BY_SIGNAL) || defined(GET_SIGCONTEXT) -#ifdef SEARCH_SIGCONTEXT + /* get methodblock */ +#if 1 + mb = EE()->current_frame->current_method; + /* EBP is broken on FreeBSD ??? */ +#else + mb = (struct methodblock *) *(((int32_t *)sc->SC_EBP) + 3); + /* mb is second argument of assembledCode(): 0xc(%ebp) */ +#endif +#ifdef RUNTIME_DEBUG + printf("method(0x%x)", (int)mb); fflush(stdout); + fflush(stdout); + if (!mb) goto signal_handler_error; + printf(": %s#%s %s\n", + cbName(mb->fb.clazz), mb->fb.name, mb->fb.signature); + fflush(stdout); +#endif + codeinfo = (CodeInfo *)(mb->CompiledCodeInfo); + + +#ifndef SEARCH_SIGCONTEXT + sc = (SIGCONTEXT *)uc; +#else /* get signal context */ if (--sc_search_times < 0) { sc = (SIGCONTEXT *)(ptr + sc_offset); } else { /* must search */ -#define SEARCH_WIDTH 50 - for (sc_offset = 0; sc_offset < SEARCH_WIDTH - 3; sc_offset++) { +#define SC_SEARCH_WIDTH 50 + for (sc_offset = 0; sc_offset < SC_SEARCH_WIDTH - 3; sc_offset++) { #if defined(linux) if ( (*((unsigned short *)(ptr)) == reg_gs) && (*((unsigned short *)(ptr + 1)) == reg_fs) && @@ -706,15 +729,14 @@ #ifdef RUNTIME_DEBUG printf("sc_offset: %d\n", sc_offset); #endif - if (sc_offset >= (SEARCH_WIDTH - 3)) { + if (sc_offset >= (SC_SEARCH_WIDTH - 3)) { printf("FATAL: cannot find struct sigcontext on stack."); JVM_Exit(1); } sc = (SIGCONTEXT *)ptr; } -#else /* SEARCH_SIGCONTEXT*/ - sc = (SIGCONTEXT *)uc; #endif /* SEARCH_SIGCONTEXT*/ + #if defined(RUNTIME_DEBUG) || (defined(GET_SIGCONTEXT) && !defined(EXC_BY_SIGNAL)) printf("sigcontext: 0x%08x\n", (int)sc); fflush(stdout); showSigcontext(sc); @@ -723,97 +745,148 @@ #if defined(EXC_BY_SIGNAL) || defined(GET_SIGCONTEXT) - if ((sig == SIGSEGV) || (sig == SIGBUS)) { -#if 1 - mb = EE()->current_frame->current_method; - /* EBP is broken on FreeBSD ??? */ -#else - mb = (struct methodblock *) *(((int32_t *)sc->SC_EBP) + 3); - /* mb is second argument of assembledCode(): 0xc(%ebp) */ -#endif -#if defined(RUNTIME_DEBUG) - printf("method(0x%x)", (int)mb); fflush(stdout); - fflush(stdout); - if (!mb) goto signal_handler_error; - printf(": %s#%s %s\n", - cbName(mb->fb.clazz), mb->fb.name, mb->fb.signature); - fflush(stdout); -#endif - codeinfo = (CodeInfo *)(mb->CompiledCodeInfo); - native_off = + native_off = ((uint32_t)sc->SC_EIP) - ((uint32_t)mb->CompiledCode); -#if defined(RUNTIME_DEBUG) - printf("native off: 0x%x\n", native_off); - fflush(stdout); +#ifdef RUNTIME_DEBUG + printf("native off: 0x%x\n", native_off); + fflush(stdout); #endif -#ifdef EXC_BY_SIGNAL - tentry = throwtableGet(codeinfo, native_off); +#ifndef EXC_BY_SIGNAL + JVM_Exit(1); +#else + tentry = throwtableGet(codeinfo, native_off); #ifdef RUNTIME_DEBUG - printf("throwentry: "); - fflush(stdout); - if (tentry) - printf("start: 0x%x, len: 0x%x, byteoff: 0x%x\n", + printf("throwentry: "); + fflush(stdout); + if (tentry) + printf("start: 0x%x, len: 0x%x, byteoff: 0x%x\n", tentry->start, tentry->len, tentry->byteoff); - else - printf(" (null)\n"); - fflush(stdout); + else + printf(" (null)\n"); + fflush(stdout); #endif /* RUNTIME_DEBUG */ - if (tentry) { - /* NullPointerException occurred */ - SignalError(NULL, JAVAPKG "NullPointerException", 0); + +#define IP_SEARCH_WIDTH 50 + if (!tentry) { /* search EIP in native code */ + uint32_t *sp = (uint32_t *)sc->SC_ESP; + uint32_t *bound = sp + IP_SEARCH_WIDTH; + + while (++sp <= bound) { + native_off = *sp - (uint32_t)mb->CompiledCode; + if ((native_off >= 0) && (native_off <= codeinfo->code_size)) { + tentry = throwtableGet(codeinfo, native_off); + if (tentry) { +#ifdef ARITHEXC_BY_SIGNAL + if (sig == SIGFPE) { + int opc = tentry->opcode; + if ((opc != opc_idiv) && (opc != opc_irem) && + (opc != opc_ldiv) && (opc != opc_lrem)) + continue; + } +#endif /* ARITHEXC_BY_SIGNAL */ + sc->SC_ESP = (uint32_t)(sp + 1); /* stack top in the frame */ + sc->SC_EIP = *sp; /* %eip on the native code */ + goto tentry_is_found; + } + } + } + goto signal_handler_error; + tentry_is_found: + } + +#ifdef NULLEXC_BY_SIGNAL + if ((sig == SIGSEGV) || (sig == SIGBUS)) { + /* NullPointerException occurred */ + SignalError(NULL, JAVAPKG "NullPointerException", 0); /* set ee->exception.exc, exception object */ + } +#endif +#if defined(NULLEXC_BY_SIGNAL) && defined(ARITHEXC_BY_SIGNAL) + else +#endif +#ifdef ARITHEXC_BY_SIGNAL + if (sig == SIGFPE) { + if ((tentry->opcode == opc_idiv) || (tentry->opcode == opc_irem)) { + if (sc->SC_ECX /* divisor */ == 0) { + /* ArithmeticException occurred */ + SignalError(NULL, JAVAPKG "ArithmeticException", "/ by zero"); + } + else if ((sc->SC_EAX /* dividend */ == 0x80000000) && + (sc->SC_ECX /* divisor */ == -1)) { + /* idiv insn. of x86 causes it: 0x80000000 / -1 */ + sc->SC_EAX = 0x80000000; + sc->SC_EDX = 0; + jump_target = sc->SC_EIP + 2; /* `+ 2' skips idiv `0xf7 0xXX' */ + } + } + else if ((tentry->opcode == opc_ldiv) || (tentry->opcode == opc_lrem)) { + uint32_t *sp = (uint32_t *)sc->SC_ESP; + sc->SC_EBP = *(sp + 4); /* *(sp + 4) is %ebp `back up'ed in ldiv */ + + /* dividend: (*(sp + 1) << 32) | *sp + divisor : (*(sp + 3) << 32) | *(sp + 2) */ + + if (!((*(sp + 2)) | (*(sp + 3)))) { + /* ArithmeticException occurred */ + SignalError(NULL, JAVAPKG "ArithmeticException", "/ by zero"); + } +#if 0 + /* functions called by ldiv (__divdi3(),__moddi3()) don't cause SIGFPE */ + else if ((*sp == 0) && (*(sp + 1) == 0x80000000) && + ((*(sp +2) & *(sp + 3)) == 0xffffffff)) { + } +#endif + } + } /* if (sig == SIGFPE) */ +#endif /* ARITHEXC_BY_SIGNAL */ - /* re-initialize signal handler - associated with raised signal */ - { - struct sigaction sigAct; + + /* re-initialize signal handler + associated with raised signal */ + { + struct sigaction sigAct; #ifndef __FreeBSD__ - static int isSigHandlerSet = 0; - if (!isSigHandlerSet) { - isSigHandlerSet = 1; + static int isSigHandlerSet = 0; + if (!isSigHandlerSet) { + isSigHandlerSet = 1; #endif - sigAct = sigActForHandler; - sigaction(sig, &sigAct, (struct sigaction *)NULL); + sigAct = sigActForHandler; + sigaction(sig, &sigAct, (struct sigaction *)NULL); #ifndef __FreeBSD__ - } + } #endif - } + } #ifdef __FreeBSD__ - /* unmask the signal */ - { - sigset_t sigmask; - sigemptyset(&sigmask); - sigaddset(&sigmask, sig); - sigprocmask(SIG_UNBLOCK, &sigmask, NULL); - } + /* unmask the signal */ + { + sigset_t sigmask; + sigemptyset(&sigmask); + sigaddset(&sigmask, sig); + sigprocmask(SIG_UNBLOCK, &sigmask, NULL); + } #endif - /* set (int32_t)bytepcoff (local variable of assembledCode) */ - *(((int32_t *)sc->SC_EBP) - 1) = tentry->byteoff; + /* set (int32_t)bytepcoff (local variable in assembledCode) */ + *(((int32_t *)sc->SC_EBP) - 1) = tentry->byteoff; - /* jump to exception handler */ - { - register uint32_t exc_handler asm("eax"); - register SIGCONTEXT *sc_ptr asm("edi"); + /* jump to exception handler */ + { + register uint32_t exc_handler asm("edi"); + register SIGCONTEXT *sc_ptr asm("edx"); - exc_handler = + exc_handler = jump_target ? jump_target : (uint32_t)(mb->CompiledCode + codeinfo->exc_handler_nativeoff); - sc_ptr = sc; - asm("movl %0,%%edx" : : "m" (sc_ptr->SC_EDX)); - asm("movl %0,%%ecx" : : "m" (sc_ptr->SC_ECX)); - asm("movl %0,%%esi" : : "m" (sc_ptr->SC_ESI)); - asm("movl %0,%%ebp" : : "m" (sc_ptr->SC_EBP)); - asm("movl %0,%%esp" : : "m" (sc_ptr->SC_ESP)); - asm("jmp *%0" : : "r" (exc_handler)); - } /* jump to exception handler */ - } /* if (tentry) ... NullPointerException occurred */ - else { /* not NullPointerException ... error ! */ - goto signal_handler_error; - } -#else /* EXC_BY_SIGNAL */ - JVM_Exit(1); -#endif /* EXC_BY_SIGNAL */ - } /* if ((sig == SIGSEGV) || (sig == SIGBUS)) */ + sc_ptr = sc; + asm("movl %0,%%esi" : : "m" (sc_ptr->SC_ESI)); + asm("movl %0,%%ebp" : : "m" (sc_ptr->SC_EBP)); + asm("movl %0,%%esp" : : "m" (sc_ptr->SC_ESP)); + + asm("movl %0,%%eax" : : "m" (sc_ptr->SC_EAX)); + asm("movl %0,%%edx" : : "m" (sc_ptr->SC_EDX)); + + asm("jmp *%0" : : "r" (exc_handler)); + } /* jump to exception handler */ +#endif /* ! EXC_BY_SIGNAL */ #endif /* EXC_BY_SIGNAL || GET_SIGCONTEXT */ return TRUE; diff -aruN shujit-0.3.0a/compiler.h shujit/compiler.h --- shujit-0.3.0a/compiler.h Sun May 23 01:34:21 1999 +++ shujit/compiler.h Wed Jun 30 22:37:22 1999 @@ -100,11 +100,18 @@ /* features */ -#define EXC_BY_SIGNAL +#define NULLEXC_BY_SIGNAL +#define ARITHEXC_BY_SIGNAL #define GET_SIGCONTEXT #undef IGNORE_DISABLE +#if defined(NULLEXC_BY_SIGNAL) || defined(ARITHEXC_BY_SIGNAL) +#define EXC_BY_SIGNAL +#endif + #ifdef RUNTIME_DEBUG +#undef NULLEXC_BY_SIGNAL +#undef ARITHEXC_BY_SIGNAL #undef EXC_BY_SIGNAL #endif @@ -124,7 +131,7 @@ # undef EXECUTEJAVA_IN_ASM # undef RESOLVE_SYMBOL_ON_CODE # undef SEARCH_SIGCONTEXT -# define LIBS_ADDDLSEG "/usr/lib/libc.so.3.1|/usr/lib/libc.so.3.0,/usr/lib/libm.so.2.0" +# define LIBS_ADDDLSEG "/usr/lib/libc.so.3|/usr/lib/libc.so.3.1|/usr/lib/libc.so.3.0,/usr/lib/libm.so.2|/usr/lib/libm.so.2.0" #else # undef EXECUTEJAVA_IN_ASM # undef RESOLVE_SYMBOL_ON_CODE @@ -137,6 +144,7 @@ # if defined(linux) # include /* for struct sigcontext */ # include /* for kernel version */ +# define SC_EAX eax # define SC_ECX ecx # define SC_EDX edx # define SC_ESI esi @@ -145,6 +153,7 @@ # define SC_ESP esp # elif defined(__FreeBSD__) # include /* for struct sigcontext */ +# define SC_EAX sc_eax # define SC_ECX sc_ecx # define SC_EDX sc_edx # define SC_ESI sc_esi @@ -152,6 +161,7 @@ # define SC_EBP sc_ebp # define SC_ESP sc_esp # else +# define SC_EAX eax # define SC_ECX ecx # define SC_EDX edx # define SC_ESI esi @@ -251,7 +261,8 @@ typedef struct throw_entry { uint32_t start; uint16_t len; - uint16_t byteoff; + unsigned char byteoff; + unsigned char opcode; } throwentry; #endif /* EXC_BY_SIGNAL */ @@ -449,8 +460,8 @@ #ifdef CODE_DB extern void throwtableExtend(CodeInfo *info, uint32_t size); #endif /* CODE_DB */ -extern void throwtableAdd(CodeInfo *info, - uint32_t start, uint16_t len, uint16_t byteoff); +extern void throwtableAdd(CodeInfo *info, uint32_t start, uint16_t len, + unsigned char byteoff, unsigned char opcode); extern throwentry *throwtableGet(CodeInfo *info, uint32_t nativeoff); #endif /* EXC_BY_SIGNAL */ diff -aruN shujit-0.3.0a/computil.c shujit/computil.c --- shujit-0.3.0a/computil.c Sat May 22 00:05:43 1999 +++ shujit/computil.c Wed Jun 30 19:20:59 1999 @@ -465,8 +465,8 @@ #endif /* CODE_DB */ -void throwtableAdd(CodeInfo *info, - uint32_t start, uint16_t len, uint16_t byteoff) { +void throwtableAdd(CodeInfo *info, uint32_t start, uint16_t len, + unsigned char byteoff, unsigned char opcode) { throwentry *entryp; if (info->throwtablelen >= info->throwtablesize) { /* extend table size */ @@ -481,6 +481,7 @@ entryp->start = start; entryp->len = len; entryp->byteoff = byteoff; + entryp->opcode = opcode; (info->throwtablelen)++; } diff -aruN shujit-0.3.0a/configure shujit/configure --- shujit-0.3.0a/configure Sat May 22 22:09:22 1999 +++ shujit/configure Thu Jul 1 12:59:17 1999 @@ -836,10 +836,12 @@ esac -# Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 +for ac_prog in objdump +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:843: checking for $ac_word" >&5 +echo "configure:845: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_objdump'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -861,7 +863,6 @@ fi done IFS="$ac_save_ifs" - test -z "$ac_cv_path_ac_objdump" && ac_cv_path_ac_objdump="no" ;; esac fi @@ -872,11 +873,15 @@ echo "$ac_t""no" 1>&6 fi +test -n "$ac_objdump" && break +done +test -n "$ac_objdump" || ac_objdump="no" + # Extract the first word of "ruby", so it can be a program name with args. set dummy ruby; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:880: checking for $ac_word" >&5 +echo "configure:885: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_ruby'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -910,10 +915,13 @@ fi +if test "$ac_ruby" = no; then + { echo "configure: error: You need ruby command to compile shuJIT." 1>&2; exit 1; } +fi # Extract the first word of "ci", so it can be a program name with args. set dummy ci; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:917: checking for $ac_word" >&5 +echo "configure:925: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_ci'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -950,7 +958,7 @@ # Extract the first word of "co", so it can be a program name with args. set dummy co; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:954: checking for $ac_word" >&5 +echo "configure:962: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_co'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -987,7 +995,7 @@ # Extract the first word of "mv", so it can be a program name with args. set dummy mv; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:991: checking for $ac_word" >&5 +echo "configure:999: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_mv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1024,7 +1032,7 @@ # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1028: checking for $ac_word" >&5 +echo "configure:1036: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_rm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1061,7 +1069,7 @@ # Extract the first word of "wc", so it can be a program name with args. set dummy wc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1065: checking for $ac_word" >&5 +echo "configure:1073: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_wc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1098,7 +1106,7 @@ # Extract the first word of "etags", so it can be a program name with args. set dummy etags; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1102: checking for $ac_word" >&5 +echo "configure:1110: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_etags'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1136,7 +1144,7 @@ # Extract the first word of "which", so it can be a program name with args. set dummy which; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1140: checking for $ac_word" >&5 +echo "configure:1148: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_which'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1174,7 +1182,7 @@ # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1178: checking for $ac_word" >&5 +echo "configure:1186: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_grep'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1213,7 +1221,7 @@ # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1217: checking for $ac_word" >&5 +echo "configure:1225: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_sed'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1251,7 +1259,7 @@ # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1255: checking for $ac_word" >&5 +echo "configure:1263: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1283,7 +1291,7 @@ echo $ac_n "checking version of gcc""... $ac_c" 1>&6 -echo "configure:1287: checking version of gcc" >&5 +echo "configure:1295: checking version of gcc" >&5 ac_ccver_string=`$ac_cc -v 2>&1 | $ac_grep 'gcc version' | $AWK '{print $3}'` case "$ac_ccver_string" in egcs*) @@ -1306,7 +1314,7 @@ echo $ac_n "checking install path of JDK""... $ac_c" 1>&6 -echo "configure:1310: checking install path of JDK" >&5 +echo "configure:1318: checking install path of JDK" >&5 # Check whether --with-jdk or --without-jdk was given. if test "${with_jdk+set}" = set; then withval="$with_jdk" @@ -1324,7 +1332,7 @@ # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1328: checking for $ac_word" >&5 +echo "configure:1336: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_java'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1364,7 +1372,7 @@ # Extract the first word of "javac", so it can be a program name with args. set dummy javac; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1368: checking for $ac_word" >&5 +echo "configure:1376: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_javac'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1401,7 +1409,7 @@ # Extract the first word of "javah", so it can be a program name with args. set dummy javah; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1405: checking for $ac_word" >&5 +echo "configure:1413: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_javah'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1438,7 +1446,7 @@ # Extract the first word of "jar", so it can be a program name with args. set dummy jar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1442: checking for $ac_word" >&5 +echo "configure:1450: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_jar'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1475,7 +1483,7 @@ # Extract the first word of "javadoc", so it can be a program name with args. set dummy javadoc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1479: checking for $ac_word" >&5 +echo "configure:1487: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_javadoc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1511,7 +1519,7 @@ echo $ac_n "checking version of JDK""... $ac_c" 1>&6 -echo "configure:1515: checking version of JDK" >&5 +echo "configure:1523: checking version of JDK" >&5 ac_jver_string=`$ac_java -version 2>&1` case "$ac_jver_string" in *\"1.1*) @@ -1542,9 +1550,9 @@ echo $ac_n "checking version of libc""... $ac_c" 1>&6 -echo "configure:1546: checking version of libc" >&5 +echo "configure:1554: checking version of libc" >&5 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1548: checking how to run the C preprocessor" >&5 +echo "configure:1556: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1559,13 +1567,13 @@ # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1569: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1577: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1576,13 +1584,13 @@ rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1586: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1594: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1593,13 +1601,13 @@ rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1603: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1611: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1624,7 +1632,7 @@ echo "$ac_t""$CPP" 1>&6 cat > conftest.$ac_ext < @@ -1649,7 +1657,7 @@ cat > conftest.$ac_ext < EOF @@ -1676,7 +1684,7 @@ fi echo $ac_n "checking type of an argument of monitorEnter()""... $ac_c" 1>&6 -echo "configure:1680: checking type of an argument of monitorEnter()" >&5 +echo "configure:1688: checking type of an argument of monitorEnter()" >&5 ac_monitor_t=`$ac_grep monitorEnter $ac_jincdir/monitor.h | $ac_sed 's/(/ /' | $ac_sed "s/.* \(.*\));.*/\1/"` echo "$ac_t""$ac_monitor_t" 1>&6 cat >> confdefs.h <> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff -aruN shujit-0.3.0a/configure.in shujit/configure.in --- shujit-0.3.0a/configure.in Sat May 22 22:09:19 1999 +++ shujit/configure.in Thu Jul 1 13:00:28 1999 @@ -74,10 +74,16 @@ esac AC_SUBST(ac_asflags) -AC_PATH_PROG(ac_objdump, objdump, no) +AC_PATH_PROGS(ac_objdump, objdump, no) AC_SUBST(ac_objdump) +if test "$ac_ruby" = no; then + AC_MSG_ERROR(Compilation need objdump (provided by GNU binutils).) +fi AC_PATH_PROG(ac_ruby, ruby, no) AC_SUBST(ac_ruby) +if test "$ac_ruby" = no; then + AC_MSG_ERROR(Compilation need ruby.) +fi AC_PATH_PROG(ac_ci, ci, no) AC_SUBST(ac_ci) AC_PATH_PROG(ac_co, co, no) @@ -196,4 +202,4 @@ dnl Checks for typedefs, structures, and compiler characteristics. -AC_OUTPUT(Makefile metavm/Makefile NET/shudo/metavm/Makefile) +AC_OUTPUT(GNUmakefile metavm/GNUmakefile NET/shudo/metavm/GNUmakefile) diff -aruN shujit-0.3.0a/gentable.rb shujit/gentable.rb --- shujit-0.3.0a/gentable.rb Fri May 14 15:41:01 1999 +++ shujit/gentable.rb Mon Jul 5 20:56:21 1999 @@ -173,8 +173,8 @@ end # _funcname -> funcname - if funcname =~ /^_/ && PLATFORM =~ /-freebsd/ - # in the case of FreeBSD + if funcname =~ /^_/ && PLATFORM =~ /-freebsd2/ + # in the case of FreeBSD 2.X funcname = funcname[1...funcname.length()] end #print "function offset: #{off}, name: #{funcname}\n" diff -aruN shujit-0.3.0a/invoker.c shujit/invoker.c --- shujit-0.3.0a/invoker.c Sat May 22 20:59:02 1999 +++ shujit/invoker.c Mon Jul 5 21:14:54 1999 @@ -127,7 +127,8 @@ compilation_done: #ifdef COMPILE_DEBUG - printf("compileAndInvokeMethod() now call invoker:\n %s#%s %s\n", + printf("compileAndInvokeMethod() now call invoker (0x%08x):\n %s#%s %s\n", + (int)mb->invoker, cbName(mb->fb.clazz), mb->fb.name, mb->fb.signature); fflush(stdout); #endif @@ -166,11 +167,7 @@ old_optop = cur_frame->optop; #if defined(EXECUTEJAVA_IN_ASM) && (JDK_VER < 12) if (cur_frame->monitor) { -printf("call monitorExit2().\n"); -fflush(stdout); monitorExit2(ee, (MONITOR_T)cur_frame->monitor); -printf("monitorExit2() done.\n"); -fflush(stdout); } #endif /* EXECUTEJAVA_IN_ASM */ cur_frame = cur_frame->prev; diff -aruN shujit-0.3.0a/metavm/GNUmakefile shujit/metavm/GNUmakefile --- shujit-0.3.0a/metavm/GNUmakefile Thu Jan 1 09:00:00 1970 +++ shujit/metavm/GNUmakefile Mon Jul 5 21:34:05 1999 @@ -0,0 +1,94 @@ +# makefile for native part of MetaVM +# $Id$ + +# environment + +JDK_VER = 12 +J_INCDIR = /usr/local/java/include-old + +# command + +CC = /usr/bin/egcs +CI = /usr/bin/ci +CO = /usr/bin/co +MV = /bin/mv +RM = /bin/rm +WC = /usr/bin/wc +JAVAH = /usr/local/java/bin/javah +ifeq (${JDK_VER}, 11) +JAVAH_OLD = ${JAVAH} +JAVAH_JNI = ${JAVAH} -jni +else +JAVAH_OLD = ${JAVAH} -old +JAVAH_JNI = ${JAVAH} +endif + + +INCDIR = -I${J_INCDIR} -I${J_INCDIR}/linux -I${J_INCDIR}/genunix -I${J_INCDIR}/freebsd -I. + +CDEBUGFLAGS = -O2 +CFLAGS = -pipe -fPIC ${CDEBUGFLAGS} ${INCDIR} + +OBJS = objectid.o vmop.o controller.o proxy.o byvalue.o type.o + + +all: headers_of_primitive_types NET_shudo_metavm_Proxy_old.h NET_shudo_metavm_VMAddress_old.h ${OBJS} + +headers_of_primitive_types: java_lang_Boolean_old.h java_lang_Byte_old.h java_lang_Character_old.h java_lang_Short_old.h java_lang_Integer_old.h java_lang_Long_old.h java_lang_Float_old.h java_lang_Double_old.h + +include ../cmd.mk + +clean: + ${RM} -f ${TARGET} ${OBJS} *~ java_*.h NET_shudo_metavm_*.[hc] + +wc: + ${WC} *.[hc] + + +metavm.h: NET_shudo_metavm_VMAddress_old.h +objectid.o: NET_shudo_metavm_ObjectID.h +vmop.o: NET_shudo_metavm_VMOperations.h +controller.o: NET_shudo_metavm_MetaVM.h +proxy.o: NET_shudo_metavm_Proxy.h NET_shudo_metavm_VMAddress_old.h +type.o: NET_shudo_metavm_TypeUtil.h + +NET_shudo_metavm_ObjectID.h: ../NET/shudo/metavm/ObjectID.class + $(JAVAH_JNI) NET.shudo.metavm.ObjectID +NET_shudo_metavm_VMOperations.h: ../NET/shudo/metavm/VMOperations.class + $(JAVAH_JNI) NET.shudo.metavm.VMOperations +NET_shudo_metavm_MetaVM.h: ../NET/shudo/metavm/MetaVM.class + $(JAVAH_JNI) NET.shudo.metavm.MetaVM +NET_shudo_metavm_TypeUtil.h: ../NET/shudo/metavm/TypeUtil.class + $(JAVAH_JNI) NET.shudo.metavm.TypeUtil +NET_shudo_metavm_Proxy.h: ../NET/shudo/metavm/Proxy.class + $(JAVAH_JNI) NET.shudo.metavm.Proxy +NET_shudo_metavm_Proxy_old.h: ../NET/shudo/metavm/Proxy.class + $(JAVAH_OLD) NET.shudo.metavm.Proxy + $(MV) NET_shudo_metavm_Proxy.h NET_shudo_metavm_Proxy_old.h +NET_shudo_metavm_VMAddress_old.h: ../NET/shudo/metavm/VMAddress.class + $(JAVAH_OLD) NET.shudo.metavm.VMAddress + $(MV) NET_shudo_metavm_VMAddress.h NET_shudo_metavm_VMAddress_old.h +java_lang_Boolean_old.h: + $(JAVAH_OLD) java.lang.Boolean + $(MV) java_lang_Boolean.h java_lang_Boolean_old.h +java_lang_Byte_old.h: + $(JAVAH_OLD) java.lang.Byte + $(MV) java_lang_Byte.h java_lang_Byte_old.h +java_lang_Character_old.h: + $(JAVAH_OLD) java.lang.Character + $(MV) java_lang_Character.h java_lang_Character_old.h +java_lang_Short_old.h: + $(JAVAH_OLD) java.lang.Short + $(MV) java_lang_Short.h java_lang_Short_old.h +java_lang_Integer_old.h: + $(JAVAH_OLD) java.lang.Integer + $(MV) java_lang_Integer.h java_lang_Integer_old.h +java_lang_Long_old.h: + $(JAVAH_OLD) java.lang.Long + $(MV) java_lang_Long.h java_lang_Long_old.h +java_lang_Float_old.h: + $(JAVAH_OLD) java.lang.Float + $(MV) java_lang_Float.h java_lang_Float_old.h +java_lang_Double_old.h: + $(JAVAH_OLD) java.lang.Double + $(MV) java_lang_Double.h java_lang_Double_old.h diff -aruN shujit-0.3.0a/metavm/GNUmakefile.in shujit/metavm/GNUmakefile.in --- shujit-0.3.0a/metavm/GNUmakefile.in Thu Jan 1 09:00:00 1970 +++ shujit/metavm/GNUmakefile.in Sat May 22 20:38:39 1999 @@ -0,0 +1,94 @@ +# makefile for native part of MetaVM +# $Id$ + +# environment + +JDK_VER = @ac_jver@ +J_INCDIR = @ac_jincdir@ + +# command + +CC = @ac_cc@ +CI = @ac_ci@ +CO = @ac_co@ +MV = @ac_mv@ +RM = @ac_rm@ +WC = @ac_wc@ +JAVAH = @ac_javah@ +ifeq (${JDK_VER}, 11) +JAVAH_OLD = ${JAVAH} +JAVAH_JNI = ${JAVAH} -jni +else +JAVAH_OLD = ${JAVAH} -old +JAVAH_JNI = ${JAVAH} +endif + + +INCDIR = -I${J_INCDIR} -I${J_INCDIR}/linux -I${J_INCDIR}/genunix -I${J_INCDIR}/freebsd -I. + +CDEBUGFLAGS = -O2 +CFLAGS = -pipe -fPIC ${CDEBUGFLAGS} ${INCDIR} + +OBJS = objectid.o vmop.o controller.o proxy.o byvalue.o type.o + + +all: headers_of_primitive_types NET_shudo_metavm_Proxy_old.h NET_shudo_metavm_VMAddress_old.h ${OBJS} + +headers_of_primitive_types: java_lang_Boolean_old.h java_lang_Byte_old.h java_lang_Character_old.h java_lang_Short_old.h java_lang_Integer_old.h java_lang_Long_old.h java_lang_Float_old.h java_lang_Double_old.h + +include ../cmd.mk + +clean: + ${RM} -f ${TARGET} ${OBJS} *~ java_*.h NET_shudo_metavm_*.[hc] + +wc: + ${WC} *.[hc] + + +metavm.h: NET_shudo_metavm_VMAddress_old.h +objectid.o: NET_shudo_metavm_ObjectID.h +vmop.o: NET_shudo_metavm_VMOperations.h +controller.o: NET_shudo_metavm_MetaVM.h +proxy.o: NET_shudo_metavm_Proxy.h NET_shudo_metavm_VMAddress_old.h +type.o: NET_shudo_metavm_TypeUtil.h + +NET_shudo_metavm_ObjectID.h: ../NET/shudo/metavm/ObjectID.class + $(JAVAH_JNI) NET.shudo.metavm.ObjectID +NET_shudo_metavm_VMOperations.h: ../NET/shudo/metavm/VMOperations.class + $(JAVAH_JNI) NET.shudo.metavm.VMOperations +NET_shudo_metavm_MetaVM.h: ../NET/shudo/metavm/MetaVM.class + $(JAVAH_JNI) NET.shudo.metavm.MetaVM +NET_shudo_metavm_TypeUtil.h: ../NET/shudo/metavm/TypeUtil.class + $(JAVAH_JNI) NET.shudo.metavm.TypeUtil +NET_shudo_metavm_Proxy.h: ../NET/shudo/metavm/Proxy.class + $(JAVAH_JNI) NET.shudo.metavm.Proxy +NET_shudo_metavm_Proxy_old.h: ../NET/shudo/metavm/Proxy.class + $(JAVAH_OLD) NET.shudo.metavm.Proxy + $(MV) NET_shudo_metavm_Proxy.h NET_shudo_metavm_Proxy_old.h +NET_shudo_metavm_VMAddress_old.h: ../NET/shudo/metavm/VMAddress.class + $(JAVAH_OLD) NET.shudo.metavm.VMAddress + $(MV) NET_shudo_metavm_VMAddress.h NET_shudo_metavm_VMAddress_old.h +java_lang_Boolean_old.h: + $(JAVAH_OLD) java.lang.Boolean + $(MV) java_lang_Boolean.h java_lang_Boolean_old.h +java_lang_Byte_old.h: + $(JAVAH_OLD) java.lang.Byte + $(MV) java_lang_Byte.h java_lang_Byte_old.h +java_lang_Character_old.h: + $(JAVAH_OLD) java.lang.Character + $(MV) java_lang_Character.h java_lang_Character_old.h +java_lang_Short_old.h: + $(JAVAH_OLD) java.lang.Short + $(MV) java_lang_Short.h java_lang_Short_old.h +java_lang_Integer_old.h: + $(JAVAH_OLD) java.lang.Integer + $(MV) java_lang_Integer.h java_lang_Integer_old.h +java_lang_Long_old.h: + $(JAVAH_OLD) java.lang.Long + $(MV) java_lang_Long.h java_lang_Long_old.h +java_lang_Float_old.h: + $(JAVAH_OLD) java.lang.Float + $(MV) java_lang_Float.h java_lang_Float_old.h +java_lang_Double_old.h: + $(JAVAH_OLD) java.lang.Double + $(MV) java_lang_Double.h java_lang_Double_old.h diff -aruN shujit-0.3.0a/metavm/Makefile.in shujit/metavm/Makefile.in --- shujit-0.3.0a/metavm/Makefile.in Sat May 22 20:38:39 1999 +++ shujit/metavm/Makefile.in Thu Jan 1 09:00:00 1970 @@ -1,94 +0,0 @@ -# makefile for native part of MetaVM -# $Id$ - -# environment - -JDK_VER = @ac_jver@ -J_INCDIR = @ac_jincdir@ - -# command - -CC = @ac_cc@ -CI = @ac_ci@ -CO = @ac_co@ -MV = @ac_mv@ -RM = @ac_rm@ -WC = @ac_wc@ -JAVAH = @ac_javah@ -ifeq (${JDK_VER}, 11) -JAVAH_OLD = ${JAVAH} -JAVAH_JNI = ${JAVAH} -jni -else -JAVAH_OLD = ${JAVAH} -old -JAVAH_JNI = ${JAVAH} -endif - - -INCDIR = -I${J_INCDIR} -I${J_INCDIR}/linux -I${J_INCDIR}/genunix -I${J_INCDIR}/freebsd -I. - -CDEBUGFLAGS = -O2 -CFLAGS = -pipe -fPIC ${CDEBUGFLAGS} ${INCDIR} - -OBJS = objectid.o vmop.o controller.o proxy.o byvalue.o type.o - - -all: headers_of_primitive_types NET_shudo_metavm_Proxy_old.h NET_shudo_metavm_VMAddress_old.h ${OBJS} - -headers_of_primitive_types: java_lang_Boolean_old.h java_lang_Byte_old.h java_lang_Character_old.h java_lang_Short_old.h java_lang_Integer_old.h java_lang_Long_old.h java_lang_Float_old.h java_lang_Double_old.h - -include ../cmd.mk - -clean: - ${RM} -f ${TARGET} ${OBJS} *~ java_*.h NET_shudo_metavm_*.[hc] - -wc: - ${WC} *.[hc] - - -metavm.h: NET_shudo_metavm_VMAddress_old.h -objectid.o: NET_shudo_metavm_ObjectID.h -vmop.o: NET_shudo_metavm_VMOperations.h -controller.o: NET_shudo_metavm_MetaVM.h -proxy.o: NET_shudo_metavm_Proxy.h NET_shudo_metavm_VMAddress_old.h -type.o: NET_shudo_metavm_TypeUtil.h - -NET_shudo_metavm_ObjectID.h: ../NET/shudo/metavm/ObjectID.class - $(JAVAH_JNI) NET.shudo.metavm.ObjectID -NET_shudo_metavm_VMOperations.h: ../NET/shudo/metavm/VMOperations.class - $(JAVAH_JNI) NET.shudo.metavm.VMOperations -NET_shudo_metavm_MetaVM.h: ../NET/shudo/metavm/MetaVM.class - $(JAVAH_JNI) NET.shudo.metavm.MetaVM -NET_shudo_metavm_TypeUtil.h: ../NET/shudo/metavm/TypeUtil.class - $(JAVAH_JNI) NET.shudo.metavm.TypeUtil -NET_shudo_metavm_Proxy.h: ../NET/shudo/metavm/Proxy.class - $(JAVAH_JNI) NET.shudo.metavm.Proxy -NET_shudo_metavm_Proxy_old.h: ../NET/shudo/metavm/Proxy.class - $(JAVAH_OLD) NET.shudo.metavm.Proxy - $(MV) NET_shudo_metavm_Proxy.h NET_shudo_metavm_Proxy_old.h -NET_shudo_metavm_VMAddress_old.h: ../NET/shudo/metavm/VMAddress.class - $(JAVAH_OLD) NET.shudo.metavm.VMAddress - $(MV) NET_shudo_metavm_VMAddress.h NET_shudo_metavm_VMAddress_old.h -java_lang_Boolean_old.h: - $(JAVAH_OLD) java.lang.Boolean - $(MV) java_lang_Boolean.h java_lang_Boolean_old.h -java_lang_Byte_old.h: - $(JAVAH_OLD) java.lang.Byte - $(MV) java_lang_Byte.h java_lang_Byte_old.h -java_lang_Character_old.h: - $(JAVAH_OLD) java.lang.Character - $(MV) java_lang_Character.h java_lang_Character_old.h -java_lang_Short_old.h: - $(JAVAH_OLD) java.lang.Short - $(MV) java_lang_Short.h java_lang_Short_old.h -java_lang_Integer_old.h: - $(JAVAH_OLD) java.lang.Integer - $(MV) java_lang_Integer.h java_lang_Integer_old.h -java_lang_Long_old.h: - $(JAVAH_OLD) java.lang.Long - $(MV) java_lang_Long.h java_lang_Long_old.h -java_lang_Float_old.h: - $(JAVAH_OLD) java.lang.Float - $(MV) java_lang_Float.h java_lang_Float_old.h -java_lang_Double_old.h: - $(JAVAH_OLD) java.lang.Double - $(MV) java_lang_Double.h java_lang_Double_old.h diff -aruN shujit-0.3.0a/txt/memo shujit/txt/memo --- shujit-0.3.0a/txt/memo Sun May 23 23:43:40 1999 +++ shujit/txt/memo Mon Jul 5 21:21:17 1999 @@ -2,7 +2,7 @@ - JDK 1.2 での動作テスト。 CaffeineMark, Swing。 AWT を動作させるため、フォントの設定をする。 - - FreeBSD, egcs 1.1.X, gcc 2.7.2.X での動作確認。対応。 + - JNI, native methods の動作確認。 - 関数名のシンボル頭に `_' が付くか付かないか、つまり ELF か a.out かを、 configure で判定。 - コンパイル中のメソッドが呼ばれた場合の対策