svn commit: r496923 - in head/java/openjdk11: . files

Greg Lewis glewis at FreeBSD.org
Tue Mar 26 20:48:07 UTC 2019


Author: glewis
Date: Tue Mar 26 20:48:04 2019
New Revision: 496923
URL: https://svnweb.freebsd.org/changeset/ports/496923

Log:
  Fixes for include path, jshell, and process issues.
  
  * Put MD specific include files (e.g. jni_md.h) in a subdirectory named
    'freebsd' rather than 'bsd'. [1]
  * Remove the necessity to always have /usr/local/include in the header
    paths and linker paths.  This allows jshell to use the system iconv.h
    rather than the third party one and link correctly. [2]
  * Fix getting process commands and arguments on FreeBSD.
  * Bump PORTREVISION.
  
  All fixes need forward porting to openjdk12.
  
  PR:		236754 [1], 236759 [2]
  Submitted by:	Kurt Miller [2]

Added:
  head/java/openjdk11/files/patch-make_autoconf_flags-cflags.m4   (contents, props changed)
  head/java/openjdk11/files/patch-make_autoconf_lib-bundled.m4   (contents, props changed)
  head/java/openjdk11/files/patch-make_autoconf_lib-cups.m4   (contents, props changed)
  head/java/openjdk11/files/patch-make_autoconf_libraries.m4   (contents, props changed)
  head/java/openjdk11/files/patch-make_autoconf_platform.m4   (contents, props changed)
  head/java/openjdk11/files/patch-make_autoconf_spec.gmk.in   (contents, props changed)
  head/java/openjdk11/files/patch-make_autoconf_toolchain.m4   (contents, props changed)
  head/java/openjdk11/files/patch-make_lib_Awt2dLibraries.gmk   (contents, props changed)
  head/java/openjdk11/files/patch-src_hotspot_os_bsd_os__bsd.cpp   (contents, props changed)
  head/java/openjdk11/files/patch-src_java.base_bsd_native_libjava_ProcessHandleImpl__bsd.c   (contents, props changed)
Modified:
  head/java/openjdk11/Makefile

Modified: head/java/openjdk11/Makefile
==============================================================================
--- head/java/openjdk11/Makefile	Tue Mar 26 20:02:39 2019	(r496922)
+++ head/java/openjdk11/Makefile	Tue Mar 26 20:48:04 2019	(r496923)
@@ -2,7 +2,7 @@
 
 PORTNAME=	openjdk
 PORTVERSION=	${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_PATCH_VERSION}.${JDK_BUILD_NUMBER}.${BSD_JDK_VERSION}
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	java devel
 MASTER_SITES=	https://github.com/battleblow/openjdk-jdk11u/archive/
 PKGNAMESUFFIX?=	${JDK_MAJOR_VERSION}
@@ -38,7 +38,6 @@ MAKE_ENV=	LANG="C" \
 		CLASSPATH="" \
 		JAVA_HOME="" \
 		LD_LIBRARY_PATH="" \
-		LDFLAGS=-L${LOCALBASE}/lib \
 		CC=/usr/bin/cc \
 		CXX=/usr/bin/c++ \
 		MAKEFLAGS="" \
@@ -73,16 +72,14 @@ CONFIGURE_ARGS=	--with-boot-jdk=${BOOTSTRAPJDKDIR} \
 		--with-freetype-lib=${LOCALBASE}/lib \
 		--with-libjpeg=system \
 		--with-giflib=system \
+		--with-giflib-include=${LOCALBASE}/include \
+		--with-giflib-lib=${LOCALBASE}/lib \
 		--with-libpng=system \
 		--with-zlib=system \
 		--with-lcms=system \
-		--with-extra-cflags=-I${LOCALBASE}/include \
-		--with-extra-cxxflags=-I${LOCALBASE}/include \
-		--with-extra-ldflags=-L${LOCALBASE}/lib \
 		--with-toolchain-type=clang \
 		--x-includes=${LOCALBASE}/include \
 		--x-libraries=${LOCALBASE}/lib \
-		--with-package-path=${LOCALBASE} \
 		--with-cacerts-file=${FILESDIR}/cacerts \
 		--with-version-string=${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_PATCH_VERSION}+${JDK_BUILD_NUMBER}-${BSD_JDK_VERSION} \
 		--with-native-debug-symbols=none \
