svn commit: r441965 - in head/java/openjdk7: . files

Greg Lewis glewis at FreeBSD.org
Mon May 29 04:16:02 UTC 2017


Author: glewis
Date: Mon May 29 04:16:00 2017
New Revision: 441965
URL: https://svnweb.freebsd.org/changeset/ports/441965

Log:
  . Update to 7u131.

Deleted:
  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.hpp
Modified:
  head/java/openjdk7/Makefile
  head/java/openjdk7/distinfo
  head/java/openjdk7/files/patch-bsd

Modified: head/java/openjdk7/Makefile
==============================================================================
--- head/java/openjdk7/Makefile	Sun May 28 23:22:54 2017	(r441964)
+++ head/java/openjdk7/Makefile	Mon May 29 04:16:00 2017	(r441965)
@@ -3,7 +3,6 @@
 
 PORTNAME=	openjdk
 PORTVERSION=	${JDK_MAJOR_VERSION}.${PORT_MINOR_VERSION}.${PORT_BUILD_NUMBER}
-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}/ \
@@ -31,7 +30,9 @@ PATCHFILES=	patch-7u45-b30.xz \
 		patch-7u91-b02.xz \
 		patch-7u95-b00.xz \
 		patch-7u101-b00.xz \
-		patch-7u111-b01.xz
+		patch-7u111-b01.xz \
+		patch-7u121-b00.xz \
+		patch-7u131-b00.xz
 
 MAINTAINER?=	glewis at FreeBSD.org
 COMMENT?=	Java Development Kit 7
@@ -74,8 +75,8 @@ JAVAVMS_COMMENT+=	JRE
 INSTALLDIR=	${PREFIX}/${PORTNAME}${JDK_MAJOR_VERSION}-jre
 .endif
 
-PORT_MINOR_VERSION=	111
-PORT_BUILD_NUMBER=	01
+PORT_MINOR_VERSION=	131
+PORT_BUILD_NUMBER=	00
 JDK_MAJOR_VERSION=	7
 JDK_MINOR_VERSION=	40
 JDK_BUILD_NUMBER=	43

Modified: head/java/openjdk7/distinfo
==============================================================================
--- head/java/openjdk7/distinfo	Sun May 28 23:22:54 2017	(r441964)
+++ head/java/openjdk7/distinfo	Mon May 29 04:16:00 2017	(r441965)
@@ -1,4 +1,4 @@
-TIMESTAMP = 1472019396
+TIMESTAMP = 1496029291
 SHA256 (openjdk-7u40-fcs-src-b43-26_aug_2013.zip) = 00f8ea561876cbcad174ba3ca7a9ae10b50df46a782ac64c2ac57ac357b50596
 SIZE (openjdk-7u40-fcs-src-b43-26_aug_2013.zip) = 104575196
 SHA256 (apache-ant-1.9.7-bin.zip) = b28c5ea0b5ea90bb4ad6bab229b6a56ac4461760a251a12567803a69259cd9de
@@ -29,3 +29,7 @@ SHA256 (patch-7u101-b00.xz) = 8406d9f453
 SIZE (patch-7u101-b00.xz) = 121752
 SHA256 (patch-7u111-b01.xz) = d46ffd30a6fa6d8ce40231e6dadcabf491a347e2afea87302f38bab5e2bee523
 SIZE (patch-7u111-b01.xz) = 273552
+SHA256 (patch-7u121-b00.xz) = e8cba92ab639210471db536fb316593eef300d67bbf36146922eef0a41b6e86b
+SIZE (patch-7u121-b00.xz) = 670484
+SHA256 (patch-7u131-b00.xz) = 5c7b4f9be1d7bc3336ba19c288c882ff5cbd1b1b0ee403f84229cd8807452024
+SIZE (patch-7u131-b00.xz) = 769172

Modified: head/java/openjdk7/files/patch-bsd
==============================================================================
--- head/java/openjdk7/files/patch-bsd	Sun May 28 23:22:54 2017	(r441964)
+++ head/java/openjdk7/files/patch-bsd	Mon May 29 04:16:00 2017	(r441965)
@@ -1,5 +1,5 @@
---- ./.hgtags	Wed Jul 20 04:05:01 2016 +0100
-+++ ./.hgtags	Sat Aug 20 11:56:17 2016 -0700
+--- ./.hgtags	Fri Oct 28 03:35:31 2016 +0100
++++ ./.hgtags	Sun May 21 11:12:34 2017 -0700
 @@ -123,6 +123,7 @@
  2d38c2a79c144c30cd04d143d83ee7ec6af40771 jdk7-b146
  3ac30b3852876ccad6bd61697b5f9efa91ca7bc6 jdk7u1-b01
