Merge ihse-manpages-branch
authorihse
Mon, 26 Nov 2018 08:55:24 +0100
branchihse-manpages-branch
changeset 57042 c672ade1572d
parent 57041 a9e3ec0394d3 (current diff)
parent 52678 7a16ce664d85 (diff)
child 57043 23d7457ca4c6
Merge
--- a/src/hotspot/cpu/arm/interpreterRT_arm.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/arm/interpreterRT_arm.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -82,11 +82,12 @@
   // For ARM, the fast signature handler only needs to know whether
   // the return value must be unboxed. T_OBJECT and T_ARRAY need not
   // be distinguished from each other and all other return values
-  // behave like integers with respect to the handler.
+  // behave like integers with respect to the handler except T_BOOLEAN
+  // which must be mapped to the range 0..1.
   bool unbox = (ret_type == T_OBJECT) || (ret_type == T_ARRAY);
   if (unbox) {
     ret_type = T_OBJECT;
-  } else {
+  } else if (ret_type != T_BOOLEAN) {
     ret_type = T_INT;
   }
   result |= ((uint64_t) ret_type) << shift;
@@ -226,9 +227,6 @@
 
   address result_handler = Interpreter::result_handler(result_type);
 
-  // Check that result handlers are not real handler on ARM (0 or -1).
-  // This ensures the signature handlers do not need symbolic information.
-  assert((result_handler == NULL)||(result_handler==(address)0xffffffff),"");
   __ mov_slow(R0, (intptr_t)result_handler);
 
   __ ret();
--- a/src/hotspot/cpu/arm/macroAssembler_arm.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/arm/macroAssembler_arm.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -941,6 +941,12 @@
   bind(done);
 }
 
+void MacroAssembler::c2bool(Register x)
+{
+  tst(x, 0xff);   // Only look at the lowest byte
+  mov(x, 1, ne);
+}
+
 void MacroAssembler::null_check(Register reg, Register tmp, int offset) {
   if (needs_explicit_null_check(offset)) {
     assert_different_registers(reg, tmp);
--- a/src/hotspot/cpu/arm/macroAssembler_arm.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/arm/macroAssembler_arm.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -853,6 +853,8 @@
     sub(dst, r1, AsmOperand(r2, lsl, shift));
   }
 
+  // C 'boolean' to Java boolean: x == 0 ? 0 : 1
+  void c2bool(Register x);
 
     // klass oop manipulations if compressed
 
--- a/src/hotspot/cpu/arm/sharedRuntime_arm.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/arm/sharedRuntime_arm.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -1211,6 +1211,11 @@
     __ restore_default_fp_mode();
   }
 
+  // Ensure a Boolean result is mapped to 0..1
+  if (ret_type == T_BOOLEAN) {
+    __ c2bool(R0);
+  }
+
   // Do a safepoint check while thread is in transition state
   InlinedAddress safepoint_state(SafepointSynchronize::address_of_state());
   Label call_safepoint_runtime, return_to_java;
