diff options
author | Geoffrey Keating <geoffk@apple.com> | 2004-10-26 06:09:05 +0000 |
---|---|---|
committer | Geoffrey Keating <geoffk@gcc.gnu.org> | 2004-10-26 06:09:05 +0000 |
commit | f1a66265195781c7f0cc6c627706bdf33a313657 (patch) | |
tree | 55b7af27d9c57fd804dcf7cea7736d928a9d995d /libjava | |
parent | 595961fccbefdeb23a17856f78026f7b15efb67b (diff) | |
download | gcc-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/ChangeLog | 20 | ||||
-rw-r--r-- | libjava/Makefile.am | 8 | ||||
-rw-r--r-- | libjava/Makefile.in | 20 | ||||
-rwxr-xr-x | libjava/configure | 26 | ||||
-rw-r--r-- | libjava/configure.ac | 6 | ||||
-rw-r--r-- | libjava/darwin.cc | 63 | ||||
-rw-r--r-- | libjava/gcj/Makefile.in | 2 | ||||
-rw-r--r-- | libjava/include/Makefile.in | 2 | ||||
-rw-r--r-- | libjava/include/jvm.h | 4 | ||||
-rw-r--r-- | libjava/java/lang/Class.h | 9 | ||||
-rw-r--r-- | libjava/java/lang/natClassLoader.cc | 20 | ||||
-rw-r--r-- | libjava/testsuite/Makefile.in | 2 |
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@ |