Subject: patches for native jdk6 on amd64
To: None <netbsd-java@netbsd.org>
From: Arto Huusko <arto.huusko@pp2.inet.fi>
List: netbsd-java
Date: 11/28/2007 20:16:11
This is a multi-part message in MIME format.
--------------010607080504070807020500
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Attached is a bunch of patches to make sun jdk6 build and run
on -current NetBSD/amd64.

Patch Sun sources first with patches from

	http://www.eyesbeyond.com/freebsddom/java/jdk16.html

and then apply the attached patches, and follow the build instructions
from FreeBSD patches to build JDK. You don't need libiconv, but you
do need CUPS installed to build (or at least CUPS headers available).

The patches do this:

  - All /usr/X11R6 replaced with /usr/pkg
  - Two -L$(X11DIR) fixed to -L$(X11DIR)/lib
  - Dropped libiconv requirement
  - Added required definitions for NetBSD/amd64 to plugin and vm
    build
  - Fixed build of unpack200 binary to happen with $ORIGIN in
    rpath.
  - Don't add "soname=lib.so" to all executables
  - On NetBSD NAWK=awk

  - A few installation image builds change to use pax instead of cpio.
    The reason for this is some bug in NetBSD cpio, or more likely
    fts-family functions in libc (I built a test version of cpio with
    a few printfs here and there, and came to the conclusion that the
    bug is in fts).

    What happened is that a find command produced a list of files
    that cpio read from stdin. On every run, either through java build
    infrastructure, or manually running the commands, cpio failed in
    exactly the same way at exactly the same location. Two of the
    file names read with fts_read had been truncated, and apparently
    garbled: before NUL byte there was a byte with value 4.

    From buildlog:

cpio: Unable to open ./lib/desktop/icons/Hi^D to read (No such file or 
directory)
cpio: Unable to open ./lib/desktop/icons/Hi^D to read (No such file or 
directory)

    The "^D" is rendered by vim, meaning byte with value 4.
    The actual file name continued for 20-30 characters after "Hi".

--------------010607080504070807020500
Content-Type: text/plain;
 name="jdk16.patches"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="jdk16.patches"

--- ./deploy/make/common/Defs-bsd.gmk	2007-11-27 21:07:58.000000000 +0200
+++ ../jdk16/deploy/make/common/Defs-bsd.gmk	2007-11-27 20:26:05.000000000 +0200
@@ -23,7 +23,7 @@
 JUMP_EXE       = $(BIN_DIR)/javaws
 CLASSPATH_SEP  = $(CLASSPATH_SEPARATOR)
 PATH_SEP       = /
-X11DIR         = /usr/X11R6
+X11DIR         = /usr/pkg
 LOCALDIR       = /usr/local
 ifneq ($(OS_VENDOR), NetBSD)
 LIBS           = -L$(X11DIR)/lib -lX11 -L$(LOCALDIR)/lib -liconv
--- ./deploy/make/common/Release.gmk	2007-11-27 21:07:58.000000000 +0200
+++ ../jdk16/deploy/make/common/Release.gmk	2007-11-28 00:00:55.000000000 +0200
@@ -255,7 +255,7 @@
 	  $(CP) $(DEPLOY_COMMON_JAR) $(TMP_DEPLOY_IMAGE_DIR)/lib/; \
 	fi
 	@# Now copy plugin image into the jre image
-	$(CD) $(TMP_DEPLOY_IMAGE_DIR) ; $(FIND) . -depth -print | $(CPIO) -pdum $(JRE_IMAGE_DIR)
+	$(CD) $(TMP_DEPLOY_IMAGE_DIR) ; pax -rw -pe . $(JRE_IMAGE_DIR)
 	@# all done with plugin image
 
 ######################################################
@@ -266,7 +266,7 @@
 	@# Grab tmp-plugin-jre.
 	@#
 	$(MKDIR) -p $(JDK_IMAGE_DIR)/jre
