aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog19
-rw-r--r--libjava/Makefile.in30
-rw-r--r--libjava/boehm.cc115
-rw-r--r--libjava/include/boehm-gc.h1
-rw-r--r--libjava/include/execution.h20
-rw-r--r--libjava/java/lang/Class.h7
-rw-r--r--libjava/java/lang/natClassLoader.cc60
-rw-r--r--libjava/link.cc36
-rwxr-xr-xlibjava/scripts/makemake.tcl2
-rw-r--r--libjava/sources.am30
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