public inbox for java-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries  on Windows
@ 2008-08-24  4:23 Aaron W. LaFramboise
  2008-08-24 11:07 ` Danny Smith
                   ` (2 more replies)
  0 siblings, 3 replies; 22+ messages in thread
From: Aaron W. LaFramboise @ 2008-08-24  4:23 UTC (permalink / raw)
  To: gcc-patches, java-patches

[-- Attachment #1: Type: text/plain, Size: 632 bytes --]

This patch builds libgcj, libgcj-tools, and libffi as DLLs on Windows.

Autoimport is used in the final link of some of the tools.  This is OK 
for now, but suboptimal in the long run.  I'll address this later by 
adding the proper decorations.

This massively reduces the size of a full GCC installation on Windows. 
Most of the tools go from being about 44 MB to about 20 KB.

The DLL itself is pretty massive, weighing in at 70 MB (29 MB stripped), 
and a massive 82217 exports.  In the future, it might possible to 
improve this situation by linking by ordinal.

I tested this by a bootstrap on i386-pc-mingw32.

OK to commit?


[-- Attachment #2: gcc-4.4.0-20080823-libjava_s.patch --]
[-- Type: text/plain, Size: 3713 bytes --]

2008-08-23  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>

	<libffi>
	* libffi/Makefile.am (LTLDFLAGS): Add -no-undefined.
	* Makefile.in: Regenerate.
	* include/Makefile.in: Regenerated.
	* libffi/testsuite/Makefile.in: Regenerated.

	<libjava>
	* configure.ac [mingw|cygwin] (extra_ldflags_libjava): Add -lws2_32.
	* Makefile.am (extra_cppflags_libjava): New.
	(AM_CPPFLAGS): Use extra_cppflags_libjava.
	* Makefile.in: Regenerated.
	* configure: Regenerated.
	* gcj/Makefile.in: Regenerated.
	* include/Makefile.in: Regenerated.
	* testsuite/Makefile.in: Regenerated.

	<libjava/libltdl>
	* ltdl.c (DLL_EXPORT): Rename to LIBLTDL_DLL_EXPORT.
	* ltdl.h (DLL_EXPORT): Rename to LIBLTDL_DLL_EXPORT.

Index: libffi/Makefile.am
===================================================================
--- libffi/Makefile.am	(revision 139510)
+++ libffi/Makefile.am	(working copy)
@@ -156,7 +156,8 @@ nodist_libffi_convenience_la_SOURCES = $
 
 AM_CFLAGS = -Wall -g -fexceptions
 
-LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \
+        -no-undefined
 
 libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS)
 
Index: libjava/configure.ac
===================================================================
--- libjava/configure.ac	(revision 139510)
+++ libjava/configure.ac	(working copy)
@@ -811,6 +811,9 @@ arm*linux*eabi)
     LIBSTDCXXSPEC=-lstdc++
     LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -L`${PWDCMD-pwd}`/../libstdc++-v3/src/.libs -rpath `${PWDCMD-pwd}`/.libs:`${PWDCMD-pwd}`/../libstdc++-v3/src/.libs -lstdc++"
     ;;
+*-*-mingw*|*-*-cygwin)
+    extra_ldflags_libjava=-lws2_32
+    ;;
 esac
 AC_SUBST(extra_ldflags_libjava)
 AC_SUBST(extra_gij_ldflags)
Index: libjava/Makefile.am
===================================================================
--- libjava/Makefile.am	(revision 139510)
+++ libjava/Makefile.am	(working copy)
@@ -123,7 +123,8 @@ GCJLINK = $(LIBTOOL) --tag=GCJ --mode=li
 GCJ_FOR_ECJX = @GCJ_FOR_ECJX@
 GCJ_FOR_ECJX_LINK = $(GCJ_FOR_ECJX) -o $@
 LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \
