From 97b51fd08ea84c07be2c7fea17210453eef46371 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 17 Aug 2005 20:44:10 +0000 Subject: [PATCH] class.c (make_class_data): Always emit JV_STATE_PRELOADING for class' initial state. gcc/java: * class.c (make_class_data): Always emit JV_STATE_PRELOADING for class' initial state. libjava: * java/lang/Class.h (_Jv_IsBinaryCompatibilityABI): Declare as friend. * include/jvm.h (_Jv_IsBinaryCompatibilityABI): New function. * testsuite/libjava.lang/bclink.java: New file. * testsuite/libjava.lang/bclink.out: New file. * link.cc (print_class_loaded): Changed ABI test to look at various _syms fields. From-SVN: r103225 --- gcc/java/ChangeLog | 5 +++++ gcc/java/class.c | 10 +++------- libjava/ChangeLog | 10 ++++++++++ libjava/include/jvm.h | 9 +++++++++ libjava/java/lang/Class.h | 2 ++ libjava/link.cc | 3 +-- libjava/testsuite/libjava.lang/bclink.java | 12 ++++++++++++ libjava/testsuite/libjava.lang/bclink.out | 0 8 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 libjava/testsuite/libjava.lang/bclink.java create mode 100644 libjava/testsuite/libjava.lang/bclink.out diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 07dfc5b54dc..0ecfd8f8098 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2005-08-16 Tom Tromey + + * class.c (make_class_data): Always emit JV_STATE_PRELOADING for + class' initial state. + 2005-08-16 Ranjit Mathew PR java/22113 diff --git a/gcc/java/class.c b/gcc/java/class.c index 21945eb7fe3..a089112276e 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -1860,13 +1860,9 @@ make_class_data (tree type) PUSH_FIELD_VALUE (cons, "loader", null_pointer_node); PUSH_FIELD_VALUE (cons, "interface_count", build_int_cst (NULL_TREE, interface_len)); - PUSH_FIELD_VALUE - (cons, "state", - convert (byte_type_node, - build_int_cst (NULL_TREE, - flag_indirect_dispatch - ? JV_STATE_PRELOADING - : JV_STATE_COMPILED))); + PUSH_FIELD_VALUE (cons, "state", + convert (byte_type_node, + build_int_cst (NULL_TREE, JV_STATE_PRELOADING))); PUSH_FIELD_VALUE (cons, "thread", null_pointer_node); PUSH_FIELD_VALUE (cons, "depth", integer_zero_node); diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 47e37183074..915c2ff8958 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,13 @@ +2005-08-17 Tom Tromey + + * java/lang/Class.h (_Jv_IsBinaryCompatibilityABI): Declare as + friend. + * include/jvm.h (_Jv_IsBinaryCompatibilityABI): New function. + * testsuite/libjava.lang/bclink.java: New file. + * testsuite/libjava.lang/bclink.out: New file. + * link.cc (print_class_loaded): Changed ABI test to look at + various _syms fields. + 2005-08-17 Andreas Tobler * testsuite/libjava.jacks/jacks.xfail: Remove 15.21-assoc-7, diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h index 606a84ddcbf..459d4594278 100644 --- a/libjava/include/jvm.h +++ b/libjava/include/jvm.h @@ -621,4 +621,13 @@ _Jv_IsInterpretedClass (jclass c) return (c->accflags & java::lang::reflect::Modifier::INTERPRETED) != 0; } +// Return true if the class was compiled with the BC ABI. +extern inline jboolean +_Jv_IsBinaryCompatibilityABI (jclass c) +{ + // There isn't really a better test for the ABI type at this point, + // that will work once the class has been registered. + return c->otable_syms || c->atable_syms || c->itable_syms; +} + #endif /* __JAVA_JVM_H__ */ diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h index 01a653e5c9f..a2ec357f770 100644 --- a/libjava/java/lang/Class.h +++ b/libjava/java/lang/Class.h @@ -235,6 +235,7 @@ jboolean _Jv_CheckAccess (jclass self_klass, jclass other_klass, jclass _Jv_GetArrayClass (jclass klass, java::lang::ClassLoader *loader); jboolean _Jv_IsInterpretedClass (jclass); +jboolean _Jv_IsBinaryCompatibilityABI (jclass); void _Jv_CopyClassesToSystemLoader (java::lang::ClassLoader *); @@ -470,6 +471,7 @@ private: java::lang::ClassLoader *loader); friend jboolean (::_Jv_IsInterpretedClass) (jclass); + friend jboolean (::_Jv_IsBinaryCompatibilityABI) (jclass); #ifdef INTERPRETER friend void ::_Jv_InitField (jobject, jclass, int); diff --git a/libjava/link.cc b/libjava/link.cc index e97b31bb78e..5411f4aacca 100644 --- a/libjava/link.cc +++ b/libjava/link.cc @@ -1659,11 +1659,10 @@ _Jv_Linker::print_class_loaded (jclass klass) if (codesource == NULL) codesource = ""; - // We use a somewhat bogus test for the ABI here. char *abi; if (_Jv_IsInterpretedClass (klass)) abi = "bytecode"; - else if (klass->state == JV_STATE_PRELOADING) + else if (_Jv_IsBinaryCompatibilityABI (klass)) abi = "BC-compiled"; else abi = "pre-compiled"; diff --git a/libjava/testsuite/libjava.lang/bclink.java b/libjava/testsuite/libjava.lang/bclink.java new file mode 100644 index 00000000000..b10c678e123 --- /dev/null +++ b/libjava/testsuite/libjava.lang/bclink.java @@ -0,0 +1,12 @@ +// This tests that a C++ ABI class can derive from a BC ABI class. +// This can't always work, but if the base class does not change then +// it will work fine. + +import org.xml.sax.*; + +public class bclink extends SAXParseException { + public bclink() { super ("hi", null); } + + public static void main(String[] args) throws Throwable { + } +} diff --git a/libjava/testsuite/libjava.lang/bclink.out b/libjava/testsuite/libjava.lang/bclink.out new file mode 100644 index 00000000000..e69de29bb2d