@@ -8,13 +8,13 @@
  34451dc0580d5c95d97b95a564e6198f36545d68 jdk7u1-b02
  bf735d852f79bdbb3373c777eec3ff27e035e7ba jdk7u1-b03
  f66a2bada589f4157789e6f66472954d2f1c114e jdk7u1-b04
-@@ -605,3 +606,4 @@
- 251bb2a6d5cfbb76c0f4bdfecea4ca9c8af21558 jdk7u99-b00
- 12491db47c7ccffcc3e881df68f4c2f727b44e5d jdk7u101-b00
+@@ -607,3 +608,4 @@
  bade1889699bab14082e84de3b40901964b52483 jdk7u111-b00
-+9b95c1ef81fe7bb010a6938d1cb97843b9a1fc68 jdk7u111-b01
---- ./corba/.hgtags	Wed Jul 20 04:05:02 2016 +0100
-+++ ./corba/.hgtags	Sat Aug 20 11:56:18 2016 -0700
+ 9b95c1ef81fe7bb010a6938d1cb97843b9a1fc68 jdk7u111-b01
+ 974935f4e21dae1170b5247a8af362617d105e1c jdk7u121-b00
++259e6ca7faf17e2b96fb0733f30e62327a7acdfa jdk7u131-b00
+--- ./corba/.hgtags	Fri Oct 28 03:35:33 2016 +0100
++++ ./corba/.hgtags	Sun May 21 11:12:35 2017 -0700
 @@ -123,6 +123,7 @@
  770227a4087e4e401fe87ccd19738440111c3948 jdk7-b146
  36f0efbc66ef8ace3cca8aa8d0c88f3334080f8a jdk7u1-b01
@@ -23,13 +23,13 @@
  9515a2d034b4727c11aeea36354a549fbc469c4f jdk7u1-b02
  dd71cb354c573c1addcda269a7dd9144bfce9587 jdk7u1-b03
  eaee830124aa453627591d8f9eccb39d7e040876 jdk7u1-b04
-@@ -607,3 +608,4 @@
- adda687205a9a40573fdb538240a5699fdc7dbd6 jdk7u99-b00
- 9c164195bcc97da6c6567e6e6d55ea349f1c583d jdk7u101-b00
+@@ -609,3 +610,4 @@
  c1def4cc27fb92914168a5f65658eba4a1754dfe jdk7u111-b00
-+36715cc029596f86e977d486e547f62bb07eed74 jdk7u111-b01
---- ./hotspot/.hgtags	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/.hgtags	Sat Aug 20 11:56:24 2016 -0700
+ 36715cc029596f86e977d486e547f62bb07eed74 jdk7u111-b01
+ ad3a33a23c69608ae140d4564d045b62533f45a3 jdk7u121-b00
++d93d13bcb01d7b635d0e021877e1102e34bae8fb jdk7u131-b00
+--- ./hotspot/.hgtags	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/.hgtags	Sun May 21 11:12:48 2017 -0700
 @@ -182,6 +182,7 @@
  38fa55e5e79232d48f1bb8cf27d88bc094c9375a hs21-b16
  81d815b05abb564aa1f4100ae13491c949b9a07e jdk7-b147
@@ -38,13 +38,13 @@
  9b0ca45cd756d538c4c30afab280a91868eee1a5 jdk7u2-b01
  0cc8a70952c368e06de2adab1f2649a408f5e577 jdk8-b01
  31e253c1da429124bb87570ab095d9bc89850d0a jdk8-b02
-@@ -839,3 +840,4 @@
- 631da593499ee184ea8efb2bc5491e0d99ac636d jdk7u99-b00
- 6e42747134be8a4a366d337da1fc84a847ad8381 jdk7u101-b00
+@@ -841,3 +842,4 @@
  14d0f4da4a74897fc3274f8f549f41544bb4625a jdk7u111-b00
-+9efa3fae3c278a7f48badec775d7f9b2d5320b6d jdk7u111-b01
---- ./hotspot/agent/src/os/bsd/ps_proc.c	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/agent/src/os/bsd/ps_proc.c	Sat Aug 20 11:56:24 2016 -0700
+ 9efa3fae3c278a7f48badec775d7f9b2d5320b6d jdk7u111-b01
+ 17b40d99ea3665de2bfffe163b68f2dfcf675cba jdk7u121-b00
++95e4ea3d479ebdab9d78725776b6b11d4add6b0e jdk7u131-b00
+--- ./hotspot/agent/src/os/bsd/ps_proc.c	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/agent/src/os/bsd/ps_proc.c	Sun May 21 11:12:48 2017 -0700
 @@ -131,7 +131,7 @@
  
  static bool ptrace_continue(pid_t pid, int signal) {
@@ -54,8 +54,8 @@
      print_debug("ptrace(PTRACE_CONT, ..) failed for %d\n", pid);
      return false;
    }
---- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java	Sun May 21 11:12:48 2017 -0700
 @@ -33,6 +33,7 @@
  import sun.jvm.hotspot.debugger.remote.*;
  import sun.jvm.hotspot.debugger.windbg.*;
@@ -64,8 +64,8 @@
  import sun.jvm.hotspot.memory.*;
  import sun.jvm.hotspot.oops.*;
  import sun.jvm.hotspot.runtime.*;
---- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java	Sun May 21 11:12:48 2017 -0700
 @@ -35,6 +35,7 @@
  import sun.jvm.hotspot.debugger.windbg.*;
  import sun.jvm.hotspot.debugger.linux.*;
@@ -74,8 +74,8 @@
  import sun.jvm.hotspot.debugger.remote.*;
  import sun.jvm.hotspot.livejvm.*;
  import sun.jvm.hotspot.memory.*;
---- ./hotspot/make/bsd/Makefile	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/Makefile	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/Makefile	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/Makefile	Sun May 21 11:12:48 2017 -0700
 @@ -1,5 +1,5 @@
  #
 -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
@@ -92,7 +92,7 @@
  BUILDTREE         = $(MAKE) -f $(BUILDTREE_MAKE) $(BUILDTREE_VARS)
  
  #-------------------------------------------------------------------------------
-@@ -337,9 +339,11 @@
+@@ -349,9 +351,11 @@
  
  # Doc target.  This is the same for all build options.
  #     Hence create a docs directory beside ...$(ARCH)_[...]
@@ -105,8 +105,8 @@
  
  # Synonyms for win32-like targets.
  compiler2:  jvmg product
---- ./hotspot/make/bsd/makefiles/build_vm_def.sh	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/makefiles/build_vm_def.sh	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/makefiles/build_vm_def.sh	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/makefiles/build_vm_def.sh	Sun May 21 11:12:48 2017 -0700
 @@ -1,12 +1,28 @@
  #!/bin/sh
  
@@ -142,8 +142,8 @@
 +        if ($3 ~ /^_ZN9Arguments17SharedArchivePathE$/) print "\t" $3 ";"
 +    }' | sort -u ;;
 +esac
---- ./hotspot/make/bsd/makefiles/buildtree.make	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/makefiles/buildtree.make	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/makefiles/buildtree.make	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/makefiles/buildtree.make	Sun May 21 11:12:48 2017 -0700
 @@ -255,6 +255,16 @@
  	echo "$(call gamma-path,commonsrc,os/posix/vm)"; \
  	[ -n "$(CFLAGS_BROWSE)" ] && \
@@ -170,8 +170,8 @@
  
  .dbxrc:  $(BUILDTREE_MAKE)
  	@echo Creating $@ ...
---- ./hotspot/make/bsd/makefiles/gcc.make	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/makefiles/gcc.make	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/makefiles/gcc.make	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/makefiles/gcc.make	Sun May 21 11:12:48 2017 -0700
 @@ -117,7 +117,10 @@
  CFLAGS += -fno-rtti
  CFLAGS += -fno-exceptions
@@ -197,8 +197,8 @@
  endif
  
  # -DDONT_USE_PRECOMPILED_HEADER will exclude all includes in precompiled.hpp.
---- ./hotspot/make/bsd/makefiles/jsig.make	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/makefiles/jsig.make	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/makefiles/jsig.make	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/makefiles/jsig.make	Sun May 21 11:12:48 2017 -0700
 @@ -36,9 +36,16 @@
    LIBJSIG_G = lib$(JSIG_G).so
  endif
@@ -251,8 +251,8 @@
  	$(QUIETLY) cp -f $(LIBJSIG) $(DEST_JSIG) && echo "Done"
  
  .PHONY: install_jsig
---- ./hotspot/make/bsd/makefiles/launcher.make	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/makefiles/launcher.make	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/makefiles/launcher.make	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/makefiles/launcher.make	Sun May 21 11:12:48 2017 -0700
 @@ -50,7 +50,7 @@
    LIBS_LAUNCHER             += $(STATIC_STDCXX) $(LIBS)
  else
@@ -262,15 +262,15 @@
  
    # The gamma launcher runs the JDK from $JAVA_HOME, overriding the JVM with a
    # freshly built JVM at ./libjvm.{so|dylib}.  This is accomplished by setting 
---- ./hotspot/make/bsd/makefiles/mapfile-vers-product	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/makefiles/mapfile-vers-product	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/makefiles/mapfile-vers-product	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/makefiles/mapfile-vers-product	Sun May 21 11:12:48 2017 -0700
 @@ -19,237 +19,248 @@
  # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  # or visit www.oracle.com if you need additional information or have any
  # questions.