-          $(LDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -o $@
+          $(LDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -no-undefined \
+                    -o $@
 
 GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
 
@@ -292,6 +293,7 @@ libgcj_tools_la_LDFLAGS = -rpath $(toole
  -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
  $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS)
 libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec
+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
 libgcj_tools_la_LINK = $(LIBLINK)
 
 ## libjvm.so
Index: libjava/libltdl/ltdl.c
===================================================================
--- libjava/libltdl/ltdl.c	(revision 139510)
+++ libjava/libltdl/ltdl.c	(working copy)
@@ -142,7 +142,7 @@ Foundation, Inc., 51 Franklin Street, Fi
 /* --- WINDOWS SUPPORT --- */
 
 
-#ifdef DLL_EXPORT
+#ifdef LIBLTDL_DLL_EXPORT
 #  define LT_GLOBAL_DATA	__declspec(dllexport)
 #else
 #  define LT_GLOBAL_DATA
Index: libjava/libltdl/ltdl.h
===================================================================
--- libjava/libltdl/ltdl.h	(revision 139510)
+++ libjava/libltdl/ltdl.h	(working copy)
@@ -128,7 +128,7 @@ LT_BEGIN_C_DECLS
    ridiculous implementation of data symbol exporting. */
 #ifndef LT_SCOPE
 #  ifdef __WINDOWS__
-#    ifdef DLL_EXPORT		/* defined by libtool (if required) */
+#    ifdef LIBLTDL_DLL_EXPORT		/* defined by libtool (if required) */
 #      define LT_SCOPE	__declspec(dllexport)
 #    endif
 #    ifdef LIBLTDL_DLL_IMPORT	/* define if linking with this dll */

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries on Windows
  2008-08-24  4:23 [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries on Windows Aaron W. LaFramboise
@ 2008-08-24 11:07 ` Danny Smith
  2008-08-24 16:54 ` Andrew Haley
  2009-04-11  5:33 ` Dave Korn
  2 siblings, 0 replies; 22+ messages in thread
From: Danny Smith @ 2008-08-24 11:07 UTC (permalink / raw)
  To: Aaron W. LaFramboise; +Cc: gcc-patches, java-patches

On Sun, Aug 24, 2008 at 1:44 PM, Aaron W. LaFramboise
<aaronavay62@aaronwl.com> wrote:
> This patch builds libgcj, libgcj-tools, and libffi as DLLs on Windows.
>
> Autoimport is used in the final link of some of the tools.  This is OK for
> now, but suboptimal in the long run.  I'll address this later by adding the
> proper decorations.
>

There is problem in libffi/src/x86/win32.S  that may be hidden by auto-import.
Namely, the function labels is the asm src file are not being defined
as functions and so will be treated as data symbols when building a
dll.

This will fix	* src/x86/win32.S  (_ffi_prep_args): Prefix label with underscore.
	(_ffi_call_SYSV) :  Define as function.
	(_ffi_call_STDCALL) : Likewise.
	(_ffi_closure_SYSV): Likewise.
	(_ffi_raw_closure_SYSV): Likewise.

Index: win32.S
===================================================================
--- win32.S	(revision 139424)
+++ win32.S	(working copy)
@@ -32,11 +32,12 @@

 .text

-.globl ffi_prep_args
+.globl _ffi_prep_args

         # This assumes we are using gas.
         .balign 16
 .globl _ffi_call_SYSV
+	.def	_ffi_call_SYSV;	.scl	2;	.type	32;	.endef

 _ffi_call_SYSV:
         pushl %ebp
@@ -150,6 +151,7 @@
         # This assumes we are using gas.
         .balign 16
 .globl _ffi_call_STDCALL
+	.def	_ffi_call_STDCALL;	.scl	2;	.type	32;	.endef

 _ffi_call_STDCALL:
         pushl %ebp
@@ -259,6 +261,8 @@
 .ffi_call_STDCALL_end:

 	.globl _ffi_closure_SYSV
+	.def	_ffi_closure_SYSV;	.scl	2;	.type	32;	.endef
+
 _ffi_closure_SYSV:
 	pushl	%ebp
 	movl	%esp, %ebp
@@ -322,6 +326,7 @@

 	.balign	16
 	.globl _ffi_closure_raw_SYSV
+	.def	_ffi_closure_raw_SYSV;	.scl	2;	.type	32;	.endef
 _ffi_closure_raw_SYSV:
 	pushl	%ebp
 	movl	%esp, %ebp

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
  2008-08-24  4:23 [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries on Windows Aaron W. LaFramboise
  2008-08-24 11:07 ` Danny Smith
@ 2008-08-24 16:54 ` Andrew Haley
  2008-08-24 20:09   ` Aaron W. LaFramboise
  2009-04-11  5:33 ` Dave Korn
  2 siblings, 1 reply; 22+ messages in thread
From: Andrew Haley @ 2008-08-24 16:54 UTC (permalink / raw)
  To: Aaron W. LaFramboise; +Cc: gcc-patches, java-patches

Aaron W. LaFramboise wrote:
> This patch builds libgcj, libgcj-tools, and libffi as DLLs on Windows.
> 
> Autoimport is used in the final link of some of the tools.  This is OK
> for now, but suboptimal in the long run.  I'll address this later by
> adding the proper decorations.
> 
> This massively reduces the size of a full GCC installation on Windows.
> Most of the tools go from being about 44 MB to about 20 KB.

Quite right too.

> The DLL itself is pretty massive, weighing in at 70 MB (29 MB stripped),
> and a massive 82217 exports.  In the future, it might possible to
> improve this situation by linking by ordinal.

Maybe you don't use libgcj.ver or some equivalent?  I have no idea
if you're even using GNU ld.

Andrew.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
  2008-08-24 16:54 ` Andrew Haley
@ 2008-08-24 20:09   ` Aaron W. LaFramboise
  0 siblings, 0 replies; 22+ messages in thread
From: Aaron W. LaFramboise @ 2008-08-24 20:09 UTC (permalink / raw)
  To: Andrew Haley; +Cc: gcc-patches, java-patches

Andrew Haley wrote:
> Aaron W. LaFramboise wrote:
>> This patch builds libgcj, libgcj-tools, and libffi as DLLs on Windows.

>> The DLL itself is pretty massive, weighing in at 70 MB (29 MB stripped),
>> and a massive 82217 exports.  In the future, it might possible to
>> improve this situation by linking by ordinal.
> 
> Maybe you don't use libgcj.ver or some equivalent?  I have no idea
> if you're even using GNU ld.

The Windows targets use GNU binutils as and ld.

However, version scripts only seem to be supported for ELF targets; 
Windows uses the PE variant of COFF.

The equivalent mechanism on Windows is the 'DEF' file, which 
unfortunately is not as expressive as version scripts, but it does have 
a few features version scripts don't, such as by-ordinal linking. 
Unfortunately DEF files do not support wild-card patterns either.

Actually, at present, this is not so much worse than on Linux ELF, which 
exports 65662 dynamic symbols from libgcj.so.10.0.0.

I will figure out what is necessary to generate a DEF file properly 
sometime soon, but in the meantime I think this can go in.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
  2008-08-24  4:23 [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries on Windows Aaron W. LaFramboise
  2008-08-24 11:07 ` Danny Smith
  2008-08-24 16:54 ` Andrew Haley
@ 2009-04-11  5:33 ` Dave Korn
  2009-04-11  9:36   ` Andrew Haley
  2009-04-11 17:15   ` Aaron W. LaFramboise
  2 siblings, 2 replies; 22+ messages in thread
From: Dave Korn @ 2009-04-11  5:33 UTC (permalink / raw)
  To: Aaron W. LaFramboise; +Cc: gcc-patches, java-patches

[-- Attachment #1: Type: text/plain, Size: 2297 bytes --]

Aaron W. LaFramboise wrote:
> This patch builds libgcj, libgcj-tools, and libffi as DLLs on Windows.

  This patch revises and updates Aaron's old patch from last August.  It adds
some essential support for Cygwin that the previous patch didn't have, and
does things slightly differently in places.

  There's only one substantial addition: I added a mechanism in libffi's build
system to allow the override of $toolexeclibdir.  We use this on Cygwin to
install the newly built libffi into the GCC private directory alongside cc1 et
al., as we may have a different upstream version of libffi-devel installed in
/usr/lib and /usr/include.

  I'm just putting this through a bootstrap at the moment.  There's not going
to be much to test because none of this used to be built on Cygwin at all
before, so it can hardly regress.  If it bootstraps and builds nice working
DLLs, OK for HEAD?

ChangeLog:

	* configure.ac (Cygwin noconfigdirs):  Remove libgcj.
	* configure:  Regenerate.

boehm-gc/ChangeLog:

	* win32_threads.c (get_thread_stack_base):  Add missing function
	definition for Cygwin.

gcc/ChangeLog

	* config/i386/t-cygming (jc1):  Add -Wl,-stack to LDFLAGS.

libffi/ChangeLog

	* configure.ac (toolexeclibdir):  Allow host-specific override
	if defined in host__toolexeclibdir.
	* configure.host (Cygwin host__toolexeclibdir):  Define.
	* Makefile.am (gcc_version):  New makefile variable.
	(toollibffidir):  Likewise.
	(LTLDFLAGS):  Add "-no-undefined".
	* configure:  Regenerate.
	* Makefile.in:  Regenerate.

	* src/x86/win32.S (ffi_prep_args):  Rename from this ...
	(_ffi_prep_args):  ... to this.
	(_ffi_call_SYSV, _ffi_call_STDCALL, _ffi_closure_SYSV,
	_ffi_closure_raw_SYSV):  Add missing symbol function type attributes.

libjava/ChangeLog

	* configure.ac (Cygwin|MinGW extra_ldflags_libjava):  Add ws2_32 lib.
	* Makefile.am (LIBLINK):  Add "-no-undefined".
	(libgij_la_LDFLAGS, libjvm_la_LDFLAGS):  Likewise.
	(libgcj_tools_la_LIBADD):  Link against new libgcj.la.
	* Makefile.in:  Regenerate.

	* sysdep/i386/backtrace.h (MAIN_FUNC):  New define.
	(fallback_backtrace):  Use it.

libjava/libltdl/ChangeLog

	* ldtl.c (DLL_EXPORT):  Rename from this ...
	(LIBLTDL_DLL_EXPORT):  ... to this.
	* ldtl.c (DLL_EXPORT, LIBLTDL_DLL_EXPORT):  Change use.


    cheers,
      DaveK

[-- Attachment #2: cygming-gcj-ffi-patch-updated.diff --]
[-- Type: text/x-c, Size: 10718 bytes --]


ChangeLog:

	* configure.ac (Cygwin noconfigdirs):  Remove libgcj.
	* configure:  Regenerate.

boehm-gc/ChangeLog:

	* win32_threads.c (get_thread_stack_base):  Add missing function 
	definition for Cygwin.

gcc/ChangeLog

	* config/i386/t-cygming (jc1):  Add -Wl,-stack to LDFLAGS.

libffi/ChangeLog

	* configure.ac (toolexeclibdir):  Allow host-specific override
	if defined in host__toolexeclibdir.
	* configure.host (Cygwin host__toolexeclibdir):  Define.
	* Makefile.am (gcc_version):  New makefile variable.
	(toollibffidir):  Likewise.
	(LTLDFLAGS):  Add "-no-undefined".
	* configure:  Regenerate.
	* Makefile.in:  Regenerate.

	* src/x86/win32.S (ffi_prep_args):  Rename from this ...
	(_ffi_prep_args):  ... to this.
	(_ffi_call_SYSV, _ffi_call_STDCALL, _ffi_closure_SYSV,
	_ffi_closure_raw_SYSV):  Add missing symbol function type attributes.

libjava/ChangeLog

	* configure.ac (Cygwin|MinGW extra_ldflags_libjava):  Add ws2_32 lib.
	* Makefile.am (LIBLINK):  Add "-no-undefined".
	(libgij_la_LDFLAGS, libjvm_la_LDFLAGS):  Likewise.
	(libgcj_tools_la_LIBADD):  Link against new libgcj.la.
	* Makefile.in:  Regenerate.

	* sysdep/i386/backtrace.h (MAIN_FUNC):  New define.
	(fallback_backtrace):  Use it.

libjava/libltdl/ChangeLog

	* ldtl.c (DLL_EXPORT):  Rename from this ...
	(LIBLTDL_DLL_EXPORT):  ... to this.
	* ldtl.c (DLL_EXPORT, LIBLTDL_DLL_EXPORT):  Change use.

==============================================================================

Index: gcc/config/i386/t-cygming
===================================================================
--- gcc/config/i386/t-cygming	(revision 145828)
+++ gcc/config/i386/t-cygming	(working copy)
@@ -37,6 +37,13 @@ msformat-c.o: $(srcdir)/config/i386/msformat-c.c $
 
 STMP_FIXINC=stmp-fixinc
 
+# Building and linking gcj, gcj-tools stretches a 32-bit Windows
+# system to its limits, and the default per-thread stack allocation
+# is way too low.  Add a target-specific make variable definition
+# to extend LDFLAGS so that the compiler is built with header fields
+# set to make the runtime loader give it a big stack allocation.
+jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000
+
 # Build a shared libgcc library for PECOFF with a DEF file
 # with the GNU linker.
 #
Index: configure.ac
===================================================================
--- configure.ac	(revision 145828)
+++ configure.ac	(working copy)
@@ -727,7 +727,7 @@ case "${target}" in
     ;;    
   *-*-cygwin*)
     target_configdirs="$target_configdirs target-libtermcap target-winsup"
-    noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
+    noconfigdirs="$noconfigdirs target-gperf target-libgloss"
     # always build newlib if winsup directory is present.
     if test -d "$srcdir/winsup/cygwin"; then
       skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
Index: boehm-gc/win32_threads.c
===================================================================
--- boehm-gc/win32_threads.c	(revision 145828)
+++ boehm-gc/win32_threads.c	(working copy)
@@ -753,6 +753,12 @@ int GC_pthread_detach(pthread_t thread)
     return result;
 }
 
+GC_PTR GC_get_thread_stack_base()
+{
+  extern GC_PTR _tlsbase __asm__ ("%fs:4");
+  return _tlsbase;
+}
+
 #else /* !CYGWIN32 */
 
 /*
Index: libffi/src/x86/win32.S
===================================================================
--- libffi/src/x86/win32.S	(revision 145828)
+++ libffi/src/x86/win32.S	(working copy)
@@ -32,11 +32,12 @@
  
 .text
  
-.globl ffi_prep_args
+.globl _ffi_prep_args
  
         # This assumes we are using gas.
         .balign 16
 .globl _ffi_call_SYSV
+	.def	_ffi_call_SYSV;	.scl	2;	.type	32;	.endef
  
 _ffi_call_SYSV:
         pushl %ebp
@@ -152,6 +153,7 @@ epilogue:
 .globl _ffi_call_STDCALL
 
 _ffi_call_STDCALL:
+	.def	_ffi_call_STDCALL;	.scl	2;	.type	32;	.endef
         pushl %ebp
         movl  %esp,%ebp
 
@@ -259,6 +261,7 @@ sc_epilogue:
 .ffi_call_STDCALL_end:
 
 	.globl _ffi_closure_SYSV
+	.def	_ffi_closure_SYSV;	.scl	2;	.type	32;	.endef
 _ffi_closure_SYSV:
 	pushl	%ebp
 	movl	%esp, %ebp
@@ -322,6 +325,7 @@ _ffi_closure_SYSV:
 
 	.balign	16
 	.globl _ffi_closure_raw_SYSV
+	.def	_ffi_closure_raw_SYSV;	.scl	2;	.type	32;	.endef
 _ffi_closure_raw_SYSV:
 	pushl	%ebp
 	movl	%esp, %ebp
Index: libffi/configure.host
===================================================================
--- libffi/configure.host	(revision 145828)
+++ libffi/configure.host	(working copy)
@@ -8,4 +8,8 @@ case "${host}" in
   frv*-elf)
     LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/
     ;;
+  i?86-*-cygwin*)
+    # Redirect installation to gcc private dir.
+    host__toolexeclibdir='$(toollibffidir)'
+    ;;
 esac
Index: libffi/configure.ac
===================================================================
--- libffi/configure.ac	(revision 145828)
+++ libffi/configure.ac	(working copy)
@@ -344,6 +344,7 @@ if test -n "$with_cross_host" &&
    test x"$with_cross_host" != x"no"; then
   toolexecdir='$(exec_prefix)/$(target_alias)'
   toolexeclibdir='$(toolexecdir)/lib'
+  test "${host__toolexeclibdir+set}" = set && toolexeclibdir=${host__toolexeclibdir}
 else
   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
   toolexeclibdir='$(libdir)'
Index: libffi/Makefile.am
===================================================================
--- libffi/Makefile.am	(revision 145828)
+++ libffi/Makefile.am	(working copy)
@@ -31,6 +31,10 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj
 	src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \
 	src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h
 
+# Where generated headers like ffitarget.h get installed.
+gcc_version   = $(shell cat $(top_srcdir)/../gcc/BASE-VER)
+toollibffidir = $(libdir)/gcc/$(target_alias)/$(gcc_version)
+
 ## ################################################################
 
 ##
@@ -156,7 +160,8 @@ nodist_libffi_convenience_la_SOURCES = $(nodist_li
 
 AM_CFLAGS = -Wall -g -fexceptions
 
-LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \
+        -no-undefined
 
 libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS)
 
Index: libjava/libltdl/ltdl.c
===================================================================
--- libjava/libltdl/ltdl.c	(revision 145828)
+++ libjava/libltdl/ltdl.c	(working copy)
@@ -142,7 +142,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor,
 /* --- WINDOWS SUPPORT --- */
 
 
-#ifdef DLL_EXPORT
+#ifdef LIBLTDL_DLL_EXPORT
 #  define LT_GLOBAL_DATA	__declspec(dllexport)
 #else
 #  define LT_GLOBAL_DATA
Index: libjava/libltdl/ltdl.h
===================================================================
--- libjava/libltdl/ltdl.h	(revision 145828)
+++ libjava/libltdl/ltdl.h	(working copy)
@@ -128,7 +128,7 @@ LT_BEGIN_C_DECLS
    ridiculous implementation of data symbol exporting. */
 #ifndef LT_SCOPE
 #  ifdef __WINDOWS__
-#    ifdef DLL_EXPORT		/* defined by libtool (if required) */
+#    ifdef LIBLTDL_DLL_EXPORT	/* don't define or ld disables auto-export. */
 #      define LT_SCOPE	__declspec(dllexport)
 #    endif
 #    ifdef LIBLTDL_DLL_IMPORT	/* define if linking with this dll */
Index: libjava/configure.ac
===================================================================
--- libjava/configure.ac	(revision 145828)
+++ libjava/configure.ac	(working copy)
@@ -885,6 +885,9 @@ arm*linux*eabi)
     LIBSTDCXXSPEC=-lstdc++
     LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -L`${PWDCMD-pwd}`/../libstdc++-v3/src/.libs -rpath `${PWDCMD-pwd}`/.libs:`${PWDCMD-pwd}`/../libstdc++-v3/src/.libs -lstdc++"
     ;;
+*-*-mingw*|*-*-cygwin)
+    extra_ldflags_libjava=-lws2_32
+    ;;
 esac
 AC_SUBST(extra_ldflags_libjava)
 AC_SUBST(extra_gij_ldflags)
Index: libjava/sysdep/i386/backtrace.h
===================================================================
--- libjava/sysdep/i386/backtrace.h	(revision 145828)
+++ libjava/sysdep/i386/backtrace.h	(working copy)
@@ -13,7 +13,14 @@ details.  */
 
 #include <java-stack.h>
 
-extern int main (int, char **);
+#ifdef __CYGWIN__
+/* To allow this to link as a DLL.  */
+#define MAIN_FUNC dll_crt0__FP11per_process
+extern "C" int MAIN_FUNC () __declspec(dllimport);
+#else /* !__CYGWIN__ */
+#define MAIN_FUNC main
+extern int MAIN_FUNC (int, char **);
+#endif /* ?__CYGWIN__ */
 
 /* The context used to keep track of our position while unwinding through
    the call stack.  */
@@ -104,7 +111,7 @@ fallback_backtrace (_Unwind_Trace_Fn trace_fn, _Jv
                             const char **, bool))_Jv_RunMain;
       if (ctx.meth_addr == (_Jv_uintptr_t)jv_runmain
           || ctx.meth_addr == (_Jv_uintptr_t)_Jv_ThreadStart
-          || (ctx.meth_addr - (_Jv_uintptr_t)main) < 16)
+          || (ctx.meth_addr - (_Jv_uintptr_t)MAIN_FUNC) < 16)
         break;
     }
 