-	$(CD) $(TMP_DEPLOY_IMAGE_DIR) ; $(FIND) . -depth -print | $(CPIO) -pdum $(JDK_IMAGE_DIR)/jre
+	$(CD) $(TMP_DEPLOY_IMAGE_DIR) ; pax -rw -pe . $(JDK_IMAGE_DIR)/jre
 	@#
 	$(MKDIR) -p $(JDK_IMAGE_DIR)/bin
 	if [ -r $(BINDIR)/HtmlConverter$(EXE_SUFFIX) ]; then \
--- ./deploy/make/plugin/adapter/oji-adapter/Makefile	2007-11-27 21:07:58.000000000 +0200
+++ ../jdk16/deploy/make/plugin/adapter/oji-adapter/Makefile	2007-11-27 20:21:58.000000000 +0200
@@ -44,7 +44,7 @@
 LIB_LOCATION=$(OUTPUTDIR)/plugin/$(LIBARCH)/ns7
 dummy:=$(shell $(MKDIR) -p $(LIB_LOCATION))
 
-X11DIR = /usr/X11R6
+X11DIR = /usr/pkg
 
 ifeq ($(PLATFORM), solaris)
 LDLIBS = -lX11 -ldl -lCrun -lc
@@ -55,7 +55,7 @@
 endif
 
 ifeq ($(PLATFORM), bsd)
-LDLIBS = -L$(X11DIR) -lX11
+LDLIBS = -L$(X11DIR)/lib -lX11
 endif
 
 ifeq ($(ARCH_DATA_MODEL), 64)
--- ./deploy/make/plugin/jvmnative/Makefile	2007-11-27 21:07:58.000000000 +0200
+++ ../jdk16/deploy/make/plugin/jvmnative/Makefile	2007-11-27 20:18:55.000000000 +0200
@@ -14,7 +14,7 @@
 
 include $(DEPLOY_TOPDIR)/make/plugin/common/Defs.gmk
 
-X11DIR = /usr/X11R6
+X11DIR = /usr/pkg
 
 ifeq ($(PLATFORM), bsd)
 LDLIBS = -L$(X11DIR)/lib -lX11
--- ./deploy/make/plugin/nscore/unix/Makefile	2007-11-27 21:07:58.000000000 +0200
+++ ../jdk16/deploy/make/plugin/nscore/unix/Makefile	2007-11-27 20:21:06.000000000 +0200
@@ -16,7 +16,7 @@
 
 include $(DEPLOY_TOPDIR)/make/plugin/common/Defs.gmk
 
-X11DIR = /usr/X11R6
+X11DIR = /usr/pkg
 
 ifeq ($(PLATFORM), linux)
 LDLIBS = -lX11 -ldl -lc
@@ -29,7 +29,7 @@
 endif
 
 ifeq ($(PLATFORM), bsd)
-LDLIBS = -L$(X11DIR) -lX11
+LDLIBS = -L$(X11DIR)/lib -lX11
 PLATFORM_DEFINE = _ALLBSD_SOURCE
 endif
 
--- ./deploy/src/plugin/share/plugin/mozilla_headers_18/nspr/md/_netbsd.cfg	2007-11-27 21:07:22.000000000 +0200
+++ ../jdk16/deploy/src/plugin/share/plugin/mozilla_headers_18/nspr/md/_netbsd.cfg	2007-11-27 22:23:09.000000000 +0200
@@ -234,6 +234,54 @@
 #define PR_BYTES_PER_WORD_LOG2   2
 #define PR_BYTES_PER_DWORD_LOG2  3
 