@@ -124,7 +121,8 @@ post-patch:
 	@${FIND} ${WRKSRC} -name '*.orig' -delete
 	@${CHMOD} 755 ${WRKSRC}/configure
 	@${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \
-		 ${WRKSRC}/configure
+		${WRKSRC}/configure \
+		${WRKSRC}/src/hotspot/os/bsd/os_bsd.cpp
 
 do-install:
 	@${MKDIR} ${STAGEDIR}${INSTALLDIR}

Added: head/java/openjdk11/files/patch-make_autoconf_flags-cflags.m4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-make_autoconf_flags-cflags.m4	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,11 @@
+--- make/autoconf/flags-cflags.m4
++++ make/autoconf/flags-cflags.m4
+@@ -416,7 +416,7 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_HELPER],
+   elif test "x$OPENJDK_TARGET_OS" = xaix; then
+     CFLAGS_OS_DEF_JVM="-DAIX"
+   elif test "x$OPENJDK_TARGET_OS" = xbsd; then
+-    CFLAGS_OS_DEF_JVM="-D_ALLBSD_SOURCE -D_BSDONLY_SOURCE -DPACKAGE_PATH='\"$PACKAGE_PATH\"'"
++    CFLAGS_OS_DEF_JVM="-D_ALLBSD_SOURCE -D_BSDONLY_SOURCE"
+     CFLAGS_OS_DEF_JDK="-D_ALLBSD_SOURCE -D_BSDONLY_SOURCE -D_REENTRANT"
+   elif test "x$OPENJDK_TARGET_OS" = xwindows; then
+     CFLAGS_OS_DEF_JVM="-D_WINDOWS -DWIN32 -D_JNI_IMPLEMENTATION_"

