Index: gcc/libjava/sysdep/i386/backtrace.h =================================================================== --- gcc.orig/libjava/sysdep/i386/backtrace.h 2011-04-01 16:27:18.407236300 +0200 +++ gcc/libjava/sysdep/i386/backtrace.h 2011-04-05 08:11:29.252778400 +0200 @@ -17,7 +17,10 @@ details. */ /* To allow this to link as a DLL. */ #define MAIN_FUNC dll_crt0__FP11per_process extern "C" int MAIN_FUNC () __declspec(dllimport); -#else /* !__CYGWIN__ */ +#elif defined (_WIN32) +#define MAIN_FUNC DllMain +extern "C" int __stdcall MAIN_FUNC (void *, unsigned long, void *); +#else /* !__CYGWIN__ && !_WIN32 */ #define MAIN_FUNC main extern int MAIN_FUNC (int, char **); #endif /* ?__CYGWIN__ */ Index: gcc/libjava/configure =================================================================== --- gcc.orig/libjava/configure 2011-04-04 19:21:27.211126500 +0200 +++ gcc/libjava/configure 2011-04-05 08:26:26.518716700 +0200 @@ -786,6 +786,7 @@ TOOLKIT LIBGCJDEBUG BUILD_SUBLIBS_FALSE BUILD_SUBLIBS_TRUE +LIBGCJ_LD_EXPORT_ALL LIBGCJ_LD_SYMBOLIC_FUNCTIONS LIBGCJ_LD_SYMBOLIC LIBGCJ_SUBLIB_CORE_EXTRA_DEPS @@ -5957,6 +5958,16 @@ if test -z "$libgcj_ld_symbolic"; then libgcj_ld_symbolic=$SYMBOLIC_LDFLAGS fi +# for windows native targets enforce export of all symbols for shared libgcj. +libgcj_ld_export_all= +case "$host" in + *mingw*) + libgcj_ld_export_all=-Wl,--export-all-symbols + ;; + *) + ;; +esac + LIBGCJ_CFLAGS="${libgcj_cflags}" LIBGCJ_CXXFLAGS="${libgcj_cxxflags}" LIBGCJ_JAVAFLAGS="${libgcj_javaflags}" @@ -5964,6 +5975,8 @@ LIBGCJ_SUBLIB_LTFLAGS="${libgcj_sublib_l LIBGCJ_SUBLIB_CORE_EXTRA_DEPS="${libgcj_sublib_core_extra_deps}" LIBGCJ_LD_SYMBOLIC="${libgcj_ld_symbolic}" LIBGCJ_LD_SYMBOLIC_FUNCTIONS="${libgcj_ld_symbolic_functions}" +LIBGCJ_LD_EXPORT_ALL="${libgcj_ld_export_all}" + @@ -13346,7 +13359,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 13349 "configure" +#line 13362 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -13452,7 +13465,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 13455 "configure" +#line 13468 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -19445,7 +19458,7 @@ if test "${enable_sjlj_exceptions+set}" enableval=$enable_sjlj_exceptions; : else cat > conftest.$ac_ext << EOF -#line 19448 "configure" +#line 19461 "configure" struct S { ~S(); }; void bar(); void foo() @@ -20540,6 +20553,9 @@ arm*linux*eabi) *-*-cygwin) extra_ldflags_libjava=-liconv ;; +*-*-mingw*) + extra_ldflags_libjava=-lws2_32 + ;; esac LIBMATHSPEC= Index: gcc/libjava/configure.ac =================================================================== --- gcc.orig/libjava/configure.ac 2011-04-04 19:21:27.176622100 +0200 +++ gcc/libjava/configure.ac 2011-04-05 08:21:51.178252900 +0200 @@ -214,6 +214,16 @@ if test -z "$libgcj_ld_symbolic"; then libgcj_ld_symbolic=$SYMBOLIC_LDFLAGS fi +# for windows native targets enforce export of all symbols for shared libgcj. +libgcj_ld_export_all= +case "$host" in + *mingw*) + libgcj_ld_export_all=-Wl,--export-all-symbols + ;; + *) + ;; +esac + LIBGCJ_CFLAGS="${libgcj_cflags}" LIBGCJ_CXXFLAGS="${libgcj_cxxflags}" LIBGCJ_JAVAFLAGS="${libgcj_javaflags}" @@ -221,6 +231,7 @@ LIBGCJ_SUBLIB_LTFLAGS="${libgcj_sublib_l LIBGCJ_SUBLIB_CORE_EXTRA_DEPS="${libgcj_sublib_core_extra_deps}" LIBGCJ_LD_SYMBOLIC="${libgcj_ld_symbolic}" LIBGCJ_LD_SYMBOLIC_FUNCTIONS="${libgcj_ld_symbolic_functions}" +LIBGCJ_LD_EXPORT_ALL="${libgcj_ld_export_all}" AC_SUBST(LIBGCJ_CFLAGS) AC_SUBST(LIBGCJ_CXXFLAGS) AC_SUBST(LIBGCJ_JAVAFLAGS) @@ -228,6 +239,7 @@ AC_SUBST(LIBGCJ_SUBLIB_LTFLAGS) AC_SUBST(LIBGCJ_SUBLIB_CORE_EXTRA_DEPS) AC_SUBST(LIBGCJ_LD_SYMBOLIC) AC_SUBST(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) +AC_SUBST(LIBGCJ_LD_EXPORT_ALL) # Only use libltdl for non-newlib builds. if test "x${with_newlib}" = "x" || test "x${with_newlib}" = "xno"; then @@ -930,6 +942,9 @@ arm*linux*eabi) *-*-cygwin) extra_ldflags_libjava=-liconv ;; +*-*-mingw*) + extra_ldflags_libjava=-lws2_32 + ;; esac LIBMATHSPEC= Index: gcc/libjava/gcj/javaprims.h =================================================================== --- gcc.orig/libjava/gcj/javaprims.h 2011-04-01 16:27:18.343236300 +0200 +++ gcc/libjava/gcj/javaprims.h 2011-04-05 08:11:29.512811400 +0200 @@ -26,6 +26,15 @@ details. */ #undef FALSE #define FALSE FALSE +// JNI calling convention also defined in jni.h */ +#ifndef JNICALL + #if (defined (_WIN32) || defined (__WIN32__) || defined (WIN32)) && !defined (_WIN64) + #define JNICALL __stdcall + #else + #define JNICALL + #endif +#endif + // To force selection of correct types that will mangle consistently // across platforms. extern "Java" Index: gcc/libjava/include/jni_md.h =================================================================== --- gcc.orig/libjava/include/jni_md.h 2011-04-01 16:27:18.353236300 +0200 +++ gcc/libjava/include/jni_md.h 2011-04-05 08:11:29.534314200 +0200 @@ -65,6 +65,15 @@ typedef struct _Jv_JavaVM JavaVM; reused between non-nesting JNI calls. */ \ struct _Jv_JNI_LocalFrame *bottom_locals; +/* JNI calling convention. Also defined in javaprims.h. */ +#ifndef JNICALL +#if (defined (_WIN32) || defined (__WIN32__) || defined (WIN32)) \ + && !defined (_WIN64) + #define JNICALL __stdcall + #else + #define JNICALL + #endif +#endif #else /* __GCJ_JNI_IMPL__ */ @@ -117,14 +126,17 @@ typedef uint16_t jchar; /* Linkage and calling conventions. */ -#if defined (_WIN32) || defined (__WIN32__) || defined (WIN32) +#if (defined (_WIN32) || defined (__WIN32__) || defined (WIN32)) \ + && !defined (_WIN64) #define JNIIMPORT __declspec(dllimport) #define JNIEXPORT __declspec(dllexport) -#define JNICALL __stdcall +#ifndef JNICALL +#define JNICALL __stdcall +äendif -#else /* !( _WIN32 || __WIN32__ || WIN32) */ +#else /* !( _WIN32 || __WIN32__ || WIN32) || _WIN64 */ #define JNIIMPORT #if defined(__GNUC__) && __GNUC__ > 3 @@ -133,9 +145,11 @@ typedef uint16_t jchar; #define JNIEXPORT #endif +#ifndef JNICALL #define JNICALL +#endif -#endif /* !( _WIN32 || __WIN32__ || WIN32) */ +#endif /* !( _WIN32 || __WIN32__ || WIN32) || _WIN64 */ /* These defines apply to symbols in libgcj */ #ifdef __GCJ_DLL__ Index: gcc/libjava/java/lang/Class.h =================================================================== --- gcc.orig/libjava/java/lang/Class.h 2011-04-01 16:27:18.355236300 +0200 +++ gcc/libjava/java/lang/Class.h 2011-04-05 08:11:29.562817800 +0200 @@ -251,10 +251,10 @@ bool _Jv_getInterfaceMethod(jclass, jcla const _Jv_Utf8Const*, const _Jv_Utf8Const*); -jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv *, jclass, jfieldID, - jboolean); -jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, - jboolean); +jobject JNICALL _Jv_JNI_ToReflectedField (_Jv_JNIEnv *, jclass, jfieldID, + jboolean); +jobject JNICALL _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, + jboolean); jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *); jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *); Index: gcc/libjava/java/lang/reflect/Constructor.h =================================================================== --- gcc.orig/libjava/java/lang/reflect/Constructor.h 2011-04-01 16:27:18.356236300 +0200 +++ gcc/libjava/java/lang/reflect/Constructor.h 2011-04-05 08:11:29.583320400 +0200 @@ -11,7 +11,8 @@ jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *); -jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean); +jobject JNICALL _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, + jboolean); class java::lang::reflect::Constructor : public ::java::lang::reflect::AccessibleObject { @@ -58,7 +59,8 @@ public: static ::java::lang::Class class$; friend jmethodID (::_Jv_FromReflectedConstructor) (java::lang::reflect::Constructor *); - friend jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean); + friend jobject JNICALL (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, + jmethodID, jboolean); friend class java::lang::Class; }; Index: gcc/libjava/java/lang/reflect/Field.h =================================================================== --- gcc.orig/libjava/java/lang/reflect/Field.h 2011-04-01 16:27:18.378236300 +0200 +++ gcc/libjava/java/lang/reflect/Field.h 2011-04-05 08:11:29.593321700 +0200 @@ -11,7 +11,8 @@ jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *); -jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, jboolean); +jobject JNICALL _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, + jboolean); jobject _Jv_getFieldInternal (java::lang::reflect::Field *f, jclass c, jobject o); class java::lang::reflect::Field : public ::java::lang::reflect::AccessibleObject @@ -90,7 +91,8 @@ public: static ::java::lang::Class class$; friend jfieldID (::_Jv_FromReflectedField) (java::lang::reflect::Field *); - friend jobject (::_Jv_JNI_ToReflectedField) (_Jv_JNIEnv*, jclass, jfieldID, jboolean); + friend jobject JNICALL (::_Jv_JNI_ToReflectedField) (_Jv_JNIEnv*, jclass, + jfieldID, jboolean); friend class java::lang::Class; friend jobject (::_Jv_getFieldInternal) (java::lang::reflect::Field *f, jclass c, jobject o); }; Index: gcc/libjava/Makefile.am =================================================================== --- gcc.orig/libjava/Makefile.am 2010-09-09 16:24:13.000000000 +0200 +++ gcc/libjava/Makefile.am 2011-04-05 08:16:14.049943100 +0200 @@ -492,7 +492,7 @@ xlib_nat_files = $(xlib_nat_source_files libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ $(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) + $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL) libgcj_la_LIBADD = \ classpath/native/fdlibm/libfdlibm.la \ java/lang/Object.lo \ Index: gcc/libjava/Makefile.in =================================================================== --- gcc.orig/libjava/Makefile.in 2011-04-01 16:27:18.000000000 +0200 +++ gcc/libjava/Makefile.in 2011-04-05 08:26:53.116094200 +0200 @@ -606,6 +606,7 @@ LIBGCJ_BC_SPEC = @LIBGCJ_BC_SPEC@ LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@ LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@ LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@ +LIBGCJ_LD_EXPORT_ALL = @LIBGCJ_LD_EXPORT_ALL@ LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@ LIBGCJ_LD_SYMBOLIC_FUNCTIONS = @LIBGCJ_LD_SYMBOLIC_FUNCTIONS@ LIBGCJ_SPEC = @LIBGCJ_SPEC@ @@ -1066,7 +1067,7 @@ xlib_nat_files = $(xlib_nat_source_files libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ $(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) + $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL) libgcj_la_LIBADD = \ classpath/native/fdlibm/libfdlibm.la \