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