Added: head/java/openjdk11/files/patch-make_autoconf_lib-bundled.m4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-make_autoconf_lib-bundled.m4	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,99 @@
+--- make/autoconf/lib-bundled.m4
++++ make/autoconf/lib-bundled.m4
+@@ -58,18 +58,26 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBJPEG],
+ 
+   if test "x${with_libjpeg}" = "xbundled"; then
+     USE_EXTERNAL_LIBJPEG=false
++    JPEG_CFLAGS=""
++    JPEG_LIBS=""
+   elif test "x${with_libjpeg}" = "xsystem"; then
+-    AC_CHECK_HEADER(jpeglib.h, [],
+-        [ AC_MSG_ERROR([--with-libjpeg=system specified, but jpeglib.h not found!])])
+-    AC_CHECK_LIB(jpeg, jpeg_CreateDecompress, [],
+-        [ AC_MSG_ERROR([--with-libjpeg=system specified, but no libjpeg found])])
+-
++    PKG_CHECK_MODULES(JPEG, libjpeg, [LIBJPEG_FOUND=yes], [LIBJPEG_FOUND=no])
++    if test "x${LIBJPEG_FOUND}" = "xno"; then
++      AC_CHECK_HEADER(jpeglib.h, [],
++          [ AC_MSG_ERROR([--with-libjpeg=system specified, but jpeglib.h not found!])])
++      AC_CHECK_LIB(jpeg, jpeg_CreateDecompress, [],
++          [ AC_MSG_ERROR([--with-libjpeg=system specified, but no libjpeg found])])
++      JPEG_CFLAGS=""
++      JPEG_LIBS="-ljpeg"
++    fi
+     USE_EXTERNAL_LIBJPEG=true
+   else
+     AC_MSG_ERROR([Invalid use of --with-libjpeg: ${with_libjpeg}, use 'system' or 'bundled'])
+   fi
+ 
+   AC_SUBST(USE_EXTERNAL_LIBJPEG)
++  AC_SUBST(JPEG_CFLAGS)
++  AC_SUBST(JPEG_LIBS)
+ ])
+ 
+ ################################################################################
+@@ -79,6 +87,10 @@ AC_DEFUN_ONCE([LIB_SETUP_GIFLIB],
+ [
+   AC_ARG_WITH(giflib, [AS_HELP_STRING([--with-giflib],
+       [use giflib from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
++  AC_ARG_WITH(giflib-include, [AS_HELP_STRING([--with-giflib-include],
++      [specify directory for the system giflib include files])])
++  AC_ARG_WITH(giflib-lib, [AS_HELP_STRING([--with-giflib-lib],
++      [specify directory for the system giflib library])])
+ 
+   AC_MSG_CHECKING([for which giflib to use])
+   # default is bundled
+@@ -91,11 +103,40 @@ AC_DEFUN_ONCE([LIB_SETUP_GIFLIB],
+ 
+   if test "x${with_giflib}" = "xbundled"; then
+     USE_EXTERNAL_LIBGIF=false
++    GIFLIB_CFLAGS=""
++    GIFLIB_LIBS=""
+   elif test "x${with_giflib}" = "xsystem"; then
+-    AC_CHECK_HEADER(gif_lib.h, [],
+-        [ AC_MSG_ERROR([--with-giflib=system specified, but gif_lib.h not found!])])
+-    AC_CHECK_LIB(gif, DGifGetCode, [],
+-        [ AC_MSG_ERROR([--with-giflib=system specified, but no giflib found!])])
++    GIFLIB_H_FOUND=no
++    if test "x${with_giflib_include}" != x; then
++      GIFLIB_CFLAGS="-I${with_giflib_include}"
++      GIFLIB_H_FOUND=yes
++    fi
++    if test "x$GIFLIB_H_FOUND" = xno; then
++      AC_CHECK_HEADER(gif_lib.h,
++          [
++            GIFLIB_CFLAGS=""
++            GIFLIB_H_FOUND=yes
++          ])
++    fi
++    if test "x$GIFLIB_H_FOUND" = xno; then
++      AC_MSG_ERROR([--with-giflib=system specified, but gif_lib.h not found!])
++    fi
++
++    GIFLIB_LIB_FOUND=no
++    if test "x${with_giflib_lib}" != x; then
++      GIFLIB_LIBS="-L${with_giflib_lib} -lgif"
++      GIFLIB_LIB_FOUND=yes
++    fi
++    if test "x$GIFLIB_LIB_FOUND" = xno; then
++      AC_CHECK_LIB(gif, DGifGetCode,
++          [
++            GIFLIB_LIBS="-lgif"
++            GIFLIB_LIB_FOUND=yes
++          ])
++    fi
++    if test "x$GIFLIB_LIB_FOUND" = xno; then
++      AC_MSG_ERROR([--with-giflib=system specified, but no giflib found!])
++    fi
+ 
+     USE_EXTERNAL_LIBGIF=true
+   else
+@@ -103,6 +144,8 @@ AC_DEFUN_ONCE([LIB_SETUP_GIFLIB],
+   fi
+ 
+   AC_SUBST(USE_EXTERNAL_LIBGIF)
++  AC_SUBST(GIFLIB_CFLAGS)
++  AC_SUBST(GIFLIB_LIBS)
+ ])
+ 
+ ################################################################################

Added: head/java/openjdk11/files/patch-make_autoconf_lib-cups.m4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-make_autoconf_lib-cups.m4	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,17 @@
+--- make/autoconf/lib-cups.m4
++++ make/autoconf/lib-cups.m4
+@@ -75,14 +75,6 @@ AC_DEFUN_ONCE([LIB_SETUP_CUPS],
+           DEFAULT_CUPS=yes
+       ])
+     fi
+-    if test "x$CUPS_FOUND" = xno -a "x$OPENJDK_TARGET_OS" = xbsd; then
+-      AC_MSG_CHECKING([for cups headers])
+-      if test -s "${PACKAGE_PATH}/include/cups/cups.h"; then
+-        CUPS_CFLAGS="-I${PACKAGE_PATH}/include"
+-        CUPS_FOUND=yes
+-      fi
+-      AC_MSG_RESULT([$CUPS_FOUND])
+-    fi
+     if test "x$CUPS_FOUND" = xno; then
+       HELP_MSG_MISSING_DEPENDENCY([cups])
+       AC_MSG_ERROR([Could not find cups! $HELP_MSG ])

Added: head/java/openjdk11/files/patch-make_autoconf_libraries.m4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-make_autoconf_libraries.m4	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,13 @@
+--- make/autoconf/libraries.m4
++++ make/autoconf/libraries.m4
+@@ -182,8 +182,8 @@ AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS],
+ 
+   if test "x$OPENJDK_TARGET_OS" = "xbsd"; then
+     if test "x$OPENJDK_TARGET_OS_ENV" = "xbsd.openbsd"; then
+-      ICONV_CFLAGS="-I$PACKAGE_PATH/include"
+-      ICONV_LDFLAGS="-L$PACKAGE_PATH/lib"
++      ICONV_CFLAGS="-I/usr/local/include"
++      ICONV_LDFLAGS="-L/usr/local/lib"
+       ICONV_LIBS=-liconv
+     else
+       ICONV_CFLAGS=

Added: head/java/openjdk11/files/patch-make_autoconf_platform.m4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-make_autoconf_platform.m4	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,11 @@
+--- make/autoconf/platform.m4
++++ make/autoconf/platform.m4
+@@ -497,6 +497,8 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS_HELPER],
+     OPENJDK_$1_OS_INCLUDE_SUBDIR="win32"
+   elif test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
+     OPENJDK_$1_OS_INCLUDE_SUBDIR="darwin"
++  elif test "x$OPENJDK_TARGET_OS" = "xbsd"; then
++    OPENJDK_$1_OS_INCLUDE_SUBDIR=`echo ${OPENJDK_TARGET_OS_ENV} | cut -d'.' -f2`
+   fi
+   AC_SUBST(OPENJDK_$1_OS_INCLUDE_SUBDIR)
+ ])

Added: head/java/openjdk11/files/patch-make_autoconf_spec.gmk.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-make_autoconf_spec.gmk.in	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,14 @@
+--- make/autoconf/spec.gmk.in
++++ make/autoconf/spec.gmk.in
+@@ -746,7 +746,11 @@ TAR_SUPPORTS_TRANSFORM:=@TAR_SUPPORTS_TRANSFORM@
+ ENABLE_AOT:=@ENABLE_AOT@
+ ENABLE_INTREE_EC:=@ENABLE_INTREE_EC@
+ USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@
++JPEG_CFLAGS:=@JPEG_CFLAGS@
++JPEG_LIBS:=@JPEG_LIBS@
+ USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@
++GIFLIB_CFLAGS:=@GIFLIB_CFLAGS@
++GIFLIB_LIBS:=@GIFLIB_LIBS@
+ USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@
+ LIBZ_CFLAGS:=@LIBZ_CFLAGS@
+ LIBZ_LIBS:=@LIBZ_LIBS@

Added: head/java/openjdk11/files/patch-make_autoconf_toolchain.m4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-make_autoconf_toolchain.m4	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,26 @@
+--- make/autoconf/toolchain.m4
++++ make/autoconf/toolchain.m4
+@@ -998,22 +998,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
+ [
+   # The package path is used only on macosx?
+   # FIXME: clean this up, and/or move it elsewhere.
+-  AC_ARG_WITH(package-path, [AS_HELP_STRING([--with-package-path],
+-      [package path to be used for location of third party packages])])
+-  PACKAGE_PATH="$with_package_path"
+-  if test "x$PACKAGE_PATH" = x; then
+-    case $OPENJDK_TARGET_OS_ENV in
+-      bsd.freebsd|bsd.openbsd)
+-        PACKAGE_PATH=/usr/local
+-        ;;
+-      bsd.netbsd)
+-        PACKAGE_PATH=/usr/pkg
+-        ;;
+-      *)
+-        PACKAGE_PATH=/opt/local
+-        ;;
+-    esac
+-  fi
++  PACKAGE_PATH=/opt/local
+   AC_SUBST(PACKAGE_PATH)
+ 
+   # Check for extra potential brokenness.

