Index: head/java/openjdk7/Makefile =================================================================== --- head/java/openjdk7/Makefile (revision 438481) +++ head/java/openjdk7/Makefile (revision 438482) @@ -1,219 +1,219 @@ # Created by: Greg Lewis # $FreeBSD$ PORTNAME= openjdk PORTVERSION= ${JDK_MAJOR_VERSION}.${PORT_MINOR_VERSION}.${PORT_BUILD_NUMBER} -PORTREVISION= 3 +PORTREVISION= 4 PORTEPOCH= 1 CATEGORIES= java devel MASTER_SITES= http://download.java.net/openjdk/jdk${JDK_MAJOR_VERSION}u${JDK_MINOR_VERSION}/promoted/b${JDK_BUILD_NUMBER}/ \ http://download.java.net/jaxp/1.4.5/:jaxp \ http://icedtea.classpath.org/download/drops/:jaxp \ http://download.java.net/glassfish/components/jax-ws/openjdk/jdk7/:jaxws \ http://icedtea.classpath.org/download/drops/:jaxws \ https://java.net/downloads/jax-ws/JDK7/:jaf \ http://icedtea.classpath.org/download/drops/:jaf \ APACHE/ant/binaries/:ant PATCH_SITES= LOCAL/glewis/openjdk7 DISTFILES= ${JDK_SRC_DISTFILE}${EXTRACT_SUFX} \ ${ANT_DISTFILE}${EXTRACT_SUFX}:ant EXTRACT_ONLY= ${JDK_SRC_DISTFILE}${EXTRACT_SUFX} \ ${ANT_DISTFILE}${EXTRACT_SUFX} PATCHFILES= patch-7u45-b30.xz \ patch-7u51-b30.xz \ patch-7u55-b31.xz \ patch-7u60-b30.xz \ patch-7u65-b31.xz \ patch-7u71-b14.xz \ patch-7u76-b31.xz \ patch-7u80-b32.xz \ patch-7u85-b02.xz \ patch-7u91-b02.xz \ patch-7u95-b00.xz \ patch-7u101-b00.xz \ patch-7u111-b01.xz MAINTAINER?= glewis@FreeBSD.org COMMENT?= Java Development Kit 7 LICENSE= GPLv2 WRKSRC= ${WRKDIR}/${PORTNAME} USES= compiler dos2unix iconv gmake zip # Even when not building with X11 support, openjdk7 requires Xrender, X11, and # Xt headers. X11_BUILD_DEPENDS_OFF+= ${LOCALBASE}/libdata/pkgconfig/x11.pc:x11/libX11 X11_BUILD_DEPENDS_OFF+= ${LOCALBASE}/libdata/pkgconfig/xext.pc:x11/libXext X11_BUILD_DEPENDS_OFF+= ${LOCALBASE}/libdata/pkgconfig/xrender.pc:x11/libXrender X11_BUILD_DEPENDS_OFF+= ${LOCALBASE}/libdata/pkgconfig/xt.pc:x11-toolkits/libXt # Add more X11 build deps and runtime deps when X11 is enabled X11_LIB_DEPENDS+= libX11.so.6:x11/libX11 X11_LIB_DEPENDS+= libXext.so.6:x11/libXext X11_LIB_DEPENDS+= libXi.so.6:x11/libXi X11_LIB_DEPENDS+= libXrender.so.1:x11/libXrender X11_LIB_DEPENDS+= libXt.so.6:x11-toolkits/libXt X11_LIB_DEPENDS+= libXtst.so.6:x11/libXtst X11_MAKE_ENV_OFF= BUILD_HEADLESS_ONLY=1 MAKE_ARGS= CC=${CC:Q} CXX=${CXX:Q} HOST_CC=${CC:Q} OPTIONS_DEFINE= POLICY TZUPDATE X11 OPTIONS_DEFAULT= POLICY TZUPDATE X11 DEBUG_DESC= Enable extra debugging info POLICY_DESC= Install the Unlimited Strength Policy Files TZUPDATE_DESC= Update the time zone data JAVAVMS_COMMENT= OpenJDK${JDK_MAJOR_VERSION} .if !defined(BUILD_JRE) OPTIONS_DEFINE+= DEBUG INSTALLDIR= ${PREFIX}/${PORTNAME}${JDK_MAJOR_VERSION} .else JAVAVMS_COMMENT+= JRE INSTALLDIR= ${PREFIX}/${PORTNAME}${JDK_MAJOR_VERSION}-jre .endif PORT_MINOR_VERSION= 111 PORT_BUILD_NUMBER= 01 JDK_MAJOR_VERSION= 7 JDK_MINOR_VERSION= 40 JDK_BUILD_NUMBER= 43 JDK_BUILD_DATE= 26_aug_2013 JDK_SRC_DISTFILE= ${PORTNAME}-${JDK_MAJOR_VERSION}u${JDK_MINOR_VERSION}-fcs-src-b${JDK_BUILD_NUMBER}-${JDK_BUILD_DATE} # Use our own version of ant to avoid circular dependencies ANT_VERSION= 1.9.7 ANT_DISTFILE= apache-ant-${ANT_VERSION}-bin LIB_DEPENDS+= libasound.so:audio/alsa-lib \ libfontconfig.so:x11-fonts/fontconfig \ libfreetype.so:print/freetype2 BUILD_DEPENDS+= zip:archivers/zip \ ${UNZIP_CMD}:archivers/unzip \ ${LOCALBASE}/include/cups/cups.h:print/cups RUN_DEPENDS+= javavm:java/javavmwrapper \ dejavu>0:x11-fonts/dejavu DOS2UNIX_FILES= jdk/src/share/classes/com/sun/org/apache/xml/internal/security/resource/xmlsecurity_en.properties OPENJDK_OSARCH= bsd-${ARCH:S/i386/i586/} NOPRECIOUSMAKEVARS= yes ONLY_FOR_ARCHS= i386 amd64 _MAKE_JOBS= # MAKE_ENV+= JAVA_HOME="" \ CLASSPATH="" \ LD_LIBRARY_PATH="" \ MAKEFLAGS="" \ ALT_BOOTDIR="${BOOTSTRAPJDKDIR}" \ ALT_FREETYPE_HEADERS_PATH="${LOCALBASE}/include" \ ALT_FREETYPE_LIB_PATH="${LOCALBASE}/lib" \ ALT_CUPS_HEADERS_PATH="${LOCALBASE}/include" \ ALT_X11_PATH="${LOCALBASE}" \ ALT_PKG_PATH="${LOCALBASE}" \ ALT_PACKAGE_PATH="${LOCALBASE}" \ ANT_HOME="${WRKDIR}/apache-ant-${ANT_VERSION}" \ JAVACMD=${BOOTSTRAPJDKDIR}/bin/java \ X11DIR="${LOCALBASE}" \ LOCALDIR="${LOCALBASE}" \ COMPILER_WARNINGS_FATAL="false" \ NO_DOCS="true" \ SKIP_COMPARE_IMAGES="true" \ SKIP_FASTDEBUG_BUILD="true" \ SKIP_DEBUG_BUILD="true" \ ZIP_DEBUGINFO_FILES=0 \ ENABLE_FULL_DEBUG_SYMBOLS=0 \ PTHREAD_LIBS="-lpthread" \ MILESTONE="fcs" \ JDK_MICRO_VERSION="0_${PORT_MINOR_VERSION}" \ BUILD_NUMBER="b${PORT_BUILD_NUMBER}" MAKE_ENV+= HOTSPOT_BUILD_JOBS=${MAKE_JOBS_NUMBER} BOOTSTRAP_JDKS= ${LOCALBASE}/openjdk7 \ ${LOCALBASE}/openjdk6 \ ${LOCALBASE}/bootstrap-openjdk DEBUG_MAKE_ENV= ALT_OBJCOPY=${NONEXISTENT} POLICY_MAKE_ENV= UNLIMITED_CRYPTO=1 TZUPDATE_RUN_DEPENDS= java-zoneinfo>0:java/java-zoneinfo .include # do we have valid native jdk installed? .for BJDK in ${BOOTSTRAP_JDKS} . if !defined(BOOTSTRAPJDKDIR) && exists(${BJDK}/bin/javac) BOOTSTRAPJDKDIR= ${BJDK} . endif .endfor # if no valid jdk found, set dependency .if !defined(BOOTSTRAPJDKDIR) BOOTSTRAPJDKDIR?= ${LOCALBASE}/bootstrap-openjdk BUILD_DEPENDS+= ${BOOTSTRAPJDKDIR}/bin/javac:java/bootstrap-openjdk .endif .include # GCC is broken with PCH: https://lists.freebsd.org/pipermail/svn-src-all/2015-March/101722.html .if ${COMPILER_TYPE} == gcc MAKE_ENV+= USE_PRECOMPILED_HEADER=0 .endif .if empty(ICONV_LIB) MAKE_ENV+= EXTRA_CFLAGS=-DLIBICONV_PLUG .endif post-patch: @${REINPLACE_CMD} "s|%%LOCALBASE%%|${LOCALBASE}|" \ ${WRKSRC}/hotspot/src/os/bsd/vm/os_bsd.cpp \ ${WRKSRC}/jdk/src/share/classes/sun/print/PSPrinterJob.java .if empty(ICONV_LIB) @${REINPLACE_CMD} 's| -liconv||' \ ${WRKSRC}/Makefile \ ${WRKSRC}/jdk/make/sun/splashscreen/Makefile \ ${WRKSRC}/jdk/make/java/npt/Makefile \ ${WRKSRC}/jdk/make/java/instrument/Makefile .endif .if ${PORT_OPTIONS:MTZUPDATE} pre-install: @# Update time zones .if !defined(BUILD_JRE) @${RM} -r ${WRKSRC}/build/${OPENJDK_OSARCH}/j2sdk-image/jre/lib/zi @${LN} -s -f ${LOCALBASE}/share/java/zi \ ${WRKSRC}/build/${OPENJDK_OSARCH}/j2sdk-image/jre/lib .else @${RM} -r ${WRKSRC}/build/${OPENJDK_OSARCH}/j2re-image/lib/zi @${LN} -s -f ${LOCALBASE}/share/java/zi \ ${WRKSRC}/build/${OPENJDK_OSARCH}/j2re-image/lib .endif .endif do-install: @${MKDIR} ${STAGEDIR}${INSTALLDIR} .if !defined(BUILD_JRE) cd ${WRKSRC}/build/${OPENJDK_OSARCH}/j2sdk-image && \ ${PAX} -rw . ${STAGEDIR}${INSTALLDIR} ${INSTALL_DATA} \ ${WRKSRC}/build/${OPENJDK_OSARCH}/btjars/compilefontconfig.jar \ ${WRKSRC}/build/${OPENJDK_OSARCH}/btjars/javazic.jar \ ${STAGEDIR}${INSTALLDIR}/jre/lib/ ${INSTALL_DATA} ${FILESDIR}/cacerts \ ${STAGEDIR}${INSTALLDIR}/jre/lib/security/cacerts .else cd ${WRKSRC}/build/${OPENJDK_OSARCH}/j2re-image && \ ${PAX} -rw . ${STAGEDIR}${INSTALLDIR} ${INSTALL_DATA} ${FILESDIR}/cacerts \ ${STAGEDIR}${INSTALLDIR}/lib/security/cacerts .endif @${ECHO} "@javavm ${INSTALLDIR}/bin/java" >> ${TMPPLIST} @${FIND} -s ${STAGEDIR}${INSTALLDIR} -not -type d | ${SORT} | \ ${SED} -e 's#^${STAGEDIR}${PREFIX}/##' >> ${TMPPLIST} @${FIND} ${STAGEDIR}${INSTALLDIR} -type d -empty | ${SORT} -r | \ ${SED} -e 's,^${STAGEDIR}${PREFIX}/,@dir ,' >> ${TMPPLIST} .include Index: head/java/openjdk7/files/patch-hotspot_src_os_bsd_vm_os__bsd.cpp =================================================================== --- head/java/openjdk7/files/patch-hotspot_src_os_bsd_vm_os__bsd.cpp (nonexistent) +++ head/java/openjdk7/files/patch-hotspot_src_os_bsd_vm_os__bsd.cpp (revision 438482) @@ -0,0 +1,239 @@ +--- hotspot/src/os/bsd/vm/os_bsd.cpp.orig 2013-09-06 18:22:03 UTC ++++ hotspot/src/os/bsd/vm/os_bsd.cpp +@@ -163,6 +163,7 @@ Mutex* os::Bsd::_createThread_lock = NUL + #endif + pthread_t os::Bsd::_main_thread; + int os::Bsd::_page_size = -1; ++pthread_condattr_t os::Bsd::_condattr[1]; + #ifndef _ALLBSD_SOURCE + bool os::Bsd::_is_floating_stack = false; + bool os::Bsd::_is_NPTL = false; +@@ -1602,7 +1603,10 @@ void os::Bsd::clock_init() { + ::clock_gettime(CLOCK_MONOTONIC, &tp) == 0) { + // yes, monotonic clock is supported + _clock_gettime = ::clock_gettime; ++ return; + } ++ warning("No monotonic clock was available - timed services may " \ ++ "be adversely affected if the time-of-day clock changes"); + } + #else + void os::Bsd::clock_init() { +@@ -1688,7 +1692,7 @@ void os::Bsd::fast_thread_clock_init() { + jlong os::javaTimeNanos() { + if (Bsd::supports_monotonic_clock()) { + struct timespec tp; +- int status = Bsd::clock_gettime(CLOCK_MONOTONIC, &tp); ++ int status = ::clock_gettime(CLOCK_MONOTONIC, &tp); + assert(status == 0, "gettime error"); + jlong result = jlong(tp.tv_sec) * (1000 * 1000 * 1000) + jlong(tp.tv_nsec); + return result; +@@ -4679,6 +4683,25 @@ void os::init(void) { + Bsd::clock_init(); + initial_time_count = os::elapsed_counter(); + ++ // pthread_condattr initialization for monotonic clock ++ int status; ++ pthread_condattr_t* _condattr = os::Bsd::condAttr(); ++ if ((status = pthread_condattr_init(_condattr)) != 0) { ++ fatal(err_msg("pthread_condattr_init: %s", strerror(status))); ++ } ++ // Only set the clock if CLOCK_MONOTONIC is available ++ if (Bsd::supports_monotonic_clock()) { ++ if ((status = pthread_condattr_setclock(_condattr, CLOCK_MONOTONIC)) != 0) { ++ if (status == EINVAL) { ++ warning("Unable to use monotonic clock with relative timed-waits" \ ++ " - changes to the time-of-day clock may have adverse affects"); ++ } else { ++ fatal(err_msg("pthread_condattr_setclock: %s", strerror(status))); ++ } ++ } ++ } ++ // else it defaults to CLOCK_REALTIME ++ + #ifdef __APPLE__ + // XXXDARWIN + // Work around the unaligned VM callbacks in hotspot's +@@ -5599,21 +5622,36 @@ void os::pause() { + + static struct timespec* compute_abstime(struct timespec* abstime, jlong millis) { + if (millis < 0) millis = 0; +- struct timeval now; +- int status = gettimeofday(&now, NULL); +- assert(status == 0, "gettimeofday"); ++ + jlong seconds = millis / 1000; + millis %= 1000; + if (seconds > 50000000) { // see man cond_timedwait(3T) + seconds = 50000000; + } +- abstime->tv_sec = now.tv_sec + seconds; +- long usec = now.tv_usec + millis * 1000; +- if (usec >= 1000000) { +- abstime->tv_sec += 1; +- usec -= 1000000; ++ ++ if (os::Bsd::supports_monotonic_clock()) { ++ struct timespec now; ++ int status = ::clock_gettime(CLOCK_MONOTONIC, &now); ++ assert_status(status == 0, status, "clock_gettime"); ++ abstime->tv_sec = now.tv_sec + seconds; ++ long nanos = now.tv_nsec + millis * NANOSECS_PER_MILLISEC; ++ if (nanos >= NANOSECS_PER_SEC) { ++ abstime->tv_sec += 1; ++ nanos -= NANOSECS_PER_SEC; ++ } ++ abstime->tv_nsec = nanos; ++ } else { ++ struct timeval now; ++ int status = gettimeofday(&now, NULL); ++ assert(status == 0, "gettimeofday"); ++ abstime->tv_sec = now.tv_sec + seconds; ++ long usec = now.tv_usec + millis * 1000; ++ if (usec >= 1000000) { ++ abstime->tv_sec += 1; ++ usec -= 1000000; ++ } ++ abstime->tv_nsec = usec * 1000; + } +- abstime->tv_nsec = usec * 1000; + return abstime; + } + +@@ -5705,7 +5743,7 @@ int os::PlatformEvent::park(jlong millis + status = os::Bsd::safe_cond_timedwait(_cond, _mutex, &abst); + if (status != 0 && WorkAroundNPTLTimedWaitHang) { + pthread_cond_destroy (_cond); +- pthread_cond_init (_cond, NULL) ; ++ pthread_cond_init (_cond, os::Bsd::condAttr()) ; + } + assert_status(status == 0 || status == EINTR || + status == ETIMEDOUT, +@@ -5806,32 +5844,50 @@ void os::PlatformEvent::unpark() { + + static void unpackTime(struct timespec* absTime, bool isAbsolute, jlong time) { + assert (time > 0, "convertTime"); ++ time_t max_secs = 0; + +- struct timeval now; +- int status = gettimeofday(&now, NULL); +- assert(status == 0, "gettimeofday"); ++ if (!os::Bsd::supports_monotonic_clock() || isAbsolute) { ++ struct timeval now; ++ int status = gettimeofday(&now, NULL); ++ assert(status == 0, "gettimeofday"); + +- time_t max_secs = now.tv_sec + MAX_SECS; ++ max_secs = now.tv_sec + MAX_SECS; + +- if (isAbsolute) { +- jlong secs = time / 1000; +- if (secs > max_secs) { +- absTime->tv_sec = max_secs; +- } +- else { +- absTime->tv_sec = secs; ++ if (isAbsolute) { ++ jlong secs = time / 1000; ++ if (secs > max_secs) { ++ absTime->tv_sec = max_secs; ++ } else { ++ absTime->tv_sec = secs; ++ } ++ absTime->tv_nsec = (time % 1000) * NANOSECS_PER_MILLISEC; ++ } else { ++ jlong secs = time / NANOSECS_PER_SEC; ++ if (secs >= MAX_SECS) { ++ absTime->tv_sec = max_secs; ++ absTime->tv_nsec = 0; ++ } else { ++ absTime->tv_sec = now.tv_sec + secs; ++ absTime->tv_nsec = (time % NANOSECS_PER_SEC) + now.tv_usec*1000; ++ if (absTime->tv_nsec >= NANOSECS_PER_SEC) { ++ absTime->tv_nsec -= NANOSECS_PER_SEC; ++ ++absTime->tv_sec; // note: this must be <= max_secs ++ } ++ } + } +- absTime->tv_nsec = (time % 1000) * NANOSECS_PER_MILLISEC; +- } +- else { ++ } else { ++ // must be relative using monotonic clock ++ struct timespec now; ++ int status = ::clock_gettime(CLOCK_MONOTONIC, &now); ++ assert_status(status == 0, status, "clock_gettime"); ++ max_secs = now.tv_sec + MAX_SECS; + jlong secs = time / NANOSECS_PER_SEC; + if (secs >= MAX_SECS) { + absTime->tv_sec = max_secs; + absTime->tv_nsec = 0; +- } +- else { ++ } else { + absTime->tv_sec = now.tv_sec + secs; +- absTime->tv_nsec = (time % NANOSECS_PER_SEC) + now.tv_usec*1000; ++ absTime->tv_nsec = (time % NANOSECS_PER_SEC) + now.tv_nsec; + if (absTime->tv_nsec >= NANOSECS_PER_SEC) { + absTime->tv_nsec -= NANOSECS_PER_SEC; + ++absTime->tv_sec; // note: this must be <= max_secs +@@ -5911,15 +5967,19 @@ void Parker::park(bool isAbsolute, jlong + jt->set_suspend_equivalent(); + // cleared by handle_special_suspend_equivalent_condition() or java_suspend_self() + ++ assert(_cur_index == -1, "invariant"); + if (time == 0) { +- status = pthread_cond_wait (_cond, _mutex) ; ++ _cur_index = REL_INDEX; // arbitrary choice when not timed ++ status = pthread_cond_wait (&_cond[_cur_index], _mutex) ; + } else { +- status = os::Bsd::safe_cond_timedwait (_cond, _mutex, &absTime) ; ++ _cur_index = isAbsolute ? ABS_INDEX : REL_INDEX; ++ status = os::Bsd::safe_cond_timedwait (&_cond[_cur_index], _mutex, &absTime) ; + if (status != 0 && WorkAroundNPTLTimedWaitHang) { +- pthread_cond_destroy (_cond) ; +- pthread_cond_init (_cond, NULL); ++ pthread_cond_destroy (&_cond[_cur_index]) ; ++ pthread_cond_init (&_cond[_cur_index], isAbsolute ? NULL : os::Bsd::condAttr()); + } + } ++ _cur_index = -1; + assert_status(status == 0 || status == EINTR || + status == ETIMEDOUT, + status, "cond_timedwait"); +@@ -5948,17 +6008,26 @@ void Parker::unpark() { + s = _counter; + _counter = 1; + if (s < 1) { +- if (WorkAroundNPTLTimedWaitHang) { +- status = pthread_cond_signal (_cond) ; +- assert (status == 0, "invariant") ; ++ // thread might be parked ++ if (_cur_index != -1) { ++ // thread is definitely parked ++ if (WorkAroundNPTLTimedWaitHang) { ++ status = pthread_cond_signal (&_cond[_cur_index]); ++ assert (status == 0, "invariant"); + status = pthread_mutex_unlock(_mutex); +- assert (status == 0, "invariant") ; +- } else { ++ assert (status == 0, "invariant"); ++ } else { ++ // must capture correct index before unlocking ++ int index = _cur_index; + status = pthread_mutex_unlock(_mutex); +- assert (status == 0, "invariant") ; +- status = pthread_cond_signal (_cond) ; +- assert (status == 0, "invariant") ; +- } ++ assert (status == 0, "invariant"); ++ status = pthread_cond_signal (&_cond[index]); ++ assert (status == 0, "invariant"); ++ } ++ } else { ++ pthread_mutex_unlock(_mutex); ++ assert (status == 0, "invariant") ; ++ } + } else { + pthread_mutex_unlock(_mutex); + assert (status == 0, "invariant") ; Property changes on: head/java/openjdk7/files/patch-hotspot_src_os_bsd_vm_os__bsd.cpp ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/java/openjdk7/files/patch-hotspot_src_os_bsd_vm_os__bsd.hpp =================================================================== --- head/java/openjdk7/files/patch-hotspot_src_os_bsd_vm_os__bsd.hpp (nonexistent) +++ head/java/openjdk7/files/patch-hotspot_src_os_bsd_vm_os__bsd.hpp (revision 438482) @@ -0,0 +1,63 @@ +--- hotspot/src/os/bsd/vm/os_bsd.hpp.orig 2013-09-06 18:22:03 UTC ++++ hotspot/src/os/bsd/vm/os_bsd.hpp +@@ -222,6 +222,13 @@ class Bsd { + static jlong fast_thread_cpu_time(clockid_t clockid); + #endif + ++ // pthread_cond clock suppport ++ private: ++ static pthread_condattr_t _condattr[1]; ++ ++ public: ++ static pthread_condattr_t* condAttr() { return _condattr; } ++ + // Stack repair handling + + // none present +@@ -287,7 +294,7 @@ class PlatformEvent : public CHeapObj { + protected: ++ enum { ++ REL_INDEX = 0, ++ ABS_INDEX = 1 ++ }; ++ int _cur_index; // which cond is in use: -1, 0, 1 + pthread_mutex_t _mutex [1] ; +- pthread_cond_t _cond [1] ; ++ pthread_cond_t _cond [2] ; // one for relative times and one for abs. + + public: // TODO-FIXME: make dtor private + ~PlatformParker() { guarantee (0, "invariant") ; } +@@ -317,10 +329,13 @@ class PlatformParker : public CHeapObj