Index: libjava/Makefile.am
===================================================================
--- libjava/Makefile.am	(revision 145828)
+++ libjava/Makefile.am	(working copy)
@@ -134,7 +134,8 @@ GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ)
 GCJ_FOR_ECJX = @GCJ_FOR_ECJX@
 GCJ_FOR_ECJX_LINK = $(GCJ_FOR_ECJX) -o $@
 LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \
-          $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -o $@
+          $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -no-undefined \
+          -o $@
 CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
 	$(CXXFLAGS) $(AM_LDFLAGS) $(LTLDFLAGS) -o $@
 
@@ -221,7 +222,7 @@ libgij_la_DEPENDENCIES = libgcj.la libgcj.spec
 ## See jv_convert_LDADD.
 libgij_la_LIBADD = -L$(here)/.libs libgcj.la
 ## The mysterious backslash in the grep pattern is consumed by make.
-libgij_la_LDFLAGS = -rpath $(toolexeclibdir) \
+libgij_la_LDFLAGS = -rpath $(toolexeclibdir) -no-undefined \
         -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
 
 if INTERPRETER
@@ -311,6 +312,7 @@ libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir)
  -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
  $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS)
 libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec
+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
 libgcj_tools_la_LINK = $(LIBLINK)
 
 ## libjvm.so
@@ -318,7 +320,7 @@ libjvm_la_SOURCES = jni-libjvm.cc
 libjvm_la_DEPENDENCIES = libgcj.la libgcj.spec
 ## See jv_convert_LDADD.
 libjvm_la_LIBADD = -L$(here)/.libs libgcj.la
-libjvm_la_LDFLAGS = -avoid-version $(LIBGCJ_LD_SYMBOLIC)
+libjvm_la_LDFLAGS = -avoid-version $(LIBGCJ_LD_SYMBOLIC) -no-undefined
 
 ## The .db file.  This rule is only used for native builds, so it is
 ## safe to invoke gcj-dbtool.


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries    on Windows
  2009-04-11  5:33 ` Dave Korn
@ 2009-04-11  9:36   ` Andrew Haley
  2009-04-11 11:20     ` Dave Korn
  2009-04-11 17:15   ` Aaron W. LaFramboise
  1 sibling, 1 reply; 22+ messages in thread