Added: head/java/openjdk11/files/patch-make_lib_Awt2dLibraries.gmk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-make_lib_Awt2dLibraries.gmk	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,77 @@
+--- make/lib/Awt2dLibraries.gmk
++++ make/lib/Awt2dLibraries.gmk
+@@ -364,7 +364,7 @@ endif
+ ################################################################################
+ 
+ # The fast floor code loses precision.
+-LCMS_CFLAGS=-DCMS_DONT_USE_FAST_FLOOR
++LCMS_CFLAGS+=-DCMS_DONT_USE_FAST_FLOOR
+ 
+ LCMS_CFLAGS_JDKLIB := $(filter-out -xc99=%none, $(CFLAGS_JDKLIB))
+ 
+@@ -417,7 +417,6 @@ $(BUILD_LIBLCMS): $(BUILD_LIBAWT)
+ # work because we have to declare all variables as volatile in result.
+ 
+ ifeq ($(USE_EXTERNAL_LIBJPEG), true)
+-  LIBJPEG_LIBS := -ljpeg
+   BUILD_LIBJAVAJPEG_INCLUDE_FILES := \
+       imageioJPEG.c \
+       jpegdecoder.c
+@@ -425,7 +424,6 @@ ifeq ($(USE_EXTERNAL_LIBJPEG), true)
+   # as includes, instead the system headers should be used.
+   LIBJPEG_HEADERS_FROM_SRC := false
+ else
+-  LIBJPEG_LIBS :=
+   BUILD_LIBJAVAJPEG_INCLUDE_FILES :=
+ endif
+ 
+@@ -433,12 +431,12 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJAVAJPEG, \
+     NAME := javajpeg, \
+     INCLUDE_FILES := $(BUILD_LIBJAVAJPEG_INCLUDE_FILES), \
+     OPTIMIZATION := HIGHEST, \
+-    CFLAGS := $(CFLAGS_JDKLIB), \
++    CFLAGS := $(CFLAGS_JDKLIB) $(JPEG_CFLAGS), \
+     HEADERS_FROM_SRC := $(LIBJPEG_HEADERS_FROM_SRC), \
+     DISABLED_WARNINGS_gcc := clobbered implicit-fallthrough shift-negative-value, \
+     LDFLAGS := $(LDFLAGS_JDKLIB) \
+         $(call SET_SHARED_LIBRARY_ORIGIN), \
+-    LIBS := $(LIBJPEG_LIBS) $(JDKLIB_LIBS), \
++    LIBS := $(JDKLIB_LIBS) $(JPEG_LIBS), \
+     LIBS_windows := $(WIN_JAVA_LIB) jvm.lib, \
+ ))
+ 
+@@ -766,7 +764,6 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
+     LIBSPLASHSCREEN_HEADER_DIRS += libsplashscreen/giflib
+   else
+     LIBSPLASHSCREEN_EXCLUDES := giflib
+-    GIFLIB_LIBS := -lgif
+   endif
+ 
+   ifeq ($(USE_EXTERNAL_LIBJPEG), false)
+@@ -774,8 +771,6 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
+     # additions to this library, and this was not done previously in the build.
+     # LIBSPLASHSCREEN_EXTRA_SRC += libjavajpeg
+     LIBSPLASHSCREEN_EXTRA_SRC += $(TOPDIR)/src/java.desktop/share/native/libjavajpeg
+-  else
+-    LIBJPEG_LIBS := -ljpeg
+   endif
+ 
+   ifeq ($(USE_EXTERNAL_LIBPNG), false)
+@@ -855,7 +850,7 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
+       EXCLUDES := $(LIBSPLASHSCREEN_EXCLUDES), \
+       OPTIMIZATION := LOW, \
+       CFLAGS := $(CFLAGS_JDKLIB) $(LIBSPLASHSCREEN_CFLAGS) \
+-          $(GIFLIB_CFLAGS) $(LIBJPEG_CFLAGS) $(PNG_CFLAGS) $(LIBZ_CFLAGS), \
++          $(GIFLIB_CFLAGS) $(JPEG_CFLAGS) $(PNG_CFLAGS) $(LIBZ_CFLAGS), \
+       EXTRA_HEADER_DIRS := $(LIBSPLASHSCREEN_HEADER_DIRS), \
+       DISABLED_WARNINGS_gcc := sign-compare type-limits unused-result \
+           maybe-uninitialized shift-negative-value implicit-fallthrough, \
+@@ -869,7 +864,7 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
+       LDFLAGS_windows := -delayload:user32.dll, \
+       LDFLAGS_bsd := $(ICONV_LDFLAGS), \
+       LIBS := $(JDKLIB_LIBS) $(LIBSPLASHSCREEN_LIBS) $(LIBZ_LIBS) \
+-          $(GIFLIB_LIBS) $(LIBJPEG_LIBS) $(PNG_LIBS), \
++          $(GIFLIB_LIBS) $(JPEG_LIBS) $(PNG_LIBS), \
+       LIBS_aix := -liconv, \
+   ))
+ 

