[PATCH] Apparent thinko in closures.c causing GCC bootstrap failure on Cygwin

Dave Korn dave.korn.cygwin@googlemail.com
Tue Jun 30 12:04:00 GMT 2009


    Hello lists,

  Some minor fallout resulting after the libffi merge.  The code in closures.c
is currently structured like this:

> #if !defined(X86_WIN32) && !defined(X86_WIN64)
> /* Use these for mmap and munmap within dlmalloc.c.  */
> static void *dlmmap(void *, size_t, int, int, int, off_t);
> static int dlmunmap(void *, size_t);
> #endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */
> 
> #define mmap dlmmap
> #define munmap dlmunmap
> 
> #include "dlmalloc.c"
> 
> #undef mmap
> #undef munmap
> 
> #if !defined(X86_WIN32) && !defined(X86_WIN64)
> 
>  [ definitions of dlmmap, dlmunmap ]
> 
> #endif

  It currently causes bootstrap failure on cygwin like this:

libtool: link: /gnu/gcc/obj-patched3/./gcc/gcj
-B/gnu/gcc/obj-patched3/i686-pc-cygwin/libjava/ -B/gnu/gcc/obj-patched3/./gcc/
-B/opt/gcc-tools/i686-pc-cygwin/bin/ -B/opt/gcc-tools/i686-pc-cygwin/lib/
-isystem /opt/gcc-tools/i686-pc-cygwin/include -isystem
/opt/gcc-tools/i686-pc-cygwin/sys-include -ffloat-store -fomit-frame-pointer
-Usun -g -O2 -o .libs/jv-convert.exe --main=gnu.gcj.convert.Convert
-shared-libgcc  -L/gnu/gcc/obj-patched3/i686-pc-cygwin/libjava/.libs
-L/gnu/gcc/obj-patched3/i686-pc-cygwin/libjava ./.libs/libgcj.a -ldl
-L/opt/gcc-tools/lib/gcc/i686-pc-cygwin/4.5.0
/opt/gcc-tools/bin/ld: Dwarf Error: mangled line number section.
./.libs/libgcj.a(closures.o):closures.c:(.text+0x8af): undefined reference to
`_dlmunmap'
./.libs/libgcj.a(closures.o):closures.c:(.text+0xe59): undefined reference to
`_dlmmap'
./.libs/libgcj.a(closures.o):closures.c:(.text+0x1173): undefined reference to
`_dlmmap'
./.libs/libgcj.a(closures.o):closures.c:(.text+0x1c82): undefined reference to
`_dlmunmap'
./.libs/libgcj.a(closures.o):closures.c:(.text+0x1d5f): undefined reference to
`_dlmunmap'
collect2: ld returned 1 exit status
make[3]: *** [jv-convert.exe] Error 1

  Ignoring the dwarf error, which is caused by an unrelated problem, it looks
to me like the intent of the above code is to provide - only on non-windows
platforms - these two replacement functions and override dlmalloc's use of
mmap/munmap with them.  But in that case, the #defines should be inside the
#if guards as well, otherwise we're unconditionally doing the replacement but
only conditionally supplying the replacement functions!

  I'm testing the attached on Cygwin.  I'm not set up for win64 testing but I
don't suppose it offers dl* functions either; I'll see if I can find one of
the w64 guys to comment.

libffi/ChangeLog:

	* closures.c (mmap, munmap):  Don't define replacement macros pointing
	to dl* versions on windows platforms.

  Assuming it passes bootstrap, OK?

    cheers,
      DaveK
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libffi-win32-mmap-thinko.diff
Type: text/x-c
Size: 836 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libffi-discuss/attachments/20090630/6106626e/attachment.bin>


More information about the Libffi-discuss mailing list