From: Andrew Haley @ 2009-04-11  9:36 UTC (permalink / raw)
  To: Dave Korn; +Cc: Aaron W. LaFramboise, gcc-patches, java-patches

Dave Korn wrote:
> Aaron W. LaFramboise wrote:
>> This patch builds libgcj, libgcj-tools, and libffi as DLLs on Windows.
> 
>   This patch revises and updates Aaron's old patch from last August.  It adds
> some essential support for Cygwin that the previous patch didn't have, and
> does things slightly differently in places.
> 
>   There's only one substantial addition: I added a mechanism in libffi's build
> system to allow the override of $toolexeclibdir.  We use this on Cygwin to
> install the newly built libffi into the GCC private directory alongside cc1 et
> al., as we may have a different upstream version of libffi-devel installed in
> /usr/lib and /usr/include.
> 
>   I'm just putting this through a bootstrap at the moment.  There's not going
> to be much to test because none of this used to be built on Cygwin at all
> before, so it can hardly regress.  If it bootstraps and builds nice working
> DLLs, OK for HEAD?

I'm going to ask for libgcj test results: we need to know if it's fit for
use.

Andrew.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries  on Windows
  2009-04-11  9:36   ` Andrew Haley
@ 2009-04-11 11:20     ` Dave Korn
  2009-04-11 20:13       ` Andrew Haley
  0 siblings, 1 reply; 22+ messages in thread
From: Dave Korn @ 2009-04-11 11:20 UTC (permalink / raw)
  To: Andrew Haley; +Cc: Dave Korn, Aaron W. LaFramboise, gcc-patches, java-patches

Andrew Haley wrote:

>>   I'm just putting this through a bootstrap at the moment.  There's not going
>> to be much to test because none of this used to be built on Cygwin at all
>> before, so it can hardly regress.  If it bootstraps and builds nice working
>> DLLs, OK for HEAD?
> 
> I'm going to ask for libgcj test results: we need to know if it's fit for
> use.

  Certainly.  Will be many many hours before my bootstrap get to them, but
I'll report back.  As a guideline to what to expect, I get these results on
4.3.2 using a similar patch; maybe you could let me know if you see any
patterns in there that would indicate fundamental brokenness.



		=== libjava tests ===


Running target unix
FAIL: TestClosureGC run
FAIL:
/gnu/gcc/package/gcc4-4.3.2-2/src/gcc-4.3.3/libjava/testsuite/libjava.jar/TestClosureGC.jar
execution - gij test
FAIL:
/gnu/gcc/package/gcc4-4.3.2-2/src/gcc-4.3.3/libjava/testsuite/libjava.jar/simple.jar
execution - gij test
FAIL: PR15133 run
FAIL: PR18116 run
FAIL: PR28178 run
FAIL: bytebuffer run
FAIL: calls run
FAIL: cxxtest run
FAIL: directbuffer run
FAIL: field run
FAIL: final_method run
FAIL: findclass run
FAIL: findclass2 run
FAIL: iface run
FAIL: init run
FAIL: invoke run
FAIL: jniutf run
FAIL: martin run
FAIL: noclass run
FAIL: overload run
FAIL: pr11951 run
FAIL: pr18278 run
FAIL: pr23739 run
FAIL: register run
FAIL: register2 run
FAIL: simple_int run
FAIL: throwit run
FAIL: virtual run
FAIL: PR16923 run
FAIL: pr29812 execution - gij test
FAIL: getargssize run
FAIL: getlocalvartable run
FAIL: getstacktrace run
FAIL: ArrayStore execution - source compiled test
FAIL: ArrayStore -findirect-dispatch execution - source compiled test
FAIL: ArrayStore -O3 execution - source compiled test
FAIL: ArrayStore -O3 -findirect-dispatch execution - source compiled test
FAIL: ArrayStore2 execution - source compiled test
FAIL: ArrayStore2 -findirect-dispatch execution - source compiled test
FAIL: ArrayStore2 -O3 execution - source compiled test
FAIL: ArrayStore2 -O3 -findirect-dispatch execution - source compiled test
FAIL: Array_3 execution - source compiled test
FAIL: Array_3 -findirect-dispatch execution - source compiled test
FAIL: Array_3 -O3 execution - source compiled test
FAIL: Array_3 -O3 -findirect-dispatch execution - source compiled test
FAIL: Divide_1 execution - source compiled test
FAIL: Divide_1 -findirect-dispatch execution - source compiled test
FAIL: Divide_1 -O3 execution - source compiled test
FAIL: Divide_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: Divide_2 execution - source compiled test
FAIL: Divide_2 -findirect-dispatch execution - source compiled test
FAIL: Divide_2 -O3 execution - source compiled test
FAIL: Divide_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: ExtraClassLoader execution - source compiled test
FAIL: ExtraClassLoader -findirect-dispatch execution - source compiled test
FAIL: ExtraClassLoader -O3 execution - source compiled test
FAIL: ExtraClassLoader -O3 -findirect-dispatch execution - source compiled test
FAIL: FileHandleGcTest -O3 -findirect-dispatch execution - source compiled test
FAIL: Final execution - source compiled test
FAIL: Final -findirect-dispatch execution - source compiled test
FAIL: Final -O3 execution - source compiled test
FAIL: Final -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990302_02 execution - source compiled test
FAIL: G19990302_02 -findirect-dispatch execution - source compiled test
FAIL: G19990302_02 -O3 execution - source compiled test
FAIL: G19990302_02 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990303_01 execution - source compiled test
FAIL: G19990303_01 -findirect-dispatch execution - source compiled test
FAIL: G19990303_01 -O3 execution - source compiled test
FAIL: G19990303_01 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990303_02 execution - source compiled test
FAIL: G19990303_02 -findirect-dispatch execution - source compiled test
FAIL: G19990303_02 -O3 execution - source compiled test
FAIL: G19990303_02 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990304_01 execution - source compiled test
FAIL: G19990304_01 -findirect-dispatch execution - source compiled test
FAIL: G19990304_01 -O3 execution - source compiled test
FAIL: G19990304_01 -O3 -findirect-dispatch execution - source compiled test
FAIL: InterfaceDispatch execution - source compiled test
FAIL: InterfaceDispatch -findirect-dispatch execution - source compiled test
FAIL: InterfaceDispatch -O3 execution - source compiled test
FAIL: InterfaceDispatch -O3 -findirect-dispatch execution - source compiled test
FAIL: Invoke_1 execution - source compiled test
FAIL: Invoke_1 -findirect-dispatch execution - source compiled test
FAIL: Invoke_1 -O3 execution - source compiled test
FAIL: Invoke_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR12416 execution - source compiled test
FAIL: PR12416 -O3 execution - source compiled test
FAIL: PR218 execution - source compiled test
FAIL: PR218 -findirect-dispatch execution - source compiled test
FAIL: PR218 -O3 execution - source compiled test
FAIL: PR218 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR26858 execution - source compiled test
FAIL: PR26858 -findirect-dispatch execution - source compiled test
FAIL: PR26858 -O3 execution - source compiled test
FAIL: PR26858 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR36252 execution - source compiled test
FAIL: PR36252 -findirect-dispatch execution - source compiled test
FAIL: PR36252 -O3 execution - source compiled test
FAIL: PR36252 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_2 output - source compiled test
WARNING: program timed out.
FAIL: Process_2 -findirect-dispatch execution - source compiled test
FAIL: Process_2 -O3 compilation from source
FAIL: Process_2 -O3 -findirect-dispatch output - source compiled test
FAIL: Process_3 output - source compiled test
FAIL: Process_3 -findirect-dispatch output - source compiled test
FAIL: Process_3 -O3 output - source compiled test
FAIL: Process_3 -O3 -findirect-dispatch output - source compiled test
FAIL: Process_4 output - source compiled test
FAIL: Process_4 -O3 -findirect-dispatch output - source compiled test
FAIL: Process_5 execution - source compiled test
FAIL: Process_5 -findirect-dispatch execution - source compiled test
FAIL: Process_5 -O3 execution - source compiled test
FAIL: Process_5 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_6 execution - source compiled test
FAIL: Process_6 -findirect-dispatch execution - source compiled test
FAIL: Process_6 -O3 execution - source compiled test
FAIL: Process_6 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_7 output - source compiled test
FAIL: Process_7 -findirect-dispatch output - source compiled test
FAIL: Process_7 -O3 output - source compiled test
FAIL: Process_7 -O3 -findirect-dispatch output - source compiled test
FAIL: ProxyTest execution - source compiled test
FAIL: ProxyTest -O3 execution - source compiled test
FAIL: StackTrace2 execution - source compiled test
FAIL: StackTrace2 -findirect-dispatch execution - source compiled test
FAIL: StackTrace2 -O3 execution - source compiled test
FAIL: StackTrace2 -O3 -findirect-dispatch execution - source compiled test
FAIL: StringBuffer_1 execution - source compiled test
FAIL: StringBuffer_1 -findirect-dispatch execution - source compiled test
FAIL: StringBuffer_1 -O3 execution - source compiled test
FAIL: StringBuffer_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: StringBuffer_overflow execution - source compiled test
FAIL: StringBuffer_overflow -findirect-dispatch execution - source compiled test
FAIL: StringBuffer_overflow -O3 execution - source compiled test
FAIL: StringBuffer_overflow -O3 -findirect-dispatch execution - source
compiled test
FAIL: String_overflow execution - source compiled test
FAIL: String_overflow -findirect-dispatch execution - source compiled test
FAIL: String_overflow -O3 execution - source compiled test
FAIL: String_overflow -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Alive execution - source compiled test
FAIL: Thread_Alive -findirect-dispatch execution - source compiled test
FAIL: Thread_Alive -O3 execution - source compiled test
FAIL: Thread_Alive -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Interrupt execution - source compiled test
FAIL: Thread_Interrupt -findirect-dispatch execution - source compiled test
FAIL: Thread_Interrupt -O3 execution - source compiled test
FAIL: Thread_Interrupt -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait_2 execution - source compiled test
FAIL: Thread_Wait_2 -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait_2 -O3 execution - source compiled test
FAIL: Thread_Wait_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait_Interrupt execution - source compiled test
FAIL: Thread_Wait_Interrupt -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait_Interrupt -O3 execution - source compiled test
FAIL: Thread_Wait_Interrupt -O3 -findirect-dispatch execution - source
compiled test
FAIL: Throw_1 execution - source compiled test
FAIL: Throw_1 -findirect-dispatch execution - source compiled test
FAIL: Throw_1 -O3 execution - source compiled test
FAIL: Throw_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: Throw_2 execution - source compiled test
FAIL: Throw_2 -findirect-dispatch execution - source compiled test
FAIL: Throw_2 -O3 execution - source compiled test
FAIL: Throw_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: Throw_3 execution - source compiled test
FAIL: Throw_3 -findirect-dispatch execution - source compiled test
FAIL: Throw_3 -O3 execution - source compiled test
FAIL: Throw_3 -O3 -findirect-dispatch execution - source compiled test
FAIL: WalkerTest execution - source compiled test
FAIL: WalkerTest -O3 execution - source compiled test
FAIL: assign2 execution - source compiled test
FAIL: assign2 -findirect-dispatch execution - source compiled test
FAIL: assign2 -O3 execution - source compiled test
FAIL: assign2 -O3 -findirect-dispatch execution - source compiled test
FAIL: initexc execution - source compiled test
FAIL: initexc -findirect-dispatch execution - source compiled test
FAIL: initexc -O3 execution - source compiled test
FAIL: initexc -O3 -findirect-dispatch execution - source compiled test
FAIL: instinit2 execution - source compiled test
FAIL: instinit2 -findirect-dispatch execution - source compiled test
FAIL: instinit2 -O3 execution - source compiled test
FAIL: instinit2 -O3 -findirect-dispatch execution - source compiled test
FAIL: invokethrow execution - source compiled test
FAIL: invokethrow -findirect-dispatch execution - source compiled test
FAIL: invokethrow -O3 execution - source compiled test
FAIL: invokethrow -O3 -findirect-dispatch execution - source compiled test
FAIL: newarray_overflow execution - source compiled test
FAIL: newarray_overflow -findirect-dispatch execution - source compiled test
FAIL: newarray_overflow -O3 execution - source compiled test
FAIL: newarray_overflow -O3 -findirect-dispatch execution - source compiled test
FAIL: pr184 execution - source compiled test
FAIL: pr184 -findirect-dispatch execution - source compiled test
FAIL: pr184 -O3 execution - source compiled test
FAIL: pr184 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr21785 execution - source compiled test
FAIL: pr21785 -O3 execution - source compiled test
FAIL: pr83 execution - source compiled test
FAIL: pr83 -findirect-dispatch execution - source compiled test
FAIL: pr83 -O3 execution - source compiled test
FAIL: pr83 -O3 -findirect-dispatch execution - source compiled test
FAIL: stacktrace execution - source compiled test
FAIL: stacktrace -findirect-dispatch execution - source compiled test
FAIL: stacktrace -O3 execution - source compiled test
FAIL: stacktrace -O3 -findirect-dispatch execution - source compiled test

		=== libjava Summary ===

# of expected passes		2142
# of unexpected failures	205
# of untested testcases		194



		=== libffi tests ===


Running target unix
FAIL: libffi.call/cls_1_1byte.c output pattern test, is 12 178: 190
FAIL: libffi.call/cls_2byte.c output pattern test, is 12 127 1 13: 13 140
FAIL: libffi.call/return_sc.c execution test
FAIL: libffi.call/struct5.c execution test
FAIL: libffi.call/cls_1_1byte.c output pattern test, is 12 178: 190
FAIL: libffi.call/cls_2byte.c output pattern test, is 12 127 1 13: 13 140
FAIL: libffi.call/return_sc.c execution test
FAIL: libffi.call/struct5.c execution test
FAIL: libffi.call/cls_1_1byte.c output pattern test, is 12 178: 190
FAIL: libffi.call/cls_2byte.c output pattern test, is 12 127 1 13: 13 140
FAIL: libffi.call/return_sc.c execution test
FAIL: libffi.call/struct5.c execution test
FAIL: libffi.call/cls_1_1byte.c output pattern test, is 12 178: 190
FAIL: libffi.call/cls_2byte.c output pattern test, is 12 127 1 13: 13 140
FAIL: libffi.call/struct5.c execution test
FAIL: libffi.call/cls_12byte.c output pattern test, is 7 4 9 1 5 3: 8 9 12
FAIL: libffi.call/cls_16byte.c output pattern test, is 7 8 9 1 9 3: 8 17 12
FAIL: libffi.call/cls_18byte.c output pattern test, is 1 127 126 3 4 125 124
5: 5 252 250 8
FAIL: libffi.call/cls_19byte.c output pattern test, is 1 127 126 3 120 4 125
124 5 119: 5 252 250 8 239
FAIL: libffi.call/cls_1_1byte.c output pattern test, is 12 178: 190
FAIL: libffi.call/cls_20byte.c output pattern test, is 1 2 3 4 5 7: 5 7 10
FAIL: libffi.call/cls_20byte1.c output pattern test, is 1 2 3 4 5 7: 5 7 10
FAIL: libffi.call/cls_24byte.c output pattern test, is 9 2 6 5 1 2 3 7 4 5 7 9
8 6 1 9: 22 15 17 25
FAIL: libffi.call/cls_2byte.c output pattern test, is 12 127 1 13: 13 140
FAIL: libffi.call/cls_3_1byte.c output pattern test, is 12 13 14 178 179 180:
190 192 194
FAIL: libffi.call/cls_5_1_byte.c output pattern test, is 127 120 1 3 4 12 128
9 3 4: 139 248 10 6 8
FAIL: libffi.call/cls_5byte.c output pattern test, is 127 120 1 12 128 9: 139
248 10
FAIL: libffi.call/cls_64byte.c output pattern test, is 22 15 17 25 6 13 19 18
FAIL: libffi.call/cls_6_1_byte.c output pattern test, is 127 120 1 3 4 5 12
128 9 3 4 5: 139 248 10 6 8 10
FAIL: libffi.call/cls_6byte.c output pattern test, is 127 120 1 128 12 128 9
127: 139 248 10 255
FAIL: libffi.call/cls_7_1_byte.c output pattern test, is 127 120 1 3 4 5 6 12
128 9 3 4 5 6: 139 248 10 6 8 10 12
FAIL: libffi.call/cls_9byte1.c output pattern test, is 7 8 1 9: 8 17
FAIL: libffi.call/cls_9byte2.c output pattern test, is 7 8 1 9: 8 17
FAIL: libffi.call/cls_align_double.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/cls_align_float.c output pattern test, is 12 4951 127 1 9320
13: 13 14271 140
FAIL: libffi.call/cls_align_longdouble.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/cls_align_pointer.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/cls_align_sint16.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/cls_align_sint32.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/cls_align_sint64.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/cls_align_uint16.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/cls_align_uint32.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/cls_align_uint64.c output pattern test, is 12 4951 127 1
9320 13: 13 14271 140
FAIL: libffi.call/nested_struct.c execution test
FAIL: libffi.call/nested_struct1.c execution test
FAIL: libffi.call/nested_struct10.c execution test
FAIL: libffi.call/nested_struct2.c execution test
FAIL: libffi.call/nested_struct3.c execution test
FAIL: libffi.call/nested_struct4.c execution test
FAIL: libffi.call/nested_struct5.c execution test
FAIL: libffi.call/nested_struct6.c execution test
FAIL: libffi.call/nested_struct7.c execution test
FAIL: libffi.call/nested_struct8.c execution test
FAIL: libffi.call/nested_struct9.c execution test
FAIL: libffi.call/problem1.c output pattern test, is 1 2 3 1 2 3: 2 4 6
FAIL: libffi.call/return_sc.c execution test
FAIL: libffi.call/struct5.c execution test
FAIL: libffi.special/unwindtest.cc execution test
FAIL: libffi.special/unwindtest_ffi_call.cc execution test
FAIL: libffi.special/unwindtest.cc execution test
FAIL: libffi.special/unwindtest_ffi_call.cc execution test
FAIL: libffi.special/unwindtest.cc execution test
FAIL: libffi.special/unwindtest_ffi_call.cc execution test
FAIL: libffi.special/unwindtest.cc execution test
FAIL: libffi.special/unwindtest_ffi_call.cc execution test

		=== libffi Summary ===

# of expected passes		1325
# of unexpected failures	65


    cheers,
      DaveK

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
  2009-04-11  5:33 ` Dave Korn
  2009-04-11  9:36   ` Andrew Haley
@ 2009-04-11 17:15   ` Aaron W. LaFramboise
  2009-04-11 18:12     ` Dave Korn
  1 sibling, 1 reply; 22+ messages in thread
From: Aaron W. LaFramboise @ 2009-04-11 17:15 UTC (permalink / raw)
  To: Dave Korn; +Cc: gcc-patches, java-patches

Dave Korn wrote:
> Aaron W. LaFramboise wrote:
>> This patch builds libgcj, libgcj-tools, and libffi as DLLs on Windows.
> 
>   This patch revises and updates Aaron's old patch from last August.  It adds
> some essential support for Cygwin that the previous patch didn't have, and
> does things slightly differently in places.

You could probably split this into separate parts, unless you think it 
would be easier to get it reviewed as a single chunk.

As I recall, and you can probably tell from where you got the patches 
from, there were some reservations with some parts of this patch.

In particular, it might be better to import a new LTDL version, assuming 
that fixes this problem.  If not, it should probably be fixed upstream.

This stuff is slightly incomplete, as it really needs a DEF-generation 
thing, probably with some sort of versioned ordinal thing, or this will 
have awful storage and load-time performance.  I had started on this, 
and I can submit a patch for this if you have not already started 
working on this.

I have no objections to any of this going in though, except for the below.

> Index: gcc/config/i386/t-cygming

> +jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000

I think it would be better to figure out why the top-level LDFLAGS does 
not get propagated properly into java as it does for every other 
language, rather than sticking in this hack.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries  on Windows
  2009-04-11 17:15   ` Aaron W. LaFramboise