Added: head/java/openjdk11/files/patch-src_hotspot_os_bsd_os__bsd.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-src_hotspot_os_bsd_os__bsd.cpp	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,14 @@
+--- src/hotspot/os/bsd/os_bsd.cpp
++++ src/hotspot/os/bsd/os_bsd.cpp
+@@ -377,8 +377,10 @@ void os::init_system_properties_values() {
+ #ifndef DEFAULT_LIBPATH
+ #ifdef __APPLE__
+   #define DEFAULT_LIBPATH "/lib:/usr/lib"
++#elif defined(__NetBSD__)
++  #define DEFAULT_LIBPATH "/usr/lib:/usr/pkg/lib"
+ #else
+-  #define DEFAULT_LIBPATH "/usr/lib:" PACKAGE_PATH "/lib"
++  #define DEFAULT_LIBPATH "/usr/lib:%%LOCALBASE%%/lib"
+ #endif
+ #endif
+ 

Added: head/java/openjdk11/files/patch-src_java.base_bsd_native_libjava_ProcessHandleImpl__bsd.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk11/files/patch-src_java.base_bsd_native_libjava_ProcessHandleImpl__bsd.c	Tue Mar 26 20:48:04 2019	(r496923)
@@ -0,0 +1,303 @@
+--- src/java.base/bsd/native/libjava/ProcessHandleImpl_bsd.c
++++ src/java.base/bsd/native/libjava/ProcessHandleImpl_bsd.c
+@@ -41,7 +41,8 @@
+ #include <sys/sysctl.h>
+ 
+ #ifdef __FreeBSD__
+-#include <sys/user.h> // For kinfo_proc
++#include <sys/param.h> // For MAXPATHLEN
++#include <sys/user.h>  // For kinfo_proc
+ #endif
+ 
+ #if defined(__OpenBSD__)
+@@ -109,8 +110,14 @@ jint os_getChildren(JNIEnv *env, jlong jpid, jlongArray jarray,
+     }
+ 
+     // Get buffer size needed to read all processes
++#if defined(__OpenBSD__)
++    u_int namelen = 6;
++    int mib[6] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0, sizeof(struct kinfo_proc), 0};
++#else
++    u_int namelen = 4;
+     int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
+-    if (sysctl(mib, 4, NULL, &bufSize, NULL, 0) < 0) {
++#endif
++    if (sysctl(mib, namelen, NULL, &bufSize, NULL, 0) < 0) {
+         JNU_ThrowByNameWithLastError(env,
+             "java/lang/RuntimeException", "sysctl failed");
+         return -1;
+@@ -123,8 +130,12 @@ jint os_getChildren(JNIEnv *env, jlong jpid, jlongArray jarray,
+         return -1;
+     }
+ 
++#if defined(__OpenBSD__)
++    mib[5] = bufSize / sizeof(struct kinfo_proc);
++#endif
++
+     // Read process info for all processes
+-    if (sysctl(mib, 4, buffer, &bufSize, NULL, 0) < 0) {
++    if (sysctl(mib, namelen, buffer, &bufSize, NULL, 0) < 0) {
+         JNU_ThrowByNameWithLastError(env,
+             "java/lang/RuntimeException", "sysctl failed");
+         free(buffer);
+@@ -204,9 +215,15 @@ pid_t os_getParentPidAndTimings(JNIEnv *env, pid_t jpid,
+     size_t bufSize = sizeof kp;
+ 
+     // Read the process info for the specific pid
++#if defined(__OpenBSD__)
++    u_int namelen = 6;
++    int mib[6] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid, bufSize, 1};
++#else
++    u_int namelen = 4;
+     int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
++#endif
+ 
+-    if (sysctl(mib, 4, &kp, &bufSize, NULL, 0) == -1) {
++    if (sysctl(mib, namelen, &kp, &bufSize, NULL, 0) == -1) {
+         /*
+          * Check errno and throw an exception only if appropriate.
+          *
+@@ -232,13 +249,13 @@ pid_t os_getParentPidAndTimings(JNIEnv *env, pid_t jpid,
+         ppid = kp.KI_PPID;
+     }
+ 
+-    // Get cputime if for current process
+-    if (pid == getpid()) {
+ #ifdef __OpenBSD__
+-        jlong microsecs = kp.p_uutime_sec * 1000 * 1000 + kp.p_uutime_usec +
+-            kp.p_ustime_sec * 1000 * 1000 + kp.p_ustime_usec;
+-        *totalTime = microsecs * 1000;
++    jlong microsecs = kp.p_uutime_sec * 1000 * 1000 + kp.p_uutime_usec +
++        kp.p_ustime_sec * 1000 * 1000 + kp.p_ustime_usec;
++    *totalTime = microsecs * 1000;
+ #else
++    // Get cputime if for current process
++    if (pid == getpid()) {
+         struct rusage usage;
+         if (getrusage(RUSAGE_SELF, &usage) == 0) {
+           jlong microsecs =
+@@ -246,8 +263,8 @@ pid_t os_getParentPidAndTimings(JNIEnv *env, pid_t jpid,
+               usage.ru_stime.tv_sec * 1000 * 1000 + usage.ru_stime.tv_usec;
+           *totalTime = microsecs * 1000;
+         }
+-#endif
+     }
++#endif
+ 
+     return ppid;
+ }
+@@ -260,9 +277,15 @@ static uid_t getUID(pid_t pid) {
+     size_t bufSize = sizeof kp;
+ 
+     // Read the process info for the specific pid
++#if defined(__OpenBSD__)
++    u_int namelen = 6;
++    int mib[6] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid, bufSize, 1};
++#else
++    u_int namelen = 4;
+     int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
++#endif
+ 
+-    if (sysctl(mib, 4, &kp, &bufSize, NULL, 0) == 0) {
++    if (sysctl(mib, namelen, &kp, &bufSize, NULL, 0) == 0) {
+         if (bufSize > 0 && kp.KI_PID == pid) {
+             return kp.KI_UID;
+         }
+@@ -275,22 +298,121 @@ static uid_t getUID(pid_t pid) {
+  * into the Info object.
+  */
+ void os_getCmdlineAndUserInfo(JNIEnv *env, jobject jinfo, pid_t pid) {
+-    int mib[4], maxargs, nargs, i;
++    int mib[4], nargs, i;
+     size_t size;
+-    char *args, *cp, *sp, *np;
++    char *args;
+ 
+     // Get the UID first. This is done here because it is cheap to do it here
+     // on other platforms like Linux/Solaris/AIX where the uid comes from the
+     // same source like the command line info.
+     unix_getUserInfo(env, jinfo, getUID(pid));
+ 
++#ifdef __OpenBSD__
++    // Get the buffer size needed
++    mib[0] = CTL_KERN;
++    mib[1] = KERN_PROC_ARGS;
++    mib[2] = pid;
++    mib[3] = KERN_PROC_ARGV;
++
++    if (sysctl(mib, 4, NULL, &size, NULL, 0) == -1) {
++        JNU_ThrowByNameWithLastError(env,
++            "java/lang/RuntimeException", "sysctl failed");
++        return;
++    }
++
++    // Allocate space for args and get the arguments
++    args = (char *)malloc(size);
++    if (args == NULL) {
++        JNU_ThrowOutOfMemoryError(env, "malloc failed");
++        return;
++    }
++
++    do {            // a block to break out of on error
++        char **argv;
++        jstring cmdexe = NULL;
++        jclass clazzString;
++        jobject argsArray;
++
++        if (sysctl(mib, 4, args, &size, NULL, 0) == -1) {
++            if (errno != EINVAL) {
++                JNU_ThrowByNameWithLastError(env,
++                    "java/lang/RuntimeException", "sysctl failed");
++            }
++            break;
++        }
++
++        // count the number of argv elements
++        argv = (char **)args;
++        nargs = 0;
++        while (*argv++)
++            nargs++;
++
++        if (nargs < 1)
++            break;
++
++        // reset argv and store command executable path
++        argv = (char **)args;
++        if ((cmdexe = JNU_NewStringPlatform(env, *argv++)) == NULL)
++            break;
++        (*env)->SetObjectField(env, jinfo, ProcessHandleImpl_Info_commandID, cmdexe);
++        if ((*env)->ExceptionCheck(env))
++            break;
++        nargs--;
++
++        // process remaining arguments
++        // Create a String array for nargs elements
++        if ((clazzString = JNU_ClassString(env)) == NULL)
++            break;
++        if ((argsArray = (*env)->NewObjectArray(env, nargs, clazzString, NULL)) == NULL)
++            break;
++
++        for (i = 0; i < nargs; i++) {
++            jstring str;
++            if ((str = JNU_NewStringPlatform(env, argv[i])) == NULL)
++                break;
++
++            (*env)->SetObjectArrayElement(env, argsArray, i, str);
++            if ((*env)->ExceptionCheck(env))
++                break;
++        }
++        if (i == nargs) // no errors in for loop?
++           (*env)->SetObjectField(env, jinfo, ProcessHandleImpl_Info_argumentsID, argsArray);
++    } while (0);
++    // Free the arg buffer
++    free(args);
++#else
++    int maxargs;
++    char cmd[MAXPATHLEN];
++    jstring cmdexe = NULL;
++
++    // Get the resolved name of the executable
++    size = sizeof(cmd);
++    mib[0] = CTL_KERN;
++    mib[1] = KERN_PROC;
++    mib[2] = KERN_PROC_PATHNAME;
++    mib[3] = pid;
++    if (sysctl(mib, 4, cmd, &size, NULL, 0) == -1) {
++        if (errno != EINVAL && errno != ESRCH && errno != EPERM) {
++            JNU_ThrowByNameWithLastError(env,
++                "java/lang/RuntimeException", "sysctl failed");
++        }
++        return;
++    }
++    // Make sure it is null terminated
++    cmd[MAXPATHLEN - 1] = '\0';
++
++    // Store the command executable
++    if ((cmdexe = JNU_NewStringPlatform(env, cmd)) == NULL) {
++        return;
++    }
++
+     // Get the maximum size of the arguments
+     mib[0] = CTL_KERN;
+     mib[1] = KERN_ARGMAX;
+     size = sizeof(maxargs);
+     if (sysctl(mib, 2, &maxargs, &size, NULL, 0) == -1) {
+-            JNU_ThrowByNameWithLastError(env,
+-                "java/lang/RuntimeException", "sysctl failed");
++        JNU_ThrowByNameWithLastError(env,
++            "java/lang/RuntimeException", "sysctl failed");
+         return;
+     }
+ 
+@@ -301,51 +423,44 @@ void os_getCmdlineAndUserInfo(JNIEnv *env, jobject jinfo, pid_t pid) {
+         return;
+     }
+ 
+-    do {            // a block to break out of on error
+-        char *argsEnd;
+-        jstring cmdexe = NULL;
+-        unsigned namelen;
++    // A block to break out of on error
++    do {
++        char *cp, *argsEnd = NULL;
+ 
+         mib[0] = CTL_KERN;
+-#if defined(__OpenBSD__)
+-        mib[1] = KERN_PROC_ARGS;
+-        mib[2] = pid;
+-        namelen = 3;
+-#elif defined(__FreeBSD__)
+-        mib[0] = CTL_KERN;
+         mib[1] = KERN_PROC;
+         mib[2] = KERN_PROC_ARGS;
+         mib[3] = pid;
+-        namelen = 4;
+-#endif
+         size = (size_t) maxargs;
+-        if (sysctl(mib, namelen, args, &size, NULL, 0) == -1) {
+-            if (errno != EINVAL) {
++        if (sysctl(mib, 4, args, &size, NULL, 0) == -1) {
++            if (errno != EINVAL && errno != ESRCH && errno != EPERM) {
+                 JNU_ThrowByNameWithLastError(env,
+                     "java/lang/RuntimeException", "sysctl failed");
+             }
+             break;
+         }
+-        memcpy(&nargs, args, sizeof(nargs));
+ 
+-        cp = &args[sizeof(nargs)];      // Strings start after nargs
+-        argsEnd = &args[size];
++        // At this point args should hold a flattened argument string with
++        // arguments delimited by NUL and size should hold the overall length
++        // of the string
+ 
+-        // Store the command executable path
+-        if ((cmdexe = JNU_NewStringPlatform(env, cp)) == NULL) {
+-            break;
+-        }
++        // Make sure the string is NUL terminated
++        args[size] = '\0';
+ 
+-        // Skip trailing nulls after the executable path
+-        for (cp = cp + strnlen(cp, argsEnd - cp); cp < argsEnd; cp++) {
+-            if (*cp != '\0') {
+-                break;
+-            }
++        // Count the number of arguments
++        nargs = 0;
++        argsEnd = &args[size];
++        for (cp = args; *cp != '\0' && (cp < argsEnd); nargs++) {
++            cp += strnlen(cp, (argsEnd - cp)) + 1;
+         }
+ 
+-        unix_fillArgArray(env, jinfo, nargs, cp, argsEnd, cmdexe, NULL);
++        // Copy over all the args
++        cp = args;
++        unix_fillArgArray(env, jinfo, nargs, cp, argsEnd, cmdexe, args);
+     } while (0);
++
+     // Free the arg buffer
+     free(args);
++#endif
+ }
+ 


More information about the svn-ports-all mailing list