+-#
 +#  
  #
--#
 -# Only used for OSX/Darwin builds
  
  # Define public interface.
@@ -278,6 +278,13 @@
 -                _JNI_CreateJavaVM
 -                _JNI_GetCreatedJavaVMs
 -                _JNI_GetDefaultJavaVMInitArgs
++
++SUNWprivate_1.1 {
++        global:
++                # JNI
++                JNI_CreateJavaVM;
++                JNI_GetCreatedJavaVMs;
++                JNI_GetDefaultJavaVMInitArgs;
  
 -                # _JVM
 -                _JVM_Accept
@@ -490,13 +497,6 @@
 -                _JVM_Write
 -                _JVM_Yield
 -                _JVM_handle_bsd_signal
-+SUNWprivate_1.1 {
-+        global:
-+                # JNI
-+                JNI_CreateJavaVM;
-+                JNI_GetCreatedJavaVMs;
-+                JNI_GetDefaultJavaVMInitArgs;
-+
 +                # JVM
 +                JVM_Accept;
 +                JVM_ActiveProcessorCount;
@@ -730,15 +730,16 @@
                  # This is for Forte Analyzer profiling support.
 -                _AsyncGetCallTrace
 +                AsyncGetCallTrace;
- 
--                # INSERT VTABLE SYMBOLS HERE
++
 +		# INSERT VTABLE SYMBOLS HERE
  
+-                # INSERT VTABLE SYMBOLS HERE
+-
 +        local:
 +                *;
 +};
---- ./hotspot/make/bsd/makefiles/ppc.make	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/makefiles/ppc.make	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/makefiles/ppc.make	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/makefiles/ppc.make	Sun May 21 11:12:48 2017 -0700
 @@ -28,3 +28,6 @@
  # Must also specify if CPU is big endian
  CFLAGS += -DVM_BIG_ENDIAN
@@ -746,8 +747,8 @@
 +ifdef E500V2
 +ASFLAGS += -Wa,-mspe -Wa,--defsym -Wa,E500V2=1 
 +endif
---- ./hotspot/make/bsd/makefiles/saproc.make	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/bsd/makefiles/saproc.make	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/bsd/makefiles/saproc.make	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/bsd/makefiles/saproc.make	Sun May 21 11:12:48 2017 -0700
 @@ -36,6 +36,11 @@
    LIBSAPROC_G = lib$(SAPROC_G).so
  endif
@@ -804,8 +805,8 @@
  	  cp -f $(LIBSAPROC) $(DEST_SAPROC) && echo "Done";  \
  	fi
  
---- ./hotspot/make/solaris/makefiles/defs.make	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/make/solaris/makefiles/defs.make	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/make/solaris/makefiles/defs.make	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/make/solaris/makefiles/defs.make	Sun May 21 11:12:48 2017 -0700
 @@ -221,8 +221,8 @@
  endif
  ifeq ($(JVM_VARIANT_CLIENT),true)
@@ -817,8 +818,8 @@
    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX)
    ifeq ($(ARCH_DATA_MODEL),32)
      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX)
---- ./hotspot/src/cpu/sparc/vm/globals_sparc.hpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/cpu/sparc/vm/globals_sparc.hpp	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/src/cpu/sparc/vm/globals_sparc.hpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/cpu/sparc/vm/globals_sparc.hpp	Sun May 21 11:12:48 2017 -0700
 @@ -71,7 +71,11 @@
  define_pd_global(bool, RewriteBytecodes,     true);
  define_pd_global(bool, RewriteFrequentPairs, true);
@@ -832,7 +833,7 @@
  // GC Ergo Flags
  define_pd_global(intx, CMSYoungGenPerWorker, 16*M);  // default max size of CMS young gen, per GC worker thread
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/src/os/bsd/vm/decoder_bsd.cpp	Sat Aug 20 11:56:24 2016 -0700
++++ ./hotspot/src/os/bsd/vm/decoder_bsd.cpp	Sun May 21 11:12:48 2017 -0700
 @@ -0,0 +1,46 @@
 +/*
 + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
@@ -880,9 +881,17 @@
 +  return false;
 +}
 +
---- ./hotspot/src/os/bsd/vm/os_bsd.cpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/os/bsd/vm/os_bsd.cpp	Sat Aug 20 11:56:24 2016 -0700
-@@ -187,6 +187,8 @@
+--- ./hotspot/src/os/bsd/vm/os_bsd.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/os/bsd/vm/os_bsd.cpp	Sun May 21 11:12:48 2017 -0700
+@@ -163,6 +163,7 @@
+ #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;
+@@ -187,6 +188,8 @@
  static int SR_signum = SIGUSR2;
  sigset_t SR_sigset;
  
@@ -891,7 +900,7 @@
  
  ////////////////////////////////////////////////////////////////////////////////
  // utility functions
-@@ -355,7 +357,13 @@
+@@ -355,7 +358,13 @@
     * since it returns a 64 bit value)
     */
    mib[0] = CTL_HW;
