+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 <java/lang/Class.h>
+ #include <java/lang/reflect/Modifier.h>
++#include <java/lang/VirtualMachineError.h>
+ #include <java-interp.h>
+
+ // 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 <<EOF
+ #line 5800 "configure"
+ #include "confdefs.h"
+diff -rBublibjava/configure.inlibjava/configure.in
+---libjava/configure.in Mon Mar 1 01:45:59 2004
++++libjava/configure.in Mon Mar 1 00:28:09 2004
+@@ -825,7 +825,7 @@
+ dnl Work around a g++ bug. Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000.
+ AC_MSG_CHECKING([for g++ -ffloat-store bug])
+ save_CFLAGS="$CFLAGS"
+-CFLAGS="-x c++ -O2 -ffloat-store"
++CFLAGS="-x c++ -Os -ffloat-store"
+ AC_TRY_COMPILE([#include <math.h>], ,
+ [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);
+