diff -up frysk-0.4/frysk-common/frysk-common.ac.jni frysk-0.4/frysk-common/frysk-common.ac --- frysk-0.4/frysk-common/frysk-common.ac.jni 2016-04-13 10:57:04.450272141 -0400 +++ frysk-0.4/frysk-common/frysk-common.ac 2016-04-13 10:57:04.468272119 -0400 @@ -43,9 +43,6 @@ AC_CANONICAL_HOST - -AC_ARG_VAR([GCJFLAGS], [GCJ compiler flags]) - dnl This test is used by `elfutils' and as we share its interface we need dnl to have consistent ABI of any structures possibly containing `off_t'. dnl This test must come as early as possible after the compiler configuration @@ -76,34 +73,7 @@ if test "x$ac_env_CFLAGS_set" != xset; t fi AM_PROG_AS - -# XXX: AM_PROG_GCJ doesn't take arguments, hack around it by first -# explictly searching for the GCJ program pushing it into the -# environment where AM_PROG_GCJ will find it. - -AC_CHECK_PROGS([GCJ], [gcj4 gcj], [gcj]) AM_PROG_GCJ -if test "x$ac_env_GCJFLAGS_set" != xset; then - test x"$GCJFLAGS" = "x-g -O2" && GCJFLAGS="-g -O" -fi - -# Find all the GCJ utilities. Prefer gcc4. - -AC_CHECK_PROGS([GCJH], [gcjh4 gcjh gjavah]) -# gjavah defaults to jni, while gcjh defaults to cni. -# gcjh doesn't support -cni, only -jni. -GCJHFLAGS="" -test x"${GCJH}" = xgjavah && GCJHFLAGS="-cni" -AC_SUBST([GCJHFLAGS]) -AC_CHECK_PROGS([JAR], [fastjar4 fastjar jar], [fastjar]) -AC_CHECK_PROGS([GCJ_DBTOOL], [gcj-dbtool4 gcj-dbtool], [gcj-dbtool]) -AC_CHECK_PROGS([GIJ], [gij4 gij], [gij]) - -# GCJ for Java 1.5 does not include jv-scan. If it wasn't found, mark -# it as such. -AC_CHECK_PROGS([JV_SCAN], [jv-scan4 jv-scan], [no]) -AM_CONDITIONAL([HAVE_JV_SCAN], test x"${JV_SCAN}" != xno) - # Check for the ECJ compiler. @@ -125,63 +95,15 @@ AC_DEFUN([AC_LANG_COMPILER(Java)], []) AU_DEFUN([AC_LANG_JAVAC], [AC_LANG(Java)]) AC_LANG(Java) - -# Two possible compilers: either GCJ (wrapper round ECJ); or ECJ. In -# the latter case, need to explicitly run compiler from within the GIJ -# runtime so that ECJ sees the classpath environment, in particular -# things like gnu.gcj.RawDataManaged. Start out assuming GCJ (with -# the -fsource=1.4 flag), if that fails, fall back to ECJ. - -# See gcj accepts -fsource=1.4, if not only use the warning flags. If -# it is available also use it for the GCJFLAGS. - -AC_MSG_CHECKING([for working java compiler]) -JAVAC=${JAVAC:-${GCJ} -C -fsource=1.4} -JAVACFLAGS=${JAVACFLAGS:-${GCJFLAGS} -g -classpath \$(SOURCEPATH):\$(CLASSPATH)} -AC_COMPILE_IFELSE([public class conftest{}], - [JAVAC_IS=gcj - if test "x$ac_env_GCJFLAGS_set" != xset; then - GCJFLAGS="$GCJFLAGS -fsource=1.4" - fi], - [JAVAC_IS=ecj - JAVAC='$(GIJ) --classpath $(ECJ_JAR):$(CLASSPATH) org.eclipse.jdt.internal.compiler.batch.Main -1.4' - JAVACFLAGS='-warn:+semicolon -sourcepath $(SOURCEPATH) -classpath $(CLASSPATH)']) +JAVAC='$(JAVA) -cp $(ECJ_JAR):$(CLASSPATH) org.eclipse.jdt.internal.compiler.batch.Main -1.4' +JAVACFLAGS='-warn:+semicolon -sourcepath $(SOURCEPATH) -classpath $(CLASSPATH)' AC_SUBST([JAVAC]) AC_SUBST([JAVACFLAGS]) -AC_SUBST([JAVAC_IS]) -AC_MSG_RESULT([${JAVAC_IS} ($JAVAC)]) - -# Some versions of gcj don't support -Wall. Some versions generate -# good warnings without it. So explictily test for it. - -AC_MSG_CHECKING([whether GCJ needs -Wall]) -if test "x$ac_env_GCJFLAGS_set" == xset ; then - GCJ_WALL="not needed" -elif test x"${JAVAC_IS}" = xgcj ; then - # A newer GCJ (using it for JAVAC) which has a good - # default set of warnings so do not need -Wall. However, - # older GCJs barf on stray semicolons so always check for them - # to help with compatibility. - GCJ_WALL=-Wextraneous-semicolon - JAVACFLAGS="$JAVACFLAGS ${GCJ_WALL}" - GCJFLAGS="$GCJFLAGS ${GCJ_WALL}" -else - # Older GCJ (not using it for JAVAC) need the full gamit. - GCJ_WALL="-Wextraneous-semicolon -Wall" - GCJFLAGS="$GCJFLAGS ${GCJ_WALL}" -fi -AC_MSG_RESULT([${GCJ_WALL}]) - -# Always use GIJ as the byte code interpreter. java programs, run -# during the build, need to see the GNU Java environment. That -# environment contains classes such as gnu.gcj.RawData which can be -# found using reflection. - -JAVA="${JAVA:-$GIJ}" +JAVA="${JAVA:-java}" AC_SUBST([JAVA]) - +AC_CHECK_PROGS([JAR], [fastjar4 fastjar jar], [fastjar]) # Check for the availablity of fig2dev AC_PATH_PROG(FIG2DEV, fig2dev) @@ -247,15 +169,3 @@ AC_SUBST([lib64dir]) FRYSK_DO_ARCH32_TEST FRYSK_WERROR FRYSK_COVERAGE - -AC_MSG_CHECKING([direct .jar to .o compilation (--enable-jar-compile)]) -AC_ARG_ENABLE([jar-compile], - [ --enable-jar-compile Enable direct compilation of jars], - [case "${enableval}" in - yes) jar_compile=yes ;; - no) jar_compile=no;; - *) AC_MSG_ERROR([bad value ${enableval} for --enable-jar-compile]) ;; - esac], - [jar_compile=yes]) -AC_MSG_RESULT([$jar_compile]) -AM_CONDITIONAL([JAR_COMPILE], [test x$jar_compile = xyes]) diff -up frysk-0.4/frysk-common/Makefile.gen.sh.jni frysk-0.4/frysk-common/Makefile.gen.sh --- frysk-0.4/frysk-common/Makefile.gen.sh.jni 2016-04-13 10:57:04.452272139 -0400 +++ frysk-0.4/frysk-common/Makefile.gen.sh 2016-04-13 10:57:04.468272119 -0400 @@ -40,10 +40,7 @@ if test $# -eq 0 ; then cat <&2 -Usage: $0 [ --cni | --jni ] ... <.jar-file>... <_JAR-macro>... - ---cni: Include CNI directories in build. ---jni: Include JNI directories in build and build with JNI abi. +Usage: $0 ... <.jar-file>... <_JAR-macro>... : @@ -66,8 +63,6 @@ EOF exit 1 fi -cni=false -jni=false dirs= jars= JARS= @@ -75,8 +70,6 @@ GEN_ARGS="$@" while test $# -gt 0 do case "$1" in - --cni ) cni=true ;; - --jni ) jni=true ;; *.jar ) jars="${jars} $1" ;; *_JAR ) JARS="${JARS} $1" ;; * ) dirs="${dirs} $1" ;; @@ -121,13 +114,10 @@ JARS=`echo ${JARS}` -o -path '[A-Za-z]*\.cxx-in' -print \ -o -path '[A-Za-z]*\.c-in' -print \ -o -path '[A-Za-z]*\.cxx' -print \ - -o -path '*/cni/[A-Za-z]*\.[sS]' -print \ -o -path '*/jni/[A-Za-z]*\.[sS]' -print \ -o -type f -name 'test*' -print ) \ -| if $cni ; then cat ; else grep -v '/cni/' ; fi \ -| if $jni ; then cat ; else grep -v '/jni/' ; fi \ -| sort -f > files.tmp +| grep -v -e '\/cni\/' | sort -f > files.tmp if cmp files.tmp files.list > /dev/null 2>&1 then @@ -404,19 +394,11 @@ print_jar_rule () # print_jar_rule $1 $2 $1.jar: \$($2_JAR) cp \$($2_JAR) $1.jar -BUILT_SOURCES += $1.jar +#BUILT_SOURCES += $1.jar +# For moment bundle these into frysk's private java directory +java_DATA += $1.jar GEN_JARS += $1.jar -noinst_LIBRARIES += libfrysk-$1.a -libfrysk_$1_a_LIBADD = $1.o -$1.o: $1.jar -libfrysk_$1_a_SOURCES = -libfrysk_$1_so_SOURCES = -frysk_$1_db_SOURCES = -CLEANFILES += $1.jar $1.o libfrysk-$1.a libfrysk-$1.so -libfrysk-$1.so: libfrysk-$1.a -noinst_PROGRAMS += frysk-$1.db -solib_PROGRAMS += libfrysk-$1.so -frysk-$1.db: libfrysk-$1.so $1.jar +CLEANFILES += $1.jar EOF } @@ -458,32 +440,8 @@ done test x"${dirs}" = x && exit 0 - -print_header "... the lib${GEN_DIRNAME}.a skeleton" - -sources=lib${GEN_MAKENAME}_a_SOURCES - -# Most of the directory's sources will be built into a single archive -# (.a). Start with a skeleton for that archive and then accumulate -# the relevant files. -automake_variable ${sources} = - cat <> ${name}.tmp + echo exec /usr/bin/java -cp \"\$(javadir)/*\" ${name} \"\\\$\$@\" >> ${name}.tmp + chmod a+x ${name}.tmp + mv ${name}.tmp ${name} +EOF fi done || exit 1 done @@ -566,9 +529,6 @@ for suffix in .java-in .java-sh .mkenum d=`dirname ${file}` b=`basename ${file} ${suffix}` name="${d}/${b}${s}" - echo "if !JAR_COMPILE" - echo "${sources} += ${file}" - echo "endif" echo "BUILT_SOURCES += ${name}" echo "SCRIPT_BUILT += ${name}" case "${suffix}" in @@ -598,7 +558,7 @@ generate_compile () fi # Generate the rules for 32-bit compile echo_arch32_PROGRAMS ${name} ${name}.${suffix} - else + elif test x"${sources}" != x- ; then automake_variable ${sources} += ${file} fi case "${file}" in @@ -618,60 +578,6 @@ generate_compile () esac } -# What type of build? -if $cni ; then - : default -elif $jni ; then - echo "AM_GCJFLAGS += -fjni" -else - : default -fi - -# Grep the *.cxx and *.hxx files forming a list of included files. -# Assume these are all generated from .class files found in the master -# .jar. - -generate_cni_header () { - local file=$1 - local d=$2 - local b=$3 - local suffix=$4 - local _file=`echo $file | tr '[/.]' '[__]'` - sed -n \ - -e 's,#include "\(.*\)\.h".*,include - \1,p' \ - -e 's,#include \([A-Z][A-Z0-9_]*\).*,minclude \1 -,p' \ - -e 's,#define \([A-Z0-9_]*\) "\(.*\)\.h".*,define \1 \2,p' \ - < $file > $$.tmp - while read action m h j; do - echo "# file=$file action=$action m=$m h=$h" - if test "$action" = "minclude" ; then - # Assume file defining macro depends on this file - automake_variable $m = \$\($_file\) - elif has_java_source ${h} ; then - echo "JAVAH_CNI_BUILT += ${h}.h" - echo "CLEANFILES += ${h}.h" - echo "CLEANFILES += ${h}\\\$\$*.h" - j=`echo ${h} | tr '[_]' '[/]'` - echo "${h}.h: $j.java | ${GEN_DIRNAME}.jar" - case $action in - include) - case "$suffix" in - cxx) echo "$d/$b.o: ${h}.h" ;; - hxx) # remember what this file includes - automake_variable $_file += ${h}.h ;; - esac - ;; - define) - echo "$d/$b.o: ${h}.h" - # Assume file using this macro is a dependency. - echo "$d/$b.o: \$($m)" - ;; - esac - fi - done < $$.tmp - rm -f $$.tmp -} - # Grep the *.cxx and *.hxx files forming a list of classes that are # native. @@ -785,9 +691,6 @@ BEGIN { FS = "=" } echo "$d/$c: $d/$b.antlred" echo "BUILT_SOURCES += $d/$c" echo "ANTLR_BUILT += $d/$c" - echo "if !JAR_COMPILE" - echo "${sources} += $d/$c" - echo "endif" done done @@ -884,10 +787,6 @@ while read file dir base suffix ; do echo "" case $file in - */cni/*.cxx | */cni/*.cxx-in | */cni/*.cxx-sh | */cni/*.hxx) - generate_cni_header $file $dir $base $suffix - generate_compile $file $dir $base $suffix ${sources} - ;; */jni/*.cxx | */jni/*.cxx-in | */jni/*.cxx-sh | jnixx/*.cxx ) generate_jnixx_class $file $dir $base $suffix generate_compile $file $dir $base $suffix \ @@ -897,8 +796,8 @@ while read file dir base suffix ; do ;; *.cxx | *.c | *.S | *.cxx-in | *.c-in | *.S-in \ | *.cxx-sh | *.c-sh | *.S-sh ) - # Non-cni/jni source. - generate_compile $file $dir $base $suffix ${sources} + # Non-jni source (presumably with main). + generate_compile $file $dir $base $suffix - ;; esac diff -up frysk-0.4/frysk-common/Makefile.rules.jni frysk-0.4/frysk-common/Makefile.rules --- frysk-0.4/frysk-common/Makefile.rules.jni 2016-04-13 10:57:04.461272128 -0400 +++ frysk-0.4/frysk-common/Makefile.rules 2016-04-13 10:57:04.468272119 -0400 @@ -77,7 +77,6 @@ man_MANS = LDADD = ANTLR_BUILT = SCRIPT_BUILT = -JAVAH_CNI_BUILT = root_srcdir = $(dir $(top_srcdir)) abs_root_srcdir = $(dir $(abs_top_srcdir)) @@ -140,21 +139,6 @@ ACLOCAL_AMFLAGS = -I common/m4 SOURCEPATH = $(subst $(space),:,$(strip $(GEN_SOURCEPATH))) CLASSPATH = $(subst $(space),:,$(strip $(GEN_CLASSPATH))) -DBPATH = $(subst $(space),:,$(strip \ - $(patsubst %.jar,%.db,$(filter %.jar,$(GEN_CLASSPATH))) \ - $(foreach dir,$(patsubst %/$(JAVAROOT),%,$(filter-out %.jar,$(GEN_CLASSPATH))),$(dir)/$(notdir $(dir)).db) \ - )) - -# XXX: GCJ: I think there should be a -Wextraneous-throws; I think -# -Wno-deprecated is backward; I think -Wredundant-modifiers is broken -# with gcc4. It appears to complain about abstract methods in a -# non-abstract class when the class actually is abstract. - -AM_GCJFLAGS = \ - $(patsubst %,-I%,$(GEN_SOURCEPATH) $(GEN_CLASSPATH)) \ - -fPIC \ - $(ZZZ) - AM_CXXFLAGS = \ -I$(srcdir) \ @@ -163,6 +147,7 @@ AM_CXXFLAGS = \ -I/usr/include/elfutils \ -I$(srcdir)/../frysk-imports/libunwind/include \ -I$(top_builddir)/../frysk-imports/libunwind/include \ + -I/usr/lib/jvm/java/include -I/usr/lib/jvm/java/include/linux \ -fPIC \ $(ZZZ) @@ -192,7 +177,6 @@ jni: ${GEN_DIRNAME}.jar .PHONY: built-sources built-sources: $(BUILT_SOURCES) $(ANTLR_BUILT): | $(SCRIPT_BUILT) -$(JAVAH_CNI_BUILT): | $(SCRIPT_BUILT) $(ANTLR_BUILT) # Rules for building a .java file from any of a .mkclass file, a @@ -345,8 +329,6 @@ TestRunner.jar: TestRunner.java # Make gets confused about which root to build TestRunner.o from - # .jar or .java, spell it out. -TestRunner.o: TestRunner.java - $(GCJCOMPILE) -c $< TestRunner.java: common/TestRunner.java-in $(SUBST) @@ -404,37 +386,13 @@ Runner: chmod a+x $@.tmp mv $@.tmp $@ -JniRunner: +TestRunner: rm -f $@ echo "#!/bin/sh" >> $@.tmp echo "exec ./Runner TestRunner \"\$$@\"" >> $@.tmp chmod a+x $@.tmp mv $@.tmp $@ -# Generate one or more .h files, one per named class, and using CNI, -# from the corresponding .java file. Anonymous classes are pruned. - -# This assumes that the directories .jar file has already been built. - -.java.h: - b=`basename $*` ; \ - d=`dirname $*` ; \ - classes=`$(JAR) tf $(GEN_DIRNAME).jar | grep \ - -e $$d/$$b'\.class' \ - -e $$d/$$b'$$[^0-9]*\.class' \ - | sed -e 's,.class$$,,'`; \ - echo $$classes ; \ - for class in $$classes ; do \ - outputdir=`dirname $$class`; \ - outputfile=`basename $$class`.h; \ - echo "$$class => $$outputdir/$$outputfile"; \ - rm -f $$outputdir/$$outputfile ; \ - $(GCJH) -I $(GEN_DIRNAME).jar \ - -o $$outputdir/$$outputfile \ - $(GCJHFLAGS) $$class ; \ - done - - # Shared library rule (for moment assume that .a contains PIC code). SUFFIXES += .so .a.so: @@ -463,6 +421,7 @@ JNI_OBJECT_LIST = lib$(GEN_DIRNAME)-jni.so: $(JNI_ARCHIVE_LIST) $(JNI_OBJECT_LIST) lib$(GEN_DIRNAME)-jni.so: lib$(GEN_DIRNAME)-jni.a soname=`basename $@` ; \ + echo soname=$$soname ; \ $(CC) -shared -o $@.tmp \ -Wl,--whole-archive \ -Wl,$< \ @@ -485,9 +444,11 @@ solibdir = $(libdir) solib_PROGRAMS = # The shared java directory (typically /usr/share/java/; contains -# things like .jar files. +# things like .jar files) but here is architecture specific as frsyk, +# it turns out, has some 32vs64 java code - see bug 211824 in +# fedoraproject.org -javadir = $(datadir)/java +javadir = $(pkglibdir)/java java_DATA = # Assembler rule. @@ -505,57 +466,7 @@ $(srcdir)/Makefile.gen: $(srcdir)/common autogen: clean $(SHELL) $(srcdir)/autogen.sh -# Given a .jar, just convert it into a .o, and a .db - SUFFIXES += .jar -.jar.o: - $(GCJCOMPILE) -c $< - -# Since automake only adds GCJCOMPILE to Makefile.in when its seen -# .java source, provide our own definition. -GCJCOMPILE ?= $(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS) - -SUFFIXES += .db -.jar.db: - $(GCJ_DBTOOL) -n $@.tmp - $(GCJ_DBTOOL) -a $@.tmp $*.jar lib$*.so - mv $@.tmp $@ - -# Given a .java file convert it to a .o file. - -# XXX: GCJ has a bug where it totally scrambles nested classes with -# identical names. Reject any code with duplicate class names. - -# XXX: GCJ has a bug where, when given a -Werror fail, it still exits -# with success. Hack around this by, when -Werror was specified, -# saving the message in a log file and then checking that it is empty. - -.java.o: -if HAVE_JV_SCAN - dups=`$(JV_SCAN) --list-class $< \ - | tr '[ ]' '[\n]' \ - | sed -n -e 's,^.*$$\([A-Z]\),\1,p' \ - | sort | uniq -d` ; \ - if test x"$$dups" != x ; then \ - echo "Duplicate class names tickle a GCJ bug: $$dups" ; \ - exit 1 ; \ - fi -endif - depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \ - if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $< 2>&1 \ - | tee $*.log ; then : ; else \ - rm $*.log ; \ - exit 1 ; \ - fi ; \ - if test -s $*.log \ - && expr " $(GCJCOMPILE) " : '.* -Werror ' > /dev/null ; then \ - rm -f "$$depbase.Tpo"; \ - rm -f $*.log ; \ - rm -f $@ ; \ - exit 1 ; \ - fi ; \ - mv -f "$$depbase.Tpo" "$$depbase.Po"; \ - rm -f $*.log # Rule for generating ANTLR output that compiles cleanly using the # current compiler. The problem here is that raw ANTLR output @@ -609,20 +520,13 @@ SUFFIXES += .antlred .g echo "Parsing compiler warnings from $$b..." ; \ rm -f $$t/*.antlr-fixes ; \ rm -rf $$t/classes ; mkdir -p $$t/classes ; \ - case "$(JAVAC_IS)" in \ - gcj) $(JAVAC) $(JAVACFLAGS) \ - -d $$t/classes \ - -I $$t \ - $$t/$$d/$$b.java \ - 2>&1 || true ;; \ - ecj) $(JAVAC) \ + ( $(JAVAC) \ -d $$t/classes \ -warn:+semicolon \ -sourcepath $$t:$(SOURCEPATH) \ -classpath $(CLASSPATH) \ $$t/$$d/$$b.java \ - 2>&1 || true ;; \ - esac | ( \ + 2>&1 || true ) | ( \ cd $$t ; \ $(AWK) -f @abs_srcdir@/common/antlr-warnings.awk \ ) ; \ @@ -742,17 +646,10 @@ ${GEN_DIRNAME}.jar: files-java.list $(GE rm -rf $(JAVAROOT) mkdir -p $(JAVAROOT) $(JAVAC) -d $(JAVAROOT) $(JAVACFLAGS) \ - @$(top_builddir)/files-java.list \ - 2>&1 | tee $*.log - if test -s $*.log \ - && expr " $(GCJCOMPILE) " : '.* -Werror ' > /dev/null ; \ - then rm $*.log ; false ; \ - fi - rm -f $*.log + @$(top_builddir)/files-java.list cd $(JAVAROOT) ; \ - find * -name '*.class' -print \ - | sort \ - | $(JAR) -@ -cf $@ + find * -name '*.class' -print | sort > classes.list ; \ + $(JAR) cf $@ @classes.list mv $(JAVAROOT)/$@ $@ # Check that everything, well except for a few exceptions, is using diff -up frysk-0.4/frysk-core/Makefile.am.jni frysk-0.4/frysk-core/Makefile.am --- frysk-0.4/frysk-core/Makefile.am.jni 2016-04-13 10:57:04.464272124 -0400 +++ frysk-0.4/frysk-core/Makefile.am 2016-04-13 10:57:04.468272119 -0400 @@ -46,22 +46,6 @@ GEN_CLASSPATH += ../frysk-imports/jline. GEN_CLASSPATH += ../frysk-imports/antlr.jar GEN_CLASSPATH += ../frysk-imports/junit.jar GEN_CLASSPATH += ../frysk-imports/getopt.jar -GEN_GCJ_LDADD_LIST += ../frysk-sys/libfrysk-sys.a -GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-jline.a -GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-antlr.a -GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a -GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a -if USE_LIBUNWIND -GEN_GCJ_LDADD_LIST += ../frysk-imports/libunwind-i386/src/.libs/libunwind-x86.a \ - ../frysk-imports/libunwind-x86_64/src/.libs/libunwind-x86_64.a \ - ../frysk-imports/libunwind-ppc32/src/.libs/libunwind-ppc32.a \ - ../frysk-imports/libunwind-ppc64/src/.libs/libunwind-ppc64.a -endif -GEN_GCJ_LDADD_LIST += -lstdc++ -# Stub bfd_getb32 and bfd_getl32 for PPC64. Unconditionally -# link -lbfd_get just for simplification. -GEN_GCJ_LDADD_LIST += -laudit -GEN_GCJ_LDADD_LIST += -lasm -ldw -lebl -lelf # For TestExec.java noinst_PROGRAMS += frysk/pkglibdir/funit-exec-alias @@ -251,8 +235,10 @@ install-exec-local: install-sysroot-loca uninstall-local: uninstall-sysroot-local .PHONY: install-sysroot-local uninstall-sysroot-local install-sysroot-local: + mkdir -p $(DESTDIR)$(pkglibdir) cp -r $(TEST_SYSROOT) $(DESTDIR)$(pkglibdir) if DO_ARCH32_TEST + mkdir -p $(DESTDIR)$(pkglib32dir) cp -r $(TEST32_SYSROOT) $(DESTDIR)$(pkglib32dir) endif # we don't want this installed, but noinst_SCRIPTS has no effect diff -up frysk-0.4/frysk-gtk/Makefile.am.jni frysk-0.4/frysk-gtk/Makefile.am --- frysk-0.4/frysk-gtk/Makefile.am.jni 2016-04-13 10:57:04.461272128 -0400 +++ frysk-0.4/frysk-gtk/Makefile.am 2016-04-13 10:57:04.468272119 -0400 @@ -62,7 +62,6 @@ GEN_GCJ_LDADD_LIST += -laudit GEN_GCJ_LDADD_LIST += -lasm -ldw -lebl -lelf # Hack, need to compile this entire sub-tree with JNI. -AM_GCJFLAGS += -fjni AM_CFLAGS += $(GTK_CFLAGS) $(FRYSK_GTK_CFLAGS) solib_PROGRAMS += EggTrayIcon/libEggTrayIcon.so diff -up frysk-0.4/frysk-imports/configure.ac.jni frysk-0.4/frysk-imports/configure.ac --- frysk-0.4/frysk-imports/configure.ac.jni 2016-04-13 10:57:04.464272124 -0400 +++ frysk-0.4/frysk-imports/configure.ac 2016-04-13 10:57:04.469272118 -0400 @@ -53,7 +53,6 @@ AC_CONFIG_FILES([ Makefile jline/Makefile getopt/Makefile - tests/Makefile junit/Makefile]) # Even though "libunwind" is not built, it is still included in the diff -up frysk-0.4/frysk-imports/junit/Makefile.am.jni frysk-0.4/frysk-imports/junit/Makefile.am --- frysk-0.4/frysk-imports/junit/Makefile.am.jni 2008-06-09 14:03:07.000000000 -0400 +++ frysk-0.4/frysk-imports/junit/Makefile.am 2016-04-13 10:57:04.469272118 -0400 @@ -43,7 +43,9 @@ noinst_DATA = junit.jar # Make a jar file. junit.jar: classdir cd classdir ; \ - find * -name '*.class' -print | $(JAR) -@ -cf $@.tmp + rm -f classes.list ; \ + find * -name '*.class' -print > classes.list ; \ + $(JAR) cf $@.tmp @classes.list mv classdir/$@.tmp $@ classdir: diff -up frysk-0.4/frysk-imports/Makefile.am.jni frysk-0.4/frysk-imports/Makefile.am --- frysk-0.4/frysk-imports/Makefile.am.jni 2016-04-13 10:57:04.462272126 -0400 +++ frysk-0.4/frysk-imports/Makefile.am 2016-04-13 10:57:04.469272118 -0400 @@ -59,7 +59,6 @@ CHECK_SUBDIRS = \ jline \ junit \ getopt \ - tests \ $(LIBUNWIND_DIR) check-recursive: SUBDIRS = $(CHECK_SUBDIRS) @@ -79,7 +78,7 @@ install-recursive \ installcheck-recursive \ installdirs-recursive \ uninstall-info-recursive \ -uninstall-recursive: SUBDIRS = tests +uninstall-recursive: SUBDIRS = GEN_CLASSPATH += getopt.jar GEN_CLASSPATH += junit.jar diff -up frysk-0.4/frysk-sys/bootstrap.sh.jni frysk-0.4/frysk-sys/bootstrap.sh --- frysk-0.4/frysk-sys/bootstrap.sh.jni 2008-06-09 14:03:07.000000000 -0400 +++ frysk-0.4/frysk-sys/bootstrap.sh 2016-04-13 10:57:04.469272118 -0400 @@ -45,7 +45,7 @@ FILE_LIST="frysk \ inua \ lib" -./common/Makefile.gen.sh --jni --cni $FILE_LIST +./common/Makefile.gen.sh $FILE_LIST # Generate everything (always run with --add-missing). diff -up frysk-0.4/frysk-sys/frysk/sys/proc/jni/Exe.cxx.jni frysk-0.4/frysk-sys/frysk/sys/proc/jni/Exe.cxx --- frysk-0.4/frysk-sys/frysk/sys/proc/jni/Exe.cxx.jni 2016-04-13 10:57:04.411272189 -0400 +++ frysk-0.4/frysk-sys/frysk/sys/proc/jni/Exe.cxx 2016-04-13 10:57:04.469272118 -0400 @@ -87,7 +87,7 @@ frysk::sys::proc::Exe::getName(jnixx::en } if (access(link, F_OK) != 0) { - errnoException(env, errno, "file %s", link); + errnoException(env, errno, "access", "file %s", link); } // Note that some kernels have a "feature" where the link can become diff -up frysk-0.4/frysk-sys/jnixx/ClassWalker.java.jni frysk-0.4/frysk-sys/jnixx/ClassWalker.java --- frysk-0.4/frysk-sys/jnixx/ClassWalker.java.jni 2008-06-09 14:03:07.000000000 -0400 +++ frysk-0.4/frysk-sys/jnixx/ClassWalker.java 2016-04-13 10:57:04.469272118 -0400 @@ -73,10 +73,10 @@ abstract class ClassWalker { void walk(Class klass) { if (klass == null) return; + walk(klass.getSuperclass()); if (visited.contains(klass)) return; visited.add(klass); - walk(klass.getSuperclass()); if (klass.isArray()) { walk(klass.getComponentType()); acceptArray(klass); diff -up frysk-0.4/frysk-sys/jnixx/Main.java.jni frysk-0.4/frysk-sys/jnixx/Main.java --- frysk-0.4/frysk-sys/jnixx/Main.java.jni 2008-06-09 14:03:07.000000000 -0400 +++ frysk-0.4/frysk-sys/jnixx/Main.java 2016-04-13 10:57:04.469272118 -0400 @@ -163,7 +163,6 @@ class Main { p.println("JNIEXPORT jint"); p.println("JNI_OnLoad(JavaVM* javaVM, void* reserved)"); while (p.dent(0, "{", "}")) { - p.println("fprintf(stderr, \"vm loaded\\n\");"); p.println("::jnixx::vm = javaVM;"); p.println("return JNI_VERSION_1_2;"); } diff -up frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java.jni frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java --- frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java.jni 2008-06-09 14:03:07.000000000 -0400 +++ frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java 2016-04-13 10:57:04.469272118 -0400 @@ -159,10 +159,6 @@ class PrintCxxDefinitions extends ClassW return; if (klass.isArray()) return; - p.println(); - p.print("jclass "); - p.printQualifiedCxxName(klass); - p.println("::_class;"); printer.visit(klass); } void acceptInterface(Class klass) { diff -up frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java.jni frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java --- frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java.jni 2008-06-09 14:03:07.000000000 -0400 +++ frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java 2016-04-13 10:57:04.469272118 -0400 @@ -143,8 +143,9 @@ class PrintDeclarations extends ClassWal p.printGlobalCxxName(parent); p.println("() { }"); } + // cached per-instance copy - a local-ref + p.println("private: jclass _class = NULL;"); // Static get-class method - a class knows its own class. - p.println("private: static jclass _class;"); p.println("public: static inline jclass _class_(::jnixx::env _env);"); JniBindings.printDeclarations(p, klass); } diff -up frysk-0.4/frysk-sys/jnixx/Printer.java.jni frysk-0.4/frysk-sys/jnixx/Printer.java --- frysk-0.4/frysk-sys/jnixx/Printer.java.jni 2008-06-09 14:03:07.000000000 -0400 +++ frysk-0.4/frysk-sys/jnixx/Printer.java 2016-04-13 10:57:04.469272118 -0400 @@ -318,6 +318,7 @@ class Printer { || name.equals("or") || name.equals("xor") || name.equals("not") + || name.equals("register") ) { return name + "$"; } else { diff -up frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java.jni frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java --- frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java.jni 2008-06-09 14:03:07.000000000 -0400 +++ frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java 2016-04-13 10:57:04.470272116 -0400 @@ -72,6 +72,14 @@ class PrintHxxDefinitions extends ClassW } p.print(")"); while (p.dent(0, "{", "}")) { + if (isStatic) { + p.println("jclass _class = _class_(_env);"); + } else { + p.print("if (_class == NULL)"); + while (p.dent(1, "{", "}")) { + p.println("_class = _class_(_env);"); + } + } p.print("if ("); p.printID(field); p.print(" == NULL)"); @@ -81,7 +89,7 @@ class PrintHxxDefinitions extends ClassW if (isStatic) { p.print("Static"); } - p.print("FieldID(_class_(_env), \""); + p.print("FieldID(_class, \""); p.print(field.getName()); p.print("\", \""); p.printJniSignature(type); @@ -130,16 +138,25 @@ class PrintHxxDefinitions extends ClassW p.print("static jmethodID "); p.printID(method); p.println(";"); + if (isStatic) { + p.println("jclass _class = _class_(_env);"); + } p.print("if ("); p.printID(method); p.print(" == NULL)"); while (p.dent(1, "{", "}")) { + if (!isStatic) { + p.print("if (_class == NULL)"); + while (p.dent(2, "{", "}")) { + p.println("_class = _class_(_env);"); + } + } p.printID(method); p.print(" = _env.Get"); if (isStatic) { p.print("Static"); } - p.print("MethodID(_class_(_env), \""); + p.print("MethodID(_class, \""); p.print(method.getName()); p.print("\", \""); p.printJniSignature(method); @@ -183,6 +200,7 @@ class PrintHxxDefinitions extends ClassW p.printFormalCxxParameters(constructor, true); p.print(")"); while (p.dent(0, "{", "}")) { + p.println("jclass _class = _class_(_env);"); p.print("static jmethodID "); p.printID(constructor); p.println(";"); @@ -191,7 +209,7 @@ class PrintHxxDefinitions extends ClassW p.print(" == NULL)"); while (p.dent(1, "{", "}")) { p.printID(constructor); - p.print(" = _env.GetMethodID(_class_(_env), \"\", \"("); + p.print(" = _env.GetMethodID(_class, \"\", \"("); p.printJniSignature(constructor.getParameterTypes()); p.println(")V\");"); } @@ -237,12 +255,9 @@ class PrintHxxDefinitions extends ClassW p.printQualifiedCxxName(klass); p.print("::_class_(::jnixx::env _env)"); while (p.dent(0, "{", "}")) { - while (p.dent(1, "if (_class == NULL) {", "}")) { - p.print("_class = _env.FindClass(\""); - p.print(klass.getName()); - p.println("\");"); - } - p.println("return _class;"); + p.print("return _env.FindClass(\""); + p.print(klass.getName().replace('.', '/')); + p.println("\");"); } JniBindings.printDefinitions(p, klass); printer.visit(klass); diff -up frysk-0.4/frysk-sys/Makefile.am.jni frysk-0.4/frysk-sys/Makefile.am --- frysk-0.4/frysk-sys/Makefile.am.jni 2016-04-13 10:57:04.467272120 -0400 +++ frysk-0.4/frysk-sys/Makefile.am 2016-04-13 10:57:26.720244636 -0400 @@ -47,19 +47,6 @@ GEN_CLASSPATH += ../frysk-imports/jline. GEN_CLASSPATH += ../frysk-imports/antlr.jar GEN_CLASSPATH += ../frysk-imports/junit.jar GEN_CLASSPATH += ../frysk-imports/getopt.jar -GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-jline.a -GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-antlr.a -GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a -GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a -if USE_LIBUNWIND -GEN_GCJ_LDADD_LIST += ../frysk-imports/libunwind-i386/src/.libs/libunwind-x86.a \ - ../frysk-imports/libunwind-x86_64/src/.libs/libunwind-x86_64.a \ - ../frysk-imports/libunwind-ppc32/src/.libs/libunwind-ppc32.a \ - ../frysk-imports/libunwind-ppc64/src/.libs/libunwind-ppc64.a -endif -GEN_GCJ_LDADD_LIST += -lstdc++ -laudit -GEN_GCJ_LDADD_LIST += -lasm -ldw -lebl -lelf - # Force a few dependencies lib/unwind/cni/Unwind%.cxx: lib/unwind/Unwind%.java lib/unwind/cni/UnwindH.hxx @@ -69,6 +56,7 @@ lib/unwind/Unwind%.java: lib/unwind/Unwi # Depend on these runtimes. JNI_LIBRARY_LIST += -lstdc++ JNI_LIBRARY_LIST += -laudit +JNI_LIBRARY_LIST += -ldw # Bundle in the local libunwind code. JNI_OBJECT_LIST += ../frysk-imports/libunwind-i386/src/{,dwarf/,mi/,x86/}.libs/*.o JNI_OBJECT_LIST += ../frysk-imports/libunwind-x86_64/src/{,dwarf/,mi/,x86_64/}.libs/*.o