--- a/src/hotspot/cpu/arm/templateInterpreterGenerator_arm.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/arm/templateInterpreterGenerator_arm.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -316,13 +316,27 @@
 }
 
 address TemplateInterpreterGenerator::generate_result_handler_for(BasicType type) {
-  // Result handlers are not used on 32-bit ARM
-  // since the returned value is already in appropriate format.
-  __ should_not_reach_here();  // to avoid empty code block
+  address entry = __ pc();
 
-  // The result handler non-zero indicates an object is returned and this is
-  // used in the native entry code.
-  return type == T_OBJECT ? (address)(-1) : NULL;
+  switch (type) {
+  case T_CHAR    : /* Nothing to do */  break;
+  case T_BYTE    : /* Nothing to do */  break;
+  case T_SHORT   : /* Nothing to do */  break;
+  case T_INT     : /* Nothing to do */  break;
+  case T_LONG    : /* Nothing to do */  break;
+  case T_VOID    : /* Nothing to do */  break;
+  case T_DOUBLE  : /* Nothing to do */  break;
+  case T_FLOAT   : /* Nothing to do */  break;
+  case T_BOOLEAN : __ c2bool(R0);       break;
+  case T_OBJECT  :
+    __ ldr(R0, Address(FP, frame::interpreter_frame_oop_temp_offset * wordSize));
+    __ verify_oop(R0);
+    break;
+  default        : __ should_not_reach_here(); break;
+  }
+
+  __ ret();
+  return entry;
 }
 
 address TemplateInterpreterGenerator::generate_safept_entry_for(TosState state, address runtime_entry) {
@@ -985,8 +999,9 @@
   // Unbox oop result, e.g. JNIHandles::resolve result if it's an oop.
   {
     Label Lnot_oop;
-    // For ARM32, Rresult_handler is -1 for oop result, 0 otherwise.
-    __ cbz(Rresult_handler, Lnot_oop);
+    __ mov_slow(Rtemp, AbstractInterpreter::result_handler(T_OBJECT));
+    __ cmp(Rtemp, Rresult_handler);
+    __ b(Lnot_oop, ne);
     Register value = Rsaved_result_lo;
     __ resolve_jobject(value,   // value
                        Rtemp,   // tmp1
@@ -1028,10 +1043,9 @@
   //       not properly paired (was bug - gri 11/22/99).
   __ notify_method_exit(vtos, InterpreterMacroAssembler::NotifyJVMTI, true, Rsaved_result_lo, Rsaved_result_hi, saved_result_fp);
 
-  // Restore the result. Oop result is restored from the stack.
-  __ cmp(Rresult_handler, 0);
-  __ ldr(R0, Address(FP, frame::interpreter_frame_oop_temp_offset * wordSize), ne);
-  __ mov(R0, Rsaved_result_lo, eq);
+  // Restore the result. Oop result is restored from the stack by the
+  // result handler.
+  __ mov(R0, Rsaved_result_lo);
   __ mov(R1, Rsaved_result_hi);
 
 #ifdef __ABI_HARD__
@@ -1039,15 +1053,7 @@
   __ fcpyd(D0, D8);
 #endif // __ABI_HARD__
 
-#ifdef ASSERT
-  if (VerifyOops) {
-    Label L;
-    __ cmp(Rresult_handler, 0);
-    __ b(L, eq);
-    __ verify_oop(R0);
-    __ bind(L);
-  }
-#endif // ASSERT
+  __ blx(Rresult_handler);
 
   // Restore FP/LR, sender_sp and return
   __ mov(Rtemp, FP);
--- a/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -292,11 +292,11 @@
 bool LIRGenerator::strength_reduce_multiply(LIR_Opr left, int c, LIR_Opr result, LIR_Opr tmp) {
   assert(left != result, "should be different registers");
   if (is_power_of_2(c + 1)) {
-    __ shift_left(left, log2_intptr(c + 1), result);
+    __ shift_left(left, log2_int(c + 1), result);
     __ sub(result, left, result);
     return true;
   } else if (is_power_of_2(c - 1)) {
-    __ shift_left(left, log2_intptr(c - 1), result);
+    __ shift_left(left, log2_int(c - 1), result);
     __ add(result, left, result);
     return true;
   }
--- a/src/hotspot/cpu/s390/c1_LIRGenerator_s390.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/s390/c1_LIRGenerator_s390.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -227,12 +227,12 @@
   if (tmp->is_valid()) {
     if (is_power_of_2(c + 1)) {
       __ move(left, tmp);
-      __ shift_left(left, log2_intptr(c + 1), left);
+      __ shift_left(left, log2_int(c + 1), left);
       __ sub(left, tmp, result);
       return true;
     } else if (is_power_of_2(c - 1)) {
       __ move(left, tmp);
-      __ shift_left(left, log2_intptr(c - 1), left);
+      __ shift_left(left, log2_int(c - 1), left);
       __ add(left, tmp, result);
       return true;
     }
--- a/src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -502,7 +502,7 @@
         __ and3(Rscratch, divisor - 1, Rscratch);
       }
       __ add(Rdividend, Rscratch, Rscratch);
-      __ sra(Rscratch, log2_intptr(divisor), Rresult);
+      __ sra(Rscratch, log2_int(divisor), Rresult);
       return;
     } else {
       if (divisor == 2) {
--- a/src/hotspot/cpu/sparc/c1_LIRGenerator_sparc.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/sparc/c1_LIRGenerator_sparc.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -284,11 +284,11 @@
 bool LIRGenerator::strength_reduce_multiply(LIR_Opr left, int c, LIR_Opr result, LIR_Opr tmp) {
   assert(left != result, "should be different registers");
   if (is_power_of_2(c + 1)) {
-    __ shift_left(left, log2_intptr(c + 1), result);
+    __ shift_left(left, log2_int(c + 1), result);
     __ sub(result, left, result);
     return true;
   } else if (is_power_of_2(c - 1)) {
-    __ shift_left(left, log2_intptr(c - 1), result);
+    __ shift_left(left, log2_int(c - 1), result);
     __ add(result, left, result);
     return true;
   }
--- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -2555,7 +2555,7 @@
   Register dreg = result->as_register();
 
   if (right->is_constant()) {
-    int divisor = right->as_constant_ptr()->as_jint();
+    jint divisor = right->as_constant_ptr()->as_jint();
     assert(divisor > 0 && is_power_of_2(divisor), "must be");
     if (code == lir_idiv) {
       assert(lreg == rax, "must be rax,");
@@ -2567,7 +2567,7 @@
         __ andl(rdx, divisor - 1);
         __ addl(lreg, rdx);
       }
-      __ sarl(lreg, log2_intptr(divisor));
+      __ sarl(lreg, log2_jint(divisor));
       move_regs(lreg, dreg);
     } else if (code == lir_irem) {
       Label done;
--- a/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -244,12 +244,12 @@
   if (tmp->is_valid() && c > 0 && c < max_jint) {
     if (is_power_of_2(c + 1)) {
       __ move(left, tmp);
-      __ shift_left(left, log2_intptr(c + 1), left);
+      __ shift_left(left, log2_jint(c + 1), left);
       __ sub(left, tmp, result);
       return true;
     } else if (is_power_of_2(c - 1)) {
       __ move(left, tmp);
-      __ shift_left(left, log2_intptr(c - 1), left);
+      __ shift_left(left, log2_jint(c - 1), left);
       __ add(left, tmp, result);
       return true;
     }
--- a/src/hotspot/share/code/dependencyContext.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/code/dependencyContext.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -118,13 +118,13 @@
   // Safepoints are forbidden during DC lifetime. GC can invalidate
   // _dependency_context_addr if it relocates the holder
   // (e.g. CallSiteContext Java object).
-  int _safepoint_counter;
+  uint64_t _safepoint_counter;
 
   DependencyContext(intptr_t* addr) : _dependency_context_addr(addr),
-    _safepoint_counter(SafepointSynchronize::_safepoint_counter) {}
+    _safepoint_counter(SafepointSynchronize::safepoint_counter()) {}
 
   ~DependencyContext() {
-    assert(_safepoint_counter == SafepointSynchronize::_safepoint_counter, "safepoint happened");
+    assert(_safepoint_counter == SafepointSynchronize::safepoint_counter(), "safepoint happened");
   }
 #else
   DependencyContext(intptr_t* addr) : _dependency_context_addr(addr) {}
--- a/src/hotspot/share/gc/g1/g1Allocator.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1Allocator.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -262,8 +262,9 @@
   // Create the _archive_region_map which is used to identify archive objects.
   static inline void enable_archive_object_check();
 
-  // Set the regions containing the specified address range as archive/non-archive.
+  // Mark regions containing the specified address range as archive/non-archive.
   static inline void set_range_archive(MemRegion range, bool open);
+  static inline void clear_range_archive(MemRegion range, bool open);
 
   // Check if the object is in closed archive
   static inline bool is_closed_archive_object(oop object);
--- a/src/hotspot/share/gc/g1/g1Allocator.inline.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1Allocator.inline.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -109,6 +109,10 @@
 // Set the regions containing the specified address range as archive.
 inline void G1ArchiveAllocator::set_range_archive(MemRegion range, bool open) {
   assert(_archive_check_enabled, "archive range check not enabled");
+  log_info(gc, cds)("Mark %s archive regions in map: [" PTR_FORMAT ", " PTR_FORMAT "]",
+                     open ? "open" : "closed",
+                     p2i(range.start()),
+                     p2i(range.last()));
   if (open) {
     _open_archive_region_map.set_by_address(range, true);
   } else {
@@ -116,6 +120,20 @@
   }
 }
 
+// Clear the archive regions map containing the specified address range.
+inline void G1ArchiveAllocator::clear_range_archive(MemRegion range, bool open) {
+  assert(_archive_check_enabled, "archive range check not enabled");
+  log_info(gc, cds)("Clear %s archive regions in map: [" PTR_FORMAT ", " PTR_FORMAT "]",
+                    open ? "open" : "closed",
+                    p2i(range.start()),
+                    p2i(range.last()));
+  if (open) {
+    _open_archive_region_map.set_by_address(range, false);
+  } else {
+    _closed_archive_region_map.set_by_address(range, false);
+  }
+}
+
 // Check if an object is in a closed archive region using the _archive_region_map.
 inline bool G1ArchiveAllocator::in_closed_archive_range(oop object) {
   // This is the out-of-line part of is_closed_archive_object test, done separately
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -753,7 +753,7 @@
   return result;
 }
 
-void G1CollectedHeap::dealloc_archive_regions(MemRegion* ranges, size_t count) {
+void G1CollectedHeap::dealloc_archive_regions(MemRegion* ranges, size_t count, bool is_open) {
   assert(!is_init_completed(), "Expect to be called at JVM init time");
   assert(ranges != NULL, "MemRegion array NULL");
   assert(count != 0, "No MemRegions provided");
@@ -815,7 +815,7 @@
     }
 
     // Notify mark-sweep that this is no longer an archive range.
-    G1ArchiveAllocator::set_range_archive(ranges[i], false);
+    G1ArchiveAllocator::clear_range_archive(ranges[i], is_open);
   }
 
   if (uncommitted_regions != 0) {
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -683,7 +683,7 @@
   // which had been allocated by alloc_archive_regions. This should be called
   // rather than fill_archive_regions at JVM init time if the archive file
   // mapping failed, with the same non-overlapping and sorted MemRegion array.
-  void dealloc_archive_regions(MemRegion* range, size_t count);
+  void dealloc_archive_regions(MemRegion* range, size_t count, bool is_open);
 
   oop materialize_archived_object(oop obj);
 
--- a/src/hotspot/share/gc/g1/g1HeapVerifier.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1HeapVerifier.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -23,6 +23,7 @@
  */
 
 #include "precompiled.hpp"
+#include "code/nmethod.hpp"
 #include "gc/g1/g1Allocator.inline.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1ConcurrentMarkThread.hpp"
--- a/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -447,6 +447,7 @@
   if (registered_symbol == NULL) {
     registered_symbol = SymbolTable::lookup_only(registered_constant, sizeof registered_constant - 1, unused_hash);
     if (registered_symbol == NULL) {
+      untypedEventHandler = true;
       return false;
     }
   }
--- a/src/hotspot/share/jfr/metadata/metadata.xml	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/jfr/metadata/metadata.xml	Mon Nov 26 08:55:24 2018 +0100
@@ -67,7 +67,7 @@
   <Event name="BiasedLockRevocation" category="Java Application" label="Biased Lock Revocation" description="Revoked bias of object" thread="true"
     stackTrace="true">
     <Field type="Class" name="lockClass" label="Lock Class" description="Class of object whose biased lock was revoked" />
-    <Field type="int" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
     <Field type="Thread" name="previousOwner" label="Previous Owner" description="Thread owning the bias before revocation" />
   </Event>
 
@@ -80,7 +80,7 @@
     thread="true" stackTrace="true">
     <Field type="Class" name="revokedClass" label="Revoked Class" description="Class whose biased locks were revoked" />
     <Field type="boolean" name="disableBiasing" label="Disable Further Biasing" description="Whether further biasing for instances of this class will be allowed" />
-    <Field type="int" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
   </Event>
 
   <Event name="ReservedStackActivation" category="Java Virtual Machine, Runtime" label="Reserved Stack Activation"
@@ -519,14 +519,14 @@
   </Event>
 
   <Event name="SafepointBegin" category="Java Virtual Machine, Runtime, Safepoint" label="Safepoint Begin" description="Safepointing begin" thread="true">
-    <Field type="int" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
     <Field type="int" name="totalThreadCount" label="Total Threads" description="The total number of threads at the start of safe point" />
     <Field type="int" name="jniCriticalThreadCount" label="JNI Critical Threads" description="The number of threads in JNI critical sections" />
   </Event>
 
   <Event name="SafepointStateSynchronization" category="Java Virtual Machine, Runtime, Safepoint" label="Safepoint State Synchronization" description="Synchronize run state of threads"
     thread="true">
-    <Field type="int" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
     <Field type="int" name="initialThreadCount" label="Initial Threads" description="The number of threads running at the beginning of state check" />
     <Field type="int" name="runningThreadCount" label="Running Threads" description="The number of threads still running" />
     <Field type="int" name="iterations" label="Iterations" description="Number of state check iterations" />
@@ -534,23 +534,23 @@
 
   <Event name="SafepointWaitBlocked" category="Java Virtual Machine, Runtime, Safepoint" label="Safepoint Wait Blocked" description="Safepointing begin waiting on running threads to block"
     thread="true">
-    <Field type="int" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
     <Field type="int" name="runningThreadCount" label="Running Threads" description="The number running of threads wait for safe point" />
   </Event>
 
   <Event name="SafepointCleanup" category="Java Virtual Machine, Runtime, Safepoint" label="Safepoint Cleanup" description="Safepointing begin running cleanup tasks"
     thread="true">
-    <Field type="int" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
   </Event>
 
   <Event name="SafepointCleanupTask" category="Java Virtual Machine, Runtime, Safepoint" label="Safepoint Cleanup Task" description="Safepointing begin running cleanup tasks"
     thread="true">
-    <Field type="int" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
     <Field type="string" name="name" label="Task Name" description="The task name" />
   </Event>
 
   <Event name="SafepointEnd" category="Java Virtual Machine, Runtime, Safepoint" label="Safepoint End" description="Safepointing end" thread="true">
-    <Field type="int" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
   </Event>
 
   <Event name="ExecuteVMOperation" category="Java Virtual Machine, Runtime" label="VM Operation" description="Execution of a VM Operation" thread="true">
@@ -559,7 +559,7 @@
     <Field type="boolean" name="blocking" label="Caller Blocked" description="If the calling thread was blocked until the operation was complete" />
     <Field type="Thread" name="caller" label="Caller" transition="from"
       description="Thread requesting operation. If non-blocking, will be set to 0 indicating thread is unknown" />
-    <Field type="int" name="safepointId" label="Safepoint Identifier" description="The safepoint (if any) under which this operation was completed"
+    <Field type="ulong" name="safepointId" label="Safepoint Identifier" description="The safepoint (if any) under which this operation was completed"
       relation="SafepointId" />
   </Event>
 
--- a/src/hotspot/share/memory/filemap.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/memory/filemap.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -1096,7 +1096,7 @@
                                 si->_allow_exec);
     if (base == NULL || base != addr) {
       // dealloc the regions from java heap
-      dealloc_archive_heap_regions(regions, region_num);
+      dealloc_archive_heap_regions(regions, region_num, is_open_archive);
       log_info(cds)("UseSharedSpaces: Unable to map at required address in java heap. "
                     INTPTR_FORMAT ", size = " SIZE_FORMAT " bytes",
                     p2i(addr), regions[i].byte_size());
@@ -1106,7 +1106,7 @@
 
   if (!verify_mapped_heap_regions(first, region_num)) {
     // dealloc the regions from java heap
-    dealloc_archive_heap_regions(regions, region_num);
+    dealloc_archive_heap_regions(regions, region_num, is_open_archive);
     log_info(cds)("UseSharedSpaces: mapped heap regions are corrupt");
     return false;
   }
@@ -1171,10 +1171,10 @@
 }
 
 // dealloc the archive regions from java heap
-void FileMapInfo::dealloc_archive_heap_regions(MemRegion* regions, int num) {
+void FileMapInfo::dealloc_archive_heap_regions(MemRegion* regions, int num, bool is_open) {
   if (num > 0) {
     assert(regions != NULL, "Null archive ranges array with non-zero count");
-    G1CollectedHeap::heap()->dealloc_archive_regions(regions, num);
+    G1CollectedHeap::heap()->dealloc_archive_regions(regions, num, is_open);
   }
 }
 #endif // INCLUDE_CDS_JAVA_HEAP
@@ -1428,9 +1428,11 @@
     // Dealloc the archive heap regions only without unmapping. The regions are part
     // of the java heap. Unmapping of the heap regions are managed by GC.
     map_info->dealloc_archive_heap_regions(open_archive_heap_ranges,
-                                           num_open_archive_heap_ranges);
+                                           num_open_archive_heap_ranges,
+                                           true);
     map_info->dealloc_archive_heap_regions(closed_archive_heap_ranges,
-                                           num_closed_archive_heap_ranges);
+                                           num_closed_archive_heap_ranges,
+                                           false);
   } else if (DumpSharedSpaces) {
     fail_stop("%s", msg);
   }
--- a/src/hotspot/share/memory/filemap.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/memory/filemap.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -327,7 +327,7 @@
   bool  map_heap_data(MemRegion **heap_mem, int first, int max, int* num,
                       bool is_open = false) NOT_CDS_JAVA_HEAP_RETURN_(false);
   bool  verify_mapped_heap_regions(int first, int num) NOT_CDS_JAVA_HEAP_RETURN_(false);
-  void  dealloc_archive_heap_regions(MemRegion* regions, int num) NOT_CDS_JAVA_HEAP_RETURN;
+  void  dealloc_archive_heap_regions(MemRegion* regions, int num, bool is_open) NOT_CDS_JAVA_HEAP_RETURN;
 
   CDSFileMapRegion* space_at(int i) {
     return _header->space_at(i);
--- a/src/hotspot/share/memory/iterator.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/memory/iterator.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, 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
@@ -23,6 +23,7 @@
  */
 
 #include "precompiled.hpp"
+#include "code/nmethod.hpp"
 #include "memory/iterator.inline.hpp"
 #include "memory/universe.hpp"
 #include "oops/oop.inline.hpp"
--- a/src/hotspot/share/opto/divnode.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/opto/divnode.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -133,7 +133,7 @@
     }
 
     // Add rounding to the shift to handle the sign bit
-    int l = log2_intptr(d-1)+1;
+    int l = log2_jint(d-1)+1;
     if (needs_rounding) {
       // Divide-by-power-of-2 can be made into a shift, but you have to do
       // more math for the rounding.  You need to add 0 for positive
--- a/src/hotspot/share/opto/mulnode.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/opto/mulnode.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -199,21 +199,21 @@
   Node *res = NULL;
   unsigned int bit1 = abs_con & (0-abs_con);       // Extract low bit
   if (bit1 == abs_con) {           // Found a power of 2?
-    res = new LShiftINode(in(1), phase->intcon(log2_intptr(bit1)));
+    res = new LShiftINode(in(1), phase->intcon(log2_uint(bit1)));
   } else {
 
     // Check for constant with 2 bits set
     unsigned int bit2 = abs_con-bit1;
     bit2 = bit2 & (0-bit2);          // Extract 2nd bit
     if (bit2 + bit1 == abs_con) {    // Found all bits in con?
-      Node *n1 = phase->transform( new LShiftINode(in(1), phase->intcon(log2_intptr(bit1))));
-      Node *n2 = phase->transform( new LShiftINode(in(1), phase->intcon(log2_intptr(bit2))));
+      Node *n1 = phase->transform( new LShiftINode(in(1), phase->intcon(log2_uint(bit1))));
+      Node *n2 = phase->transform( new LShiftINode(in(1), phase->intcon(log2_uint(bit2))));
       res = new AddINode(n2, n1);
 
     } else if (is_power_of_2(abs_con+1)) {
       // Sleezy: power-of-2 -1.  Next time be generic.
       unsigned int temp = abs_con + 1;
-      Node *n1 = phase->transform(new LShiftINode(in(1), phase->intcon(log2_intptr(temp))));
+      Node *n1 = phase->transform(new LShiftINode(in(1), phase->intcon(log2_uint(temp))));
       res = new SubINode(n1, in(1));
     } else {
       return MulNode::Ideal(phase, can_reshape);
@@ -445,7 +445,7 @@
     // Masking off high bits which are always zero is useless.
     const TypeInt* t1 = phase->type( in(1) )->isa_int();
     if (t1 != NULL && t1->_lo >= 0) {
-      jint t1_support = right_n_bits(1 + log2_intptr(t1->_hi));
+      jint t1_support = right_n_bits(1 + log2_jint(t1->_hi));
       if ((t1_support & con) == t1_support)
         return in1;
     }
--- a/src/hotspot/share/runtime/compilationPolicy.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/runtime/compilationPolicy.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -228,7 +228,7 @@
     // Example: if CICompilerCountPerCPU is true, then we get
     // max(log2(8)-1,1) = 2 compiler threads on an 8-way machine.
     // May help big-app startup time.
-    _compiler_count = MAX2(log2_intptr(os::active_processor_count())-1,1);
+    _compiler_count = MAX2(log2_int(os::active_processor_count())-1,1);
     // Make sure there is enough space in the code cache to hold all the compiler buffers
     size_t buffer_size = 1;
 #ifdef COMPILER1
--- a/src/hotspot/share/runtime/safepoint.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/runtime/safepoint.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -141,7 +141,7 @@
 
 SafepointSynchronize::SynchronizeState volatile SafepointSynchronize::_state = SafepointSynchronize::_not_synchronized;
 volatile int  SafepointSynchronize::_waiting_to_block = 0;
-volatile int SafepointSynchronize::_safepoint_counter = 0;
+volatile uint64_t SafepointSynchronize::_safepoint_counter = 0;
 int SafepointSynchronize::_current_jni_active_count = 0;
 long  SafepointSynchronize::_end_of_last_safepoint = 0;
 int SafepointSynchronize::_defer_thr_suspend_loop_count = 4000;
--- a/src/hotspot/share/runtime/safepoint.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/runtime/safepoint.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -25,13 +25,10 @@
 #ifndef SHARE_VM_RUNTIME_SAFEPOINT_HPP
 #define SHARE_VM_RUNTIME_SAFEPOINT_HPP
 
-#include "asm/assembler.hpp"
-#include "code/nmethod.hpp"
 #include "memory/allocation.hpp"
-#include "runtime/atomic.hpp"
-#include "runtime/extendedPC.hpp"
 #include "runtime/mutexLocker.hpp"
 #include "runtime/os.hpp"
+#include "utilities/globalDefinitions.hpp"
 #include "utilities/ostream.hpp"
 
 //
@@ -50,8 +47,7 @@
 
 
 class ThreadSafepointState;
-class SnippetCache;
-class nmethod;
+class JavaThread;
 
 //
 // Implements roll-forward to safepoint (safepoint synchronization)
@@ -101,11 +97,11 @@
   // safepoint. The fact that Threads_lock is held throughout each pair of
   // increments (at the beginning and end of each safepoint) guarantees
   // race freedom.
-public:
-  static volatile int _safepoint_counter;
+  static volatile uint64_t _safepoint_counter;
+
 private:
-  static long         _end_of_last_safepoint;     // Time of last safepoint in milliseconds
-  static julong       _coalesced_vmop_count;     // coalesced vmop count
+  static long              _end_of_last_safepoint;     // Time of last safepoint in milliseconds
+  static julong            _coalesced_vmop_count;     // coalesced vmop count
 
   // Statistics
   static void begin_statistics(int nof_threads, int nof_running);
@@ -132,9 +128,9 @@
   static void check_for_lazy_critical_native(JavaThread *thread, JavaThreadState state);
 
   // Query
-  inline static bool is_at_safepoint()   { return _state == _synchronized;  }
-  inline static bool is_synchronizing()  { return _state == _synchronizing;  }
-  inline static int safepoint_counter()  { return _safepoint_counter; }
+  inline static bool is_at_safepoint()       { return _state == _synchronized; }
+  inline static bool is_synchronizing()      { return _state == _synchronizing; }
+  inline static uint64_t safepoint_counter() { return _safepoint_counter; }
 
   inline static void increment_jni_active_count() {
     assert_locked_or_safepoint(Safepoint_lock);
@@ -176,8 +172,17 @@
   // Assembly support
   static address address_of_state()                        { return (address)&_state; }
 
-  static address safepoint_counter_addr()                  { return (address)&_safepoint_counter; }
-
+  // Only used for making sure that no safepoint has happened in
+  // JNI_FastGetField. Therefore only the low 32-bits are needed
+  // even if this is a 64-bit counter.
+  static address safepoint_counter_addr() {
+#ifdef VM_LITTLE_ENDIAN
+    return (address)&_safepoint_counter;
+#else /* BIG */
+    // Return pointer to the 32 LSB:
+    return (address) (((uint32_t*)(&_safepoint_counter)) + 1);
+#endif
+  }
 };
 
 // Some helper assert macros for safepoint checks.
--- a/src/hotspot/share/runtime/thread.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/runtime/thread.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -26,6 +26,7 @@
 #define SHARE_VM_RUNTIME_THREAD_HPP
 
 #include "jni.h"
+#include "code/compiledMethod.hpp"
 #include "gc/shared/gcThreadLocalData.hpp"
 #include "gc/shared/threadLocalAllocBuffer.hpp"
 #include "memory/allocation.hpp"
@@ -40,7 +41,6 @@
 #include "runtime/os.hpp"
 #include "runtime/osThread.hpp"
 #include "runtime/park.hpp"
-#include "runtime/safepoint.hpp"
 #include "runtime/stubRoutines.hpp"
 #include "runtime/threadHeapSampler.hpp"
 #include "runtime/threadLocalStorage.hpp"
@@ -994,7 +994,7 @@
  public:                                         // Expose _thread_state for SafeFetchInt()
   volatile JavaThreadState _thread_state;
  private:
-  ThreadSafepointState *_safepoint_state;        // Holds information about a thread during a safepoint
+  ThreadSafepointState* _safepoint_state;        // Holds information about a thread during a safepoint
   address               _saved_exception_pc;     // Saved pc of instruction where last implicit exception happened
 
   // JavaThread termination support
@@ -1226,9 +1226,9 @@
   inline JavaThreadState thread_state() const;
   inline void set_thread_state(JavaThreadState s);
 #endif
-  ThreadSafepointState *safepoint_state() const  { return _safepoint_state; }
-  void set_safepoint_state(ThreadSafepointState *state) { _safepoint_state = state; }
-  bool is_at_poll_safepoint()                    { return _safepoint_state->is_at_poll_safepoint(); }
+  inline ThreadSafepointState* safepoint_state() const;
+  inline void set_safepoint_state(ThreadSafepointState* state);
+  inline bool is_at_poll_safepoint();
 
   // JavaThread termination and lifecycle support:
   void smr_delete();
@@ -1751,13 +1751,7 @@
   // JNI critical regions. These can nest.
   bool in_critical()    { return _jni_active_critical > 0; }
   bool in_last_critical()  { return _jni_active_critical == 1; }
-  void enter_critical() {
-    assert(Thread::current() == this ||
-           (Thread::current()->is_VM_thread() &&
-           SafepointSynchronize::is_synchronizing()),
-           "this must be current thread or synchronizing");
-    _jni_active_critical++;
-  }
+  inline void enter_critical();
   void exit_critical() {
     assert(Thread::current() == this, "this must be current thread");
     _jni_active_critical--;
--- a/src/hotspot/share/runtime/thread.inline.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/runtime/thread.inline.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -29,6 +29,7 @@
 #include "runtime/globals.hpp"
 #include "runtime/orderAccess.hpp"
 #include "runtime/os.inline.hpp"
+#include "runtime/safepoint.hpp"
 #include "runtime/thread.hpp"
 
 inline void Thread::set_suspend_flag(SuspendFlags f) {
@@ -130,6 +131,26 @@
 }
 #endif
 
+ThreadSafepointState* JavaThread::safepoint_state() const  {
+  return _safepoint_state;
+}
+
+void JavaThread::set_safepoint_state(ThreadSafepointState *state) {
+  _safepoint_state = state;
+}
+
+bool JavaThread::is_at_poll_safepoint() {
+  return _safepoint_state->is_at_poll_safepoint();
+}
+
+void JavaThread::enter_critical() {
+  assert(Thread::current() == this ||
+         (Thread::current()->is_VM_thread() &&
+         SafepointSynchronize::is_synchronizing()),
+         "this must be current thread or synchronizing");
+  _jni_active_critical++;
+}
+
 inline void JavaThread::set_done_attaching_via_jni() {
   _jni_attach_state = _attached_via_jni;
   OrderAccess::fence();
--- a/src/hotspot/share/runtime/tieredThresholdPolicy.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/runtime/tieredThresholdPolicy.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -226,8 +226,8 @@
   }
   if (CICompilerCountPerCPU) {
     // Simple log n seems to grow too slowly for tiered, try something faster: log n * log log n
-    int log_cpu = log2_intptr(os::active_processor_count());
-    int loglog_cpu = log2_intptr(MAX2(log_cpu, 1));
+    int log_cpu = log2_int(os::active_processor_count());
+    int loglog_cpu = log2_int(MAX2(log_cpu, 1));
     count = MAX2(log_cpu * loglog_cpu * 3 / 2, 2);
     // Make sure there is enough space in the code cache to hold all the compiler buffers
     size_t c1_size = Compiler::code_buffer_size();
--- a/src/hotspot/share/services/threadService.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/services/threadService.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -31,6 +31,7 @@
 #include "runtime/jniHandles.hpp"
 #include "runtime/objectMonitor.hpp"
 #include "runtime/perfData.hpp"
+#include "runtime/safepoint.hpp"
 #include "runtime/thread.hpp"
 #include "runtime/threadSMR.hpp"
 #include "services/management.hpp"
--- a/src/hotspot/share/utilities/globalDefinitions.hpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/utilities/globalDefinitions.hpp	Mon Nov 26 08:55:24 2018 +0100
@@ -1032,7 +1032,6 @@
 }
 
 // Returns largest i such that 2^i <= x.
-// If x < 0, the function returns 31 on a 32-bit machine and 63 on a 64-bit machine.
 // If x == 0, the function returns -1.
 inline int log2_intptr(uintptr_t x) {
   int i = -1;
@@ -1047,8 +1046,7 @@
 }
 
 //* largest i such that 2^i <= x
-//  A negative value of 'x' will return '63'
-inline int log2_long(unsigned long x) {
+inline int log2_long(julong x) {
   int i = -1;
   julong p =  1;
   while (p != 0 && p <= x) {
@@ -1060,20 +1058,30 @@
   return i;
 }
 
+// If x < 0, the function returns 31 on a 32-bit machine and 63 on a 64-bit machine.
 inline int log2_intptr(intptr_t x) {
   return log2_intptr((uintptr_t)x);
 }
 
-inline int log2_intptr(int x) {
+inline int log2_int(int x) {
+  STATIC_ASSERT(sizeof(int) <= sizeof(uintptr_t));
+  return log2_intptr((uintptr_t)x);
+}
+
+inline int log2_jint(jint x) {
+  STATIC_ASSERT(sizeof(jint) <= sizeof(uintptr_t));
   return log2_intptr((uintptr_t)x);
 }
 
-inline int log2_intptr(uint x) {
+inline int log2_uint(uint x) {
+  STATIC_ASSERT(sizeof(uint) <= sizeof(uintptr_t));
   return log2_intptr((uintptr_t)x);
 }
 
-inline int log2_long(jlong x) {
-  return log2_long((unsigned long)x);
+//  A negative value of 'x' will return '63'
+inline int log2_jlong(jlong x) {
+  STATIC_ASSERT(sizeof(jlong) <= sizeof(julong));
+  return log2_long((julong)x);
 }
 
 //* the argument must be exactly a power of 2
--- a/src/hotspot/share/utilities/hashtable.cpp	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/hotspot/share/utilities/hashtable.cpp	Mon Nov 26 08:55:24 2018 +0100
@@ -31,6 +31,7 @@
 #include "classfile/placeholders.hpp"
 #include "classfile/protectionDomainCache.hpp"
 #include "classfile/stringTable.hpp"
+#include "code/nmethod.hpp"
 #include "logging/log.hpp"
 #include "memory/allocation.inline.hpp"
 #include "memory/resourceArea.hpp"
@@ -62,7 +63,7 @@
     if (_first_free_entry + _entry_size >= _end_block) {
       int block_size = MIN2(512, MAX2((int)_table_size / 2, (int)_number_of_entries));
       int len = _entry_size * block_size;
-      len = 1 << log2_intptr(len); // round down to power of 2
+      len = 1 << log2_int(len); // round down to power of 2
       assert(len >= _entry_size, "");
       _first_free_entry = NEW_C_HEAP_ARRAY2(char, len, F, CURRENT_PC);
       _entry_blocks->append(_first_free_entry);
--- a/src/jdk.crypto.ec/share/native/libsunec/impl/ec.c	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/jdk.crypto.ec/share/native/libsunec/impl/ec.c	Mon Nov 26 08:55:24 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
  * This library is free software; you can redistribute it and/or
@@ -43,11 +43,11 @@
 
 #include <sys/types.h>
 #ifndef _KERNEL
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #ifndef _WIN32
-#include <stdio.h>
 #include <strings.h>
 #endif /* _WIN32 */
 
@@ -109,16 +109,16 @@
     printf("\n");
 
         if (k1 != NULL) {
-                mp_tohex(k1, mpstr);
+                mp_tohex((mp_int*)k1, mpstr);
                 printf("ec_points_mul: scalar k1: %s\n", mpstr);
-                mp_todecimal(k1, mpstr);
+                mp_todecimal((mp_int*)k1, mpstr);
                 printf("ec_points_mul: scalar k1: %s (dec)\n", mpstr);
         }
 
         if (k2 != NULL) {
-                mp_tohex(k2, mpstr);
+                mp_tohex((mp_int*)k2, mpstr);
                 printf("ec_points_mul: scalar k2: %s\n", mpstr);
-                mp_todecimal(k2, mpstr);
+                mp_todecimal((mp_int*)k2, mpstr);
                 printf("ec_points_mul: scalar k2: %s (dec)\n", mpstr);
         }
 
--- a/src/jdk.crypto.ec/share/native/libsunec/impl/ecdecode.c	Fri Nov 23 20:06:18 2018 +0100
+++ b/src/jdk.crypto.ec/share/native/libsunec/impl/ecdecode.c	Mon Nov 26 08:55:24 2018 +0100
@@ -49,6 +49,7 @@
 #ifdef _KERNEL
 #include <sys/kmem.h>
 #else
+#include <stdio.h>
 #include <string.h>
 #endif
 #include "ec.h"
--- a/test/hotspot/jtreg/ProblemList.txt	Fri Nov 23 20:06:18 2018 +0100
+++ b/test/hotspot/jtreg/ProblemList.txt	Mon Nov 26 08:55:24 2018 +0100
@@ -61,6 +61,8 @@
 
 compiler/runtime/Test8168712.java 8211769,8211771 generic-ppc64,generic-ppc64le,linux-s390x
 
+compiler/intrinsics/mathexact/MulExactLConstantTest.java 8214189 windows-all
+
 #############################################################################
 
 # :hotspot_gc
--- a/test/jdk/jdk/jfr/event/runtime/TestBiasedLockRevocationEvents.java	Fri Nov 23 20:06:18 2018 +0100
+++ b/test/jdk/jdk/jfr/event/runtime/TestBiasedLockRevocationEvents.java	Mon Nov 26 08:55:24 2018 +0100
@@ -275,13 +275,13 @@
         List<RecordedEvent> events = Events.fromRecording(recording);
 
         // Determine which safepoints included single and bulk revocation VM operations
-        Set<Integer> vmOperationsSingle = new HashSet<>();
-        Set<Integer> vmOperationsBulk = new HashSet<>();
+        Set<Long> vmOperationsSingle = new HashSet<>();
+        Set<Long> vmOperationsBulk = new HashSet<>();
 
         for (RecordedEvent event : events) {
             if (event.getEventType().getName().equals(EventNames.ExecuteVMOperation)) {
                 String operation = event.getValue("operation");
-                Integer safepointId = event.getValue("safepointId");
+                Long safepointId = event.getValue("safepointId");
 
                 if (operation.equals("RevokeBias")) {
                     vmOperationsSingle.add(safepointId);
@@ -297,14 +297,14 @@
         // Match all revoke events to a corresponding VMOperation event
         for (RecordedEvent event : events) {
             if (event.getEventType().getName().equals(EventNames.BiasedLockRevocation)) {
-                Integer safepointId = event.getValue("safepointId");
+                Long safepointId = event.getValue("safepointId");
                 String lockClass = ((RecordedClass)event.getValue("lockClass")).getName();
                 if (lockClass.equals(MyLock.class.getName())) {
                     Asserts.assertTrue(vmOperationsSingle.contains(safepointId));
                     revokeCount++;
                 }
             } else if (event.getEventType().getName().equals(EventNames.BiasedLockClassRevocation)) {
-                Integer safepointId = event.getValue("safepointId");
+                Long safepointId = event.getValue("safepointId");
                 String lockClass = ((RecordedClass)event.getValue("revokedClass")).getName();
                 if (lockClass.toString().equals(MyLock.class.getName())) {
                     Asserts.assertTrue(vmOperationsBulk.contains(safepointId));
--- a/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java	Fri Nov 23 20:06:18 2018 +0100
+++ b/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java	Mon Nov 26 08:55:24 2018 +0100
@@ -84,9 +84,9 @@
             }
 
             // Collect all events grouped by safepoint id
-            SortedMap<Integer, Set<String>> safepointIds = new TreeMap<>();
+            SortedMap<Long, Set<String>> safepointIds = new TreeMap<>();
             for (RecordedEvent event : Events.fromRecording(recording)) {
-                Integer safepointId = event.getValue("safepointId");
+                Long safepointId = event.getValue("safepointId");
                 if (!safepointIds.containsKey(safepointId)) {
                     safepointIds.put(safepointId, new HashSet<>());
                 }