Subject: Re: Problems with JDK 1.5.0 patchset 6
To: None <netbsd-java@NetBSD.org>
From: Bernd Ernesti <veego@NetBSD.org>
List: netbsd-java
Date: 08/19/2007 15:00:55
On Sun, Aug 12, 2007 at 10:45:25PM +0200, Bernd Ernesti wrote:
> Hi,
> 
> I'm trying to update the jdk15 wip package to p6 and got one problem:
> 
> gmake[6]: Entering directory `/pkgsrc/lang/jdk15/work.i386/j2se/make/sun/javac/javac'
> /bin/mkdir -p /pkgsrc/lang/jdk15/work.i386/control/build/bsd-i586/tmp/sun/com.sun.tools.javac/javac/obj
> rm -f /pkgsrc/lang/jdk15/work.i386/control/build/bsd-i586/tmp/sun/com.sun.tools.javac/javac/.classes.list
> /pkgsrc/lang/jdk15/work.i386/control/build/bsd-i586/bin/java -classpath ../../../tools/CompileProperties CompileProperties ../../../../src/share/classes/com/sun/tools/javac/resources/compiler.properties /pkgsrc/lang/jdk15/work.i386/control/build/bsd-i586/gensrc/com/sun/tools/javac/resources/compiler.java
> dl failure on line 730Error: failed /pkgsrc/lang/jdk15/work.i386/control/build/bsd-i586/lib/i386/client/libjvm.so, because /usr/lib/libstdc++.so.6: Undefined PLT symbol "_Unwind_GetIP" (symnum = 161)

I found two places between the p4 and p6 patchset which maybe related.

- In hotspot/build/bsd/makefiles/vm.make:

 -LINK_LIB  = ${CPP} -shared -mimpure-text 
 +LINK_LIB  = ${CPP} -shared -mimpure-text -fPIC

So libjvm.so is now build with -fPIC.

From the p5 Changelog:

2007-05-17 Thursday 17:12  truk
        * hotspot/build/bsd/makefiles/vm.make:
        - link with -fPIC (needed for !i386)

And for another library:

2007-05-24 Thursday 04:52  glewis
        * j2se/make/sun/jdbc/Makefile:
        . Correctly compile shared library objects with -fPIC.
          This avoids an error with gcc 4.2 on amd64.

But this seems to not be my problem. I removed the -fPIC (I know that
this shouldn't have been done, but I wanted to rule it out that this
was the problem) but it still fails the same way.

- Then there is now a version script while linking the libraries.

From hotspot/build/bsd/makefiles/vm.make:

 LFLAGS_VM += -Xlinker --version-script=$(MAPFILE)

Which uses different scripts depending on if this is a debug version or not.
For libjvm_g MAPFILE is defined in hotspot/build/bsd/makefiles/jvmg.make:
 MAPFILE = $(GAMMADIR)/build/bsd/makefiles/mapfile-vers-debug
The same file is also used by hotspot/build/bsd/makefiles/fastdebug.make.

Or hotspot/build/bsd/makefiles/mapfile-vers-product for the normal libjvm.so,
which is defined in hotspot/build/bsd/makefiles/product.make

Both mapfiles have another problem. They use JVM_handle_linux_signal
intead of JVM_handle_bsd_signal.

The mapfile scripts are also disabled for FreeBSD 4, where this was the
entry in the p6 Changelog:

2007-07-25 Wednesday 09:23  arnej
        * hotspot/build/bsd/makefiles/vm.make:
        disable version script on FreeBSD 4, causes dladdr() failure

Adding the same logic for NetBSD made it possible to execute
control/build/bsd-i586/bin/java and continue with the build.

I don't know which problems we will get while disabling the mapfiles.

Regards,
Bernd