From a41252ba1e0f5dd90100aa2064c011268809c038 Mon Sep 17 00:00:00 2001 From: adam Date: Fri, 5 Mar 2004 13:10:34 +0000 Subject: [PATCH] NanoGoat darcs-hash:20040305131034-5007d-98afdb32651d86a47abf169ea64c82ca3d095f7e.gz --- Makefile | 241 ++----- Makefile.upstream | 3 +- jode.conf | 40 -- lib/libgcj-minimal.jar | Bin 34080 -> 0 bytes src/org/ibex/HTTP.java | 24 +- src/org/ibex/Platform.java | 3 + src/org/ibex/js/Interpreter.java | 4 +- src/org/ibex/js/Parser.java | 8 +- src/org/ibex/plat/Linux.cc | 22 +- src/org/ibex/plat/X11.cc | 7 +- .../util/{BytecodePruner.java => NanoGoat.java} | 229 +++--- .../gcc-3.3/patches/zzz-disable-reflection.patch | 259 ------- .../gcc-3.3/patches/zzz-inhibit.reflection.patch | 737 ++++++++++++++++++++ 13 files changed, 995 insertions(+), 582 deletions(-) delete mode 100644 jode.conf delete mode 100644 lib/libgcj-minimal.jar rename src/org/ibex/util/{BytecodePruner.java => NanoGoat.java} (64%) delete mode 100644 upstream/gcc-3.3/patches/zzz-disable-reflection.patch create mode 100644 upstream/gcc-3.3/patches/zzz-inhibit.reflection.patch diff --git a/Makefile b/Makefile index fc64298..91d179a 100644 --- a/Makefile +++ b/Makefile @@ -19,9 +19,9 @@ dist-clean: find upstream -name config.cache -exec rm {} \; test -e upstream/mips && make -C upstream/mips clean -#libwing_Linux := -Lupstream/install/i686-pc-linux-gnu/lib/ -#libwing_Linux += upstream/install/i686-pc-linux-gnu/lib/libWINGs.a -#libwing_Linux += upstream/install/i686-pc-linux-gnu/lib/libwraster.a +libwing_Linux := -Lupstream/install/i686-pc-linux-gnu/lib/ +libwing_Linux += upstream/install/i686-pc-linux-gnu/lib/libWINGs.a +libwing_Linux += upstream/install/i686-pc-linux-gnu/lib/libwraster.a libwing_Solaris := -Lupstream/install/sparc-sun-solaris2.7/lib/ libwing_Solaris += upstream/install/sparc-sun-solaris2.7/lib/libWINGs.a @@ -51,20 +51,21 @@ target_bin_extension := $(target_bin_extension_$(platform)) target_bin := ibex.$(target_bin_extension) jikes_flags := -nowarn -gcc_optimizations := -O2 +gcc_optimizations := -Os #gcc_optimizations := -O9 -ffast-math -fomit-frame-pointer -foptimize-sibling-calls #gcc_optimizations += -finline-functions -funroll-loops -ffunction-sections -fdata-sections - gcc_flags := -nostdinc $(gcc_optimizations) -Ibuild/h -Iupstream/jpeg-6b/src -Iupstream/jpeg-6b/build-$(target) -g gcc_flags += -Iupstream/install/lib/gcc-lib/$(target)/3.3/include -Iupstream/install/$(target)/include +gcc_flags += -ffunction-sections -fdata-sections -fno-omit-frame-pointer gcj := upstream/install/bin/$(target)-gcj $(gcc_flags) -fCLASSPATH=build/java +gcj += -fassume-compiled -fmerge-all-constants -finhibit-reflection +gcj += -foptimize-static-class-initialization -feliminate-dwarf2-dups -w gcjh := $(shell pwd)/upstream/install/bin/$(shell test -e upstream/install/bin/$(target)-gcjh && echo $(target)-)gcjh g++ := upstream/install/bin/$(target)-gcj $(gcc_flags) -Iupstream/install/include -Wno-multichar gcc := upstream/install/bin/$(target)-gcc $(gcc_flags) jar := $(shell ((type fastjar &>/dev/null) && echo fastjar) || echo jar) gcj: .install_gcc-3.3_$(target) -# make compile make build/$(platform)/$(target_bin) link_flags="$(link_flags)" platform=$(platform) include Makefile.upstream @@ -80,6 +81,7 @@ java_sources += build/java/org/xwt/mips/util/SeekableByteArray.java java_sources += build/java/org/xwt/mips/util/SeekableData.java java_sources += build/java/org/xwt/mips/util/SeekableFile.java java_sources += build/java/org/xwt/mips/util/SeekableInputStream.java +java_classes := $(java_sources:build/java/%.java=build/class/%.class) build/java/org/xwt/mips/util/%: @test -e .install_mips2java || make .install_mips2java @@ -97,6 +99,20 @@ build/java/org/xwt/mips/%: ln -sf ../../../../../upstream/mips/org/xwt/mips/$*); true +### Java Source Files ############################################################################## + +.preprocessor: src/org/ibex/util/Preprocessor.java src/org/ibex/util/Vec.java src/gnu/regexp/*.java + @mkdir -p build/class/org/ibex/util build/class/gnu/regexp + $(gcj) -Isrc -C $^ -d build/class + @touch $@ +build/cc/%.cc: src/%.c ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@ +build/res/%: src/% ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@ +build/java/org/ibex/%.java: src/org/ibex/%.java .preprocessor + @echo -e "\n\033[1mpreprocessing .java -> .java: $<\033[0m" + mkdir -p `dirname $@`; java -cp build/class org.ibex.util.Preprocessor < $^ > $@ +build/java/%.java: src/%.java ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@ + + ### Java Class Files ############################################################################## build/class/org/ibex/translators/MIPSApps.class: build/mips/mipsapps.mips .jikes @@ -108,49 +124,14 @@ build/class/org/ibex/translators/MIPSApps.class: build/mips/mipsapps.mips .jikes @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m" ./.jikes -g:none build/java/org/ibex/translators/MIPSApps.java -build/java/org/ibex/%.java: src/org/ibex/%.java - make build/class/org/ibex/util/Preprocessor.class - @echo -e "\n\033[1mpreprocessing .java -> .java: $<\033[0m" - mkdir -p `dirname $@`; java -cp build/class org.ibex.util.Preprocessor < $< > $@ - -build/java/%.java: src/%.java ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@ -build/cc/%.cc: src/%.c ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@ -build/res/%: src/% ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@ - -gnu_regexp_jfiles := $(patsubst src/%.java, build/java/%.java, $(shell find src/gnu/regexp -name \*.java)) -gnu_regexp := $(patsubst src/%.java, build/class/%.class, $(shell find src/gnu/regexp -name \*.java)) - -build/class/gnu/regexp/%.class: build/java/gnu/regexp/%.java $(gnu_regexp_jfiles) .jikes - @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m" - mkdir -p build/class/org/ibex/util/ - ./.jikes $< - -build/class/org/ibex/util/Preprocessor.class: src/org/ibex/util/Preprocessor.java $(gnu_regexp) .jikes - @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m" - mkdir -p build/class/org/ibex/util/ - ./.jikes src/org/ibex/util/Vec.java - ./.jikes $< - -build/class/%.class: build/java/%.java $(java_sources) .jikes +compile: .compile +.compile: .install_mips2java .download_bcel-5.1 $(java_sources) $(java_classes); touch $@ +build/class/%.class: build/java/%.java @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m" mkdir -p $(@D) - ./.jikes $< - -oldcompile:; CLASSPATH=$$CLASSPATH:lib/libgcj-minimal.jar:upstream/mips/build javac -target 1.1 -source 1.2 -d build/class `find build/java/ -name \*.java` - -compile: .jikes .install_mips2java - @make -s $(java_sources:build/java/%.java=build/class/%.class) -.compile: compile + $(gcj) -I$(bcel_jar) -C $< -d build/class -.compile: $(java_sources) .jikes .install_mips2java - @echo -e "\n\033[1mcompiling .java -> .class: src/**/*.java\033[0m" - @rm -f $(java_sources:build/java/%.java=build/class/%.class) - mkdir -p build/class - cd build/java; for A in `find . -name \*.java`; do mkdir -p ../class/`dirname $$A`; done - @./.jikes $(java_sources) - touch .compile - -build/JVM/ibex.jar: .compile build/res/builtin.jar build/class/org/ibex/translators/MIPSApps.class +build/JVM/ibex.jar: build/res/builtin.jar build/class/org/ibex/translators/MIPSApps.class @echo -e "\n\033[1marchiving .class -> .jar: build/JVM/ibex.jar\033[0m" mkdir -p build/JVM echo -e "Manifest-Version: 1.0\nMain-Class: org.ibex.Main\n" > build/JVM/.manifest @@ -160,7 +141,7 @@ build/JVM/ibex.jar: .compile build/res/builtin.jar build/class/org/ibex/translat $(patsubst %,../../upstream/mips/build/org/xwt/mips/%*.class, Runtime Registers Syscalls Errno) -### GCJH Headers ############################################################################## +### Headers ################################################################################## java_headers := $(java_sources:build/java/%.java=build/h/%.h) build/h/edu/stanford/ejalbert/BrowserLauncher.h:; mkdir -p $(@D); touch $@ @@ -174,15 +155,6 @@ build/h/%.h: build/class/%.class .compile ### Native Code ############################################################################## # a hack since we've disabled gcj's awt implementation -build/$(platform)/org/ibex/plat/Java2.java.o: ; touch .empty.c; mkdir -p $(@D); $(gcc) -c .empty.c -o $@; -build/$(platform)/org/ibex/plat/AWT.java.o: ; touch .empty.c; mkdir -p $(@D); $(gcc) -c .empty.c -o $@; - -build/$(platform)/%.java.o: build/class/%.class - @echo -e "\n\033[1mcompiling .java -> .o: $<\033[0m" - mkdir -p `dirname $@` - $(gcj) -fCLASSPATH=build/pruned -c $< -o $@ - -# FIXME detect subclasses of X11 build/$(platform)/org/ibex/plat/Linux.cc.o: .install_WindowMaker-0.80.2_$(target) build/$(platform)/org/ibex/plat/Solaris.cc.o: .install_WindowMaker-0.80.2_$(target) @@ -192,129 +164,67 @@ build/$(platform)/org/ibex/plat/$(platform).cc.o: src/org/ibex/plat/$(platform). mkdir -p `dirname $@` $(g++) -c $< -o $@ -nonplat_java_sources := $(filter-out build/java/org/ibex/plat/$(platform).java,$(java_sources)) -build/$(platform)/$(platform).ar: $(nonplat_java_sources:build/java/%.java=build/$(platform)/%.java.o) - @echo -e "\n\033[1marchiving .o -> .a\033[0m" - mkdir -p build/$(platform) - rm -f $@ - upstream/install/$(target)/bin/ar rc $@ $^ - upstream/install/$(target)/bin/ranlib $@ - -upstream/jpeg-6b/build-$(target)/libjpeg.a: .install_jpeg-6b_$(target) - -# note: binaries appear in a different order in the dependency line vs the link line -build/$(platform)/$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a - @echo -e "\n\033[1mlinking .o -> $(target_bin)\033[0m" - rm -rf build/$(platform)/* - make build/$(platform)/org/ibex/plat/$(platform).cc.o - make build/$(platform)/builtin.o - +libjava_dir := upstream/gcc-3.3/build-$(target)/$(target)/libjava +nat_libjava_files_ := boehm.o exception.o posix-threads.o posix.o prims.o resolve.o java/net/natInetAddress.o +nat_libjava_files_ += java/net/natPlainSocketImpl.o java/io/natFile*.o java/util/zip/nat*.o gnu/gcj/runtime/natFirstThread.o +nat_libjava_files_ += gnu/gcj/runtime/natNameFinder.o gnu/gcj/runtime/natStackTrace.o gnu/gcj/runtime/natSharedLibLoader.o +nat_libjava_files_ += gnu/gcj/runtime/natStringBuffer.o gnu/gcj/runtime/natVMClassLoader.o gnu/gcj/runtime/natFinalizerThread.o +nat_libjava_files_ += $(shell cd $(libjava_dir) 2>/dev/null; find java/lang -name \*.o -not -name '*[A-Z]*' 2>/dev/null) +nat_libjava_files_ += $(shell cd $(libjava_dir) 2>/dev/null; find java/lang -name nat\*.o 2>/dev/null) +nat_libjava_files := $(nat_libjava_files_:%=$(libjava_dir)/%) + +.natcalls-$(platform): $(nat_libjava_files) + @echo -e "\n\033[1mdetecting CNI calls...\033[0m" + rm -f build/$(platform)/natibex.a cd upstream/gcc-3.3/build-$(target)/$(target)/libjava; \ - (find . -name nat\*.o | grep -v JIS; \ - echo boehm.o;\ - echo defineclass.o;\ - echo exception.o;\ - echo posix-threads.o;\ - echo posix.o;\ - echo prims.o;\ - echo jni.o;\ - echo resolve.o;\ - echo libltdl/ltdl.o;\ - find java gnu -name \*.o -not -name '*[A-Z]*'; \ - ) > $(shell pwd)/.natbins - - - cd upstream/gcc-3.3/build-$(target)/$(target)/libjava;\ - (cat $(shell pwd)/.natbins; echo $(shell pwd)/build/$(platform)/org/ibex/plat/$(platform).cc.o) |\ - grep -v shs | grep -v SHS |xargs nm |\ + $(shell pwd)/upstream/install/$(target)/bin/ar cq \ + $(shell pwd)/build/$(platform)/natibex.a \ + $< + nm build/$(platform)/natibex.a |\ grep _ZN | c++filt --format java | grep " U " | sed 's_\.class\$$_.class_' | sed 's_ * U __' | sed 's_(.*__' \ - > $(shell pwd)/.natcalls + > $(shell pwd)/$@ - rm -rf build/pruned; mkdir -p build/pruned - javac -classpath lib/bcel-5.1.jar:build/class -d build/class src/org/ibex/util/BytecodePruner.java - rm -f build/$(platform)/ibex.jar +bcel_jar := upstream/bcel-5.1/src/bcel-5.1.jar +build/$(platform)/ibex.pruned.jar: .compile .install_jpeg-6b_$(target) build/$(platform)/builtin.o .natcalls-$(platform) + @echo -e "\n\033[1mpruning .jar -> .jar\033[0m" + cp upstream/install/share/java/libgcj-3.3.jar build/$(platform)/ibex.jar cd build/class; \ - fastjar cf ../$(platform)/ibex.jar \ + jar uf ../$(platform)/ibex.jar \ `find . -name \*.class | grep -v ibex/plat/` \ org/ibex/plat/$(platform)*.class \ org/ibex/plat/X11*.class \ org/ibex/plat/GCJ*.class \ org/ibex/plat/POSIX*.class - java -cp lib/bcel-5.1.jar:build/class org.ibex.util.BytecodePruner \ - build/$(platform)/ibex.jar:upstream/install/share/java/libgcj-3.3.jar \ - -o build/pruned \ - `cat .natcalls` - - rm build/pruned/org/ibex/plat/GCJ*.class - cp build/java/org/ibex/plat/GCJ.java build/pruned/org/ibex/plat/ - cp upstream/gcc-3.3/build-$(target)/$(target)/libjava/java/lang/Object.class build/pruned/java/lang/ - - rm -f build/pruned/java/lang/System*.* - cp upstream/gcc-3.3/src/libjava/java/lang/System.java build/pruned/java/lang/ - - cd build/pruned; \ - for A in `find gnu/gcj java/lang java/net -name \*.class -or -name \*.java`; do \ - echo compiling $$A....; \ - ../../upstream/install/bin/$(target)-gcj \ - -w -c -Os \ - -fCLASSPATH=../../build/$(platform)/ibex.jar \ - $$A && \ - (mkdir -p ../../build/$(platform)/`dirname $$A`; mv *.o ../../build/$(platform)/`dirname $$A`); \ - done - -# -fassume-compiled \ - cd build/pruned; rm -rf gnu/gcj java/lang java/net - cd build/pruned; \ - for A in `find . -name \*.class -or -name \*.java`; do \ - echo compiling $$A....; \ - ../../upstream/install/bin/$(target)-gcj \ - -w -c -Os \ - -fCLASSPATH=../../build/$(platform)/ibex.jar \ - $$A && \ - (mkdir -p ../../build/$(platform)/`dirname $$A`; mv *.o ../../build/$(platform)/`dirname $$A`); \ - done -# -fassume-compiled \ -# -finhibit-reflection \ -# -fnew-ra \ -# -ffunction-sections \ -# -fdata-sections \ -# -fomit-frame-pointer \ -# -fno-force-mem \ -# -fno-force-addr \ -# -fmerge-all-constants \ - - rm -f build/$(platform)/ibex.a + java -cp $(bcel_jar):build/class org.ibex.util.NanoGoat build/$(platform)/ibex.jar `cat .natcalls-$(platform)` + mv build/$(platform)/ibex.jar.pruned $@ - cd upstream/gcc-3.3/build-$(target)/$(target)/libjava; \ - $(shell pwd)/upstream/install/$(target)/bin/ar cq \ - $(shell pwd)/build/$(platform)/ibex.a \ - `find $(shell pwd)/build/$(platform) -name \*.o` +build/$(platform)/$(target_bin): build/$(platform)/ibex.pruned.jar .natcalls-$(platform) - rm -f build/$(platform)/natibex.a - cd upstream/gcc-3.3/build-$(target)/$(target)/libjava; \ - $(shell pwd)/upstream/install/$(target)/bin/ar cq \ - $(shell pwd)/build/$(platform)/natibex.a \ - `cat $(shell pwd)/.natbins` - PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj \ - -Wl,-O2,--relax,--gc-sections,--noinhibit-exec \ + @echo -e "\n\033[1mcompiling .jar -> .o\033[0m" + $(gcj) -c --bootclasspath=build/$(platform)/ibex.jar -d build/$(platform) build/$(platform)/ibex.pruned.jar + + @echo -e "\n\033[1mlinking .o -> $(target_bin).phat\033[0m" + PATH=upstream/install/bin:$$PATH $(gcj) \ + -Wl,-O2,--relax,--gc-sections,--noinhibit-exec,--no-whole-archive \ --main=org.ibex.plat.$(platform) \ -Dfile.encoding=UTF8 \ - -Lupstream/install/$(target)/lib \ - -Lupstream/install/lib \ + -Lupstream/install/$(target)/lib -Lupstream/install/lib \ -Os -w \ - -Wl,--whole-archive \ - build/$(platform)/ibex.a \ - -Wl,--no-whole-archive,--gc-sections \ + `find build/$(platform) -name \*.o` \ build/$(platform)/natibex.a \ upstream/jpeg-6b/build-$(target)/libjpeg.a \ $(link_flags) \ - upstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/.libs/libgcjgc.a \ - -lz -ldl \ - -o $@ -# strip build/Linux/ibex.linux -# ls -l build/Linux/ibex.linux -# upx-ucl-beta --best build/Linux/ibex.linux -# ls -l build/Linux/ibex.linux + $(libjava_dir)/../boehm-gc/.libs/libgcjgc.a \ + -o $@.phat + @echo; ls -l $@.phat + + @echo -e "\n\033[1mstripping $(target_bin).phat -> $(target_bin)\033[0m" + strip $@.phat -o $@ + @echo; ls -l $@.phat + + @echo -e "\n\033[1mcompressing $(target_bin) -> $(target_bin)\033[0m" + upx-ucl-beta $@ + @echo; ls -l $@.phat ### Builtin Resources ############################################################################## @@ -328,9 +238,9 @@ build/res/fonts/vera: .download_vera-1.10 build/res/builtin.jar: $(builtin_src:src/%=build/res/%) build/res/fonts/vera @echo -e "\n\033[1mzipping res/* -> .jar: builtin.jar\033[0m" cd build/res; $(jar) cf builtin.jar org/ibex/builtin/scar.png -# cd build/res; $(jar) cf builtin.jar $(^:build/res/%=%) build/$(platform)/builtin.o: build/res/builtin.jar @echo -e "\n\033[1mwrapping .jar -> .o: resources.o\033[0m" + @mkdir -p $(@D) @(echo "unsigned int builtin_length = "; \ (wc -c build/res/builtin.jar | sed "s_build.*__"); \ echo \;; \ @@ -339,7 +249,6 @@ build/$(platform)/builtin.o: build/res/builtin.jar echo "};") > .builtin.c $(gcc) -c .builtin.c -o build/$(platform)/builtin.o - build/mips/%.c.o: src/%.c .download_libmspack-20030726 make .install_freetype-2.1.4_mips-unknown-elf target=mips-unknown-elf make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf @@ -372,8 +281,8 @@ build/mips/mipsapps.mips: build/mips/org/ibex/translators/Freetype.c.o build/mip ### Maintainer ###################################################################################### current_build := $(shell cat next.build) -strip_$(platform) := upstream/install/$(target)/bin/strip build/$(platform)/$(target_bin) -o -strip_JVM := cp build/$(platform)/$(target_bin) +strip_$(platform) := upstream/install/$(target)/bin/strip build/$(platform)/$(target_bin) -o +strip_JVM := cp build/$(platform)/$(target_bin) install-dist:; $(strip_$(platform)) /var/www/org/xwt/dist/master/ibex-$(current_build).$(target_bin_extension).unsigned dist: compile (echo -n 0000; (echo "10k16o16i"; cat next.build | tr a-z A-Z; echo "1+f") | dc) | tail --bytes=5 > next.build- diff --git a/Makefile.upstream b/Makefile.upstream index 67b8655..ab40478 100644 --- a/Makefile.upstream +++ b/Makefile.upstream @@ -17,7 +17,7 @@ url_jikes-1.18 := http://dist.ibex.org/jikes-1.18.tgz url_libmspack-20030726 := http://www.kyz.uklinux.net/downloads/libmspack-20030726.tar.gz url_vera-1.10 := http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/ttf-bitstream-vera-1.10.tar.gz url_WindowMaker-0.80.2 := http://windowmaker.org/pub/source/release/WindowMaker-0.80.2.tar.gz -url_bcel-5.1 := http://apache.130th.net/jakarta/bcel/binaries/bcel-5.1.tar.gz +url_bcel-5.1 := http://apache.webmeta.com/jakarta/bcel/binaries/bcel-5.1.tar.gz .install_binutils-2.13.2.1_powerpc-apple-darwin: .vendor rm -rf upstream/darwin-linker/src @@ -83,6 +83,7 @@ configure_WindowMaker-0.80.2_$(target) += --host=i686-pc-linux-gnu --x-librarie # libjpeg's configury doesn't obey --target environment_jpeg-6b_$(target) += PATH=$(shell pwd)/upstream/install/$(target)/bin:$$PATH environment_jpeg-6b_$(target) += CC=$(shell pwd)/upstream/install/bin/$(target)-gcc +environment_jpeg-6b_$(target) += CFLAGS="-Os -ffunction-sections -fdata-sections -I ." environment_jpeg-6b_$(target) += AR="$(shell pwd)/upstream/install/$(target)/bin/ar rc" environment_jpeg-6b_$(target) += AR2=$(shell pwd)/upstream/install/$(target)/bin/ranlib diff --git a/jode.conf b/jode.conf deleted file mode 100644 index 86575cf..0000000 --- a/jode.conf +++ /dev/null @@ -1,40 +0,0 @@ -classpath = "build/","upstream/install/share/java/libgcj-3.3.jar","build/class" -dest = "out" -strip = "unreach","lvt" -#,"inner" - -#renamer = new UniqueRenamer - -load = new WildCard { value = "org.ibex.*" }, - new WildCard { value = "gnu.*" }, - new WildCard { value = "org.bouncycastle.*" }, - new WildCard { value = "edu.*" }, - new WildCard { value = "java.*" } - -preserve = new WildCard { value = "org.ibex.Main" }, - new WildCard { value = "org.ibex.plat.Linux" }, - new WildCard { value="java.lang" }, - new WildCard { value="gnu.gcj.protocol" }, - new WildCard { value="java.net.URLConnection" }, - new WildCard { value="gnu.gcj.protocol.file.Connection" }, - new WildCard { value="gnu.gcj.protocol.http.Connection" }, - new WildCard { value="gnu.gcj.protocol.jar.Connection" }, - new WildCard { value="gnu.gcj.protocol.core.Connection" }, - new WildCard { value="java.net.JarURLConnection" }, - new WildCard { value="java.net.HttpURLConection" }, - new WildCard { value="java.security.Policy" } -# new MultiIdentifierMatcher { -# and = new WildCard { value = "org.myorg.publiclib.*" }, -# new ModifierMatcher { access = "PUBLIC" } -# } - -analyzer = new ConstantAnalyzer - -# The LocalOptimizer will reorder local variables to use fewer slots. -# It may still have some bugs, so remove it if your applet doesn't -# work (and send me the class). -# The RemovePopAnalyzer will remove instructions that were optimized -# away by the ConstantAnalyzer and LocalOptimizer. -#post = new RemovePopAnalyzer - - diff --git a/lib/libgcj-minimal.jar b/lib/libgcj-minimal.jar deleted file mode 100644 index 02761604267bf86a04e513a914ac19fbcd6d3dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34080 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 nr&%8yK!hGA1O7?# diff --git a/src/org/ibex/HTTP.java b/src/org/ibex/HTTP.java index 7f6f248..10da62b 100644 --- a/src/org/ibex/HTTP.java +++ b/src/org/ibex/HTTP.java @@ -41,7 +41,7 @@ public class HTTP { // Instance Data /////////////////////////////////////////////////////////////////////////////////////////////// final String originalUrl; ///< the URL as passed to the original constructor; this is never changed - URL url = null; ///< the URL to connect to; this is munged when the url is parsed */ + String url = null; ///< the URL to connect to; this is munged when the url is parsed */ String host = null; ///< the host to connect to int port = -1; ///< the port to connect on boolean ssl = false; ///< true if SSL (HTTPS) should be used @@ -270,7 +270,7 @@ public class HTTP { if (Log.verbose) Log.info(this, "evaluating PAC script"); String pac = null; try { - Object obj = pacFunc.call(url.toString(), url.getHost(), null, null, 2); + Object obj = pacFunc.call(url, host, null, null, 2); if (Log.verbose) Log.info(this, " PAC script returned \"" + obj + "\""); pac = obj.toString(); } catch (Throwable e) { @@ -322,18 +322,22 @@ public class HTTP { } if (url.startsWith("https:")) { - this.url = new URL("http" + url.substring(5)); ssl = true; } else if (!url.startsWith("http:")) { - throw new MalformedURLException("HTTP only supports http/https urls"); + throw new IOException("HTTP only supports http/https urls"); + } + if (url.indexOf("://") == -1) throw new IOException("URLs must contain a ://"); + String temphost = url.substring(url.indexOf("://") + 1); + path = temphost.substring(temphost.indexOf('/')); + temphost = temphost.substring(0, temphost.indexOf('/')); + if (temphost.indexOf(':') != -1) { + port = Integer.parseInt(temphost.substring(temphost.indexOf(':')+1)); + temphost = temphost.substring(0, temphost.indexOf(':')); } else { - this.url = new URL(url); + port = ssl ? 443 : 80; } - if (!skipResolveCheck) resolveAndCheckIfFirewalled(this.url.getHost()); - port = this.url.getPort(); - path = this.url.getFile(); - if (port == -1) port = ssl ? 443 : 80; - host = this.url.getHost(); + if (!skipResolveCheck) resolveAndCheckIfFirewalled(temphost); + host = temphost; if (Log.verbose) Log.info(this, "creating HTTP object for connection to " + host + ":" + port); Proxy pi = Platform.detectProxy(); diff --git a/src/org/ibex/Platform.java b/src/org/ibex/Platform.java index c3bba86..4b110a6 100644 --- a/src/org/ibex/Platform.java +++ b/src/org/ibex/Platform.java @@ -229,6 +229,8 @@ public abstract class Platform { return; } // check the URL for well-formedness, as a defense against buffer overflow attacks + // FIXME check URL without using URL class + /* try { String u = url; if (u.startsWith("https")) u = "http" + u.substring(5); @@ -237,6 +239,7 @@ public abstract class Platform { Log.info(Platform.class, "URL " + url + " is not well-formed"); Log.info(Platform.class, e); } + */ Log.info(Platform.class, "newBrowserWindow, url = " + url); platform._newBrowserWindow(url); } diff --git a/src/org/ibex/js/Interpreter.java b/src/org/ibex/js/Interpreter.java index 59b48c3..6cbaf23 100644 --- a/src/org/ibex/js/Interpreter.java +++ b/src/org/ibex/js/Interpreter.java @@ -367,7 +367,7 @@ class Interpreter implements ByteCodes, Tokens { case THROW: throw new JSExn(stack.pop()); - + /* FIXME case MAKE_GRAMMAR: { final Grammar r = (Grammar)arg; final JSScope final_scope = scope; @@ -389,7 +389,7 @@ class Interpreter implements ByteCodes, Tokens { stack.push(r2); break; } - + */ case ADD_TRAP: case DEL_TRAP: { Object val = stack.pop(); Object key = stack.pop(); diff --git a/src/org/ibex/js/Parser.java b/src/org/ibex/js/Parser.java index 932c5b8..09f50db 100644 --- a/src/org/ibex/js/Parser.java +++ b/src/org/ibex/js/Parser.java @@ -317,7 +317,7 @@ class Parser extends Lexer implements ByteCodes { // attempt to continue the expression continueExpr(b, minPrecedence); } - + /* private Grammar parseGrammar(Grammar g) throws IOException { int tok = getToken(); if (g != null) @@ -348,7 +348,7 @@ class Parser extends Lexer implements ByteCodes { if (g == null) return parseGrammar(g0); return parseGrammar(new Grammar.Juxtaposition(g, g0)); } - + */ /** * Assuming that a complete assignable (lvalue) has just been * parsed and the object and key are on the stack, @@ -368,7 +368,7 @@ class Parser extends Lexer implements ByteCodes { // force the default case tok = -1; switch(tok) { - + /* case GRAMMAR: { b.add(parserLine, GET_PRESERVE); Grammar g = parseGrammar(null); @@ -382,7 +382,7 @@ class Parser extends Lexer implements ByteCodes { b.add(parserLine, PUT); break; } - + */ case ASSIGN_BITOR: case ASSIGN_BITXOR: case ASSIGN_BITAND: case ASSIGN_LSH: case ASSIGN_RSH: case ASSIGN_URSH: case ASSIGN_MUL: case ASSIGN_DIV: case ASSIGN_MOD: case ASSIGN_ADD: case ASSIGN_SUB: case ADD_TRAP: case DEL_TRAP: { if (tok != ADD_TRAP && tok != DEL_TRAP) b.add(parserLine, GET_PRESERVE); diff --git a/src/org/ibex/plat/Linux.cc b/src/org/ibex/plat/Linux.cc index e62a9ba..e96c23c 100644 --- a/src/org/ibex/plat/Linux.cc +++ b/src/org/ibex/plat/Linux.cc @@ -9,16 +9,14 @@ extern int _Jv_argc; void org::ibex::plat::Linux::fixEnvironment() { // this wreaks havoc on gdb - /* - // see http://lists.debian.org/debian-glibc/2003/debian-glibc-200311/msg00647.html - const char* ld_assume_kernel = getenv("LD_ASSUME_KERNEL"); - if (ld_assume_kernel == NULL || strcmp("2.4.1", ld_assume_kernel)) { - int result; - printf("respawning self (%s) with LD_ASSUME_KERNEL=2.4.1\n", _Jv_argv[0]); - setenv("LD_ASSUME_KERNEL", "2.4.1", 1); - result = execvp(_Jv_argv[0], (char* const*)((void*)_Jv_argv)); - printf("execvp() failed with error code %d\n", result); - exit(-1); - } - */ + // see http://lists.debian.org/debian-glibc/2003/debian-glibc-200311/msg00647.html + const char* ld_assume_kernel = getenv("LD_ASSUME_KERNEL"); + if (ld_assume_kernel == NULL || strcmp("2.4.1", ld_assume_kernel)) { + int result; + printf("respawning self (%s) with LD_ASSUME_KERNEL=2.4.1\n", _Jv_argv[0]); + setenv("LD_ASSUME_KERNEL", "2.4.1", 1); + result = execvp(_Jv_argv[0], (char* const*)((void*)_Jv_argv)); + printf("execvp() failed with error code %d\n", result); + exit(-1); + } } diff --git a/src/org/ibex/plat/X11.cc b/src/org/ibex/plat/X11.cc index 53e20de..680fb1e 100644 --- a/src/org/ibex/plat/X11.cc +++ b/src/org/ibex/plat/X11.cc @@ -747,7 +747,6 @@ void org::ibex::plat::X11::natInit() { // FIXME: don't know why (True, False) is the best solution... if(XmuLookupStandardColormap(display, screen_num, visual->visualid, colorDepth, XA_RGB_BEST_MAP, True, False) == 0) org::ibex::Platform::criticalAbort(JvNewStringLatin1("ERROR: XmuLookupStandardColormap failed")); - XStandardColormap* best_map_info = NULL; int count; if (XGetRGBColormaps(display, RootWindow(display, screen_num), &best_map_info, &count, XA_RGB_BEST_MAP) == 0) @@ -769,9 +768,8 @@ void org::ibex::plat::X11::natInit() { org::ibex::util::Log::info(this->getClass(), JvNewStringLatin1(buf)); } -//#include "WINGs/WINGs.h" +#include "WINGs/WINGs.h" jstring org::ibex::plat::X11::_fileDialog(jstring suggestedFileName, jboolean write) { -#ifdef asfasdfasf int argc = 1; char* argv[2]; argv[0] = "Ibex"; @@ -794,11 +792,9 @@ jstring org::ibex::plat::X11::_fileDialog(jstring suggestedFileName, jboolean wr if (WMRunModalFilePanelForDirectory(oPanel, NULL, buf, /*title*/ NULL, NULL) != True) return NULL; return JvNewStringLatin1(WMGetFilePanelFileName(oPanel)); } -#endif return NULL; } - ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -2334,3 +2330,4 @@ XmuDeleteStandardColormap(Display *dpy, int screen, Atom property) } } + diff --git a/src/org/ibex/util/BytecodePruner.java b/src/org/ibex/util/NanoGoat.java similarity index 64% rename from src/org/ibex/util/BytecodePruner.java rename to src/org/ibex/util/NanoGoat.java index a61c84d..7f1a50e 100644 --- a/src/org/ibex/util/BytecodePruner.java +++ b/src/org/ibex/util/NanoGoat.java @@ -7,16 +7,19 @@ import org.apache.bcel.generic.*; import org.apache.bcel.classfile.*; import org.apache.bcel.util.*; -public class BytecodePruner { +public class NanoGoat { public static final boolean deleteMethods = false; public static SyntheticRepository repo = null; public static HashSet dest = new HashSet(); + public static HashSet constructed = new HashSet(); public static String outdir = "."; public static Hashtable subclasses = new Hashtable(); + public static Hashtable uponconstruction = new Hashtable(); + public static Hashtable mark_if_constructed = new Hashtable(); public static int level = 0; - public BytecodePruner() { } + public NanoGoat() { } public void loadAllMethods(String classname) throws Exception { visitJavaClass(repo.loadClass(classname)); @@ -25,16 +28,13 @@ public class BytecodePruner { visitJavaMethod(repo.loadClass(classname), meths[i]); } - public void loadField(String classAndMethodName) throws Exception { - String classname = classAndMethodName.substring(0, classAndMethodName.lastIndexOf('.')); - String methodname = classAndMethodName.substring(classAndMethodName.lastIndexOf('.') + 1); + public void loadAllStaticMethods(String classname) throws Exception { visitJavaClass(repo.loadClass(classname)); - Field[] meths = repo.loadClass(classname).getFields(); + Method[] meths = getMethods(repo.loadClass(classname)); for(int i=0; i= 3 && s[1].equals("-o")) { outdir = s[2]; start += 2; } repo = SyntheticRepository.getInstance(new ClassPath(s[0])); - BytecodePruner bcp = new BytecodePruner(); + NanoGoat bcp = new NanoGoat(); for(int i=start; i")) - constructed = true; + isconstructed = true; // we can only prune static fields (to avoid altering object layout, which is hardcoded into // CNI code), but that's okay since instance fields don't contribute to binary size Field[] fields = clazz.getFields(); for(int i=0; i")) good = true; + if (dest.contains(methods[i]) && (isconstructed || methods[i].isStatic())) { + good = true; } else { if (methods[i].getCode() == null) { System.out.println(" empty codeblock: " + clazz.getClassName() + "." + methods[i].getName()); } else { - System.out.println(" pruning " +(constructed?"":"unconstructed")+ " method " + + System.out.println(" pruning " +(isconstructed?"":"unconstructed")+ " method " + clazz.getClassName() + "." + methods[i].getName()); - // FIXME: try deleteMethods if (deleteMethods) { cg.removeMethod(methods[i]); continue; } MethodGen mg = new MethodGen(methods[i], clazz.getClassName(), newcpg); mg.removeExceptions(); @@ -186,7 +201,12 @@ public class BytecodePruner { } } - if (!good) { + // FIXME: chain up to superclass' ... that might remove the need for this hack + // FIXME: gcj compiling in jar-at-a-time mode can't be convinced to let classes outside the jar override + // the ones inside the jar + good = true; + + if (!good && !clazz.isAbstract() && !clazz.isInterface()) { System.out.println("DROPPING " + clazz.getClassName()); JavaClass[] ifaces = clazz.getInterfaces(); String[] ifacestrings = new String[ifaces.length]; @@ -200,8 +220,10 @@ public class BytecodePruner { } else { System.out.println("dumping " + clazz.getClassName()); } - new File(outdir + "/" + new File(clazz.getClassName().replace('.', '/')).getParent()).mkdirs(); - cg.getJavaClass().dump(outdir + "/" + clazz.getClassName().replace('.', '/') + ".class"); + FilterOutputStream noclose = new FilterOutputStream(zos) { public void close() throws IOException { flush(); } }; + zos.putNextEntry(new ZipEntry(clazz.getClassName().replace('.', '/')+".class")); + cg.getJavaClass().dump(noclose); + noclose.flush(); } public JavaClass sig2class(String sig) throws Exception { @@ -245,38 +267,73 @@ public class BytecodePruner { visitJavaClass(jc); if (jc.getClassName().indexOf("SharedLib") != -1) return; if (jc.getClassName().indexOf("Datagram") != -1) return; + if (jc.getClassName().startsWith("java.io.Object")) return; + if (jc.getClassName().startsWith("java.util.jar.")) return; + if (jc.getClassName().startsWith("java.net.Inet6")) return; // gcj bug; gcj can't compile this method from a .class file input; I have no idea why if (jc.getClassName().equals("java.lang.System") && method.getName().equals("runFinalizersOnExit")) return; + // we know these can't be constructed + if (method.getName().equals("") && jc.getClassName().startsWith("java.lang.reflect.")) return; + if (dest.contains(method)) return; dest.add(method); - if (method.isStatic()) loadMethod(jc.getClassName() + "."); + if (method.getName().equals("") && jc.getSuperClass() != null) + loadMethod(jc.getSuperClass().getClassName() + "."); + + if (method.isStatic() || method.getName().equals("")) loadMethod(jc.getClassName() + "."); + if (method.getName().equals("")) { + // FIXME: generalize to all perinstancemethods + constructed.add(jc); + HashSet hs = (HashSet)uponconstruction.get(jc); + if (hs != null) { + Iterator it = hs.iterator(); + while(it.hasNext()) visitJavaMethod(jc, (Method)it.next()); + } + loadMethod(jc.getClassName() + ".equals"); + loadMethod(jc.getClassName() + ".hashCode"); + loadMethod(jc.getClassName() + ".toString"); + loadMethod(jc.getClassName() + ".finalize"); + loadMethod(jc.getClassName() + ".clone"); + } + + ConstantPoolGen cpg = new ConstantPoolGen(method.getConstantPool()); + if (!method.isStatic() && !constructed.contains(jc)) { + HashSet hs = (HashSet)uponconstruction.get(jc); + if (hs == null) uponconstruction.put(jc, hs = new HashSet()); + hs.add(method); + markMethodInSubclasses(jc, method, cpg); + dest.remove(method); + return; + } level += 2; for(int i=0; i"); } if (instr instanceof CPInstruction) load(((CPInstruction)instr).getType(cpg)); - if (instr instanceof TypedInstruction) { - try { load(((TypedInstruction)instr).getType(cpg)); } catch (Exception e) { /* DELIBERATE */ } - } - if (instr instanceof NEW) { - for(int j=0; j"); - } + if (instr instanceof TypedInstruction) load(((TypedInstruction)instr).getType(cpg)); + if (instr instanceof NEW) loadMethod(((NEW)instr).getLoadClassType(cpg).getClassName() + "."); if (instr instanceof org.apache.bcel.generic.FieldOrMethod) load(((org.apache.bcel.generic.FieldOrMethod)instr).getClassType(cpg)); if (instr instanceof org.apache.bcel.generic.FieldInstruction) { @@ -286,7 +343,7 @@ public class BytecodePruner { JavaClass jc2 = repo.loadClass(((ObjectType)((org.apache.bcel.generic.FieldInstruction)instr). getLoadClassType(cpg)).getClassName()); Field[] fields = jc2.getFields(); - for(int j=0; j"); } public void visitJavaClass(JavaClass clazz) throws Exception { @@ -326,6 +383,8 @@ public class BytecodePruner { dest.add(clazz); ConstantPoolGen cpg = new ConstantPoolGen(clazz.getConstantPool()); + level += 2; + for(int i=0; i")) visitJavaMethod(clazz, methods[i]); - if (methods[i].getName().equals("equals")) visitJavaMethod(clazz, methods[i]); - if (methods[i].getName().equals("hashCode")) visitJavaMethod(clazz, methods[i]); - if (methods[i].getName().equals("finalize")) visitJavaMethod(clazz, methods[i]); - if (methods[i].getName().equals("clone")) visitJavaMethod(clazz, methods[i]); - if (methods[i].getName().equals("toString")) visitJavaMethod(clazz, methods[i]); - } + level -= 2; } public void markMethodInSubclasses(JavaClass c, Method m, JavaClass subclass, ConstantPoolGen cpg) throws Exception { if (m.isStatic()) return; + if (m.getName().equals("")) return; + if (m.getName().equals("equals")) return; + if (m.getName().equals("hashCode")) return; + if (m.getName().equals("clone")) return; + if (m.getName().equals("finalize")) return; + if (m.getName().equals("toString")) return; String sig = getMethodSignature(m, cpg); Method[] submethods = getMethods(subclass); for(int j=0; j")) return; HashSet s = (HashSet)subclasses.get(c); if (s == null) return; Object[] subclasses = s.toArray(); @@ -390,12 +447,18 @@ public class BytecodePruner { public void remarkMethods(JavaClass c, ConstantPoolGen cpg) throws Exception { Method[] meths =getMethods(c); - for(int j=0; j - #include -+#include - #include - - // More nastiness: the GC wants to define TRUE and FALSE. We don't -@@ -147,6 +148,7 @@ - for (int i = 0; i < c->method_count; ++i) - { - p = (ptr_t) c->methods[i].name; -+ if (p == NULL) continue; - MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, - cm1label); - p = (ptr_t) c->methods[i].signature; -@@ -164,9 +166,11 @@ - - #ifndef COMPACT_FIELDS - p = (ptr_t) field->name; -+ if (p == NULL) continue; - MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8alabel); - #endif - p = (ptr_t) field->type; -+ if (p == NULL) continue; - MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8blabel); - - // For the interpreter, we also need to mark the memory -@@ -258,6 +262,7 @@ - // Note: occasionally `klass' can be null. For instance, this - // can happen if a GC occurs between the point where an object - // is allocated and where the vtbl slot is set. -+ throw new java::lang::VirtualMachineError(); - while (klass && klass != &java::lang::Object::class$) - { - jfieldID field = JvGetFirstInstanceField (klass); -diff -ru libjava/gnu/gcj/convert/BytesToUnicode.java libjava/gnu/gcj/convert/BytesToUnicode.java ---- libjava/gnu/gcj/convert/BytesToUnicode.java Mon Jul 30 13:24:17 2001 -+++ libjava/gnu/gcj/convert/BytesToUnicode.java Wed Feb 25 22:53:54 2004 -@@ -65,7 +65,7 @@ - } - catch (Throwable ex) - { -- return new Input_8859_1(); -+ throw new UnsatisfiedLinkError(); - } - } - -diff -ru libjava/gnu/gcj/convert/UnicodeToBytes.java libjava/gnu/gcj/convert/UnicodeToBytes.java ---- libjava/gnu/gcj/convert/UnicodeToBytes.java Fri Aug 17 20:56:01 2001 -+++ libjava/gnu/gcj/convert/UnicodeToBytes.java Wed Feb 25 22:53:48 2004 -@@ -63,7 +63,8 @@ - } - catch (Throwable ex) - { -- return new Output_8859_1(); -+ throw new UnsatisfiedLinkError(); -+ //return new Output_8859_1(); - } - } - -diff -ru libjava/java/lang/Class.h libjava/java/lang/Class.h ---- libjava/java/lang/Class.h Sun Jan 19 22:49:28 2003 -+++ libjava/java/lang/Class.h Wed Feb 25 21:34:30 2004 -@@ -80,7 +80,6 @@ - // NULL-terminated list of exception class names; can be NULL if - // there are none such. - _Jv_Utf8Const **throws; -- - _Jv_Method *getNextMethod () - { return this + 1; } - }; -diff -ru libjava/java/lang/natClass.cc libjava/java/lang/natClass.cc ---- libjava/java/lang/natClass.cc Thu May 1 14:52:35 2003 -+++ libjava/java/lang/natClass.cc Wed Feb 25 22:59:34 2004 -@@ -808,10 +808,12 @@ - // Steps 8, 9, 10, 11. - try - { -+ /* - _Jv_Method *meth = _Jv_GetMethodLocal (this, clinit_name, - void_signature); - if (meth) - ((void (*) (void)) meth->ncode) (); -+ */ - } - catch (java::lang::Throwable *except) - { -@@ -1326,13 +1328,13 @@ - if (meth) - break; - } -- -+ /* - if (meth && (meth->name->data[0] == '<')) - { - // leave a placeholder in the itable for hidden init methods. - itable[pos] = NULL; - } -- else if (meth) -+ else*/ if (meth) - { - if (Modifier::isStatic(meth->accflags)) - throw new java::lang::IncompatibleClassChangeError -diff -ru libjava/libgcj.spec.in libjava/libgcj.spec.in ---- libjava/libgcj.spec.in Wed Feb 12 18:09:27 2003 -+++ libjava/libgcj.spec.in Wed Feb 25 19:51:22 2004 -@@ -4,6 +4,6 @@ - # to link with libgcj. - # - %rename lib liborig --*lib: -lgcj -lm @LIBICONV@ @GCSPEC@ @THREADSPEC@ @ZLIBSPEC@ @SYSTEMSPEC@ %(libgcc) %(liborig) -+*lib: -lm @LIBICONV@ @GCSPEC@ @THREADSPEC@ @ZLIBSPEC@ @SYSTEMSPEC@ %(libgcc) %(liborig) - - *jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ -fkeep-inline-functions -diff -ru libjava/prims.cc libjava/prims.cc ---- libjava/prims.cc Fri Apr 25 09:02:21 2003 -+++ libjava/prims.cc Wed Feb 25 23:16:52 2004 -@@ -165,6 +165,7 @@ - { - int len; - _Jv_ushort *aptr, *bptr; -+ if (a == NULL || b == NULL) return false; - if (a == b) - return true; - if (a->hash != b->hash) -@@ -188,6 +189,7 @@ - jboolean - _Jv_equal (Utf8Const* a, jstring str, jint hash) - { -+ if (a == NULL) return false; - if (a->hash != (_Jv_ushort) hash) - return false; - jint len = str->length(); -@@ -210,6 +212,7 @@ - jboolean - _Jv_equaln (Utf8Const *a, jstring str, jint n) - { -+ if (a == NULL) return false; - jint len = str->length(); - jint i = 0; - jchar *sptr = _Jv_GetStringChars (str); diff --git a/upstream/gcc-3.3/patches/zzz-inhibit.reflection.patch b/upstream/gcc-3.3/patches/zzz-inhibit.reflection.patch new file mode 100644 index 0000000..c2a72c7 --- /dev/null +++ b/upstream/gcc-3.3/patches/zzz-inhibit.reflection.patch @@ -0,0 +1,737 @@ +diff -rBubboehm-gc/configureboehm-gc/configure +---boehm-gc/configure Tue May 13 17:18:14 2003 ++++boehm-gc/configure Mon Mar 1 01:03:55 2004 +@@ -1181,9 +1181,9 @@ + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then +- CFLAGS="-g -O2" ++ CFLAGS="-g -Os -ffunction-sections -fdata-sections" + else +- CFLAGS="-O2" ++ CFLAGS="-Os -ffunction-sections -fdata-sections" + fi + else + GCC= +@@ -1275,9 +1275,9 @@ + if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS="$ac_save_CXXFLAGS" + elif test $ac_cv_prog_cxx_g = yes; then +- CXXFLAGS="-g -O2" ++ CXXFLAGS="-g -Os -ffunction-sections -fdata-sections" + else +- CXXFLAGS="-O2" ++ CXXFLAGS="-Os -ffunction-sections -fdata-sections" + fi + else + GXX= +diff -rBubgcc/dwarf2out.cgcc/dwarf2out.c +---gcc/dwarf2out.c Mon May 5 09:59:20 2003 ++++gcc/dwarf2out.c Sat Feb 28 02:37:20 2004 +@@ -1040,6 +1040,8 @@ + else if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM) + return; + ++ if (frame_pointer_needed) return; ++ + if (GET_CODE (insn) == BARRIER) + { + /* When we see a BARRIER, we know to reset args_size to 0. Usually +diff -rBubgcc/java/class.cgcc/java/class.c +---gcc/java/class.c Fri Feb 28 12:53:07 2003 ++++gcc/java/class.c Mon Mar 1 00:20:15 2004 +@@ -971,7 +971,7 @@ + tree type; + { + int is_compiled = is_compiled_class (type); +- if (is_compiled) ++ if (is_compiled || flag_inhibit_reflection) + { + tree ref, decl_name, decl; + if (TREE_CODE (type) == POINTER_TYPE) +@@ -1199,13 +1199,17 @@ + int resolved = is_compiled_class (type); + + START_RECORD_CONSTRUCTOR (finit, field_type_node); ++ if (!flag_inhibit_reflection) { + PUSH_FIELD_VALUE (finit, "name", build_utf8_ref (DECL_NAME (fdecl))); ++ } else { ++ PUSH_FIELD_VALUE (finit, "name", null_pointer_node); ++ } + if (resolved) + type = build_class_ref (type); + else + { ++ if (!flag_inhibit_reflection) { + tree signature = build_java_signature (type); +- + type = build_utf8_ref (unmangle_classname + (IDENTIFIER_POINTER (signature), + IDENTIFIER_LENGTH (signature))); +@@ -1209,6 +1213,9 @@ + type = build_utf8_ref (unmangle_classname + (IDENTIFIER_POINTER (signature), + IDENTIFIER_LENGTH (signature))); ++ } else { ++ type = null_pointer_node; ++ } + } + PUSH_FIELD_VALUE (finit, "type", type); + +@@ -1244,6 +1251,7 @@ + tree code; + #define ACC_TRANSLATED 0x4000 + int accflags = get_access_flags_from_decl (mdecl) | ACC_TRANSLATED; ++ int emitNames = 0; + + if (!flag_indirect_dispatch && DECL_VINDEX (mdecl) != NULL_TREE) + index = DECL_VINDEX (mdecl); +@@ -1254,6 +1262,12 @@ + if (DECL_RTL_SET_P (mdecl)) + code = build1 (ADDR_EXPR, nativecode_ptr_type_node, mdecl); + START_RECORD_CONSTRUCTOR (minit, method_type_node); ++ ++ emitNames = !flag_inhibit_reflection; ++ if (!METHOD_STATIC(mdecl)) emitNames = 1; ++ if (DECL_CLINIT_P(mdecl)) emitNames = 1; ++ if ((METHOD_STATIC(mdecl) && (strcmp(IDENTIFIER_POINTER(DECL_NAME(mdecl)),"main") == 0))) emitNames = 1; ++ if (emitNames) { + PUSH_FIELD_VALUE (minit, "name", + build_utf8_ref (DECL_CONSTRUCTOR_P (mdecl) ? + init_identifier_node +@@ -1266,6 +1280,10 @@ + (IDENTIFIER_POINTER(signature), + IDENTIFIER_LENGTH(signature))))); + } ++ } else { ++ PUSH_FIELD_VALUE (minit, "name", null_pointer_node); ++ PUSH_FIELD_VALUE (minit, "signature", null_pointer_node); ++ } + PUSH_FIELD_VALUE (minit, "accflags", build_int_2 (accflags, 0)); + PUSH_FIELD_VALUE (minit, "index", index); + PUSH_FIELD_VALUE (minit, "ncode", code); +@@ -1273,6 +1291,7 @@ + { + /* Compute the `throws' information for the method. */ + tree table = null_pointer_node; ++ if (!flag_inhibit_reflection) + if (DECL_FUNCTION_THROWS (mdecl) != NULL_TREE) + { + int length = 1 + list_length (DECL_FUNCTION_THROWS (mdecl)); +@@ -1473,6 +1493,7 @@ + DECL_INITIAL (field) = initial; + } + else ++ if (!flag_inhibit_reflection) + { + instance_field_count++; + instance_fields = tree_cons (NULL_TREE, init, instance_fields); +@@ -1480,6 +1501,9 @@ + } + } + field_count = static_field_count + instance_field_count; ++ ++ // we have to leave this here; part of the class initialization is the process ++ // of replacing utf8const's with String objects + if (field_count > 0) + { + static_fields = nreverse (static_fields); +@@ -1550,7 +1574,7 @@ + super = CLASSTYPE_SUPER (type); + if (super == NULL_TREE) + super = null_pointer_node; +- else if (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl)))) ++ else if (flag_inhibit_reflection || (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl))))) + super = build_class_ref (super); + else + { +@@ -1576,7 +1600,7 @@ + tree child = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (type), i); + tree iclass = BINFO_TYPE (child); + tree index; +- if (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (iclass))))) ++ if (flag_inhibit_reflection || (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (iclass)))))) + index = build_class_ref (iclass); + else + { +@@ -2225,6 +2249,7 @@ + index = 0; + method_list = otable_methods; + list = NULL_TREE; ++ if (!flag_inhibit_reflection) + while (method_list != NULL_TREE) + { + method = TREE_VALUE (method_list); +diff -rBubgcc/java/constants.cgcc/java/constants.c +---gcc/java/constants.c Mon Nov 18 07:46:32 2002 ++++gcc/java/constants.c Mon Mar 1 00:20:32 2004 +@@ -430,9 +430,13 @@ + int i; + for (i = outgoing_cpool->count; --i > 0; ) + { ++ if (!flag_inhibit_reflection) { + tags_list + = tree_cons (NULL_TREE, get_tag_node (outgoing_cpool->tags[i]), + tags_list); ++ } else { ++ tags_list = null_pointer_node; ++ } + data_list + = tree_cons (NULL_TREE, build_utf8_ref ((tree)outgoing_cpool->data[i]), + data_list); +@@ -446,7 +450,9 @@ + index_type = build_index_type (max_index); + + /* Add dummy 0'th element of constant pool. */ ++ if (!flag_inhibit_reflection) { + tags_list = tree_cons (NULL_TREE, get_tag_node (0), tags_list); ++ } + data_list = tree_cons (NULL_TREE, null_pointer_node, data_list); + + data_decl = TREE_OPERAND (build_constant_data_ref (), 0); +@@ -458,6 +464,7 @@ + rest_of_decl_compilation (data_decl, (char *) 0, 1, 0); + data_value = build_address_of (data_decl); + ++ if (!flag_inhibit_reflection) { + tags_type = build_array_type (unsigned_byte_type_node, index_type); + tags_decl = build_decl (VAR_DECL, mangled_classname ("_CT_", + current_class), +@@ -467,6 +474,9 @@ + NULL_TREE, tags_list); + rest_of_decl_compilation (tags_decl, (char*) 0, 1, 0); + tags_value = build_address_of (tags_decl); ++ } else { ++ tags_value = null_pointer_node; ++ } + } + else + { +diff -rBubgcc/java/java-tree.hgcc/java/java-tree.h +---gcc/java/java-tree.h Mon Nov 18 10:13:35 2002 ++++gcc/java/java-tree.h Thu Feb 26 15:01:38 2004 +@@ -225,6 +225,9 @@ + /* Encoding used for source files. */ + extern const char *current_encoding; + ++/** don't emit reflection information */ ++extern int flag_inhibit_reflection; ++ + /* The Java .class file that provides main_class; the main input file. */ + extern struct JCF *current_jcf; + +diff -rBubgcc/java/lang.cgcc/java/lang.c +---gcc/java/lang.c Sun Jan 5 07:03:25 2003 ++++gcc/java/lang.c Thu Feb 26 15:01:38 2004 +@@ -171,6 +171,9 @@ + /* The encoding of the source file. */ + const char *current_encoding = NULL; + ++/** don't emit reflection information */ ++int flag_inhibit_reflection = 0; ++ + /* When nonzero, report the now deprecated empty statements. */ + int flag_extraneous_semicolon; + +@@ -431,6 +434,13 @@ + { + flag_inline_functions = 1; + flag_really_inline = 1; ++ return 1; ++ } ++#undef ARG ++#define ARG "-finhibit-reflection" ++ if (strncmp (p, ARG, sizeof (ARG) - 1) == 0) ++ { ++ flag_inhibit_reflection = 1; + return 1; + } + #undef ARG +diff -rBublibjava/Makefile.inlibjava/Makefile.in +---libjava/Makefile.in Mon Mar 1 01:45:58 2004 ++++libjava/Makefile.in Sun Feb 29 22:09:27 2004 +@@ -174,10 +174,10 @@ + + WARNINGS = -W -Wall + AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions \ +- -fdollars-in-identifiers \ ++ -fdollars-in-identifiers -ffunction-sections -fdata-sections \ + -Wswitch-enum \ + @LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \ +- -DPREFIX="\"$(prefix)\"" ++ -DPREFIX="\"$(prefix)\"" -Os + + @USING_GCC_TRUE@AM_CFLAGS = @USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS) + @USING_GCC_FALSE@AM_CFLAGS = @USING_GCC_FALSE@@LIBGCJ_CFLAGS@ +diff -rBublibjava/boehm.cclibjava/boehm.cc +---libjava/boehm.cc Thu Jan 2 21:19:53 2003 ++++libjava/boehm.cc Mon Mar 1 00:21:04 2004 +@@ -17,6 +17,7 @@ + + #include + #include ++#include + #include + + // More nastiness: the GC wants to define TRUE and FALSE. We don't +@@ -147,6 +149,7 @@ + for (int i = 0; i < c->method_count; ++i) + { + p = (ptr_t) c->methods[i].name; ++ if (p == NULL) continue; + MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, + cm1label); + p = (ptr_t) c->methods[i].signature; +@@ -164,9 +167,11 @@ + + #ifndef COMPACT_FIELDS + p = (ptr_t) field->name; ++ if (p == NULL) continue; + MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8alabel); + #endif + p = (ptr_t) field->type; ++ if (p == NULL) continue; + MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8blabel); + + // For the interpreter, we also need to mark the memory +@@ -258,6 +263,7 @@ + // Note: occasionally `klass' can be null. For instance, this + // can happen if a GC occurs between the point where an object + // is allocated and where the vtbl slot is set. ++ throw new java::lang::VirtualMachineError(); + while (klass && klass != &java::lang::Object::class$) + { + jfieldID field = JvGetFirstInstanceField (klass); +diff -rBublibjava/configurelibjava/configure +---libjava/configure Mon Mar 1 01:45:59 2004 ++++libjava/configure Sun Feb 29 22:13:11 2004 +@@ -1180,13 +1180,13 @@ + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then +- CFLAGS="-g -O2" ++ CFLAGS="-g -Os" + else + CFLAGS="-g" + fi + else + if test "$GCC" = yes; then +- CFLAGS="-O2" ++ CFLAGS="-Os" + else + CFLAGS= + fi +@@ -1287,9 +1287,9 @@ + if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS="$ac_save_CXXFLAGS" + elif test $ac_cv_prog_cxx_g = yes; then +- CXXFLAGS="-g -O2" ++ CXXFLAGS="-g -Os" + else +- CXXFLAGS="-O2" ++ CXXFLAGS="-Os" + fi + else + GXX= +@@ -1683,6 +1683,9 @@ + + + ++cat >> confdefs.h <<\EOF ++#undef USE_LTDL ++EOF + + + # Only use libltdl for native builds. +@@ -1697,9 +1700,9 @@ + + + DIRLTDL=libltdl +- cat >> confdefs.h <<\EOF +-#define USE_LTDL 1 +-EOF ++# cat >> confdefs.h <<\EOF ++##define USE_LTDL 1 ++#EOF + + # Sigh. Libtool's macro doesn't do the right thing. + INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL" +@@ -5644,7 +5647,7 @@ + fi + fi + +- test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" ++ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -Os" + + + +@@ -5798,7 +5801,7 @@ + echo $ac_n "checking for g++ -ffloat-store bug""... $ac_c" 1>&6 + echo "configure:5796: checking for g++ -ffloat-store bug" >&5 + save_CFLAGS="$CFLAGS" +-CFLAGS="-x c++ -O2 -ffloat-store" ++CFLAGS="-x c++ -Os -ffloat-store" + cat > conftest.$ac_ext <], , + [AC_MSG_RESULT(no)], + [AC_DEFINE(__NO_MATH_INLINES) +diff -rBublibjava/gnu/gcj/convert/BytesToUnicode.javalibjava/gnu/gcj/convert/BytesToUnicode.java +---libjava/gnu/gcj/convert/BytesToUnicode.java Mon Jul 30 13:24:17 2001 ++++libjava/gnu/gcj/convert/BytesToUnicode.java Fri Feb 27 04:17:13 2004 +@@ -65,7 +65,7 @@ + } + catch (Throwable ex) + { +- return new Input_8859_1(); ++ throw new UnsatisfiedLinkError(); + } + } + +@@ -100,6 +100,7 @@ + } + catch (Throwable ex) + { ++ /* + try + { + // We pass the original name to iconv and let it handle +@@ -108,9 +109,10 @@ + } + catch (Throwable _) + { ++ */ + throw new java.io.UnsupportedEncodingException(encoding + + " (" + ex + ')'); +- } ++ //} + } + } + +diff -rBublibjava/gnu/gcj/convert/IOConverter.javalibjava/gnu/gcj/convert/IOConverter.java +---libjava/gnu/gcj/convert/IOConverter.java Sun Sep 16 19:28:53 2001 ++++libjava/gnu/gcj/convert/IOConverter.java Sun Feb 29 01:53:14 2004 +@@ -20,7 +20,7 @@ + + // True if we have to do byte-order conversions on iconv() + // arguments. +- static protected boolean iconv_byte_swap; ++ static protected boolean iconv_byte_swap = false; + + static + { +@@ -64,7 +64,7 @@ + hash.put ("cseucpkdfmtjapanese", "EUCJIS"); + hash.put ("euc-jp", "EUCJIS"); + +- iconv_byte_swap = iconv_init (); ++ //iconv_byte_swap = iconv_init (); + } + + private static native boolean iconv_init (); +diff -rBublibjava/gnu/gcj/convert/UnicodeToBytes.javalibjava/gnu/gcj/convert/UnicodeToBytes.java +---libjava/gnu/gcj/convert/UnicodeToBytes.java Fri Aug 17 20:56:01 2001 ++++libjava/gnu/gcj/convert/UnicodeToBytes.java Fri Feb 27 04:17:02 2004 +@@ -63,7 +63,8 @@ + } + catch (Throwable ex) + { +- return new Output_8859_1(); ++ throw new UnsatisfiedLinkError(); ++ //return new Output_8859_1(); + } + } + +@@ -97,6 +98,7 @@ + } + catch (Throwable ex) + { ++ /* + try + { + // We pass the original name to iconv and let it handle +@@ -105,10 +107,11 @@ + } + catch (Throwable _) + { ++ */ + // Put the original exception in the throwable. + throw new java.io.UnsupportedEncodingException(encoding + " (" + + ex + ')'); +- } ++ //} + } + } + +diff -rBublibjava/gnu/gcj/runtime/FirstThread.javalibjava/gnu/gcj/runtime/FirstThread.java +---libjava/gnu/gcj/runtime/FirstThread.java Wed Oct 10 15:25:43 2001 ++++libjava/gnu/gcj/runtime/FirstThread.java Fri Feb 27 05:05:29 2004 +@@ -90,8 +90,10 @@ + // classes are linked in. Otherwise bootstrapping fails. These + // classes are only referred to via Class.forName(), so we add an + // explicit mention of them here. ++ /* + static final Class Kcert = java.security.cert.Certificate.class; + static final Class Kfile = gnu.gcj.protocol.file.Handler.class; + static final Class Khttp = gnu.gcj.protocol.http.Handler.class; + static final Class Kjar = gnu.gcj.protocol.jar.Handler.class; ++ */ + } +diff -rBublibjava/gnu/gcj/runtime/VMClassLoader.javalibjava/gnu/gcj/runtime/VMClassLoader.java +---libjava/gnu/gcj/runtime/VMClassLoader.java Sun Dec 8 16:03:59 2002 ++++libjava/gnu/gcj/runtime/VMClassLoader.java Fri Feb 27 04:20:56 2004 +@@ -14,13 +14,15 @@ + import java.util.StringTokenizer; + import java.net.URL; + +-public final class VMClassLoader extends java.net.URLClassLoader ++public final class VMClassLoader extends java.lang.ClassLoader //java.net.URLClassLoader + { + private VMClassLoader () + { ++ /* + super (init()); ++ */ + } +- ++ /* + private static URL[] init() + { + StringTokenizer st +@@ -40,7 +42,7 @@ + } + catch (java.net.MalformedURLException x) + { +- /* Ignore this path element */ ++ // Ignore this path element + } + } + // Add core:/ to the end of the java.class.path so any resources +@@ -58,7 +60,7 @@ + p.copyInto (urls); + return urls; + } +- ++*/ + /** This is overridden to search the internal hash table, which + * will only search existing linked-in classes. This will make + * the default implementation of loadClass (in ClassLoader) work right. +diff -rBublibjava/gnu/gcj/runtime/natVMClassLoader.cclibjava/gnu/gcj/runtime/natVMClassLoader.cc +---libjava/gnu/gcj/runtime/natVMClassLoader.cc Tue Dec 10 19:15:14 2002 ++++libjava/gnu/gcj/runtime/natVMClassLoader.cc Fri Feb 27 04:22:00 2004 +@@ -60,8 +60,9 @@ + } + + // Now try loading using the interpreter. ++ /* + if (! klass) + klass = java::net::URLClassLoader::findClass (name); +- ++ */ + return klass; + } +diff -rBublibjava/java/lang/Class.javalibjava/java/lang/Class.java +---libjava/java/lang/Class.java Tue Sep 3 14:33:46 2002 ++++libjava/java/lang/Class.java Sat Feb 28 22:48:09 2004 +@@ -241,6 +241,7 @@ + */ + public ProtectionDomain getProtectionDomain() + { ++ /* + SecurityManager sm = System.getSecurityManager(); + if (sm != null) + sm.checkPermission(ClassLoader.protectionDomainPermission); +@@ -248,9 +249,12 @@ + ProtectionDomain protectionDomain = getProtectionDomain0(); + + if (protectionDomain == null) ++ */ + return ClassLoader.unknownProtectionDomain; ++ /* + else + return protectionDomain; ++ */ + } + + public String toString () +diff -rBublibjava/java/lang/ClassLoader.javalibjava/java/lang/ClassLoader.java +---libjava/java/lang/ClassLoader.java Fri Jan 24 11:38:24 2003 ++++libjava/java/lang/ClassLoader.java Sat Feb 28 21:07:31 2004 +@@ -345,8 +345,8 @@ + // FIXME: should there be a special protection domain used for native code? + + // The permission required to check what a classes protection domain is. +- static final Permission protectionDomainPermission +- = new RuntimePermission("getProtectionDomain"); ++ //static final Permission protectionDomainPermission; ++ //= new RuntimePermission("getProtectionDomain"); + // The protection domain returned if we cannot determine it. + static ProtectionDomain unknownProtectionDomain; + // Protection domain to use when a class is defined without one specified. +@@ -355,12 +355,14 @@ + static + { + Permissions permissions = new Permissions(); +- permissions.add(new AllPermission()); +- unknownProtectionDomain = new ProtectionDomain(null, permissions); ++ //permissions.add(new AllPermission()); ++ //unknownProtectionDomain = new ProtectionDomain(null, permissions); + ++ /* + CodeSource cs = new CodeSource(null, null); + defaultProtectionDomain = + new ProtectionDomain(cs, Policy.getPolicy().getPermissions(cs)); ++ */ + } + + /** +diff -rBublibjava/java/lang/SecurityManager.javalibjava/java/lang/SecurityManager.java +---libjava/java/lang/SecurityManager.java Sun Dec 1 08:16:19 2002 ++++libjava/java/lang/SecurityManager.java Fri Feb 27 02:08:27 2004 +@@ -297,7 +297,8 @@ + public Object getSecurityContext() + { + // XXX Should be: return AccessController.getContext(); +- return new SecurityContext(getClassContext()); ++ //return new SecurityContext(getClassContext()); ++ return null; + } + + /** +diff -rBublibjava/java/lang/natClass.cclibjava/java/lang/natClass.cc +---libjava/java/lang/natClass.cc Thu May 1 14:52:35 2003 ++++libjava/java/lang/natClass.cc Mon Mar 1 01:00:12 2004 +@@ -72,8 +72,10 @@ + + _Jv_Utf8Const *name = _Jv_makeUtf8Const (buffer, length); + ++ /* + if (! _Jv_VerifyClassName (name)) + throw new java::lang::ClassNotFoundException (className); ++ */ + + jclass klass = (buffer[0] == '[' + ? _Jv_FindClassFromSignature (name->data, loader) +@@ -1518,7 +1520,7 @@ + return; + + klass->otable->state = 1; +- ++ return; + int index = 0; + _Jv_MethodSymbol sym = klass->otable_syms[0]; + +diff -rBublibjava/java/lang/natClassLoader.cclibjava/java/lang/natClassLoader.cc +---libjava/java/lang/natClassLoader.cc Thu Dec 19 11:32:17 2002 ++++libjava/java/lang/natClassLoader.cc Sun Feb 29 23:55:48 2004 +@@ -195,6 +195,7 @@ + _Jv_Constants *pool = &klass->constants; + for (int index = 1; index < pool->size; ++index) + { ++ /* + if (pool->tags[index] == JV_CONSTANT_Class) + { + _Jv_Utf8Const *name = pool->data[index].utf8; +@@ -217,12 +218,13 @@ + } + else if (pool->tags[index] == JV_CONSTANT_String) + { ++ */ + jstring str; + + str = _Jv_NewStringUtf8Const (pool->data[index].utf8); + pool->data[index].o = str; +- pool->tags[index] |= JV_CONSTANT_ResolvedFlag; +- } ++ //pool->tags[index] |= JV_CONSTANT_ResolvedFlag; ++ //} + } + + #ifdef INTERPRETER +@@ -253,10 +255,10 @@ + + if (klass->vtable == NULL) + _Jv_MakeVTable(klass); +- ++ /* + if (klass->otable != NULL && klass->otable->state == 0) + _Jv_LinkOffsetTable(klass); +- ++ */ + klass->notifyAll (); + + _Jv_PushClass (klass); +diff -rBublibjava/java/security/Security.javalibjava/java/security/Security.java +---libjava/java/security/Security.java Tue Dec 31 14:49:37 2002 ++++libjava/java/security/Security.java Sat Feb 28 21:33:32 2004 +@@ -60,9 +60,11 @@ + + static + { ++ /* + String base = System.getProperty("gnu.classpath.home.url"); + loadProviders(base, System.getProperty("gnu.classpath.vm.shortname")); + loadProviders(base, "classpath"); ++ */ + } + + // This class can't be instantiated. +diff -rBublibjava/libgcj.spec.inlibjava/libgcj.spec.in +---libjava/libgcj.spec.in Wed Feb 12 18:09:27 2003 ++++libjava/libgcj.spec.in Sun Feb 29 17:15:19 2004 +@@ -4,6 +4,7 @@ + # to link with libgcj. + # + %rename lib liborig +-*lib: -lgcj -lm @LIBICONV@ @GCSPEC@ @THREADSPEC@ @ZLIBSPEC@ @SYSTEMSPEC@ %(libgcc) %(liborig) ++*lib: -lm @LIBICONV@ @GCSPEC@ @THREADSPEC@ @ZLIBSPEC@ @SYSTEMSPEC@ %(libgcc) %(liborig) ++ ++*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ -fkeep-inline-functions -fno-omit-frame-pointer -Os -ffunction-sections -fdata-sections + +-*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ -fkeep-inline-functions +diff -rBublibjava/prims.cclibjava/prims.cc +---libjava/prims.cc Fri Apr 25 09:02:21 2003 ++++libjava/prims.cc Sat Feb 28 20:32:25 2004 +@@ -165,6 +165,7 @@ + { + int len; + _Jv_ushort *aptr, *bptr; ++ if (a == NULL || b == NULL) return false; + if (a == b) + return true; + if (a->hash != b->hash) +@@ -188,6 +189,7 @@ + jboolean + _Jv_equal (Utf8Const* a, jstring str, jint hash) + { ++ if (a == NULL) return false; + if (a->hash != (_Jv_ushort) hash) + return false; + jint len = str->length(); +@@ -210,6 +212,7 @@ + jboolean + _Jv_equaln (Utf8Const *a, jstring str, jint n) + { ++ if (a == NULL) return false; + jint len = str->length(); + jint i = 0; + jchar *sptr = _Jv_GetStringChars (str); +@@ -936,7 +939,7 @@ + + _Jv_platform_initialize (); + +- _Jv_JNI_Init (); ++ // _Jv_JNI_Init (); + + _Jv_GCInitializeFinalizers (&::gnu::gcj::runtime::FinalizerThread::finalizerReady); + -- 1.7.10.4