+#elif defined(__amd64__)
+
+#define IS_LITTLE_ENDIAN 1
+#undef  IS_BIG_ENDIAN
+#define	HAVE_LONG_LONG
+#define	HAVE_ALIGNED_DOUBLES
+#define	HAVE_ALIGNED_LONGLONGS
+#define IS_64
+
+#define PR_BYTES_PER_BYTE   1
+#define PR_BYTES_PER_SHORT  2
+#define PR_BYTES_PER_INT    4
+#define PR_BYTES_PER_INT64  8
+#define PR_BYTES_PER_LONG   8
+#define PR_BYTES_PER_FLOAT  4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD   8
+#define PR_BYTES_PER_DWORD  8
+#define PR_BYTES_PER_WORD_LOG2   3
+#define PR_BYTES_PER_DWORD_LOG2  3
+
+#define PR_BITS_PER_BYTE    8
+#define PR_BITS_PER_SHORT   16
+#define PR_BITS_PER_INT     32
+#define PR_BITS_PER_INT64   64
+#define PR_BITS_PER_LONG    64
+#define PR_BITS_PER_FLOAT   32
+#define PR_BITS_PER_DOUBLE  64
+#define PR_BITS_PER_WORD    64
+
+#define PR_BITS_PER_BYTE_LOG2   3
+#define PR_BITS_PER_SHORT_LOG2  4
+#define PR_BITS_PER_INT_LOG2    5
+#define PR_BITS_PER_INT64_LOG2  6
+#define PR_BITS_PER_LONG_LOG2   6
+#define PR_BITS_PER_FLOAT_LOG2  5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2   6
+
+#define PR_ALIGN_OF_SHORT   2
+#define PR_ALIGN_OF_INT     4
+#define PR_ALIGN_OF_LONG    8
+#define PR_ALIGN_OF_INT64   8
+#define PR_ALIGN_OF_FLOAT   4
+#define PR_ALIGN_OF_DOUBLE  8
+#define PR_ALIGN_OF_POINTER 8
+#define PR_ALIGN_OF_WORD    8
+
 #else
 
 #error Must define constants for type sizes here.