@@ -905,7 +914,28 @@
    len = sizeof(mem_val);
    if (sysctl(mib, 2, &mem_val, &len, NULL, 0) != -1) {
         assert(len == sizeof(mem_val), "unexpected data size");
-@@ -1848,9 +1856,15 @@
+@@ -1625,7 +1634,10 @@
+       ::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() {
+@@ -1711,7 +1723,7 @@
+ 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;
+@@ -1848,9 +1860,15 @@
    return n;
  }
  
@@ -921,7 +951,7 @@
  #else
    return (intx)::pthread_self();
  #endif
-@@ -2401,14 +2415,14 @@
+@@ -2401,14 +2419,14 @@
  }
  
  void os::print_os_info_brief(outputStream* st) {
@@ -938,7 +968,7 @@
  
    os::Posix::print_uname_info(st);
  
-@@ -2417,10 +2431,6 @@
+@@ -2417,10 +2435,6 @@
    os::Posix::print_load_average(st);
  }
  
@@ -949,7 +979,7 @@
  void os::print_memory_info(outputStream* st) {
  
    st->print("Memory:");
-@@ -2437,6 +2447,7 @@
+@@ -2437,6 +2451,7 @@
    st->print("(" UINT64_FORMAT "k free)",
              os::available_memory() >> 10);
  #ifndef _ALLBSD_SOURCE
@@ -957,7 +987,7 @@
    st->print(", swap " UINT64_FORMAT "k",
              ((jlong)si.totalswap * si.mem_unit) >> 10);
    st->print("(" UINT64_FORMAT "k free)",
-@@ -2444,12 +2455,22 @@
+@@ -2444,12 +2459,22 @@
  #endif
    st->cr();
  
@@ -980,7 +1010,7 @@
  // Taken from /usr/include/bits/siginfo.h  Supposed to be architecture specific
  // but they're the same for all the bsd arch that we support
  // and they're the same for solaris but there's no common place to put this.
-@@ -2596,6 +2617,25 @@
+@@ -2596,6 +2621,25 @@
          assert(len < buflen, "Ran out of buffer space");
          jrelib_p = buf + len;
  
@@ -1006,7 +1036,7 @@
          // Add the appropriate library subdir
          snprintf(jrelib_p, buflen-len, "/jre/lib");
          if (0 != access(buf, F_OK)) {
-@@ -2625,6 +2665,7 @@
+@@ -2625,6 +2669,7 @@
            if (rp == NULL)
              return;
          }
@@ -1014,7 +1044,7 @@
        }
      }
    }
-@@ -2728,10 +2769,14 @@
+@@ -2728,10 +2773,14 @@
      bool timedwait(unsigned int sec, int nsec);
    private:
      jlong currenttime() const;
@@ -1030,7 +1060,7 @@
    SEM_INIT(_semaphore, 0);
  }
  