@ 2009-04-11 18:12     ` Dave Korn
  2009-04-11 21:52       ` Aaron W. LaFramboise
  2009-04-11 23:15       ` Pedro Alves
  0 siblings, 2 replies; 22+ messages in thread
From: Dave Korn @ 2009-04-11 18:12 UTC (permalink / raw)
  To: Aaron W. LaFramboise; +Cc: Dave Korn, gcc-patches, java-patches

Aaron W. LaFramboise wrote:
> Dave Korn wrote:
>> Aaron W. LaFramboise wrote:

> This stuff is slightly incomplete, as it really needs a DEF-generation
> thing, probably with some sort of versioned ordinal thing, or this will
> have awful storage and load-time performance.  I had started on this,
> and I can submit a patch for this if you have not already started
> working on this.

  Yes, at the moment it just relies on everything being auto exported, it
would be very helpful if you've got something going for a map file.

> I have no objections to any of this going in though, except for the below.
> 
>> Index: gcc/config/i386/t-cygming
> 
>> +jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000
> 
> I think it would be better to figure out why the top-level LDFLAGS does
> not get propagated properly into java as it does for every other
> language, rather than sticking in this hack.

  Two questions:

-  Why "hack"?  It's a robust mechanism specified in the GNU Make manual as
far as I know.
-  What does this have to do with the top-level LDFLAGS?  I didn't change them
because I don't want cc1 and cc1plus to also have 128meg of stack, do I?

    cheers,
      DaveK

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
  2009-04-11 11:20     ` Dave Korn
