aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@apple.com>2004-10-26 06:09:05 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2004-10-26 06:09:05 +0000
commitf1a66265195781c7f0cc6c627706bdf33a313657 (patch)
tree55b7af27d9c57fd804dcf7cea7736d928a9d995d /libjava
parent595961fccbefdeb23a17856f78026f7b15efb67b (diff)
downloadgcc-f1a66265195781c7f0cc6c627706bdf33a313657.zip
gcc-f1a66265195781c7f0cc6c627706bdf33a313657.tar.gz
gcc-f1a66265195781c7f0cc6c627706bdf33a313657.tar.bz2
Index: gcc/gcc/ChangeLog
2004-10-25 Geoffrey Keating <geoffk@apple.com> * config/darwin.h (LINK_SPEC): Default weak_reference_mismatches to 'non-weak'. (MAKE_DECL_ONE_ONLY): Set DECL_WEAK. (ASM_MAKE_LABEL_LINKONCE): Delete. (ASM_WEAKEN_DECL): New. (ASM_DECLARE_OBJECT_NAME): Look at DECL_WEAK not DECL_ONE_ONLY. (ASM_DECLARE_FUNCTION_NAME): Likewise. (TEXT_SECTION_ASM_OP): Add a tab. (DATA_SECTION_ASM_OP): Likewise. (SECTION_FUNCTION): Add a tab. Use fputs. Don't call data_section on every section change. (EXTRA_SECTIONS): Add a bunch of new extra sections. (EXTRA_SECTION_FUNCTIONS): Likewise. (USE_SELECT_SECTION_FOR_FUNCTIONS): Define. (JCR_SECTION_NAME): Define. (TARGET_SECTION_TYPE_FLAGS): Don't define. * config/darwin.c (darwin_encode_section_info): A symbol is defined in this file if it is not weak. (textcoal_section): Delete. (datacoal_section): Delete. (darwin_make_decl_one_only): Delete. (machopic_select_section): Handle functions. (darwin_asm_named_section): Add a tab. (darwin_section_type_flags): Delete. (darwin_unique_section): Delete contents. (darwin_emit_unwind_label): Add a tab. Make decls weak if DECL_WEAK is set. * config/darwin-protos.h (darwin_section_type_flags): Delete. (darwin_make_decl_one_only): Delete. (text_coal_section): New. (text_unlikely_section): New. (text_unlikely_coal_section): New. (const_coal_section): New. (data_coal_section): New. (const_data_coal_section): New. * varasm.c (function_section): Honour USE_SELECT_SECTION_FOR_FUNCTIONS. * dwarf2out.c (output_call_frame_info): Look at DECL_WEAK when TARGET_USES_WEAK_UNWIND_INFO is in effect. * dbxout.c (dbxout_source_file): Don't change sections while a function is being output. Index: gcc/testsuite/ChangeLog 2004-10-25 Geoffrey Keating <geoffk@apple.com> * objc.dg/image-info.m: Update for changes to section selection. Index: libjava/ChangeLog 2004-10-25 Geoffrey Keating <geoffk@apple.com> * Makefile.am (DARWIN_CRT_SRC): New. (libgcj_la_SOURCES): Use it. * configure.ac: Define USING_DARWIN_CRT when on Darwin. * darwin.cc: New file. * include/jvm.h (_Jv_RegisterClasses): Constify. (_Jv_RegisterClasses_Counted): New prototype. * java/lang/Class.h: Include stddef.h. (_Jv_RegisterClasses): Constify. (_Jv_RegisterClasses_Counted): New prototype. (Object): Make '_Jv_RegisterClasses_Counted' a friend. * java/lang/natClassLoader.cc (_Jv_RegisterClasses): Constify. (_Jv_RegisterClasses_Counted): New function. * configure: Regenerate. * Makefile.in: Regenerate. * gcj/Makefile.in: Regenerate. * include/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. Index: libstdc++-v3/ChangeLog 2004-10-25 Geoffrey Keating <geoffk@apple.com> * libsupc++/new_op.cc (new): Make weak. * libsupc++/new_opnt.cc (new): Make weak. * libsupc++/new_opv.cc (new): Make weak. * libsupc++/new_opvnt.cc (new): Make weak. * libsupc++/delete_op.cc (delete): Make weak. * libsupc++/delete_opnt.cc (delete): Make weak. * libsupc++/delete_opv.cc (delete): Make weak. * libsupc++/delete_opvnt.cc (delete): Make weak. From-SVN: r89572
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog20
-rw-r--r--libjava/Makefile.am8
-rw-r--r--libjava/Makefile.in20
-rwxr-xr-xlibjava/configure26
-rw-r--r--libjava/configure.ac6
-rw-r--r--libjava/darwin.cc63
-rw-r--r--libjava/gcj/Makefile.in2
-rw-r--r--libjava/include/Makefile.in2
-rw-r--r--libjava/include/jvm.h4
-rw-r--r--libjava/java/lang/Class.h9
-rw-r--r--libjava/java/lang/natClassLoader.cc20
-rw-r--r--libjava/testsuite/Makefile.in2
12 files changed, 171 insertions, 11 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 4dee125..51ee45b 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,23 @@
+2004-10-25 Geoffrey Keating <geoffk@apple.com>
+
+ * Makefile.am (DARWIN_CRT_SRC): New.
+ (libgcj_la_SOURCES): Use it.
+ * configure.ac: Define USING_DARWIN_CRT when on Darwin.
+ * darwin.cc: New file.
+ * include/jvm.h (_Jv_RegisterClasses): Constify.
+ (_Jv_RegisterClasses_Counted): New prototype.
+ * java/lang/Class.h: Include stddef.h.
+ (_Jv_RegisterClasses): Constify.
+ (_Jv_RegisterClasses_Counted): New prototype.
+ (Object): Make '_Jv_RegisterClasses_Counted' a friend.
+ * java/lang/natClassLoader.cc (_Jv_RegisterClasses): Constify.
+ (_Jv_RegisterClasses_Counted): New function.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+ * gcj/Makefile.in: Regenerate.
+ * include/Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Regenerate.
+
2004-10-25 Tom Tromey <tromey@redhat.com>
* java/util/ResourceBundle.java (tryBundle): Use
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index 13a3118..09c31ad 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -69,6 +69,13 @@ else
SUBDIRS = $(DIRLTDL) gcj include
endif
+## Darwin uses the jcr section, but doesn't use crtstuff.
+if USING_DARWIN_CRT
+DARWIN_CRT_SRC = darwin.cc
+else
+DARWIN_CRT_SRC =
+endif
+
# write_entries_to_file - writes each entry in a list
# to the specified file. Each entry is written individually
# to accomodate systems with severe command-line-length
@@ -206,6 +213,7 @@ libgcj_la_SOURCES = prims.cc jni.cc exception.cc \
$(BOEHMGC_SRC) $(NOGC_SRC) \
$(BACKTRACE_SRC) \
$(POSIX_PLATFORM_SRC) $(WIN32_PLATFORM_SRC) $(ECOS_PLATFORM_SRC) \
+ $(DARWIN_CRT_SRC) \
$(POSIX_THREAD_SRC) $(WIN32_THREAD_SRC) $(NO_THREAD_SRC)
libgcj_la_DEPENDENCIES = libgcj-@gcc_version@.jar \
java/lang/fdlibm.h java/lang/ieeefp.h java/lang/mprec.h \
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index 0d00ec0..14eba13 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -2261,8 +2261,8 @@ am__libgcj_la_SOURCES_DIST = prims.cc jni.cc exception.cc resolve.cc \
javax/transaction/UserTransaction.java \
java/lang/ConcreteProcess.java \
gnu/classpath/Configuration.java boehm.cc nogc.cc \
- sysdep/dwarf2-backtrace.cc posix.cc win32.cc posix-threads.cc \
- win32-threads.cc no-threads.cc
+ sysdep/dwarf2-backtrace.cc posix.cc win32.cc darwin.cc \
+ posix-threads.cc win32-threads.cc no-threads.cc
am__objects_6 = gnu/gcj/natCore.lo \
gnu/gcj/convert/JIS0208_to_Unicode.lo \
gnu/gcj/convert/JIS0212_to_Unicode.lo \
@@ -4028,15 +4028,17 @@ am__objects_16 = java/lang/ConcreteProcess.lo \
@USING_POSIX_PLATFORM_TRUE@am__objects_20 = posix.lo
@USING_WIN32_PLATFORM_TRUE@am__objects_21 = win32.lo
@USING_ECOS_PLATFORM_TRUE@am__objects_22 = posix.lo
-@USING_POSIX_THREADS_TRUE@am__objects_23 = posix-threads.lo
-@USING_WIN32_THREADS_TRUE@am__objects_24 = win32-threads.lo
-@USING_NO_THREADS_TRUE@am__objects_25 = no-threads.lo
+@USING_DARWIN_CRT_TRUE@am__objects_23 = darwin.lo
+@USING_POSIX_THREADS_TRUE@am__objects_24 = posix-threads.lo
+@USING_WIN32_THREADS_TRUE@am__objects_25 = win32-threads.lo
+@USING_NO_THREADS_TRUE@am__objects_26 = no-threads.lo
am_libgcj_la_OBJECTS = prims.lo jni.lo exception.lo resolve.lo \
defineclass.lo interpret.lo verify.lo $(am__objects_6) \
$(am__objects_7) $(am__objects_15) $(am__objects_16) \
$(am__objects_17) $(am__objects_18) $(am__objects_19) \
$(am__objects_20) $(am__objects_21) $(am__objects_22) \
- $(am__objects_23) $(am__objects_24) $(am__objects_25)
+ $(am__objects_23) $(am__objects_24) $(am__objects_25) \
+ $(am__objects_26)
libgcj_la_OBJECTS = $(am_libgcj_la_OBJECTS)
am_libgij_la_OBJECTS = gij.lo
libgij_la_OBJECTS = $(am_libgij_la_OBJECTS)
@@ -4243,6 +4245,8 @@ THREADSPEC = @THREADSPEC@
TOOLKIT = @TOOLKIT@
USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
USING_BOEHMGC_TRUE = @USING_BOEHMGC_TRUE@
+USING_DARWIN_CRT_FALSE = @USING_DARWIN_CRT_FALSE@
+USING_DARWIN_CRT_TRUE = @USING_DARWIN_CRT_TRUE@
USING_ECOS_PLATFORM_FALSE = @USING_ECOS_PLATFORM_FALSE@
USING_ECOS_PLATFORM_TRUE = @USING_ECOS_PLATFORM_TRUE@
USING_GCC_FALSE = @USING_GCC_FALSE@
@@ -4355,6 +4359,8 @@ ACLOCAL_AMFLAGS = -I . -I ../config
@USING_NO_THREADS_TRUE@NO_THREAD_SRC = no-threads.cc
@TESTSUBDIR_FALSE@SUBDIRS = $(DIRLTDL) gcj include
@TESTSUBDIR_TRUE@SUBDIRS = $(DIRLTDL) testsuite gcj include
+@USING_DARWIN_CRT_FALSE@DARWIN_CRT_SRC =
+@USING_DARWIN_CRT_TRUE@DARWIN_CRT_SRC = darwin.cc
# write_entries_to_file - writes each entry in a list
# to the specified file. Each entry is written individually
@@ -4426,6 +4432,7 @@ libgcj_la_SOURCES = prims.cc jni.cc exception.cc \
$(BOEHMGC_SRC) $(NOGC_SRC) \
$(BACKTRACE_SRC) \
$(POSIX_PLATFORM_SRC) $(WIN32_PLATFORM_SRC) $(ECOS_PLATFORM_SRC) \
+ $(DARWIN_CRT_SRC) \
$(POSIX_THREAD_SRC) $(WIN32_THREAD_SRC) $(NO_THREAD_SRC)
libgcj_la_DEPENDENCIES = libgcj-@gcc_version@.jar \
@@ -18976,6 +18983,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boehm.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/darwin.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defineclass.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gij.Plo@am__quote@
diff --git a/libjava/configure b/libjava/configure
index d3ce050..2c95d84 100755
--- a/libjava/configure
+++ b/libjava/configure
@@ -310,7 +310,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcj_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS INCLTDL LIBLTDL DIRLTDL LIBTOOL CXXCPP CPPFLAGS GCJ GCJFLAGS GCJDEPMODE am__fastdepGCJ_TRUE am__fastdepGCJ_FALSE subdirs COMPPATH TESTSUBDIR_TRUE TESTSUBDIR_FALSE ONESTEP_TRUE ONESTEP_FALSE LIBGCJDEBUG INTERPRETER LIBFFI LIBFFIINCS PLATFORM_INNER_NAT_HDRS CPP EGREP USING_WIN32_PLATFORM_TRUE USING_WIN32_PLATFORM_FALSE USING_POSIX_PLATFORM_TRUE USING_POSIX_PLATFORM_FALSE USING_ECOS_PLATFORM_TRUE USING_ECOS_PLATFORM_FALSE SYSTEMSPEC LIBGCJTESTSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE GTK_AWT_TRUE GTK_AWT_FALSE GTK_CAIRO_TRUE GTK_CAIRO_FALSE PKG_CONFIG CAIRO_CFLAGS CAIRO_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS GCLIBS GCINCS GCDEPS GCSPEC JC1GCSPEC GCTESTSPEC USING_BOEHMGC_TRUE USING_BOEHMGC_FALSE USING_NOGC_TRUE USING_NOGC_FALSE THREADLIBS THREADINCS THREADDEPS THREADSPEC THREADLDFLAGS THREADCXXFLAGS USING_POSIX_THREADS_TRUE USING_POSIX_THREADS_FALSE USING_WIN32_THREADS_TRUE USING_WIN32_THREADS_FALSE USING_NO_THREADS_TRUE USING_NO_THREADS_FALSE HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE tool_include_dir gcc_version LIBICONV LTLIBICONV GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS SUPPLY_BACKTRACE_TRUE SUPPLY_BACKTRACE_FALSE GCJH ZIP ac_ct_GCJ ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC IEEESPEC NATIVE_TRUE NATIVE_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir GCJVERSION ALLOCA PERL BACKTRACESPEC SYSDEP_SOURCES here LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcj_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS INCLTDL LIBLTDL DIRLTDL LIBTOOL CXXCPP CPPFLAGS GCJ GCJFLAGS GCJDEPMODE am__fastdepGCJ_TRUE am__fastdepGCJ_FALSE subdirs COMPPATH TESTSUBDIR_TRUE TESTSUBDIR_FALSE ONESTEP_TRUE ONESTEP_FALSE LIBGCJDEBUG INTERPRETER LIBFFI LIBFFIINCS PLATFORM_INNER_NAT_HDRS CPP EGREP USING_WIN32_PLATFORM_TRUE USING_WIN32_PLATFORM_FALSE USING_POSIX_PLATFORM_TRUE USING_POSIX_PLATFORM_FALSE USING_ECOS_PLATFORM_TRUE USING_ECOS_PLATFORM_FALSE USING_DARWIN_CRT_TRUE USING_DARWIN_CRT_FALSE SYSTEMSPEC LIBGCJTESTSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE GTK_AWT_TRUE GTK_AWT_FALSE GTK_CAIRO_TRUE GTK_CAIRO_FALSE PKG_CONFIG CAIRO_CFLAGS CAIRO_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS GCLIBS GCINCS GCDEPS GCSPEC JC1GCSPEC GCTESTSPEC USING_BOEHMGC_TRUE USING_BOEHMGC_FALSE USING_NOGC_TRUE USING_NOGC_FALSE THREADLIBS THREADINCS THREADDEPS THREADSPEC THREADLDFLAGS THREADCXXFLAGS USING_POSIX_THREADS_TRUE USING_POSIX_THREADS_FALSE USING_WIN32_THREADS_TRUE USING_WIN32_THREADS_FALSE USING_NO_THREADS_TRUE USING_NO_THREADS_FALSE HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE tool_include_dir gcc_version LIBICONV LTLIBICONV GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS SUPPLY_BACKTRACE_TRUE SUPPLY_BACKTRACE_FALSE GCJH ZIP ac_ct_GCJ ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC IEEESPEC NATIVE_TRUE NATIVE_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir GCJVERSION ALLOCA PERL BACKTRACESPEC SYSDEP_SOURCES here LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -6328,6 +6328,21 @@ else
fi
+case "$host" in
+ *-darwin*) DARWIN_CRT=true ;;
+ *) DARWIN_CRT=false ;;
+esac
+
+
+if $DARWIN_CRT; then
+ USING_DARWIN_CRT_TRUE=
+ USING_DARWIN_CRT_FALSE='#'
+else
+ USING_DARWIN_CRT_TRUE='#'
+ USING_DARWIN_CRT_FALSE=
+fi
+
+
# These may not be defined in a non-ANS conformant embedded system.
# FIXME: Should these case a runtime exception in that case?
cat >conftest.$ac_ext <<_ACEOF
@@ -16433,6 +16448,13 @@ echo "$as_me: error: conditional \"USING_ECOS_PLATFORM\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
+if test -z "${USING_DARWIN_CRT_TRUE}" && test -z "${USING_DARWIN_CRT_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"USING_DARWIN_CRT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"USING_DARWIN_CRT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
if test -z "${XLIB_AWT_TRUE}" && test -z "${XLIB_AWT_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"XLIB_AWT\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
@@ -17190,6 +17212,8 @@ s,@USING_POSIX_PLATFORM_TRUE@,$USING_POSIX_PLATFORM_TRUE,;t t
s,@USING_POSIX_PLATFORM_FALSE@,$USING_POSIX_PLATFORM_FALSE,;t t
s,@USING_ECOS_PLATFORM_TRUE@,$USING_ECOS_PLATFORM_TRUE,;t t
s,@USING_ECOS_PLATFORM_FALSE@,$USING_ECOS_PLATFORM_FALSE,;t t
+s,@USING_DARWIN_CRT_TRUE@,$USING_DARWIN_CRT_TRUE,;t t
+s,@USING_DARWIN_CRT_FALSE@,$USING_DARWIN_CRT_FALSE,;t t
s,@SYSTEMSPEC@,$SYSTEMSPEC,;t t
s,@LIBGCJTESTSPEC@,$LIBGCJTESTSPEC,;t t
s,@ZLIBSPEC@,$ZLIBSPEC,;t t
diff --git a/libjava/configure.ac b/libjava/configure.ac
index 80775ab..53ff781 100644
--- a/libjava/configure.ac
+++ b/libjava/configure.ac
@@ -427,6 +427,12 @@ AM_CONDITIONAL(USING_WIN32_PLATFORM, test "$PLATFORM" = Win32)
AM_CONDITIONAL(USING_POSIX_PLATFORM, test "$PLATFORM" = Posix)
AM_CONDITIONAL(USING_ECOS_PLATFORM, test "$PLATFORM" = Ecos)
+case "$host" in
+ *-darwin*) DARWIN_CRT=true ;;
+ *) DARWIN_CRT=false ;;
+esac
+AM_CONDITIONAL(USING_DARWIN_CRT, $DARWIN_CRT)
+
# These may not be defined in a non-ANS conformant embedded system.
# FIXME: Should these case a runtime exception in that case?
AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME, 1,
diff --git a/libjava/darwin.cc b/libjava/darwin.cc
new file mode 100644
index 0000000..d427ba7
--- /dev/null
+++ b/libjava/darwin.cc
@@ -0,0 +1,63 @@
+/* darwin.cc - class loader stuff for Darwin. */
+
+/* Copyright (C) 2004 Free Software Foundation
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+#include <config.h>
+
+#include <jvm.h>
+
+/* In theory, we should be able to do:
+ #include <mach-o/getsect.h>
+ #include <mach-o/dyld.h>
+
+ but all the types in these headers changed between Panther and Tiger,
+ so the only way to be avoid type mismatches is to declare the routines
+ ourself. */
+
+#include <stdint.h>
+struct mach_header;
+extern "C" void _dyld_register_func_for_add_image
+ (void (*func)(const struct mach_header *mh, intptr_t vmaddr_slide));
+extern "C" void _dyld_register_func_for_remove_image
+ (void (*func)(const struct mach_header *mh, intptr_t vmaddr_slide));
+extern "C" char *getsectdatafromheader
+(const struct mach_header *mhp, const char *segname, const char *sectname,
+ uint32_t *size);
+
+/* When a new image is loaded, look to see if it has a jcr section
+ and if so register the classes listed in it. */
+
+static void
+darwin_java_register_dyld_add_image_hook (const struct mach_header *mh,
+ intptr_t slide)
+{
+ char *fde;
+ uint32_t sz;
+
+ fde = getsectdatafromheader (mh, "__DATA", "jcr", &sz);
+ if (! fde)
+ return;
+
+ /* As far as I can tell, you're only supposed to load shared
+ libraries while having a lock on java.lang.Class. So there's
+ no need to synchronize on anything here. (I'm not sure how exactly
+ you can ensure this given lazy library loading. FIXME.) */
+
+ _Jv_RegisterClasses_Counted ((const jclass *) (fde + slide),
+ sz / sizeof (jclass *));
+}
+
+static struct darwin_constructor_s{
+ darwin_constructor_s()
+ {
+ _dyld_register_func_for_add_image
+ (darwin_java_register_dyld_add_image_hook);
+ /* At present, you mustn't unload any java plugin. */
+ };
+} darwin_constructor;
diff --git a/libjava/gcj/Makefile.in b/libjava/gcj/Makefile.in
index 3b326f9..70f491b 100644
--- a/libjava/gcj/Makefile.in
+++ b/libjava/gcj/Makefile.in
@@ -196,6 +196,8 @@ THREADSPEC = @THREADSPEC@
TOOLKIT = @TOOLKIT@
USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
USING_BOEHMGC_TRUE = @USING_BOEHMGC_TRUE@
+USING_DARWIN_CRT_FALSE = @USING_DARWIN_CRT_FALSE@
+USING_DARWIN_CRT_TRUE = @USING_DARWIN_CRT_TRUE@
USING_ECOS_PLATFORM_FALSE = @USING_ECOS_PLATFORM_FALSE@
USING_ECOS_PLATFORM_TRUE = @USING_ECOS_PLATFORM_TRUE@
USING_GCC_FALSE = @USING_GCC_FALSE@
diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in
index d87036c..b1856c9 100644
--- a/libjava/include/Makefile.in
+++ b/libjava/include/Makefile.in
@@ -195,6 +195,8 @@ THREADSPEC = @THREADSPEC@
TOOLKIT = @TOOLKIT@
USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
USING_BOEHMGC_TRUE = @USING_BOEHMGC_TRUE@
+USING_DARWIN_CRT_FALSE = @USING_DARWIN_CRT_FALSE@
+USING_DARWIN_CRT_TRUE = @USING_DARWIN_CRT_TRUE@
USING_ECOS_PLATFORM_FALSE = @USING_ECOS_PLATFORM_FALSE@
USING_ECOS_PLATFORM_TRUE = @USING_ECOS_PLATFORM_TRUE@
USING_GCC_FALSE = @USING_GCC_FALSE@
diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h
index 554e345..5579951 100644
--- a/libjava/include/jvm.h
+++ b/libjava/include/jvm.h
@@ -411,7 +411,9 @@ extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface,
int meth_idx);
extern "C" void _Jv_CheckArrayStore (jobject array, jobject obj);
extern "C" void _Jv_RegisterClass (jclass klass);
-extern "C" void _Jv_RegisterClasses (jclass *classes);
+extern "C" void _Jv_RegisterClasses (const jclass *classes);
+extern "C" void _Jv_RegisterClasses_Counted (const jclass *classes,
+ size_t count);
extern "C" void _Jv_RegisterResource (void *vptr);
extern void _Jv_UnregisterClass (_Jv_Utf8Const*, java::lang::ClassLoader*);
extern void _Jv_ResolveField (_Jv_Field *, java::lang::ClassLoader*);
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h
index f6c6eec..02a97df 100644
--- a/libjava/java/lang/Class.h
+++ b/libjava/java/lang/Class.h
@@ -14,6 +14,7 @@ details. */
#pragma interface
+#include <stddef.h>
#include <java/lang/Object.h>
#include <java/lang/String.h>
#include <java/net/URL.h>
@@ -24,7 +25,9 @@ details. */
// We declare these here to avoid including gcj/cni.h.
extern "C" void _Jv_InitClass (jclass klass);
-extern "C" void _Jv_RegisterClasses (jclass *classes);
+extern "C" void _Jv_RegisterClasses (const jclass *classes);
+extern "C" void _Jv_RegisterClasses_Counted (const jclass *classes,
+ size_t count);
// This must be predefined with "C" linkage.
extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface,
@@ -310,7 +313,9 @@ private:
friend class java::io::ObjectStreamClass;
friend void _Jv_WaitForState (jclass, int);
- friend void _Jv_RegisterClasses (jclass *classes);
+ friend void _Jv_RegisterClasses (const jclass *classes);
+ friend void _Jv_RegisterClasses_Counted (const jclass *classes,
+ size_t count);
friend void _Jv_RegisterClassHookDefault (jclass klass);
friend void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
friend void _Jv_UnregisterClass (jclass);
diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc
index e660eae..5a0898a 100644
--- a/libjava/java/lang/natClassLoader.cc
+++ b/libjava/java/lang/natClassLoader.cc
@@ -316,7 +316,7 @@ _Jv_RegisterInitiatingLoader (jclass klass, java::lang::ClassLoader *loader)
// class chain. At all other times, the caller should synchronize on
// Class::class$.
void
-_Jv_RegisterClasses (jclass *classes)
+_Jv_RegisterClasses (const jclass *classes)
{
for (; *classes; ++classes)
{
@@ -331,6 +331,24 @@ _Jv_RegisterClasses (jclass *classes)
}
}
+// This is a version of _Jv_RegisterClasses that takes a count.
+void
+_Jv_RegisterClasses_Counted (const jclass * classes, size_t count)
+{
+ size_t i;
+ for (i = 0; i < count; i++)
+ {
+ jclass klass = classes[i];
+
+ (*_Jv_RegisterClassHook) (klass);
+
+ // registering a compiled class causes
+ // it to be immediately "prepared".
+ if (klass->state == JV_STATE_NOTHING)
+ klass->state = JV_STATE_COMPILED;
+ }
+}
+
void
_Jv_RegisterClassHookDefault (jclass klass)
{
diff --git a/libjava/testsuite/Makefile.in b/libjava/testsuite/Makefile.in
index 94a8b93..51c0ea3 100644
--- a/libjava/testsuite/Makefile.in
+++ b/libjava/testsuite/Makefile.in
@@ -184,6 +184,8 @@ THREADSPEC = @THREADSPEC@
TOOLKIT = @TOOLKIT@
USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
USING_BOEHMGC_TRUE = @USING_BOEHMGC_TRUE@
+USING_DARWIN_CRT_FALSE = @USING_DARWIN_CRT_FALSE@
+USING_DARWIN_CRT_TRUE = @USING_DARWIN_CRT_TRUE@
USING_ECOS_PLATFORM_FALSE = @USING_ECOS_PLATFORM_FALSE@
USING_ECOS_PLATFORM_TRUE = @USING_ECOS_PLATFORM_TRUE@
USING_GCC_FALSE = @USING_GCC_FALSE@