-@@ -2796,7 +2841,7 @@
+@@ -2796,7 +2845,7 @@
  
  bool Semaphore::timedwait(unsigned int sec, int nsec) {
    struct timespec ts;
@@ -1039,7 +1069,7 @@
  
    while (1) {
      int result = sem_timedwait(&_semaphore, &ts);
-@@ -3017,7 +3062,11 @@
+@@ -3017,7 +3066,11 @@
  }
  
  void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) {
@@ -1051,7 +1081,7 @@
  }
  
  void os::numa_make_global(char *addr, size_t bytes) {
-@@ -3864,6 +3913,7 @@
+@@ -3864,6 +3917,7 @@
    return OS_OK;
  #elif defined(__FreeBSD__)
    int ret = pthread_setprio(thread->osthread()->pthread_id(), newpri);
@@ -1059,9 +1089,239 @@
  #elif defined(__APPLE__) || defined(__NetBSD__)
    struct sched_param sp;
    int policy;
---- ./hotspot/src/os/bsd/vm/os_bsd.hpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/os/bsd/vm/os_bsd.hpp	Sat Aug 20 11:56:24 2016 -0700
-@@ -103,6 +103,12 @@
+@@ -4718,6 +4772,25 @@
+   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
+@@ -5638,21 +5711,36 @@
+ 
+ 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;
+-  }
+-  abstime->tv_nsec = usec * 1000;
++
++  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;
++  }
+   return abstime;
+ }
+ 
+@@ -5744,7 +5832,7 @@
+     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,
+@@ -5845,32 +5933,50 @@
+ 
+ static void unpackTime(struct timespec* absTime, bool isAbsolute, jlong time) {
+   assert (time > 0, "convertTime");
+-
+-  struct timeval now;
+-  int status = gettimeofday(&now, NULL);
+-  assert(status == 0, "gettimeofday");
+-
+-  time_t max_secs = now.tv_sec + MAX_SECS;
+-
+-  if (isAbsolute) {
+-    jlong secs = time / 1000;
+-    if (secs > max_secs) {
+-      absTime->tv_sec = max_secs;
++  time_t max_secs = 0;
++
++  if (!os::Bsd::supports_monotonic_clock() || isAbsolute) {
++    struct timeval now;
++    int status = gettimeofday(&now, NULL);
++    assert(status == 0, "gettimeofday");
++
++    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;
++      }
++      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
++        }
++      }
+     }
+-    else {
+-      absTime->tv_sec = 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
+@@ -5950,15 +6056,19 @@
+   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");
+@@ -5987,17 +6097,26 @@
+   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") ;
+--- ./hotspot/src/os/bsd/vm/os_bsd.hpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/os/bsd/vm/os_bsd.hpp	Sun May 21 11:12:48 2017 -0700
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
++ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+  *
+  * This code is free software; you can redistribute it and/or modify it
+@@ -27,6 +27,9 @@
+ 
+ // Bsd_OS defines the interface to Bsd operating systems
+ 
++// Information about the protection of the page at address '0' on this os.
++static bool zero_page_read_protected() { return true; }
++
+ /* pthread_getattr_np comes with BsdThreads-0.9-7 on RedHat 7.1 */
+ typedef int (*pthread_getattr_func_type) (pthread_t, pthread_attr_t *);
+ 
+@@ -103,6 +106,12 @@
  
    static bool hugetlbfs_sanity_check(bool warn, size_t page_size);
  
@@ -1074,8 +1334,69 @@
   public:
  
    static void init_thread_fpu_state();
---- ./hotspot/src/os/bsd/vm/os_bsd.inline.hpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/os/bsd/vm/os_bsd.inline.hpp	Sat Aug 20 11:56:24 2016 -0700
+@@ -222,6 +231,13 @@
+   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 +303,7 @@
+   public:
+     PlatformEvent() {
+       int status;
+-      status = pthread_cond_init (_cond, NULL);
++      status = pthread_cond_init (_cond, os::Bsd::condAttr());
+       assert_status(status == 0, status, "cond_init");
+       status = pthread_mutex_init (_mutex, NULL);
+       assert_status(status == 0, status, "mutex_init");
+@@ -302,14 +318,19 @@
+     void park () ;
+     void unpark () ;
+     int  TryPark () ;
+-    int  park (jlong millis) ;
++    int  park (jlong millis) ; // relative timed-wait only
+     void SetAssociation (Thread * a) { _Assoc = a ; }
+ };
+ 
+ class PlatformParker : public CHeapObj<mtInternal> {
+   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 +338,13 @@
+   public:
+     PlatformParker() {
+       int status;
+-      status = pthread_cond_init (_cond, NULL);
+-      assert_status(status == 0, status, "cond_init");
++      status = pthread_cond_init (&_cond[REL_INDEX], os::Bsd::condAttr());
++      assert_status(status == 0, status, "cond_init rel");
++      status = pthread_cond_init (&_cond[ABS_INDEX], NULL);
++      assert_status(status == 0, status, "cond_init abs");
+       status = pthread_mutex_init (_mutex, NULL);
+       assert_status(status == 0, status, "mutex_init");
++      _cur_index = -1; // mark as unused
+     }
+ };
+ 
+--- ./hotspot/src/os/bsd/vm/os_bsd.inline.hpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/os/bsd/vm/os_bsd.inline.hpp	Sun May 21 11:12:48 2017 -0700
 @@ -31,10 +31,22 @@
  # include "atomic_bsd_x86.inline.hpp"
  # include "orderAccess_bsd_x86.inline.hpp"
@@ -1099,8 +1420,8 @@
  
  // System includes
  
---- ./hotspot/src/os/bsd/vm/thread_bsd.inline.hpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/os/bsd/vm/thread_bsd.inline.hpp	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/src/os/bsd/vm/thread_bsd.inline.hpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/os/bsd/vm/thread_bsd.inline.hpp	Sun May 21 11:12:48 2017 -0700
 @@ -34,11 +34,26 @@
  # include "orderAccess_bsd_x86.inline.hpp"
  # include "prefetch_bsd_x86.inline.hpp"
@@ -1128,9 +1449,9 @@
  
  // Contains inlined functions for class Thread and ThreadLocalStorage
  
---- ./hotspot/src/os/posix/vm/os_posix.cpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/os/posix/vm/os_posix.cpp	Sat Aug 20 11:56:24 2016 -0700
-@@ -175,11 +175,19 @@
+--- ./hotspot/src/os/posix/vm/os_posix.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/os/posix/vm/os_posix.cpp	Sun May 21 11:12:48 2017 -0700
+@@ -183,11 +183,19 @@
    if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity");
    else st->print("%d", rlim.rlim_cur);
  
@@ -1150,8 +1471,8 @@
  }
  
  void os::Posix::print_uname_info(outputStream* st) {
---- ./hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp	Sun May 21 11:12:48 2017 -0700
 @@ -945,7 +945,7 @@
    if (rslt != 0)
      fatal(err_msg("pthread_stackseg_np failed with err = %d", rslt));
@@ -1161,8 +1482,8 @@
    *size   = ss.ss_size;
  #elif defined(_ALLBSD_SOURCE)
    pthread_attr_t attr;
---- ./hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp	Sun May 21 11:12:48 2017 -0700
 @@ -24,7 +24,7 @@
   */
  
@@ -1172,28 +1493,8 @@
  # include <pthread_np.h> /* For pthread_attr_get_np */
  #endif
  
---- ./hotspot/src/share/vm/code/relocInfo.hpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/share/vm/code/relocInfo.hpp	Sat Aug 20 11:56:24 2016 -0700
-@@ -371,7 +371,7 @@
-   // "immediate" in the prefix header word itself.  This optimization
-   // is invisible outside this module.)
- 
--  inline friend relocInfo prefix_relocInfo(int datalen = 0);
-+  inline friend relocInfo prefix_relocInfo(int datalen);
- 
-  protected:
-   // an immediate relocInfo optimizes a prefix with one 10-bit unsigned value
-@@ -466,7 +466,7 @@
-   return relocInfo(relocInfo::none, relocInfo::offset_limit() - relocInfo::offset_unit);
- }
- 
--inline relocInfo prefix_relocInfo(int datalen) {
-+inline relocInfo prefix_relocInfo(int datalen = 0) {
-   assert(relocInfo::fits_into_immediate(datalen), "datalen in limits");
-   return relocInfo(relocInfo::data_prefix_tag, relocInfo::RAW_BITS, relocInfo::datalen_tag | datalen);
- }
---- ./hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp	Sun May 21 11:12:48 2017 -0700
 @@ -111,7 +111,7 @@
    if (e.should_commit()) {
      e.set_gcId(_shared_gc_info.id());
@@ -1203,9 +1504,81 @@
      e.commit();
    }
  }