@ 2009-04-11 20:13       ` Andrew Haley
  0 siblings, 0 replies; 22+ messages in thread
From: Andrew Haley @ 2009-04-11 20:13 UTC (permalink / raw)
  To: Dave Korn; +Cc: Aaron W. LaFramboise, gcc-patches, java-patches

Dave Korn wrote:
> Andrew Haley wrote:
> 
>>>   I'm just putting this through a bootstrap at the moment.  There's not going
>>> to be much to test because none of this used to be built on Cygwin at all
>>> before, so it can hardly regress.  If it bootstraps and builds nice working
>>> DLLs, OK for HEAD?
>> I'm going to ask for libgcj test results: we need to know if it's fit for
>> use.
> 
>   Certainly.  Will be many many hours before my bootstrap get to them, but
> I'll report back.  As a guideline to what to expect, I get these results on
> 4.3.2 using a similar patch; maybe you could let me know if you see any
> patterns in there that would indicate fundamental brokenness.

Well, there are so many failures that it's unlikely any non-trivial program
would run.  It's hard to know what the problems are without seeing the logs.

Andrew.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries  on Windows
  2009-04-11 18:12     ` Dave Korn
@ 2009-04-11 21:52       ` Aaron W. LaFramboise
  2009-04-11 23:03         ` Dave Korn
  2009-04-11 23:15       ` Pedro Alves
  1 sibling, 1 reply; 22+ messages in thread
From: Aaron W. LaFramboise @ 2009-04-11 21:52 UTC (permalink / raw)
  To: Dave Korn; +Cc: gcc-patches, java-patches

Dave Korn wrote:
> Aaron W. LaFramboise wrote:
>> Dave Korn wrote:

>>> Index: gcc/config/i386/t-cygming
>>> +jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000
>> I think it would be better to figure out why the top-level LDFLAGS does
>> not get propagated properly into java as it does for every other
>> language, rather than sticking in this hack.
> 
>   Two questions:
> 
> -  Why "hack"?  It's a robust mechanism specified in the GNU Make manual as
> far as I know.
> -  What does this have to do with the top-level LDFLAGS?  I didn't change them
> because I don't want cc1 and cc1plus to also have 128meg of stack, do I?

Look at config/mh-mingw, where this is set in LDFLAGS for the entire 
build.  A while back, someone or other decided that this was the right 
thing to do.  This value should be propagated into gcc/java, the same 
way that it is for everything else, but for some weird reason, it 
doesn't propagate through the build machinery.  The value that is there 
is large enough for jc1.exe to compile libjava.

I think the right thing to do is fix that bug, rather than just hacking 
it to use the flag that it should already be using, if you see what I mean.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries  on Windows
  2009-04-11 21:52       ` Aaron W. LaFramboise
@ 2009-04-11 23:03         ` Dave Korn
  2009-04-12  4:15           ` Aaron W. LaFramboise
  0 siblings, 1 reply; 22+ messages in thread
From: Dave Korn @ 2009-04-11 23:03 UTC (permalink / raw)
  To: Aaron W. LaFramboise; +Cc: Dave Korn, gcc-patches, java-patches

Aaron W. LaFramboise wrote:
> Dave Korn wrote:

>> -  What does this have to do with the top-level LDFLAGS?  I didn't
>> change them
>> because I don't want cc1 and cc1plus to also have 128meg of stack, do I?
> 
> Look at config/mh-mingw, where this is set in LDFLAGS for the entire
> build.  A while back, someone or other decided that this was the right
> thing to do.  This value should be propagated into gcc/java, the same
> way that it is for everything else, but for some weird reason, it
> doesn't propagate through the build machinery.  The value that is there
> is large enough for jc1.exe to compile libjava.
> 
> I think the right thing to do is fix that bug, rather than just hacking
> it to use the flag that it should already be using, if you see what I mean.

  I notice that those flags get applied to everything in stage1 (xgcc, cc1,
gen* et al) and not to stages 2 or 3.  Are you sure that isn't intendtional?

    cheers,
      DaveK

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries  on Windows
  2009-04-11 18:12     ` Dave Korn
  2009-04-11 21:52       ` Aaron W. LaFramboise
@ 2009-04-11 23:15       ` Pedro Alves
  2009-04-11 23:17         ` Dave Korn
  1 sibling, 1 reply; 22+ messages in thread
From: Pedro Alves @ 2009-04-11 23:15 UTC (permalink / raw)
  To: gcc-patches; +Cc: Dave Korn, Aaron W. LaFramboise, java-patches

On Saturday 11 April 2009 19:22:25, Dave Korn wrote:
> >> Index: gcc/config/i386/t-cygming
> > 
> >> +jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000
> > 
> > I think it would be better to figure out why the top-level LDFLAGS does
> > not get propagated properly into java as it does for every other
> > language, rather than sticking in this hack.
> 
>   Two questions:
> 
> -  Why "hack"?  It's a robust mechanism specified in the GNU Make manual as
> far as I know.

