src/hotspot/share/runtime/java.hpp
changeset 47216 71c04702a3d5
parent 44326 6c59cca7ff07
child 49364 601146c66cad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/runtime/java.hpp	Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 1997, 2017, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * 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.
+ *
+ */
+
+#ifndef SHARE_VM_RUNTIME_JAVA_HPP
+#define SHARE_VM_RUNTIME_JAVA_HPP
+
+#include "runtime/os.hpp"
+
+// Execute code before all handles are released and thread is killed; prologue to vm_exit
+extern void before_exit(JavaThread * thread);
+
+// Forced VM exit (i.e, internal error or JVM_Exit)
+extern void vm_exit(int code);
+
+// Wrapper for ::exit()
+extern void vm_direct_exit(int code);
+
+// Shutdown the VM but do not exit the process
+extern void vm_shutdown();
+// Shutdown the VM and abort the process
+extern void vm_abort(bool dump_core=true);
+
+// Trigger any necessary notification of the VM being shutdown
+extern void notify_vm_shutdown();
+
+// VM exit if error occurs during initialization of VM
+extern void vm_exit_during_initialization();
+extern void vm_exit_during_initialization(Handle exception);
+extern void vm_exit_during_initialization(Symbol* exception_name, const char* message);
+extern void vm_exit_during_initialization(const char* error, const char* message = NULL);
+extern void vm_shutdown_during_initialization(const char* error, const char* message = NULL);
+
+/**
+ * With the integration of the changes to handle the version string
+ * as defined by JEP-223, most of the code related to handle the version
+ * string prior to JDK 1.6 was removed (partial initialization)
+ */
+class JDK_Version VALUE_OBJ_CLASS_SPEC {
+  friend class VMStructs;
+  friend class Universe;
+  friend void JDK_Version_init();
+ private:
+
+  static JDK_Version _current;
+  static const char* _runtime_name;
+  static const char* _runtime_version;
+
+  uint8_t _major;
+  uint8_t _minor;
+  uint8_t _security;
+  uint8_t _patch;
+  uint8_t _build;
+
+  bool _thread_park_blocker;
+  bool _post_vm_init_hook_enabled;
+
+  bool is_valid() const {
+    return (_major != 0);
+  }
+
+  // initializes or partially initializes the _current static field
+  static void initialize();
+
+ public:
+
+  JDK_Version() : _major(0), _minor(0), _security(0), _patch(0), _build(0),
+                  _thread_park_blocker(false), _post_vm_init_hook_enabled(false)
+                  {}
+
+  JDK_Version(uint8_t major, uint8_t minor = 0, uint8_t security = 0,
+              uint8_t patch = 0, uint8_t build = 0,
+              bool thread_park_blocker = false, bool post_vm_init_hook_enabled = false) :
+      _major(major), _minor(minor), _security(security), _patch(patch), _build(build),
+      _thread_park_blocker(thread_park_blocker),
+      _post_vm_init_hook_enabled(post_vm_init_hook_enabled)
+      {}
+
+  // Returns the current running JDK version
+  static JDK_Version current() { return _current; }
+
+  // Factory methods for convenience
+  static JDK_Version jdk(uint8_t m) {
+    return JDK_Version(m);
+  }
+
+  static JDK_Version undefined() {
+    return JDK_Version(0);
+  }
+
+  bool is_undefined() const {
+    return _major == 0;
+  }
+
+  uint8_t major_version() const          { return _major; }
+  uint8_t minor_version() const          { return _minor; }
+  uint8_t security_version() const       { return _security; }
+  uint8_t patch_version() const          { return _patch; }
+  uint8_t build_number() const           { return _build; }
+
+  bool supports_thread_park_blocker() const {
+    return _thread_park_blocker;
+  }
+  bool post_vm_init_hook_enabled() const {
+    return _post_vm_init_hook_enabled;
+  }
+
+  // Performs a full ordering comparison using all fields (patch, build, etc.)
+  int compare(const JDK_Version& other) const;
+
+  /**
+   * Performs comparison using only the major version, returning negative
+   * if the major version of 'this' is less than the parameter, 0 if it is
+   * equal, and a positive value if it is greater.
+   */
+  int compare_major(int version) const {
+      return major_version() - version;
+  }
+
+  void to_string(char* buffer, size_t buflen) const;
+
+  static const char* runtime_name() {
+    return _runtime_name;
+  }
+  static void set_runtime_name(const char* name) {
+    _runtime_name = name;
+  }
+
+  static const char* runtime_version() {
+    return _runtime_version;
+  }
+  static void set_runtime_version(const char* version) {
+    _runtime_version = version;
+  }
+
+};
+
+#endif // SHARE_VM_RUNTIME_JAVA_HPP