---- ./hotspot/src/share/vm/runtime/atomic.cpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/share/vm/runtime/atomic.cpp	Sat Aug 20 11:56:24 2016 -0700
-@@ -54,6 +54,12 @@
+--- ./hotspot/src/share/vm/opto/lcm.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/share/vm/opto/lcm.cpp	Sun May 21 11:12:48 2017 -0700
+@@ -57,25 +57,40 @@
+ // Check whether val is not-null-decoded compressed oop,
+ // i.e. will grab into the base of the heap if it represents NULL.
+ static bool accesses_heap_base_zone(Node *val) {
+-  if (UseCompressedOops && Universe::narrow_oop_base() > 0) {
++  if (Universe::narrow_oop_base() > 0) { // Implies UseCompressedOops.
+     if (val && val->is_Mach()) {
+-        if (val->as_Mach()->ideal_Opcode() == Op_DecodeN) {
+-          // This assumes all Decodes with TypePtr::NotNull are matched to nodes that
+-          // decode NULL to point to the heap base (Decode_NN).
+-          if (val->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull) {
+-            return true;
+-          }
++      if (val->as_Mach()->ideal_Opcode() == Op_DecodeN) {
++        // This assumes all Decodes with TypePtr::NotNull are matched to nodes that
++        // decode NULL to point to the heap base (Decode_NN).
++        if (val->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull) {
++          return true;
+         }
+-        // Must recognize load operation with Decode matched in memory operand.
+-        // We should not reach here, as os::zero_page_read_protected()
+-        // returns true everywhere exept for AIX. On AIX, no such memory operands
+-        // exist.
+-        NOT_AIX(Unimplemented());
+       }
++      // Must recognize load operation with Decode matched in memory operand.
++      // We should not reach here exept for PPC/AIX, as os::zero_page_read_protected()
++      // returns true everywhere else. On PPC, no such memory operands
++      // exist, therefore we did not yet implement a check for such operands.
++      NOT_AIX(Unimplemented());
++    }
+   }
+   return false;
+ }
+ 
++static bool needs_explicit_null_check_for_read(Node *val) {
++  // On some OSes (AIX) the page at address 0 is only write protected.
++  // If so, only Store operations will trap.
++  if (os::zero_page_read_protected()) {
++    return false;  // Implicit null check will work.
++  }
++  // Also a read accessing the base of a heap-based compressed heap will trap.
++  if (accesses_heap_base_zone(val) &&                    // Hits the base zone page.
++      Universe::narrow_oop_use_implicit_null_checks()) { // Base zone page is protected.
++    return false;
++  }
++
++  return true;
++}
++
+ //------------------------------implicit_null_check----------------------------
+ // Detect implicit-null-check opportunities.  Basically, find NULL checks
+ // with suitable memory ops nearby.  Use the memory op to do the NULL check.
+@@ -233,14 +248,8 @@
+     // On some OSes (AIX) the page at address 0 is only write protected.
+     // If so, only Store operations will trap.
+     // But a read accessing the base of a heap-based compressed heap will trap.
+-    if (!was_store && !os::zero_page_read_protected()) {
+-      if (!(accesses_heap_base_zone(val) &&                    // Hits the base zone page.
+-            Universe::narrow_oop_use_implicit_null_checks())) { // Page is protected.
+-        continue;
+-      } else {
+-        tty->print("Found load accessing heap base on AIX\n");
+-        Unimplemented();
+-      }
++    if (!was_store && needs_explicit_null_check_for_read(val)) {
++      continue;
+     }
+ 
+     // check if the offset is not too high for implicit exception
+--- ./hotspot/src/share/vm/runtime/atomic.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/share/vm/runtime/atomic.cpp	Sun May 21 11:12:48 2017 -0700
+@@ -57,6 +57,12 @@
  #ifdef TARGET_OS_ARCH_windows_x86
  # include "atomic_windows_x86.inline.hpp"
  #endif
@@ -1218,9 +1591,9 @@
  #ifdef TARGET_OS_ARCH_linux_arm
  # include "atomic_linux_arm.inline.hpp"
  #endif
---- ./hotspot/src/share/vm/runtime/objectMonitor.cpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/share/vm/runtime/objectMonitor.cpp	Sat Aug 20 11:56:24 2016 -0700
-@@ -1744,7 +1744,7 @@
+--- ./hotspot/src/share/vm/runtime/objectMonitor.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/share/vm/runtime/objectMonitor.cpp	Sun May 21 11:12:48 2017 -0700
+@@ -1740,7 +1740,7 @@
       }
       iterator->_notified = 1 ;
       Thread * Self = THREAD;
@@ -1229,7 +1602,7 @@
  
       ObjectWaiter * List = _EntryList ;
       if (List != NULL) {
-@@ -1870,7 +1870,7 @@
+@@ -1866,7 +1866,7 @@
       guarantee (iterator->_notified == 0, "invariant") ;
       iterator->_notified = 1 ;
       Thread * Self = THREAD;
@@ -1238,9 +1611,9 @@
       if (Policy != 4) {
          iterator->TState = ObjectWaiter::TS_ENTER ;
       }
---- ./hotspot/src/share/vm/runtime/os.cpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/share/vm/runtime/os.cpp	Sat Aug 20 11:56:24 2016 -0700
-@@ -399,13 +399,6 @@
+--- ./hotspot/src/share/vm/runtime/os.cpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/share/vm/runtime/os.cpp	Sun May 21 11:12:48 2017 -0700
+@@ -403,13 +403,6 @@
      if (_native_java_library == NULL) {
        vm_exit_during_initialization("Unable to load native library", ebuf);
      }
@@ -1254,8 +1627,8 @@
    }
    static jboolean onLoaded = JNI_FALSE;
    if (onLoaded) {
---- ./hotspot/src/share/vm/runtime/os.hpp	Wed Jul 20 04:05:08 2016 +0100
-+++ ./hotspot/src/share/vm/runtime/os.hpp	Sat Aug 20 11:56:24 2016 -0700
+--- ./hotspot/src/share/vm/runtime/os.hpp	Wed Jan 18 01:08:41 2017 +0000
++++ ./hotspot/src/share/vm/runtime/os.hpp	Sun May 21 11:12:48 2017 -0700
 @@ -30,6 +30,9 @@
  #include "runtime/extendedPC.hpp"
  #include "runtime/handles.hpp"
@@ -1266,8 +1639,8 @@
  #ifdef TARGET_OS_FAMILY_linux

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-ports-all mailing list