Isn't this a *host* issue rather than a *target* problem?  If so, it would
seem to me that a t-* file would be the wrong place for this.  E.g., would a
linux x cygwin gcj need this?  What about a cygwin x linux gcj ?

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
  2009-04-11 23:15       ` Pedro Alves
@ 2009-04-11 23:17         ` Dave Korn
  2009-04-11 23:58           ` Pedro Alves
  0 siblings, 1 reply; 22+ messages in thread
From: Dave Korn @ 2009-04-11 23:17 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gcc-patches, Dave Korn, Aaron W. LaFramboise, java-patches

Pedro Alves wrote:
> On Saturday 11 April 2009 19:22:25, Dave Korn wrote:
>>>> Index: gcc/config/i386/t-cygming
>>>> +jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000

> Isn't this a *host* issue rather than a *target* problem?  If so, it would
> seem to me that a t-* file would be the wrong place for this.  

  Oh, yeh.  It's host, not target.  I forgot to think cross-compiler.  Host
makefile frags are "discouraged", but I see there is already an x-cygwin, so I
guess I should try it there?

    cheers,
      DaveK


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries on Windows
  2009-04-11 23:17         ` Dave Korn
@ 2009-04-11 23:58           ` Pedro Alves
  2009-04-15  0:03             ` Ian Lance Taylor
  0 siblings, 1 reply; 22+ messages in thread
From: Pedro Alves @ 2009-04-11 23:58 UTC (permalink / raw)
  To: Dave Korn; +Cc: gcc-patches, Aaron W. LaFramboise, java-patches

On Sunday 12 April 2009 00:27:48, Dave Korn wrote:
> Pedro Alves wrote:
> > On Saturday 11 April 2009 19:22:25, Dave Korn wrote:
> >>>> Index: gcc/config/i386/t-cygming
> >>>> +jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000
> 
> > Isn't this a *host* issue rather than a *target* problem?  If so, it would
> > seem to me that a t-* file would be the wrong place for this.  
> 
>   Oh, yeh.  It's host, not target.  I forgot to think cross-compiler.  Host
> makefile frags are "discouraged", but I see there is already an x-cygwin, so I
> guess I should try it there?

Looks like there's precedent for something like that:

>cat gcc/config/rs6000/x-aix
# genautomata requires more than 256MB of data
build/genautomata : override LDFLAGS += -Wl,-bmaxdata:0x20000000

# jc1 requires more than 256MB of data
jc1 : override LDFLAGS += -Wl,-bmaxdata:0x20000000

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries  on Windows
  2009-04-11 23:03         ` Dave Korn
@ 2009-04-12  4:15           ` Aaron W. LaFramboise
  0 siblings, 0 replies; 22+ messages in thread
From: Aaron W. LaFramboise @ 2009-04-12  4:15 UTC (permalink / raw)
  To: Dave Korn; +Cc: gcc-patches, java-patches, Joseph S. Myers

Dave Korn wrote:
> Aaron W. LaFramboise wrote:
>> Dave Korn wrote:
> 
>>> -  What does this have to do with the top-level LDFLAGS?  I didn't
>>> change them
>>> because I don't want cc1 and cc1plus to also have 128meg of stack, do I?
>> Look at config/mh-mingw, where this is set in LDFLAGS for the entire
>> build.  A while back, someone or other decided that this was the right
>> thing to do.  This value should be propagated into gcc/java, the same
>> way that it is for everything else, but for some weird reason, it
>> doesn't propagate through the build machinery.  The value that is there
>> is large enough for jc1.exe to compile libjava.
>>
>> I think the right thing to do is fix that bug, rather than just hacking
>> it to use the flag that it should already be using, if you see what I mean.
> 
>   I notice that those flags get applied to everything in stage1 (xgcc, cc1,
> gen* et al) and not to stages 2 or 3.  Are you sure that isn't intendtional?

OK, I didn't know that.  If that's true, then probably those flags are 
only for the host's compiler.

See <http://gcc.gnu.org/ml/gcc-patches/2008-06/msg00420.html>.  At the 
very least, it was my understanding that the LDFLAGS in mh-mingw were 
*supposed* to fix this.  Apparently, it only worked for non-bootstrap 
cross-builds.

Joseph, what do you think about this?

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries on Windows
  2009-04-11 23:58           ` Pedro Alves
@ 2009-04-15  0:03             ` Ian Lance Taylor
  2009-04-15  0:13               ` Pedro Alves
  0 siblings, 1 reply; 22+ messages in thread
From: Ian Lance Taylor @ 2009-04-15  0:03 UTC (permalink / raw)
  To: Pedro Alves; +Cc: Dave Korn, gcc-patches, Aaron W. LaFramboise, java-patches

Pedro Alves <pedro@codesourcery.com> writes:

> On Sunday 12 April 2009 00:27:48, Dave Korn wrote:
>> Pedro Alves wrote:
>> > On Saturday 11 April 2009 19:22:25, Dave Korn wrote:
>> >>>> Index: gcc/config/i386/t-cygming
>> >>>> +jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000
>> 
>> > Isn't this a *host* issue rather than a *target* problem?  If so, it would
>> > seem to me that a t-* file would be the wrong place for this.  
>> 
>>   Oh, yeh.  It's host, not target.  I forgot to think cross-compiler.  Host
>> makefile frags are "discouraged", but I see there is already an x-cygwin, so I
>> guess I should try it there?
>
> Looks like there's precedent for something like that:
>
>>cat gcc/config/rs6000/x-aix
> # genautomata requires more than 256MB of data
> build/genautomata : override LDFLAGS += -Wl,-bmaxdata:0x20000000
>
> # jc1 requires more than 256MB of data
> jc1 : override LDFLAGS += -Wl,-bmaxdata:0x20000000

See also top level config/mh-mingw.

Ian

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries on Windows
  2009-04-15  0:03             ` Ian Lance Taylor
@ 2009-04-15  0:13               ` Pedro Alves
  0 siblings, 0 replies; 22+ messages in thread
From: Pedro Alves @ 2009-04-15  0:13 UTC (permalink / raw)
  To: Ian Lance Taylor
  Cc: Dave Korn, gcc-patches, Aaron W. LaFramboise, java-patches

On Wednesday 15 April 2009 01:02:50, Ian Lance Taylor wrote:
> Pedro Alves <pedro@codesourcery.com> writes:
> 
> > On Sunday 12 April 2009 00:27:48, Dave Korn wrote:
> >> Pedro Alves wrote:
> >> > On Saturday 11 April 2009 19:22:25, Dave Korn wrote:
> >> >>>> Index: gcc/config/i386/t-cygming
> >> >>>> +jc1$(exeext): LDFLAGS+=-Wl,-stack,0x8000000
> >> 
> >> > Isn't this a *host* issue rather than a *target* problem?  If so, it would
> >> > seem to me that a t-* file would be the wrong place for this.  
> >> 
> >>   Oh, yeh.  It's host, not target.  I forgot to think cross-compiler.  Host
> >> makefile frags are "discouraged", but I see there is already an x-cygwin, so I
> >> guess I should try it there?
> >
> > Looks like there's precedent for something like that:
> >
> >>cat gcc/config/rs6000/x-aix
> > # genautomata requires more than 256MB of data
> > build/genautomata : override LDFLAGS += -Wl,-bmaxdata:0x20000000
> >
> > # jc1 requires more than 256MB of data
> > jc1 : override LDFLAGS += -Wl,-bmaxdata:0x20000000
> 
> See also top level config/mh-mingw.

See also http://gcc.gnu.org/ml/gcc-patches/2009-04/msg00887.html

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries    on Windows
  2008-08-25  4:37   ` Charles Wilson
  2008-08-25  4:57     ` Charles Wilson
@ 2008-08-25 18:11     ` Paolo Bonzini
  1 sibling, 0 replies; 22+ messages in thread
From: Paolo Bonzini @ 2008-08-25 18:11 UTC (permalink / raw)
  To: Charles Wilson; +Cc: GCC Patches, java-patches


> I noticed another thread where Peter O'Gorman was proposing to update
> libtool in gcc to latest libtool-git-tip (e.g. now that libtool-2.0 ne'
> libtool-2.2 is out). Perhaps the update to more recent ltdl would be an
> appropriate addendum/followup to his patch.

Unfortunately, I think it is very hard to squeeze a ltdl update in the
deadline for stage1.  Maybe the release managers could defer to the
libjava maintainers.

> Right. If I am correct above, this was probably the rationale for why it
> didn't happen as part of the Great Autotool Update: too messy to deal
> with all at once.  But now...maybe it's time. But I agree -- that is a
> big effort, and shouldn't be part of your patch here.
> 
>> There may also be
>> other reasons we're still using this old version of libltdl.
> 
> I doubt it. Probably just inertia.

Yes, nobody really cared because:

1) it was not much of a maintainance pain, unlike libtool -- remember
that there were some things to be invented (such as exec-tool.in) to
update libtool;

2) nobody knows how easier a libltdl update would be (I'd say somewhat
easier, but only because it only touches libjava).

3) a different set of maintainers was involved (build vs. libjava)

4) nobody really checked what features a newer libltdl has (in either
group of maintainers).

Paolo

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
  2008-08-25  4:37   ` Charles Wilson
@ 2008-08-25  4:57     ` Charles Wilson
  2008-08-25 18:11     ` Paolo Bonzini
  1 sibling, 0 replies; 22+ messages in thread
From: Charles Wilson @ 2008-08-25  4:57 UTC (permalink / raw)
  To: GCC Patches; +Cc: java-patches

Charles Wilson wrote:
>> If it's all the same to you, I like my solution better. :)  Let me know
>> if you still feel differently, and maybe we can talk more.
> 
> No, it's fine.
      ^^^^^^^^^^
Just my opinion; I'm not a maintainer and can't give commit approval.
You'll have to get that from somebody else. <g>

--
Chuck

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
  2008-08-25  4:34 ` Aaron W. LaFramboise
@ 2008-08-25  4:37   ` Charles Wilson
  2008-08-25  4:57     ` Charles Wilson
  2008-08-25 18:11     ` Paolo Bonzini
  0 siblings, 2 replies; 22+ messages in thread
From: Charles Wilson @ 2008-08-25  4:37 UTC (permalink / raw)
  To: GCC Patches; +Cc: java-patches

Aaron W. LaFramboise wrote:
> Yes.  Sorry, I forgot to mention this.  In addition, we specifically do
> not want this function to be exported from the DLL at all.  See below.

Well, with the default ld behavior, we /are/ exporting darn near
everything, including these ltdl symbols.  By ensuring that the ltdl
symbols are not decorated, and given that no other symbols anywhere in
libjava are decorated, you in effect turn the default
--enable-auto-export behavior back on -- just as if you had explicitly
specified it on the command line.  But you knew that.

> OK, I will fix this comment to reflect the purpose of this name change.

Good enough, given <below>.

> The new libltdl does not have this issue.  I have no idea why we're
> stuck with the 1.5 version of libltdl even though we're using a recent
> libtool.

Yes, I thought we had fixed this.  I don't remember, but perhaps back in
spring '07 when the Great Autotool Update happened -- taking libtool
from 1.4p3-FORK to libtool-CVS-HEAD-20070318, the decision was made to
postpone the libltdl bits until the "real" libtool-2.0 (now called
libtool-2.2) was released.  I guess.

I noticed another thread where Peter O'Gorman was proposing to update
libtool in gcc to latest libtool-git-tip (e.g. now that libtool-2.0 ne'
libtool-2.2 is out). Perhaps the update to more recent ltdl would be an
appropriate addendum/followup to his patch.

For now, tho:

> However, libltdl seems to have been modified in similar ways by other
> people; just look at the ChangeLog.  Since everyone else is modifying
> this, and this is not an issue in the upstream version, I think this is
> the best change.

Sure. If -- for whatever reason -- we are currently using a forked
version of old ltdl, there's not too much reason to worry about
maintaining synchrony with the original (and independently progressed)
version over at libtool-git.

> Updating to a newer libltdl would probably be good, since I suspect
> there are Windows-specific improvements in it.  However, libjava would
> need to be ported to it, since its currently dependent upon interfaces
> that have been removed in newer versions of libltdl. 

Right. If I am correct above, this was probably the rationale for why it
didn't happen as part of the Great Autotool Update: too messy to deal
with all at once.  But now...maybe it's time. But I agree -- that is a
big effort, and shouldn't be part of your patch here.

> There may also be
> other reasons we're still using this old version of libltdl.

I doubt it. Probably just inertia.

> I don't like this solution as much, as these exports really are not
> dllexport, and we specifically do not want them to be exported--even
> though we are doing nothing at present to prevent this. 

Ack.

> (As I mentioned
> previous, a future patch will fix this symbol leakage.)  For this
> reason, I think it's important we completely avoid marking these
> dllexport, beyond fixing this specific issue.

That makes sense. I wonder if the right approach is to once again
leverage the version script stuff and generate a .def file, like you did
for libgcc.  But later.

> If it's all the same to you, I like my solution better. :)  Let me know
> if you still feel differently, and maybe we can talk more.

No, it's fine.

BTW, I don't think I've mentioned this: but /thank you/ for your efforts
this summer.

--
Chuck

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries   on Windows
       [not found] <48B1DA69.9070306@cwilson.fastmail.fm>
@ 2008-08-25  4:34 ` Aaron W. LaFramboise
  2008-08-25  4:37   ` Charles Wilson
  0 siblings, 1 reply; 22+ messages in thread
From: Aaron W. LaFramboise @ 2008-08-25  4:34 UTC (permalink / raw)
  To: Charles Wilson; +Cc: GCC Patches, java-patches

Charles Wilson wrote:
> Why was this necessary:
> 
> 	<libjava/libltdl>
> 	* ltdl.c (DLL_EXPORT): Rename to LIBLTDL_DLL_EXPORT.
> 	* ltdl.h (DLL_EXPORT): Rename to LIBLTDL_DLL_EXPORT.
> 
> AFAIK, this new symbol LIBLDL_DLLEXPORT, is never defined by libtool,
> even when building libjava shared.  So the symbols decorated with
> LT_SCOPE will never get the __declspec(dllexport) annotation.
> 
> Or was that the intention, in order to work around the issue where ld
> disables its default auto-export behavior, when it sees ANY symbol
> explicitly marked as __declspec(dllexport)?

Yes.  Sorry, I forgot to mention this.  In addition, we specifically do 
not want this function to be exported from the DLL at all.  See below.

> If so, then the comment:
> +#  ifdef LIBLTDL_DLL_EXPORT /* defined by libtool (if required) */
> is wrong; it should be something like
>    /* !not! 'DLL_EXPORT'; we don't want libtool to
>       automatically decorate just these exports without
>       also decorating every other libjava export
>    */

OK, I will fix this comment to reflect the purpose of this name change.

> But finally, there's one last issue: I thought one of the gcc guidelines
> going forward with respect to autotools was to NOT modify imported
> files.  These changes will be lost every time somebody resyncs with
> upstream libtool...

The new libltdl does not have this issue.  I have no idea why we're 
stuck with the 1.5 version of libltdl even though we're using a recent 
libtool.

However, libltdl seems to have been modified in similar ways by other 
people; just look at the ChangeLog.  Since everyone else is modifying 
this, and this is not an issue in the upstream version, I think this is 
the best change.

Updating to a newer libltdl would probably be good, since I suspect 
there are Windows-specific improvements in it.  However, libjava would 
need to be ported to it, since its currently dependent upon interfaces 
that have been removed in newer versions of libltdl.  There may also be 
other reasons we're still using this old version of libltdl.

> Wouldn't it make more sense, until there are proper __declspec()
> markings/macros on all desired libjava exports, to leave these source
> files alone and just explicitly use -Wl,--enable-auto-export when
> linking the libjava DLL on mingw/cygwin?

I don't like this solution as much, as these exports really are not 
dllexport, and we specifically do not want them to be exported--even 
though we are doing nothing at present to prevent this.  (As I mentioned 
previous, a future patch will fix this symbol leakage.)  For this 
reason, I think it's important we completely avoid marking these 
dllexport, beyond fixing this specific issue.

If it's all the same to you, I like my solution better. :)  Let me know 
if you still feel differently, and maybe we can talk more.

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2009-04-15  0:13 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-08-24  4:23 [PATCH] Build libgcj, libgcj-tools, and libffi as shared libraries on Windows Aaron W. LaFramboise
2008-08-24 11:07 ` Danny Smith
2008-08-24 16:54 ` Andrew Haley
2008-08-24 20:09   ` Aaron W. LaFramboise
2009-04-11  5:33 ` Dave Korn
2009-04-11  9:36   ` Andrew Haley
2009-04-11 11:20     ` Dave Korn
2009-04-11 20:13       ` Andrew Haley
2009-04-11 17:15   ` Aaron W. LaFramboise
2009-04-11 18:12     ` Dave Korn
2009-04-11 21:52       ` Aaron W. LaFramboise
2009-04-11 23:03         ` Dave Korn
2009-04-12  4:15           ` Aaron W. LaFramboise
2009-04-11 23:15       ` Pedro Alves
2009-04-11 23:17         ` Dave Korn
2009-04-11 23:58           ` Pedro Alves
2009-04-15  0:03             ` Ian Lance Taylor
2009-04-15  0:13               ` Pedro Alves
     [not found] <48B1DA69.9070306@cwilson.fastmail.fm>
2008-08-25  4:34 ` Aaron W. LaFramboise
2008-08-25  4:37   ` Charles Wilson
2008-08-25  4:57     ` Charles Wilson
2008-08-25 18:11     ` Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).