diff options
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 19 | ||||
-rw-r--r-- | libjava/Makefile.in | 30 | ||||
-rw-r--r-- | libjava/boehm.cc | 115 | ||||
-rw-r--r-- | libjava/include/boehm-gc.h | 1 | ||||
-rw-r--r-- | libjava/include/execution.h | 20 | ||||
-rw-r--r-- | libjava/java/lang/Class.h | 7 | ||||
-rw-r--r-- | libjava/java/lang/natClassLoader.cc | 60 | ||||
-rw-r--r-- | libjava/link.cc | 36 | ||||
-rwxr-xr-x | libjava/scripts/makemake.tcl | 2 | ||||
-rw-r--r-- | libjava/sources.am | 30 |
10 files changed, 279 insertions, 41 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 9ab4e752..10b48df 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,22 @@ +2006-04-21 Andrew Haley <aph@redhat.com> + + * include/execution.h (struct _Jv_CompiledEngine): Define for + compiled classes. + * java/lang/natClassLoader.cc (_Jv_RegisterClasses): Call + _Jv_RegisterLibForGc. + (_Jv_RegisterClasses_Counted): Likewise. + (_Jv_NewClassFromInitializer): New. + (_Jv_RegisterNewClasses): New. + * sources.am: Regenerate. + * boehm.cc (_Jv_GC_has_static_roots): new. + (_Jv_InitGC): Call GC_register_has_static_roots_callback. + (filename_node, find_file, _Jv_print_gc_store, new_node, + _Jv_GC_has_static_roots, _Jv_RegisterLibForGc): New. + * scripts/makemake.tcl: Add -fno-indirect-classes. + * Makefile.in: Regenerate. + * link.cc (resolve_pool_entry): Allocate constant pool. + Allocate fields. + 2006-04-22 Andreas Tobler <a.tobler@schweiz.ch> * configure.ac: Weaken the check for MMAP. diff --git a/libjava/Makefile.in b/libjava/Makefile.in index f0ca50e..b766274 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -8448,7 +8448,7 @@ lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPEND gnu-CORBA.lo: $(gnu_CORBA_source_files) @find classpath/lib/gnu/CORBA -name '*.class' > gnu-CORBA.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-CORBA.lo @gnu-CORBA.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-CORBA.lo @gnu-CORBA.list @rm -f gnu-CORBA.list gnu/awt.list: $(gnu_awt_source_files) @@ -8683,22 +8683,22 @@ gnu/java/awt/peer.list: $(gnu_java_awt_peer_source_files) gnu-java-awt-peer-gtk.lo: $(gnu_java_awt_peer_gtk_source_files) @find classpath/lib/gnu/java/awt/peer/gtk -name '*.class' > gnu-java-awt-peer-gtk.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-awt-peer-gtk.lo @gnu-java-awt-peer-gtk.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-java-awt-peer-gtk.lo @gnu-java-awt-peer-gtk.list @rm -f gnu-java-awt-peer-gtk.list gnu-java-awt-peer-qt.lo: $(gnu_java_awt_peer_qt_source_files) @find classpath/lib/gnu/java/awt/peer/qt -name '*.class' > gnu-java-awt-peer-qt.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-awt-peer-qt.lo @gnu-java-awt-peer-qt.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-java-awt-peer-qt.lo @gnu-java-awt-peer-qt.list @rm -f gnu-java-awt-peer-qt.list gnu-java-awt-peer-swing.lo: $(gnu_java_awt_peer_swing_source_files) @find classpath/lib/gnu/java/awt/peer/swing -name '*.class' > gnu-java-awt-peer-swing.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-awt-peer-swing.lo @gnu-java-awt-peer-swing.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-java-awt-peer-swing.lo @gnu-java-awt-peer-swing.list @rm -f gnu-java-awt-peer-swing.list gnu-java-beans.lo: $(gnu_java_beans_source_files) @find classpath/lib/gnu/java/beans -name '*.class' > gnu-java-beans.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-beans.lo @gnu-java-beans.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-java-beans.lo @gnu-java-beans.list @rm -f gnu-java-beans.list gnu/java/io.list: $(gnu_java_io_source_files) @@ -9393,7 +9393,7 @@ gnu/javax/net/ssl/provider.list: $(gnu_javax_net_ssl_provider_source_files) gnu-javax-rmi.lo: $(gnu_javax_rmi_source_files) @find classpath/lib/gnu/javax/rmi -name '*.class' > gnu-javax-rmi.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-javax-rmi.lo @gnu-javax-rmi.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-javax-rmi.lo @gnu-javax-rmi.list @rm -f gnu-javax-rmi.list gnu/javax/security/auth.list: $(gnu_javax_security_auth_source_files) @@ -9428,7 +9428,7 @@ gnu/javax/security/auth/login.list: $(gnu_javax_security_auth_login_source_files gnu-javax-sound-midi.lo: $(gnu_javax_sound_midi_source_files) @find classpath/lib/gnu/javax/sound/midi -name '*.class' > gnu-javax-sound-midi.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-javax-sound-midi.lo @gnu-javax-sound-midi.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-javax-sound-midi.lo @gnu-javax-sound-midi.list @rm -f gnu-javax-sound-midi.list gnu/javax/swing/text/html/parser.list: $(gnu_javax_swing_text_html_parser_source_files) @@ -9483,7 +9483,7 @@ gnu/regexp.list: $(gnu_regexp_source_files) gnu-xml.lo: $(gnu_xml_source_files) @find classpath/lib/gnu/xml -name '*.class' > gnu-xml.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-xml.lo @gnu-xml.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-xml.lo @gnu-xml.list @rm -f gnu-xml.list java/applet.list: $(java_applet_source_files) @@ -9998,7 +9998,7 @@ javax/crypto/spec.list: $(javax_crypto_spec_source_files) javax-imageio.lo: $(javax_imageio_source_files) @find classpath/lib/javax/imageio -name '*.class' > javax-imageio.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-imageio.lo @javax-imageio.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o javax-imageio.lo @javax-imageio.list @rm -f javax-imageio.list javax/management.list: $(javax_management_source_files) @@ -10123,7 +10123,7 @@ javax/print/event.list: $(javax_print_event_source_files) javax-rmi.lo: $(javax_rmi_source_files) @find classpath/lib/javax/rmi -name '*.class' > javax-rmi.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-rmi.lo @javax-rmi.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o javax-rmi.lo @javax-rmi.list @rm -f javax-rmi.list javax/security/auth.list: $(javax_security_auth_source_files) @@ -10438,7 +10438,7 @@ javax/transaction/xa.list: $(javax_transaction_xa_source_files) javax-xml.lo: $(javax_xml_source_files) @find classpath/lib/javax/xml -name '*.class' > javax-xml.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-xml.lo @javax-xml.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o javax-xml.lo @javax-xml.list @rm -f javax-xml.list org/ietf/jgss.list: $(org_ietf_jgss_source_files) @@ -10453,22 +10453,22 @@ org/ietf/jgss.list: $(org_ietf_jgss_source_files) org-omg.lo: $(org_omg_source_files) @find classpath/lib/org/omg -name '*.class' > org-omg.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-omg.lo @org-omg.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o org-omg.lo @org-omg.list @rm -f org-omg.list org-relaxng.lo: $(org_relaxng_source_files) @find classpath/lib/org/relaxng -name '*.class' > org-relaxng.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-relaxng.lo @org-relaxng.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o org-relaxng.lo @org-relaxng.list @rm -f org-relaxng.list org-w3c.lo: $(org_w3c_source_files) @find classpath/lib/org/w3c -name '*.class' > org-w3c.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-w3c.lo @org-w3c.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o org-w3c.lo @org-w3c.list @rm -f org-w3c.list org-xml.lo: $(org_xml_source_files) @find classpath/lib/org/xml -name '*.class' > org-xml.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-xml.lo @org-xml.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o org-xml.lo @org-xml.list @rm -f org-xml.list $(generic_header_files): %.h: classpath/lib/%.class diff --git a/libjava/boehm.cc b/libjava/boehm.cc index 7066e28..9ee633b 100644 --- a/libjava/boehm.cc +++ b/libjava/boehm.cc @@ -32,6 +32,13 @@ details. */ #undef PACKAGE_TARNAME #undef PACKAGE_VERSION +#ifdef HAVE_DLFCN_H +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include <dlfcn.h> +#include <link.h> +#endif + extern "C" { #include <gc_config.h> @@ -64,6 +71,8 @@ static int array_kind_x; // Freelist used for Java arrays. static void **array_free_list; +static int _Jv_GC_has_static_roots (const char *filename, void *, size_t); + // This is called by the GC during the mark phase. It marks a Java @@ -468,10 +477,21 @@ void _Jv_InitGC (void) { int proc; + static bool gc_initialized; + + if (gc_initialized) + return; + + gc_initialized = 1; // Ignore pointers that do not point to the start of an object. GC_all_interior_pointers = 0; +#ifdef HAVE_DLFCN_H + // Tell the collector to ask us before scanning DSOs. + GC_register_has_static_roots_callback (_Jv_GC_has_static_roots); +#endif + // Configure the collector to use the bitmap marking descriptors that we // stash in the class vtable. // We always use mark proc descriptor 0, since the compiler knows @@ -559,3 +579,98 @@ _Jv_GCCanReclaimSoftReference (jobject) // For now, always reclaim soft references. FIXME. return true; } + + + +#ifdef HAVE_DLFCN_H + +// We keep a store of the filenames of DSOs that need to be +// conservatively scanned by the garbage collector. During collection +// the gc calls _Jv_GC_has_static_roots() to see if the data segment +// of a DSO should be scanned. +typedef struct filename_node +{ + char *name; + struct filename_node *link; +} filename_node; + +#define FILENAME_STORE_SIZE 17 +static filename_node *filename_store[FILENAME_STORE_SIZE]; + +// Find a filename in filename_store. +static filename_node ** +find_file (const char *filename) +{ + int index = strlen (filename) % FILENAME_STORE_SIZE; + filename_node **node = &filename_store[index]; + + while (*node) + { + if (strcmp ((*node)->name, filename) == 0) + return node; + node = &(*node)->link; + } + + return node; +} + +// Print the store of filenames of DSOs that need collection. +void +_Jv_print_gc_store (void) +{ + for (int i = 0; i < FILENAME_STORE_SIZE; i++) + { + filename_node *node = filename_store[i]; + while (node) + { + fprintf (stderr, "%s\n", node->name); + node = node->link; + } + } +} + +// Create a new node in the store of libraries to collect. +static filename_node * +new_node (const char *filename) +{ + filename_node *node = (filename_node*)_Jv_Malloc (sizeof (filename_node)); + node->name = (char *)_Jv_Malloc (strlen (filename) + 1); + node->link = NULL; + strcpy (node->name, filename); + + return node; +} + +// Nonzero if the gc should scan this lib. +static int +_Jv_GC_has_static_roots (const char *filename, void *, size_t) +{ + if (filename == NULL || strlen (filename) == 0) + // No filename; better safe than sorry. + return 1; + + filename_node **node = find_file (filename); + if (*node) + return 1; + + return 0; +} + +#endif + +// Register the DSO that contains p for collection. +void +_Jv_RegisterLibForGc (const void *p __attribute__ ((__unused__))) +{ +#ifdef HAVE_DLFCN_H + Dl_info info; + + if (dladdr (p, &info) != 0) + { + filename_node **node = find_file (info.dli_fname); + if (! *node) + *node = new_node (info.dli_fname); + } +#endif +} + diff --git a/libjava/include/boehm-gc.h b/libjava/include/boehm-gc.h index e7802b6..4e2a06b 100644 --- a/libjava/include/boehm-gc.h +++ b/libjava/include/boehm-gc.h @@ -19,6 +19,7 @@ extern "C" { void *_Jv_MarkObj (void *, void *, void *, void *); void *_Jv_MarkArray (void *, void *, void *, void *); + void _Jv_RegisterLibForGc (const void *); } // Enough stuff to inline _Jv_AllocObj. Ugly. diff --git a/libjava/include/execution.h b/libjava/include/execution.h index 88189f6..fe141e9 100644 --- a/libjava/include/execution.h +++ b/libjava/include/execution.h @@ -55,9 +55,25 @@ struct _Jv_CompiledEngine : public _Jv_ExecutionEngine return NULL; } - static void do_allocate_static_fields (jclass, int, int) + static void do_allocate_static_fields (jclass klass, + int pointer_size, + int other_size) { - // Compiled classes don't need this. + // Splitting the allocations here lets us scan reference fields + // and avoid scanning non-reference fields. + char *reference_fields = (char *) _Jv_AllocRawObj (pointer_size); + char *non_reference_fields = (char *) _Jv_AllocBytes (other_size); + + for (int i = 0; i < klass->field_count; i++) + { + _Jv_Field *field = &klass->fields[i]; + + if ((field->flags & java::lang::reflect::Modifier::STATIC) == 0) + continue; + + char *base = field->isRef() ? reference_fields : non_reference_fields; + field->u.addr = base + field->u.boffset; + } } static void do_create_ncode (jclass) diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h index 787e263..af959f9 100644 --- a/libjava/java/lang/Class.h +++ b/libjava/java/lang/Class.h @@ -39,6 +39,9 @@ extern "Java" // We declare these here to avoid including gcj/cni.h. extern "C" void _Jv_InitClass (jclass klass); +extern "C" jclass _Jv_NewClassFromInitializer + (const jclass class_initializer); +extern "C" void _Jv_RegisterNewClasses (void **classes); extern "C" void _Jv_RegisterClasses (const jclass *classes); extern "C" void _Jv_RegisterClasses_Counted (const jclass *classes, size_t count); @@ -286,7 +289,7 @@ public: JArray<jclass> *getClasses (void); java::lang::ClassLoader *getClassLoader (void); - +public: // This is an internal method that circumvents the usual security // checks when getting the class loader. java::lang::ClassLoader *getClassLoaderInternal (void) @@ -427,6 +430,8 @@ private: int method_idx); friend void ::_Jv_InitClass (jclass klass); + friend java::lang::Class* ::_Jv_NewClassFromInitializer (const jclass class_initializer); + friend void _Jv_RegisterNewClasses (void **classes); friend _Jv_Method* ::_Jv_LookupDeclaredMethod (jclass, _Jv_Utf8Const *, _Jv_Utf8Const*, jclass *); diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc index d22d6c2..e6cfca2 100644 --- a/libjava/java/lang/natClassLoader.cc +++ b/libjava/java/lang/natClassLoader.cc @@ -45,14 +45,17 @@ details. */ #include <gnu/gcj/runtime/BootClassLoader.h> #include <gnu/gcj/runtime/SystemClassLoader.h> +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include <dlfcn.h> +#include <link.h> + // Size of local hash table. #define HASH_LEN 1013 // Hash function for Utf8Consts. #define HASH_UTF(Utf) ((Utf)->hash16() % HASH_LEN) -static jclass loaded_classes[HASH_LEN]; - // This records classes which will be registered with the system class // loader when it is initialized. static jclass system_class_list; @@ -62,6 +65,8 @@ static jclass system_class_list; // no longer pay attention to the system abi flag. #define SYSTEM_LOADER_INITIALIZED ((jclass) -1) +static jclass loaded_classes[HASH_LEN]; + // This is the root of a linked list of classes static jclass stack_head; @@ -164,6 +169,8 @@ _Jv_UnregisterInitiatingLoader (jclass klass, java::lang::ClassLoader *loader) void _Jv_RegisterClasses (const jclass *classes) { + _Jv_RegisterLibForGc (classes); + for (; *classes; ++classes) { jclass klass = *classes; @@ -178,6 +185,9 @@ void _Jv_RegisterClasses_Counted (const jclass * classes, size_t count) { size_t i; + + _Jv_RegisterLibForGc (classes); + for (i = 0; i < count; i++) { jclass klass = classes[i]; @@ -187,6 +197,41 @@ _Jv_RegisterClasses_Counted (const jclass * classes, size_t count) } } +// Create a class on the heap from an initializer struct. +jclass +_Jv_NewClassFromInitializer (const jclass class_initializer) +{ + jclass new_class = (jclass)_Jv_AllocObj (sizeof *new_class, + &java::lang::Class::class$); + memcpy ((void*)new_class, (void*)class_initializer, sizeof *new_class); + + if (_Jv_CheckABIVersion ((unsigned long) new_class->next_or_version)) + (*_Jv_RegisterClassHook) (new_class); + + return new_class; +} + +// Called by compiler-generated code at DSO initialization. CLASSES +// is an array of pairs: the first item of each pair is a pointer to +// the initialized data that is a class initializer in a DSO, and the +// second is a pointer to a class reference. +// _Jv_NewClassFromInitializer() creates the new class (on the Java +// heap) and we write the address of the new class into the address +// pointed to by the second word. +void +_Jv_RegisterNewClasses (void **classes) +{ + _Jv_InitGC (); + + jclass initializer; + + while ((initializer = (jclass)*classes++)) + { + jclass *class_ptr = (jclass *)*classes++; + *class_ptr = _Jv_NewClassFromInitializer (initializer); + } +} + void _Jv_RegisterClassHookDefault (jclass klass) { @@ -389,6 +434,12 @@ static _Jv_IDispatchTable *array_idt = NULL; static jshort array_depth = 0; static jclass *array_ancestors = NULL; +static jclass interfaces[] = +{ + &java::lang::Cloneable::class$, + &java::io::Serializable::class$ +}; + // Create a class representing an array of ELEMENT and store a pointer to it // in element->arrayclass. LOADER is the ClassLoader which _initiated_ the // instantiation of this array. ARRAY_VTABLE is the vtable to use for the new @@ -464,11 +515,6 @@ _Jv_NewArrayClass (jclass element, java::lang::ClassLoader *loader, array_class->element_type = element; // Register our interfaces. - static jclass interfaces[] = - { - &java::lang::Cloneable::class$, - &java::io::Serializable::class$ - }; array_class->interfaces = interfaces; array_class->interface_count = sizeof interfaces / sizeof interfaces[0]; diff --git a/libjava/link.cc b/libjava/link.cc index 827d318..e107316 100644 --- a/libjava/link.cc +++ b/libjava/link.cc @@ -21,6 +21,12 @@ details. */ #include <java-interp.h> +// Set GC_DEBUG before including gc.h! +#ifdef LIBGCJ_GC_DEBUG +# define GC_DEBUG +#endif +#include <gc.h> + #include <jvm.h> #include <gcj/cni.h> #include <string.h> @@ -265,6 +271,21 @@ _Jv_Linker::resolve_pool_entry (jclass klass, int index, bool lazy) { using namespace java::lang::reflect; + if (GC_base (klass) && klass->constants.data + && ! GC_base (klass->constants.data)) + { + jsize count = klass->constants.size; + if (count) + { + _Jv_word* constants + = (_Jv_word*) _Jv_AllocRawObj (count * sizeof (_Jv_word)); + memcpy ((void*)constants, + (void*)klass->constants.data, + count * sizeof (_Jv_word)); + klass->constants.data = constants; + } + } + _Jv_Constants *pool = &klass->constants; if ((pool->tags[index] & JV_CONSTANT_ResolvedFlag) != 0) @@ -1893,6 +1914,21 @@ _Jv_Linker::wait_for_state (jclass klass, int state) java::lang::Thread *save = klass->thread; klass->thread = self; + // Allocate memory for static fields and constants. + if (GC_base (klass) && klass->fields && ! GC_base (klass->fields)) + { + jsize count = klass->field_count; + if (count) + { + _Jv_Field* fields + = (_Jv_Field*) _Jv_AllocRawObj (count * sizeof (_Jv_Field)); + memcpy ((void*)fields, + (void*)klass->fields, + count * sizeof (_Jv_Field)); + klass->fields = fields; + } + } + // Print some debugging info if requested. Interpreted classes are // handled in defineclass, so we only need to handle the two // pre-compiled cases here. diff --git a/libjava/scripts/makemake.tcl b/libjava/scripts/makemake.tcl index 568a72f..1169d9b 100755 --- a/libjava/scripts/makemake.tcl +++ b/libjava/scripts/makemake.tcl @@ -224,7 +224,7 @@ proc emit_bc_rule {package} { set omit "| grep -v $exclusion_map($package)" } puts "\t@find classpath/lib/$package -name '*.class'${omit} > $tname" - puts "\t\$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o $loname @$tname" + puts "\t\$(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o $loname @$tname" puts "\t@rm -f $tname" puts "" diff --git a/libjava/sources.am b/libjava/sources.am index ca6fff7..d3463d3 100644 --- a/libjava/sources.am +++ b/libjava/sources.am @@ -164,7 +164,7 @@ classpath/gnu/CORBA/typecodes/StringTypeCode.java gnu-CORBA.lo: $(gnu_CORBA_source_files) @find classpath/lib/gnu/CORBA -name '*.class' > gnu-CORBA.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-CORBA.lo @gnu-CORBA.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-CORBA.lo @gnu-CORBA.list @rm -f gnu-CORBA.list gnu_awt_source_files = \ @@ -772,7 +772,7 @@ classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java gnu-java-awt-peer-gtk.lo: $(gnu_java_awt_peer_gtk_source_files) @find classpath/lib/gnu/java/awt/peer/gtk -name '*.class' > gnu-java-awt-peer-gtk.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-awt-peer-gtk.lo @gnu-java-awt-peer-gtk.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-java-awt-peer-gtk.lo @gnu-java-awt-peer-gtk.list @rm -f gnu-java-awt-peer-gtk.list gnu_java_awt_peer_qt_source_files = \ @@ -822,7 +822,7 @@ classpath/gnu/java/awt/peer/qt/QtWindowPeer.java gnu-java-awt-peer-qt.lo: $(gnu_java_awt_peer_qt_source_files) @find classpath/lib/gnu/java/awt/peer/qt -name '*.class' > gnu-java-awt-peer-qt.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-awt-peer-qt.lo @gnu-java-awt-peer-qt.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-java-awt-peer-qt.lo @gnu-java-awt-peer-qt.list @rm -f gnu-java-awt-peer-qt.list gnu_java_awt_peer_swing_source_files = \ @@ -843,7 +843,7 @@ classpath/gnu/java/awt/peer/swing/SwingWindowPeer.java gnu-java-awt-peer-swing.lo: $(gnu_java_awt_peer_swing_source_files) @find classpath/lib/gnu/java/awt/peer/swing -name '*.class' > gnu-java-awt-peer-swing.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-awt-peer-swing.lo @gnu-java-awt-peer-swing.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-java-awt-peer-swing.lo @gnu-java-awt-peer-swing.list @rm -f gnu-java-awt-peer-swing.list gnu_java_beans_source_files = \ @@ -932,7 +932,7 @@ classpath/gnu/java/beans/encoder/elements/StringReference.java gnu-java-beans.lo: $(gnu_java_beans_source_files) @find classpath/lib/gnu/java/beans -name '*.class' > gnu-java-beans.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-beans.lo @gnu-java-beans.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-java-beans.lo @gnu-java-beans.list @rm -f gnu-java-beans.list gnu_java_io_source_files = \ @@ -2833,7 +2833,7 @@ classpath/gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java gnu-javax-rmi.lo: $(gnu_javax_rmi_source_files) @find classpath/lib/gnu/javax/rmi -name '*.class' > gnu-javax-rmi.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-javax-rmi.lo @gnu-javax-rmi.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-javax-rmi.lo @gnu-javax-rmi.list @rm -f gnu-javax-rmi.list gnu_javax_security_auth_source_files = \ @@ -2902,7 +2902,7 @@ classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java gnu-javax-sound-midi.lo: $(gnu_javax_sound_midi_source_files) @find classpath/lib/gnu/javax/sound/midi -name '*.class' > gnu-javax-sound-midi.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-javax-sound-midi.lo @gnu-javax-sound-midi.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-javax-sound-midi.lo @gnu-javax-sound-midi.list @rm -f gnu-javax-sound-midi.list gnu_javax_swing_text_html_parser_source_files = \ @@ -3448,7 +3448,7 @@ classpath/gnu/xml/xpath/XPathTokenizer.java gnu-xml.lo: $(gnu_xml_source_files) @find classpath/lib/gnu/xml -name '*.class' > gnu-xml.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-xml.lo @gnu-xml.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-xml.lo @gnu-xml.list @rm -f gnu-xml.list java_applet_source_files = \ @@ -5420,7 +5420,7 @@ classpath/javax/imageio/stream/MemoryCacheImageOutputStream.java javax-imageio.lo: $(javax_imageio_source_files) @find classpath/lib/javax/imageio -name '*.class' > javax-imageio.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-imageio.lo @javax-imageio.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o javax-imageio.lo @javax-imageio.list @rm -f javax-imageio.list javax_management_source_files = \ @@ -5860,7 +5860,7 @@ classpath/javax/rmi/PortableRemoteObject.java javax-rmi.lo: $(javax_rmi_source_files) @find classpath/lib/javax/rmi -name '*.class' > javax-rmi.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-rmi.lo @javax-rmi.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o javax-rmi.lo @javax-rmi.list @rm -f javax-rmi.list javax_security_auth_source_files = \ @@ -7051,7 +7051,7 @@ classpath/javax/xml/xpath/XPathVariableResolver.java javax-xml.lo: $(javax_xml_source_files) @find classpath/lib/javax/xml -name '*.class' > javax-xml.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-xml.lo @javax-xml.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o javax-xml.lo @javax-xml.list @rm -f javax-xml.list org_ietf_jgss_source_files = \ @@ -7615,7 +7615,7 @@ classpath/org/omg/stub/java/rmi/_Remote_Stub.java org-omg.lo: $(org_omg_source_files) @find classpath/lib/org/omg -name '*.class' > org-omg.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-omg.lo @org-omg.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o org-omg.lo @org-omg.list @rm -f org-omg.list org_relaxng_source_files = \ @@ -7632,7 +7632,7 @@ classpath/external/relaxngDatatype/org/relaxng/datatype/helpers/StreamingValidat org-relaxng.lo: $(org_relaxng_source_files) @find classpath/lib/org/relaxng -name '*.class' > org-relaxng.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-relaxng.lo @org-relaxng.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o org-relaxng.lo @org-relaxng.list @rm -f org-relaxng.list org_w3c_source_files = \ @@ -7785,7 +7785,7 @@ classpath/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java org-w3c.lo: $(org_w3c_source_files) @find classpath/lib/org/w3c -name '*.class' > org-w3c.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-w3c.lo @org-w3c.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o org-w3c.lo @org-w3c.list @rm -f org-w3c.list org_xml_source_files = \ @@ -7828,7 +7828,7 @@ classpath/external/sax/org/xml/sax/helpers/XMLReaderFactory.java org-xml.lo: $(org_xml_source_files) @find classpath/lib/org/xml -name '*.class' > org-xml.list - $(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-xml.lo @org-xml.list + $(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o org-xml.lo @org-xml.list @rm -f org-xml.list |