From a726bd527e6364dd00477e17e9c688d32509c62c Mon Sep 17 00:00:00 2001 From: adam Date: Wed, 25 Feb 2004 12:23:51 +0000 Subject: [PATCH] even better darcs-hash:20040225122351-5007d-11142349d72afb9816072a471b7a7cd6629c348d.gz --- Makefile | 3 +- src/org/ibex/HTTP.java | 10 ++--- src/org/ibex/util/BytecodePruner.java | 66 +++++++++++++++++++++------------ 3 files changed, 49 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 3acc98c..b605550 100644 --- a/Makefile +++ b/Makefile @@ -283,9 +283,8 @@ 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` -# -O2,--relax, PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj \ - -Wl,--no-gc-sections,--noinhibit-exec \ + -Wl,-O2,--relax,--gc-sections,--noinhibit-exec \ --main=org.ibex.plat.$(platform) \ -Lupstream/install/$(target)/lib \ -Lupstream/install/lib \ diff --git a/src/org/ibex/HTTP.java b/src/org/ibex/HTTP.java index 2aed806..7f6f248 100644 --- a/src/org/ibex/HTTP.java +++ b/src/org/ibex/HTTP.java @@ -385,7 +385,7 @@ public class HTTP { if (h.get("AUTHTYPE").equals("Basic")) { if (authCache.get(originalUrl) != null) throw new HTTPException("username/password rejected"); - authCache.put(originalUrl, "Basic " + new String(Base64.encode(userInfo.getBytes("US-ASCII")))); + authCache.put(originalUrl, "Basic " + new String(Base64.encode(userInfo.getBytes("UTF8")))); } else if (h.get("AUTHTYPE").equals("Digest")) { if (authCache.get(originalUrl) != null && !"true".equals(h.get("stale"))) @@ -432,7 +432,7 @@ public class HTTP { if (style.equals("Basic")) { Proxy.Authorization.authorization2 = - "Basic " + new String(Base64.encode(Proxy.Authorization.authorization.getBytes("US-ASCII"))); + "Basic " + new String(Base64.encode(Proxy.Authorization.authorization.getBytes("UTF8"))); } else if (style.equals("Digest")) { String A1 = Proxy.Authorization.authorization.substring(0, userInfo.indexOf(':')) + ":" + h.get("realm") + ":" + @@ -633,7 +633,7 @@ public class HTTP { } private String H(String s) throws IOException { - byte[] b = s.getBytes("US-ASCII"); + byte[] b = s.getBytes("UTF8"); MD5Digest md5 = new MD5Digest(); md5.update(b, 0, b.length); byte[] out = new byte[md5.getDigestSize()]; @@ -1037,13 +1037,13 @@ public class HTTP { */ private static byte[] lmHash(String password) { /* - byte[] oemPassword = password.toUpperCase().getBytes("US-ASCII"); + byte[] oemPassword = password.toUpperCase().getBytes("UTF8"); int length = java.lang.Math.min(oemPassword.length, 14); byte[] keyBytes = new byte[14]; System.arraycopy(oemPassword, 0, keyBytes, 0, length); Key lowKey = createDESKey(keyBytes, 0); Key highKey = createDESKey(keyBytes, 7); - byte[] magicConstant = "KGS!@#$%".getBytes("US-ASCII"); + byte[] magicConstant = "KGS!@#$%".getBytes("UTF8"); Cipher des = Cipher.getInstance("DES/ECB/NoPadding"); des.init(Cipher.ENCRYPT_MODE, lowKey); byte[] lowHash = des.doFinal(magicConstant); diff --git a/src/org/ibex/util/BytecodePruner.java b/src/org/ibex/util/BytecodePruner.java index a04a77a..18231fb 100644 --- a/src/org/ibex/util/BytecodePruner.java +++ b/src/org/ibex/util/BytecodePruner.java @@ -7,7 +7,8 @@ import org.apache.bcel.generic.*; import org.apache.bcel.classfile.*; import org.apache.bcel.util.*; -// Field pruning +// can we drop nio? in natibex.a? + public class BytecodePruner { public static final boolean deleteMethods = false; @@ -60,11 +61,7 @@ public class BytecodePruner { } else { JavaClass cl = repo.loadClass(s[i].substring(0, s[i].lastIndexOf('.')));; bcp.visitJavaClass(cl); - Method[] meths = getMethods(cl); - for(int j=0; j")) + constructed = 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; } else { if (methods[i].getCode() == null) { @@ -180,9 +187,16 @@ public class BytecodePruner { } } - new File(outdir + "/" + new File(clazz.getClassName().replace('.', '/')).getParent()).mkdirs(); - System.out.println("dumping " + clazz.getClassName()); - cg.getJavaClass().dump(outdir + "/" + clazz.getClassName().replace('.', '/') + ".class"); + // FIXME: remove this + good = true; + + if (!good) { + System.out.println("DROPPING " + clazz.getClassName()); + } else { + new File(outdir + "/" + new File(clazz.getClassName().replace('.', '/')).getParent()).mkdirs(); + System.out.println("dumping " + clazz.getClassName()); + cg.getJavaClass().dump(outdir + "/" + clazz.getClassName().replace('.', '/') + ".class"); + } } public JavaClass sig2class(String sig) throws Exception { @@ -267,7 +281,10 @@ public class BytecodePruner { InvokeInstruction ii = (InvokeInstruction)instr; String ii_sig = getMethodSignature(ii, cpg); JavaClass c = sig2class(ii.getLoadClassType(cpg).getSignature()); + + // FIXME: removable? load(ii.getReturnType(cpg)); + load(ii.getType(cpg)); Method[] meths = getMethods(c); boolean good = false; @@ -282,7 +299,10 @@ public class BytecodePruner { } } level -= 2; + // FIXME: move this to the top + + // FIXME: removable? load(method.getReturnType()); Type[] argtypes = method.getArgumentTypes(); for(int i=0; i