--- ./hotspot/src/os_cpu/bsd_amd64/vm/bytes_bsd_amd64.inline.hpp	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/hotspot/src/os_cpu/bsd_amd64/vm/bytes_bsd_amd64.inline.hpp	2007-11-27 20:51:40.000000000 +0200
@@ -13,6 +13,8 @@
 {
 #ifdef __OpenBSD__
   return swap16(x);
+#elif defined(__NetBSD__)
+  return bswap16(x);
 #else
   return __bswap16(x);
 #endif
@@ -22,6 +24,8 @@
 {
 #ifdef __OpenBSD__
   return swap32(x);
+#elif defined(__NetBSD__)
+  return bswap32(x);
 #else
   return __bswap32(x);
 #endif
@@ -31,6 +35,8 @@
 {
 #ifdef __OpenBSD__
   return swap64(x);
+#elif defined(__NetBSD__)
+  return bswap64(x);
 #else
   return __bswap64(x);
 #endif
--- ./hotspot/src/os_cpu/bsd_amd64/vm/os_bsd_amd64.cpp	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/hotspot/src/os_cpu/bsd_amd64/vm/os_bsd_amd64.cpp	2007-11-27 21:03:12.000000000 +0200
@@ -21,7 +21,9 @@
 #include <unistd.h>
 #include <sys/resource.h>
 #include <pthread.h>
+#ifndef	__NetBSD__
 #include <pthread_np.h>
+#endif
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <sys/utsname.h>
@@ -76,6 +78,30 @@
 #  define context_err sc_err
 # endif
 
+# ifdef __NetBSD__
+#  define context_rip uc_mcontext.__gregs[_REG_RIP]
+#  define context_rsp uc_mcontext.__gregs[_REG_URSP]
+#  define context_rax uc_mcontext.__gregs[_REG_RAX]
+#  define context_rbx uc_mcontext.__gregs[_REG_RBX]
+#  define context_rcx uc_mcontext.__gregs[_REG_RCX]
+#  define context_rdx uc_mcontext.__gregs[_REG_RDX]
+#  define context_rbp uc_mcontext.__gregs[_REG_RBP]
+#  define context_rsi uc_mcontext.__gregs[_REG_RSI]
+#  define context_rdi uc_mcontext.__gregs[_REG_RDI]
+#  define context_r8  uc_mcontext.__gregs[_REG_R8]
+#  define context_r9  uc_mcontext.__gregs[_REG_R9]
+#  define context_r10 uc_mcontext.__gregs[_REG_R10]
+#  define context_r11 uc_mcontext.__gregs[_REG_R11]
+#  define context_r12 uc_mcontext.__gregs[_REG_R12]
+#  define context_r13 uc_mcontext.__gregs[_REG_R13]
+#  define context_r14 uc_mcontext.__gregs[_REG_R14]
+#  define context_r15 uc_mcontext.__gregs[_REG_R15]
+#  define context_flags uc_mcontext.__gregs[_REG_RFL]
+#  define context_trapno uc_mcontext.__gregs[_REG_TRAPNO]
+#  define context_err uc_mcontext.__gregs[_REG_ERR]
+typedef __greg_t __register_t;
+# endif
+
 address os::current_stack_pointer()
 {
   register void *rsp __asm__ ("rsp");
--- ./j2se/make/com/sun/java/pack/Makefile	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/com/sun/java/pack/Makefile	2007-11-28 02:05:34.000000000 +0200
@@ -114,9 +114,21 @@
 	$(ECHO) "Resource files not required for Unix"
 endif
 
+# Avoid $ORIGIN in rpath for the executable on NetBSD
+# This is the only Makefile to build lib and executable, and the executable
+# in a funny way?
+ifeq ($(PLATFORM), bsd)
+  ifeq ($(OS_VENDOR), NetBSD)
+    EXELINKER=$(subst -Xlinker -rpath -Xlinker \$$ORIGIN,,$(LINKER))
+  endif
+else
+EXELINKER=$(LINKER)
+endif
+
 $(UNPACK_EXE): $(UNPACK_EXE_FILES_o) winres 
 	$(prep-target)
-	$(LINKER)  $(LDDFLAGS) $(UNPACK_EXE_FILES_o) $(RES) $(LIBCXX) $(LDOUTPUT)$(TEMPDIR)/unpack200$(EXE_SUFFIX)
+	echo unpack200 $(LINKER)
+	$(EXELINKER)  $(LDDFLAGS) $(UNPACK_EXE_FILES_o) $(RES) $(LIBCXX) $(LDOUTPUT)$(TEMPDIR)/unpack200$(EXE_SUFFIX)
 	$(CP) $(TEMPDIR)/unpack200$(EXE_SUFFIX) $(UNPACK_EXE)
 
 
--- ./j2se/make/common/Defs-bsd.gmk	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/common/Defs-bsd.gmk	2007-11-28 01:09:58.000000000 +0200
@@ -213,7 +213,9 @@
 #
 LDFLAGS_OPT     =
 LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH)
+ifdef LIBRARY
 LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX)
+endif
 LDFLAGS_DBG     =
 
 #
@@ -298,7 +300,7 @@
 override LIBTHREAD               =
 override MOOT_PRIORITIES         = true
 override NO_INTERRUPTIBLE_IO     = false
-override OPENWIN_HOME            = /usr/X11R6
+override OPENWIN_HOME            = /usr/pkg
 override OPENWIN_LIB             = $(OPENWIN_HOME)/lib
 override OTHER_M4FLAGS           = -D__GLIBC__ -DGNU_ASSEMBLER
 override SUN_CMM_SUBDIR          =
--- ./j2se/make/common/Release.gmk	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/common/Release.gmk	2007-11-27 23:29:58.000000000 +0200
@@ -783,8 +783,7 @@
 	$(RM) -r $(JDK_IMAGE_DIR)
 	$(MKDIR) -p $(JDK_IMAGE_DIR)/jre
 	@# Copy in jre directory
-	$(CD) $(JRE_IMAGE_DIR) ; $(FIND) . -depth -print \
-	      | $(CPIO) -pdum $(JDK_IMAGE_DIR)/jre
+	$(CD) $(JRE_IMAGE_DIR) ; pax -rw -pe . $(JDK_IMAGE_DIR)/jre
 	@# Make sure all directories are read/execute for everyone
 	$(CHMOD) a+rx `$(FIND) $(JDK_IMAGE_DIR) -type d`
 	$(RM) -rf $(JDK_IMAGE_DIR)/jre/man
--- ./j2se/make/common/shared/Defs-utils.gmk	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/common/shared/Defs-utils.gmk	2007-11-27 20:30:45.000000000 +0200
@@ -173,4 +173,5 @@
 # BSD specific
 ifeq ($(SYSTEM_UNAME),NetBSD)
   ECHO = echo -e
+  NAWK           = $(USRBIN_PATH)awk
 endif
--- ./j2se/make/java/instrument/Makefile	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/java/instrument/Makefile	2007-11-27 21:16:55.000000000 +0200
@@ -106,13 +106,11 @@
 endif # PLATFORM
 
 ifeq ($(PLATFORM), bsd)
-  ifeq ($(OS_VENDOR), NetBSD)
-    ICONV_DIR = /usr/pkg
-  else
+  ifneq ($(OS_VENDOR), NetBSD)
     ICONV_DIR = /usr/local
+    CPPFLAGS += -I$(ICONV_DIR)/include
+    OTHER_LDLIBS += -L$(ICONV_DIR)/lib -liconv
   endif
-  CPPFLAGS += -I$(ICONV_DIR)/include
-  OTHER_LDLIBS += -L$(ICONV_DIR)/lib -liconv
 endif
 
 #
--- ./j2se/make/java/npt/Makefile	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/java/npt/Makefile	2007-11-27 21:13:19.000000000 +0200
@@ -69,13 +69,11 @@
 
 # Add location of iconv headers
 ifeq ($(PLATFORM), bsd)
-  ifeq ($(OS_VENDOR), NetBSD)
-    ICONV_DIR = /usr/pkg
-  else
+  ifneq ($(OS_VENDOR), NetBSD)
     ICONV_DIR = /usr/local
+    CPPFLAGS += -I$(ICONV_DIR)/include
+    OTHER_LDLIBS += -L$(ICONV_DIR)/lib -liconv
   endif
-  CPPFLAGS += -I$(ICONV_DIR)/include
-  OTHER_LDLIBS += -L$(ICONV_DIR)/lib -liconv
 endif
 
 #
--- ./j2se/make/sun/awt/mawt.gmk	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/sun/awt/mawt.gmk	2007-11-27 21:58:25.000000000 +0200
@@ -227,8 +227,8 @@
 endif
 
 ifeq ($(PLATFORM), bsd)
-  CPPFLAGS += -I/usr/X11R6/include/X11/extensions \
-              -I/usr/X11R6/include
+  CPPFLAGS += -I/usr/pkg/include/X11/extensions \
+              -I/usr/pkg/include
 endif
 
 LDFLAGS += -L$(LIBDIR)/$(LIBARCH)/$(TSOBJDIR) \
--- ./j2se/make/sun/font/Makefile	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/sun/font/Makefile	2007-11-27 20:22:30.000000000 +0200
@@ -123,7 +123,7 @@
 
 # setup the list of libraries to link in...
 ifeq ($(PLATFORM), bsd)
-OTHER_INCLUDES += -I/usr/X11R6/include
+OTHER_INCLUDES += -I/usr/pkg/include
 OTHER_LDLIBS  += -lawt $(LIBM) $(LIBCXX)
 else
 ifeq ($(PLATFORM), linux)
--- ./j2se/make/sun/splashscreen/Makefile	2007-11-27 21:07:59.000000000 +0200
+++ ../jdk16/j2se/make/sun/splashscreen/Makefile	2007-11-27 21:16:11.000000000 +0200
@@ -46,15 +46,17 @@
 ifneq ($(PLATFORM), windows)
   CFLAGS += -DWITH_X11
   ifeq ($(PLATFORM), bsd)
-    ifeq ($(OS_VENDOR), NetBSD)
-      ICONV_DIR = /usr/pkg
-    else
-      ICONV_DIR = /usr/local
-    endif
     CPPFLAGS += -I$(OPENWIN_HOME)/include \
                 -I$(OPENWIN_HOME)/include/X11/extensions \
 		-I$(ICONV_DIR)/include
-    OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext -L$(ICONV_DIR)/lib -liconv $(LIBM) -pthread
+    OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext
+    ifneq ($(OS_VENDOR), NetBSD)
+      ICONV_DIR = /usr/local
+      OTHER_LDLIBS += -L$(ICONV_DIR)/lib -liconv
+    else
+      OTHER_LDLIBS += -Wl,-R$(OPENWIN_LIB)
+    endif
+    OTHER_LDLIBS += $(LIBM) -pthread
   else
     CPPFLAGS += -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions
     OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext $(LIBM) -lpthread

--------------010607080504070807020500--