From 27107d9f3a3ce65e974faf4b1df206d116db8595 Mon Sep 17 00:00:00 2001 From: adam Date: Wed, 25 Feb 2004 10:56:33 +0000 Subject: [PATCH] i cant belive this works darcs-hash:20040225105633-5007d-39212ae26c25a5fed3012ac2b07553f0a60e19b5.gz --- Makefile | 19 ++---------- src/org/ibex/util/BytecodePruner.java | 55 ++++++++++----------------------- 2 files changed, 19 insertions(+), 55 deletions(-) diff --git a/Makefile b/Makefile index 5fb91ff..3acc98c 100644 --- a/Makefile +++ b/Makefile @@ -259,17 +259,7 @@ build/$(platform)/$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a # -fomit-frame-pointer \ # -fno-force-mem \ # -fno-force-addr \ -# -fbranch-probabilities \ -# -fno-schedule-insns \ -# -fno-optimize-sibling-calls \ -# -fno-if-conversion \ -# -fno-thread-jumps \ -# -foptimize-static-class-initialization \ -# -fno-store-check \ -# -fno-bounds-check \ # -fmerge-all-constants \ -# -fno-inline-functions \ -# -finline-limit=1 \ cd build/pruned; \ for A in `find . -name \*.class -or -name \*.java`; do \ @@ -293,10 +283,9 @@ build/$(platform)/$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a $(shell pwd)/upstream/install/$(target)/bin/ar cq \ $(shell pwd)/build/$(platform)/natibex.a \ `cat $(shell pwd)/.natbins` -# --relax,-O2,--no-whole-archive, +# -O2,--relax, PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj \ - -Wl,--no-gc-sections,--noinhibit-exec,-rpath,upstream/install/$(target)/lib \ - -Wl,-nostdlib,--eh-frame-hdr,-m,elf_i386,-dynamic-linker,/lib/ld-linux.so.2 \ + -Wl,--no-gc-sections,--noinhibit-exec \ --main=org.ibex.plat.$(platform) \ -Lupstream/install/$(target)/lib \ -Lupstream/install/lib \ @@ -308,9 +297,7 @@ build/$(platform)/$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a upstream/jpeg-6b/build-$(target)/libjpeg.a \ $(link_flags) \ upstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/.libs/libgcjgc.a \ - -lz -ldl -lgcc -lm -lpthread -ldl -lgcc -lc -lgcc \ - upstream/install/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3/crtend.o \ - upstream/install/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3/../../../../i686-pc-linux-gnu/lib/crtn.o \ + -lz -ldl \ -o $@ # strip build/Linux/ibex.linux # ls -l build/Linux/ibex.linux diff --git a/src/org/ibex/util/BytecodePruner.java b/src/org/ibex/util/BytecodePruner.java index f9a3b64..a04a77a 100644 --- a/src/org/ibex/util/BytecodePruner.java +++ b/src/org/ibex/util/BytecodePruner.java @@ -11,13 +11,13 @@ import org.apache.bcel.util.*; public class BytecodePruner { public static final boolean deleteMethods = false; - - // FIXME public static SyntheticRepository repo = null; - public static HashSet dest = new HashSet(); - public static String outdir = "."; + public static Hashtable subclasses = new Hashtable(); + public static int level = 0; + + public BytecodePruner() { } public void loadAllMethods(String classname) throws Exception { visitJavaClass(repo.loadClass(classname)); @@ -40,6 +40,7 @@ public class BytecodePruner { public void loadMethod(String classAndMethodName) throws Exception { String classname = classAndMethodName.substring(0, classAndMethodName.lastIndexOf('.')); String methodname = classAndMethodName.substring(classAndMethodName.lastIndexOf('.') + 1); + if (classname.endsWith("." + methodname)) methodname = ""; visitJavaClass(repo.loadClass(classname)); Method[] meths = getMethods(repo.loadClass(classname)); for(int i=0; i")) good = true; } else { @@ -217,13 +214,7 @@ public class BytecodePruner { load(((ObjectType)t).getClassName()); } - // hashtable of hashsets - public static Hashtable subclasses = new Hashtable(); - - public String getMethodSignature(Method m, ConstantPoolGen cpg) throws Exception { - return m.getName() + m.getSignature(); - } - + public String getMethodSignature(Method m, ConstantPoolGen cpg) throws Exception { return m.getName() + m.getSignature(); } public String getMethodSignature(InvokeInstruction ii, ConstantPoolGen cpg) throws Exception { String sig = ""; Type[] argtypes = ii.getArgumentTypes(cpg); @@ -231,23 +222,15 @@ public class BytecodePruner { return ii.getMethodName(cpg) + "(" + sig + ")" + ii.getReturnType(cpg).getSignature(); } - public static int level = 0; public void visitJavaMethod(JavaClass jc, Method method) throws Exception { visitJavaClass(jc); - /* - if (jc.getClassName().equals("java.util.Date") && method.getName().equals("readObject")) return; - */ if (jc.getClassName().indexOf("SharedLib") != -1) return; if (jc.getClassName().indexOf("Datagram") != -1) return; - if (dest.contains(method)) return; - /* - // HACK (okay?) - // not inferrable: CNI call to abstract method - if (jc.getClassName().equals("java.util.TimeZone") && method.getName().equals("getDefaultTimeZoneId")) - loadMethod("java.util.SimpleTimeZone.useDaylightTime"); - */ - + // 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; + + if (dest.contains(method)) return; dest.add(method); level += 2; for(int i=0; i")) visitJavaMethod(clazz, methods[i]); - // only if ctor reachable (?) 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]); -- 1.7.10.4