This commit is contained in:
Phil Race 2015-05-05 13:29:31 -07:00
commit b8cf472fe8
471 changed files with 8312 additions and 2691 deletions

View File

@ -304,3 +304,4 @@ f40752db7773ca0c737f2ad88371e35c57fdfed7 jdk9-b58
da950f343762a856d69751570a4c07cfa68a415b jdk9-b59
38f98cb6b33562a926ec3b79c7b34128be37647d jdk9-b60
ac3f5a39d4ff14d70c365e12cf5ec8f2abd52a04 jdk9-b61
e7dbbef69d12b6a74dfad331b7188e7f893e8d29 jdk9-b62

View File

@ -304,3 +304,4 @@ f25ee9f62427a9ba27418e5531a89754791a305b jdk9-b57
39e8a131289e8386aa4c3e4b184faa812a7c0421 jdk9-b59
9fa2185bee17462d1014538bff60af6e6f0b01e7 jdk9-b60
ea38728b4f4bdd8fd0d7a89b18069f521cf05013 jdk9-b61
105d045a69174d870b69bfe471b3f2d05a9f8ecc jdk9-b62

View File

@ -478,6 +478,15 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
AUTOCONF_DIR=$TOPDIR/common/autoconf
])
# Evaluates platform specific overrides for devkit variables.
# $1: Name of variable
AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
[
if test "x[$]$1" = x; then
eval $1="\${$1_${OPENJDK_TARGET_CPU}}"
fi
])
AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
[
AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
@ -487,12 +496,27 @@ AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
DEVKIT_ROOT="$with_devkit"
# Check for a meta data info file in the root of the devkit
if test -f "$DEVKIT_ROOT/devkit.info"; then
# This potentially sets the following:
# DEVKIT_NAME: A descriptive name of the devkit
# DEVKIT_TOOLCHAIN_PATH: Corresponds to --with-toolchain-path
# DEVKIT_EXTRA_PATH: Corresponds to --with-extra-path
# DEVKIT_SYSROOT: Corresponds to --with-sysroot
. $DEVKIT_ROOT/devkit.info
# This potentially sets the following:
# A descriptive name of the devkit
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
# Corresponds to --with-extra-path
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
# Corresponds to --with-toolchain-path
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
# Corresponds to --with-sysroot
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_SYSROOT])
# Identifies the Visual Studio version in the devkit
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_VERSION])
# The Visual Studio include environment variable
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_INCLUDE])
# The Visual Studio lib environment variable
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_LIB])
# Corresponds to --with-msvcr-dll
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
# Corresponds to --with-msvcp-dll
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
fi
AC_MSG_CHECKING([for devkit])
@ -502,9 +526,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
AC_MSG_RESULT([$DEVKIT_ROOT])
fi
if test "x$DEVKIT_EXTRA_PATH" != x; then
BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
fi
BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
# Fallback default of just /bin if DEVKIT_PATH is not defined
if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
@ -681,8 +703,12 @@ AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
files_present=`$LS $OUTPUT_ROOT`
# Configure has already touched config.log and confdefs.h in the current dir when this check
# is performed.
filtered_files=`$ECHO "$files_present" | $SED -e 's/config.log//g' -e 's/confdefs.h//g' -e 's/ //g' \
| $TR -d '\n'`
filtered_files=`$ECHO "$files_present" \
| $SED -e 's/config.log//g' \
-e 's/confdefs.h//g' \
-e 's/fixpath.exe//g' \
-e 's/ //g' \
| $TR -d '\n'`
if test "x$filtered_files" != x; then
AC_MSG_NOTICE([Current directory is $CURDIR.])
AC_MSG_NOTICE([Since this is not the source root, configure will output the configuration here])

View File

@ -66,7 +66,7 @@ AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN],
# Going to short mode and back again did indeed matter. Since short mode is
# case insensitive, let's make it lowercase to improve readability.
shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
# Now convert it back to Unix-stile (cygpath)
# Now convert it back to Unix-style (cygpath)
input_path=`$CYGPATH -u "$shortmode_path"`
new_path="$input_path"
fi

File diff suppressed because it is too large Load Diff

View File

@ -189,11 +189,15 @@ AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
ORG_CFLAGS="$CFLAGS"
ORG_CXXFLAGS="$CXXFLAGS"
# autoconf magic only relies on PATH, so update it if tools dir is specified
OLD_PATH="$PATH"
# On Windows, we need to detect the visual studio installation first.
# This will change the PATH, but we need to keep that new PATH even
# after toolchain detection is done, since the compiler (on x86) uses
# it for DLL resolution in runtime.
if test "x$OPENJDK_BUILD_OS" = "xwindows" && test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
if test "x$OPENJDK_BUILD_OS" = "xwindows" \
&& test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV
# Reset path to VS_PATH. It will include everything that was on PATH at the time we
# ran TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV.
@ -203,9 +207,6 @@ AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
export LIB="$VS_LIB"
fi
# autoconf magic only relies on PATH, so update it if tools dir is specified
OLD_PATH="$PATH"
# For solaris we really need solaris tools, and not the GNU equivalent.
# The build tools on Solaris reside in /usr/ccs (C Compilation System),
# so add that to path before starting to probe.

View File

@ -210,6 +210,37 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
done
exit 0
elif test "x$DEVKIT_VS_VERSION" != x; then
VS_VERSION=$DEVKIT_VS_VERSION
TOOLCHAIN_VERSION=$VS_VERSION
eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
VS_PATH="$TOOLCHAIN_PATH:$PATH"
# Convert DEVKIT_VS_INCLUDE into windows style VS_INCLUDE so that it
# can still be exported as INCLUDE for compiler invocations without
# SYSROOT_CFLAGS
OLDIFS="$IFS"
IFS=";"
for i in $DEVKIT_VS_INCLUDE; do
ipath=$i
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([ipath])
VS_INCLUDE="$VS_INCLUDE;$ipath"
done
# Convert DEVKIT_VS_LIB into VS_LIB so that it can still be exported
# as LIB for compiler invocations without SYSROOT_LDFLAGS
for i in $DEVKIT_VS_LIB; do
libpath=$i
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([libpath])
VS_LIB="$VS_LIB;$libpath"
done
IFS="$OLDIFS"
AC_MSG_NOTICE([Found devkit $VS_DESCRIPTION])
elif test "x$with_toolchain_version" != x; then
# User override; check that it is valid
if test "x${VALID_VS_VERSIONS/$with_toolchain_version/}" = "x${VALID_VS_VERSIONS}"; then
@ -262,71 +293,81 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
# First-hand choice is to locate and run the vsvars bat file.
TOOLCHAIN_FIND_VISUAL_STUDIO
if test "x$VS_ENV_CMD" != x; then
# We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file.
BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD)
# If we have a devkit, skip all of the below.
if test "x$DEVKIT_VS_VERSION" = x; then
if test "x$VS_ENV_CMD" != x; then
# We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file.
BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD)
# Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
AC_MSG_NOTICE([Trying to extract Visual Studio environment variables])
# Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
AC_MSG_NOTICE([Trying to extract Visual Studio environment variables])
# We need to create a couple of temporary files.
VS_ENV_TMP_DIR="$CONFIGURESUPPORT_OUTPUTDIR/vs-env"
$MKDIR -p $VS_ENV_TMP_DIR
# We need to create a couple of temporary files.
VS_ENV_TMP_DIR="$CONFIGURESUPPORT_OUTPUTDIR/vs-env"
$MKDIR -p $VS_ENV_TMP_DIR
# Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment).
# Instead create a shell script which will set the relevant variables when run.
WINPATH_VS_ENV_CMD="$VS_ENV_CMD"
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD])
WINPATH_BASH="$BASH"
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH])
# Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment).
# Instead create a shell script which will set the relevant variables when run.
WINPATH_VS_ENV_CMD="$VS_ENV_CMD"
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD])
WINPATH_BASH="$BASH"
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH])
# Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell
# script (executable by bash) that will setup the important variables.
EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat"
$ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE
# This will end up something like:
# call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
$ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
# These will end up something like:
# C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
# The trailing space for everyone except PATH is no typo, but is needed due
# to trailing \ in the Windows paths. These will be stripped later.
$ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE\;$include \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB\;$lib \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE
# Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell
# script (executable by bash) that will setup the important variables.
EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat"
$ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE
# This will end up something like:
# call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
$ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
# These will end up something like:
# C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
# The trailing space for everyone except PATH is no typo, but is needed due
# to trailing \ in the Windows paths. These will be stripped later.
$ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' \
>> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE\;$include \" >> set-vs-env.sh' \
>> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB\;$lib \" >> set-vs-env.sh' \
>> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' \
>> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' \
>> $EXTRACT_VC_ENV_BAT_FILE
$ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' \
>> $EXTRACT_VC_ENV_BAT_FILE
# Now execute the newly created bat file.
# The | cat is to stop SetEnv.Cmd to mess with system colors on msys.
# Change directory so we don't need to mess with Windows paths in redirects.
cd $VS_ENV_TMP_DIR
cmd /c extract-vs-env.bat | $CAT
cd $CURDIR
# Now execute the newly created bat file.
# The | cat is to stop SetEnv.Cmd to mess with system colors on msys.
# Change directory so we don't need to mess with Windows paths in redirects.
cd $VS_ENV_TMP_DIR
cmd /c extract-vs-env.bat | $CAT
cd $CURDIR
if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then
AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.])
AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation])
AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.])
AC_MSG_ERROR([Cannot continue])
if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then
AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.])
AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation])
AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.])
AC_MSG_ERROR([Cannot continue])
fi
# Now set all paths and other env variables. This will allow the rest of
# the configure script to find and run the compiler in the proper way.
AC_MSG_NOTICE([Setting extracted environment variables])
. $VS_ENV_TMP_DIR/set-vs-env.sh
# Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we
# also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR.
else
# We did not find a vsvars bat file, let's hope we are run from a VS command prompt.
AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment])
fi
# Now set all paths and other env variables. This will allow the rest of
# the configure script to find and run the compiler in the proper way.
AC_MSG_NOTICE([Setting extracted environment variables])
. $VS_ENV_TMP_DIR/set-vs-env.sh
# Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we
# also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR.
else
# We did not find a vsvars bat file, let's hope we are run from a VS command prompt.
AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment])
fi
# At this point, we should have correct variables in the environment, or we can't continue.
AC_MSG_CHECKING([for Visual Studio variables])
if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x || test "x$WINDOWSSDKDIR" != x; then
if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x \
|| test "x$WINDOWSSDKDIR" != x || test "x$DEVKIT_NAME" != x; then
if test "x$VS_INCLUDE" = x || test "x$VS_LIB" = x; then
AC_MSG_RESULT([present but broken])
AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.])
@ -403,10 +444,10 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL],
POSSIBLE_MSVC_DLL="$2"
METHOD="$3"
if test -n "$POSSIBLE_MSVC_DLL" -a -e "$POSSIBLE_MSVC_DLL"; then
AC_MSG_NOTICE([Found $1 at $POSSIBLE_MSVC_DLL using $METHOD])
AC_MSG_NOTICE([Found $DLL_NAME at $POSSIBLE_MSVC_DLL using $METHOD])
# Need to check if the found msvcr is correct architecture
AC_MSG_CHECKING([found $1 architecture])
AC_MSG_CHECKING([found $DLL_NAME architecture])
MSVC_DLL_FILETYPE=`$FILE -b "$POSSIBLE_MSVC_DLL"`
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
# The MSYS 'file' command returns "PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit"
@ -426,19 +467,19 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL],
if $ECHO "$MSVC_DLL_FILETYPE" | $GREP "$CORRECT_MSVCR_ARCH" 2>&1 > /dev/null; then
AC_MSG_RESULT([ok])
MSVC_DLL="$POSSIBLE_MSVC_DLL"
AC_MSG_CHECKING([for $1])
BASIC_FIXUP_PATH(MSVC_DLL)
AC_MSG_CHECKING([for $DLL_NAME])
AC_MSG_RESULT([$MSVC_DLL])
else
AC_MSG_RESULT([incorrect, ignoring])
AC_MSG_NOTICE([The file type of the located $1 is $MSVC_DLL_FILETYPE])
AC_MSG_NOTICE([The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE])
fi
fi
])
AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
[
VAR_NAME="$1"
DLL_NAME="$2"
DLL_NAME="$1"
MSVC_DLL=
if test "x$MSVC_DLL" = x; then
@ -517,10 +558,6 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
AC_MSG_RESULT([no])
AC_MSG_ERROR([Could not find $DLL_NAME. Please specify using --with-msvcr-dll.])
fi
$1=$MSVC_DLL
BASIC_FIXUP_PATH($1)
AC_SUBST($1, [$]$1)
])
AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
@ -530,14 +567,22 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
if test "x$with_msvcr_dll" != x; then
# If given explicitely by user, do not probe. If not present, fail directly.
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$with_msvcr_dll],
[--with-msvcr-dll])
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$with_msvcr_dll], [--with-msvcr-dll])
if test "x$MSVC_DLL" = x; then
AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by --with-msvcr-dll])
fi
MSVCR_DLL="$MSVC_DLL"
elif test "x$DEVKIT_MSVCR_DLL" != x; then
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$DEVKIT_MSVCR_DLL], [devkit])
if test "x$MSVC_DLL" = x; then
AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by devkit])
fi
MSVCR_DLL="$MSVC_DLL"
else
TOOLCHAIN_SETUP_MSVC_DLL([MSVCR_DLL], [${MSVCR_NAME}])
TOOLCHAIN_SETUP_MSVC_DLL([${MSVCR_NAME}])
MSVCR_DLL="$MSVC_DLL"
fi
AC_SUBST(MSVCR_DLL)
AC_ARG_WITH(msvcp-dll, [AS_HELP_STRING([--with-msvcp-dll],
[path to microsoft C++ runtime dll (msvcp*.dll) (Windows only) @<:@probed@:>@])])
@ -545,13 +590,21 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
if test "x$MSVCP_NAME" != "x"; then
if test "x$with_msvcp_dll" != x; then
# If given explicitely by user, do not probe. If not present, fail directly.
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$with_msvcp_dll],
[--with-msvcp-dll])
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$with_msvcp_dll], [--with-msvcp-dll])
if test "x$MSVC_DLL" = x; then
AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by --with-msvcp-dll])
fi
MSVCP_DLL="$MSVC_DLL"
elif test "x$DEVKIT_MSVCP_DLL" != x; then
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$DEVKIT_MSVCP_DLL], [devkit])
if test "x$MSVC_DLL" = x; then
AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by devkit])
fi
MSVCP_DLL="$MSVC_DLL"
else
TOOLCHAIN_SETUP_MSVC_DLL([MSVCP_DLL], [${MSVCP_NAME}])
TOOLCHAIN_SETUP_MSVC_DLL([${MSVCP_NAME}])
MSVCP_DLL="$MSVC_DLL"
fi
AC_SUBST(MSVCP_DLL)
fi
])

View File

@ -304,3 +304,4 @@ d8ebf1a5b18ccbc849f5bf0f80aa3d78583eee68 jdk9-b57
cda6ae062f85fac5555f4e1318885b0ecd998bd1 jdk9-b59
caa330b275f39282793466529f6864766b31d9fd jdk9-b60
d690f489ca0bb95a6157d996da2fa72bcbcf02ea jdk9-b61
d27f7e0a7aca129969de23e9934408a31b4abf4c jdk9-b62

View File

@ -464,3 +464,4 @@ ee878f3d6732856f7725c590312bfbe2ffa52cc7 jdk9-b58
96bcaec07cb165782bae1b9a1f28450b37a10e3a jdk9-b59
9c916db4bf3bc164a47b5a9cefe5ffd71e111f6a jdk9-b60
715d2da5801c410746e92f08066d53bde1496286 jdk9-b61
1eab877142cce6ca06e556e2ad0af688f993f00b jdk9-b62

View File

@ -74,7 +74,8 @@ LP64=1
!if "$(BUILDARCH)" == "i486"
MACHINE=I386
CXX_FLAGS=$(CXX_FLAGS) /D "IA32"
# VS2013 generates bad l2f without /arch:IA32
CXX_FLAGS=$(CXX_FLAGS) /D "IA32" /arch:IA32
!endif
CXX_FLAGS=$(CXX_FLAGS) /D "WIN32" /D "_WINDOWS"

View File

@ -449,7 +449,7 @@ reg_class no_special_reg32(
R26
/* R27, */ // heapbase
/* R28, */ // thread
/* R29, */ // fp
R29, // fp
/* R30, */ // lr
/* R31 */ // sp
);
@ -483,7 +483,7 @@ reg_class no_special_reg(
R26, R26_H,
/* R27, R27_H, */ // heapbase
/* R28, R28_H, */ // thread
/* R29, R29_H, */ // fp
R29, R29_H, // fp
/* R30, R30_H, */ // lr
/* R31, R31_H */ // sp
);
@ -758,6 +758,8 @@ definitions %{
source_hpp %{
#include "memory/cardTableModRefBS.hpp"
class CallStubImpl {
//--------------------------------------------------------------
@ -2538,7 +2540,7 @@ RegMask Matcher::modL_proj_mask() {
}
const RegMask Matcher::method_handle_invoke_SP_save_mask() {
return RegMask();
return FP_REG_mask();
}
// helper for encoding java_to_runtime calls on sim

View File

@ -77,12 +77,6 @@ inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
intptr_t a = intptr_t(sp);
intptr_t b = intptr_t(fp);
#ifndef PRODUCT
if (fp)
if (sp > fp || (fp - sp > 0x100000))
for(;;)
asm("nop");
#endif
_sp = sp;
_unextended_sp = unextended_sp;
_fp = fp;
@ -104,12 +98,6 @@ inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address
inline frame::frame(intptr_t* sp, intptr_t* fp) {
intptr_t a = intptr_t(sp);
intptr_t b = intptr_t(fp);
#ifndef PRODUCT
if (fp)
if (sp > fp || (fp - sp > 0x100000))
for(;;)
asm("nop");
#endif
_sp = sp;
_unextended_sp = sp;
_fp = fp;

View File

@ -32,22 +32,14 @@
#include "compiler/disassembler.hpp"
#include "memory/resourceArea.hpp"
#include "nativeInst_aarch64.hpp"
#include "opto/compile.hpp"
#include "opto/node.hpp"
#include "runtime/biasedLocking.hpp"
#include "runtime/icache.hpp"
#include "runtime/interfaceSupport.hpp"
#include "runtime/sharedRuntime.hpp"
// #include "gc_interface/collectedHeap.inline.hpp"
// #include "interpreter/interpreter.hpp"
// #include "memory/cardTableModRefBS.hpp"
// #include "prims/methodHandles.hpp"
// #include "runtime/biasedLocking.hpp"
// #include "runtime/interfaceSupport.hpp"
// #include "runtime/objectMonitor.hpp"
// #include "runtime/os.hpp"
// #include "runtime/sharedRuntime.hpp"
// #include "runtime/stubRoutines.hpp"
#if INCLUDE_ALL_GCS
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"

View File

@ -25,7 +25,7 @@
* @test
* @bug 8015396
* @summary double a%b returns NaN for some (a,b) (|a| < inf, |b|>0) (on Core i7 980X)
*
* @ignore 8015396
* @run main ModNaN
*/
public class ModNaN {

View File

@ -304,3 +304,4 @@ d5b5a010a16688f188f5a9247ed873f5100b530c jdk9-b53
a1a9d943446911a4a0f74f0d082c32094af944ae jdk9-b59
c12db18748dacfccd6581ead29228c2cb6e51b34 jdk9-b60
f4a4a54620370f077c2e830a5561c8cfa811712b jdk9-b61
3bcf83c1bbc1b7663e930d72c133a9bd86c7618d jdk9-b62

View File

@ -307,3 +307,4 @@ b4f913b48e699980bd11fe19cce134d0adb4c31c jdk9-b56
8a9ebae410bc388668fc203e559b5407bde757eb jdk9-b59
f31835b59035377a220efc5a248b90f090ee1689 jdk9-b60
77f44848c44c003205490bf5ab88035233b65418 jdk9-b61
cd0cf72b2cbf4adb778a02505fb065bb2292688c jdk9-b62

View File

@ -304,3 +304,4 @@ c76339e86ea7da5d9ac7856f3fae9ef73eef04a2 jdk9-b57
48ee960f29df93a9b2a895621321358a86909086 jdk9-b59
84c5527f742bc64562e47d3149c16197fe1c4c1a jdk9-b60
da84dcac1b0b12c5b836b05ac75ecbfadee0cd32 jdk9-b61
49118e68fbd4cc0044e718c47db681946d5efd69 jdk9-b62

View File

@ -32,11 +32,11 @@ include MakeBase.gmk
# Put the libraries here. Different locations for different target OS types.
ifneq ($(OPENJDK_TARGET_OS), windows)
HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)
HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)
BASE_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)
SA_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.hotspot.agent$(OPENJDK_TARGET_CPU_LIBDIR)
else
HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/jre/bin
HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/bin
BASE_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base
SA_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.hotspot.agent
endif
@ -80,11 +80,11 @@ SA_TARGETS := $(COPY_HOTSPOT_SA)
################################################################################
ifeq ($(OPENJDK_TARGET_OS), macosx)
JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig$(SHARED_LIBRARY_SUFFIX).dSYM) \
$(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig$(SHARED_LIBRARY_SUFFIX).dSYM) \
$(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
else
JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.debuginfo) \
$(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.debuginfo) \
$(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
endif
ifneq ($(OPENJDK_TARGET_OS), windows)

View File

@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
tzdata2015b
tzdata2015d

View File

@ -342,35 +342,29 @@ Rule Egypt 2007 only - Sep Thu>=1 24:00 0 -
# above) says DST had no affect on electricity consumption. There is
# no information about when DST will end this fall. See:
# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
# From Steffen Thorsen (2015-04-08):
# Egypt will start DST on midnight after Thursday, April 30, 2015.
# This is based on a law (no 35) from May 15, 2014 saying it starts the last
# Thursday of April.... Clocks will still be turned back for Ramadan, but
# dates not yet announced....
# http://almogaz.com/news/weird-news/2015/04/05/1947105 ...
# http://www.timeanddate.com/news/time/egypt-starts-dst-2015.html
# From Ahmed Nazmy (2015-04-20):
# Egypt's ministers cabinet just announced ... that it will cancel DST at
# least for 2015.
#
# For now, guess that later spring and fall transitions will use
# 2010's rules, and guess that Egypt will switch to standard time at
# 24:00 the last Thursday before Ramadan, and back to DST at 00:00 the
# first Friday after Ramadan. To implement this,
# transition dates for 2015 through 2037 were determined by running
# the following program under GNU Emacs 24.3, with the results integrated
# by hand into the table below. Ramadan again intrudes on the guessed
# DST starting in 2038, but that's beyond our somewhat-arbitrary cutoff.
# (let ((islamic-year 1436))
# (while (< islamic-year 1460)
# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
# (friday 5))
# (while (/= friday (mod a 7))
# (setq a (1- a)))
# (while (/= friday (mod b 7))
# (setq b (1+ b)))
# (setq a (1- a))
# (setq b (1- b))
# (setq a (calendar-gregorian-from-absolute a))
# (setq b (calendar-gregorian-from-absolute b))
# (insert
# (format
# (concat "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t0\t-\n"
# "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t1:00\tS\n")
# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
# (setq islamic-year (+ 1 islamic-year))))
# From Tim Parenti (2015-04-20):
# http://english.ahram.org.eg/WriterArticles/NewsContentP/1/128195/Egypt/No-daylight-saving-this-summer-Egypts-prime-minist.aspx
# "Egypt's cabinet agreed on Monday not to switch clocks for daylight saving
# time this summer, and carry out studies on the possibility of canceling the
# practice altogether in future years."
#
# From Paul Eggert (2015-04-20):
# For now, assume DST will be canceled. Any resumption would likely
# use different rules anyway.
Rule Egypt 2008 only - Aug lastThu 24:00 0 -
Rule Egypt 2009 only - Aug 20 24:00 0 -
Rule Egypt 2010 only - Aug 10 24:00 0 -
@ -379,22 +373,7 @@ Rule Egypt 2010 only - Sep lastThu 24:00 0 -
Rule Egypt 2014 only - May 15 24:00 1:00 S
Rule Egypt 2014 only - Jun 26 24:00 0 -
Rule Egypt 2014 only - Jul 31 24:00 1:00 S
Rule Egypt 2014 max - Sep lastThu 24:00 0 -
Rule Egypt 2015 2019 - Apr lastFri 0:00s 1:00 S
Rule Egypt 2015 only - Jun 11 24:00 0 -
Rule Egypt 2015 only - Jul 23 24:00 1:00 S
Rule Egypt 2016 only - Jun 2 24:00 0 -
Rule Egypt 2016 only - Jul 7 24:00 1:00 S
Rule Egypt 2017 only - May 25 24:00 0 -
Rule Egypt 2017 only - Jun 29 24:00 1:00 S
Rule Egypt 2018 only - May 10 24:00 0 -
Rule Egypt 2018 only - Jun 14 24:00 1:00 S
Rule Egypt 2019 only - May 2 24:00 0 -
Rule Egypt 2019 only - Jun 6 24:00 1:00 S
Rule Egypt 2020 only - May 28 24:00 1:00 S
Rule Egypt 2021 only - May 13 24:00 1:00 S
Rule Egypt 2022 only - May 5 24:00 1:00 S
Rule Egypt 2023 max - Apr lastFri 0:00s 1:00 S
Rule Egypt 2014 only - Sep lastThu 24:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Cairo 2:05:09 - LMT 1900 Oct

View File

@ -38,41 +38,6 @@
# I made up all time zone abbreviations mentioned here; corrections welcome!
# FORMAT is 'zzz' and GMTOFF is 0 for locations while uninhabited.
# These rules are stolen from the 'southamerica' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule ArgAQ 1964 1966 - Mar 1 0:00 0 -
Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S
Rule ArgAQ 1967 only - Apr 2 0:00 0 -
Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S
Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 -
Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S
Rule ArgAQ 1974 only - May 1 0:00 0 -
Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 1987 only - Apr 12 3:00u 0 -
Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S
Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 1990 only - Mar 18 3:00u 0 -
Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S
Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 1997 only - Mar 30 3:00u 0 -
Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S
Rule ChileAQ 1999 only - Apr 4 3:00u 0 -
Rule ChileAQ 1999 2010 - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 2000 2007 - Mar Sun>=9 3:00u 0 -
# N.B.: the end of March 29 in Chile is March 30 in Universal time,
# which is used below in specifying the transition.
Rule ChileAQ 2008 only - Mar 30 3:00u 0 -
Rule ChileAQ 2009 only - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 2010 only - Apr Sun>=1 3:00u 0 -
Rule ChileAQ 2011 only - May Sun>=2 3:00u 0 -
Rule ChileAQ 2011 only - Aug Sun>=16 4:00u 1:00 S
Rule ChileAQ 2012 2015 - Apr Sun>=23 3:00u 0 -
Rule ChileAQ 2012 2014 - Sep Sun>=2 4:00u 1:00 S
# Argentina - year-round bases
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
@ -367,21 +332,7 @@ Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
# USA - year-round bases
#
# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
#
# From Ethan Dicks (1996-10-06):
# It keeps the same time as Punta Arenas, Chile, because, just like us
# and the South Pole, that's the other end of their supply line....
# I verified with someone who was there that since 1980,
# Palmer has followed Chile. Prior to that, before the Falklands War,
# Palmer used to be supplied from Argentina.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Palmer 0 - zzz 1965
-4:00 ArgAQ AR%sT 1969 Oct 5
-3:00 ArgAQ AR%sT 1982 May
-4:00 ChileAQ CL%sT 2015 Apr 26 3:00u
-3:00 - CLT
#
# See 'southamerica' for Antarctica/Palmer, since it uses South American DST.
#
# McMurdo Station, Ross Island, since 1955-12
# Amundsen-Scott South Pole Station, continuously occupied since 1956-11-20

View File

@ -43,6 +43,7 @@ Link America/Argentina/Jujuy America/Jujuy
Link America/Indiana/Knox America/Knox_IN
Link America/Kentucky/Louisville America/Louisville
Link America/Argentina/Mendoza America/Mendoza
Link America/Toronto America/Montreal
Link America/Rio_Branco America/Porto_Acre
Link America/Argentina/Cordoba America/Rosario
Link America/Denver America/Shiprock

View File

@ -99,7 +99,7 @@
# 1:00:14 SET Swedish (1879-1899)*
# 2:00 EET EEST Eastern Europe
# 3:00 FET Further-eastern Europe (2011-2014)*
# 3:00 MSK MSD MSM* Moscow
# 3:00 MSK MSD MSM* Minsk, Moscow
# From Peter Ilieve (1994-12-04),
# The original six [EU members]: Belgium, France, (West) Germany, Italy,

View File

@ -250,9 +250,14 @@ Zone PST8PDT -8:00 US P%sT
# The law doesn't give abbreviations.
#
# From Paul Eggert (2000-01-08), following a heads-up from Rives McDow:
# Public law 106-564 (2000-12-23) introduced the abbreviation
# "Chamorro Standard Time" for time in Guam and the Northern Marianas.
# See the file "australasia".
# Public law 106-564 (2000-12-23) introduced ... "Chamorro Standard Time"
# for time in Guam and the Northern Marianas. See the file "australasia".
#
# From Paul Eggert (2015-04-17):
# HST and HDT are standardized abbreviations for Hawaii-Aleutian
# standard and daylight times. See section 9.47 (p 234) of the
# U.S. Government Printing Office Style Manual (2008)
# http://www.gpo.gov/fdsys/pkg/GPO-STYLEMANUAL-2008/pdf/GPO-STYLEMANUAL-2008.pdf
# From Arthur David Olson, 2005-08-09
# The following was signed into law on 2005-08-08.
@ -559,7 +564,7 @@ Zone America/Adak 12:13:21 - LMT 1867 Oct 18
-11:00 - BST 1969
-11:00 US B%sT 1983 Oct 30 2:00
-10:00 US AH%sT 1983 Nov 30
-10:00 US HA%sT
-10:00 US H%sT
# The following switches don't quite make our 1970 cutoff.
#
# Shanks writes that part of southwest Alaska (e.g. Aniak)
@ -1354,14 +1359,9 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
# Quebec
# From Paul Eggert (2013-08-30):
# Since 1970 most of Quebec has been like Toronto.
# However, because earlier versions of the tz database mistakenly relied on data
# from Shanks & Pottenger saying that Quebec differed from Ontario after 1970,
# a separate entry was created for most of Quebec. We're loath to lose
# its pre-1970 info, even though the tz database is normally limited to
# zones that differ after 1970, so keep this otherwise out-of-scope entry.
# From Paul Eggert (2015-03-24):
# See America/Toronto for most of Quebec, including Montreal.
#
# Matthews and Vincent (1998) also write that Quebec east of the -63
# meridian is supposed to observe AST, but residents as far east as
# Natashquan use EST/EDT, and residents east of Natashquan use AST.
@ -1375,39 +1375,10 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
# For lack of better info, guess this practice began around 1970, contra to
# Shanks & Pottenger who have this region observing AST/ADT.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mont 1917 only - Mar 25 2:00 1:00 D
Rule Mont 1917 only - Apr 24 0:00 0 S
Rule Mont 1919 only - Mar 31 2:30 1:00 D
Rule Mont 1919 only - Oct 25 2:30 0 S
Rule Mont 1920 only - May 2 2:30 1:00 D
Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S
Rule Mont 1921 only - May 1 2:00 1:00 D
Rule Mont 1922 only - Apr 30 2:00 1:00 D
Rule Mont 1924 only - May 17 2:00 1:00 D
Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
Rule Mont 1938 1940 - Apr lastSun 0:00 1:00 D
Rule Mont 1938 1939 - Sep lastSun 0:00 0 S
Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
Rule Mont 1957 1973 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Blanc-Sablon -3:48:28 - LMT 1884
-4:00 Canada A%sT 1970
-4:00 - AST
Zone America/Montreal -4:54:16 - LMT 1884
-5:00 Mont E%sT 1918
-5:00 Canada E%sT 1919
-5:00 Mont E%sT 1942 Feb 9 2:00s
-5:00 Canada E%sT 1946
-5:00 Mont E%sT 1974
-5:00 Canada E%sT
# Ontario
@ -1898,17 +1869,115 @@ Zone America/Creston -7:46:04 - LMT 1884
# Dawson switched to PST in 1973. Inuvik switched to MST in 1979.
# Mathew Englander (1996-10-07) gives the following refs:
# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
# c. 7 defines Yukon standard time as UTC-9. This is still valid;
# c. 7 defines Yukon standard time as UTC-9....
# see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1).
# [http://canlii.ca/t/7vhg]
# * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.
# * O.I.C. 1980/02 established DST.
# * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.
# Shanks & Pottenger say Yukon's 1973-10-28 switch was at 2:00; go
# with Englander.
# From Chris Walton (2006-06-26):
# Here is a link to the old daylight saving portion of the interpretation
# act which was last updated in 1987:
# http://www.gov.yk.ca/legislation/regs/oic1987_056.pdf
# From Brian Inglis (2015-04-14):
#
# I tried to trace the history of Yukon time and found the following
# regulations, giving the reference title and URL if found, regulation name,
# and relevant quote if available. Each regulation specifically revokes its
# predecessor. The final reference is to the current Interpretation Act
# authorizing and resulting from these regulatory changes.
#
# Only recent regulations were retrievable via Yukon government site search or
# index, and only some via Canadian legal sources. Other sources used include
# articles titled "Standard Time and Time Zones in Canada" from JRASC via ADS
# Abstracts, cited by ADO for 1932 ..., and updated versions from 1958 and
# 1970 quoted below; each article includes current extracts from provincial
# and territorial ST and DST regulations at the end, summaries and details of
# standard times and daylight saving time at many locations across Canada,
# with time zone maps, tables and calculations for Canadian Sunrise, Sunset,
# and LMST; they also cover many countries and global locations, with a chart
# and table showing current Universal Time offsets, and may be useful as
# another source of information for 1970 and earlier.
#
# * Standard Time and Time Zones in Canada; Smith, C.C.; JRASC, Vol. 26,
# pp.49-77; February 1932; SAO/NASA Astrophysics Data System (ADS)
# http://adsabs.harvard.edu/abs/1932JRASC..26...49S from p.75:
# Yukon Interpretation Ordinance
# Yukon standard time is the local mean time at the one hundred and
# thirty-fifth meridian.
#
# * Standard Time and Time Zones in Canada; Smith, C.C.; Thomson, Malcolm M.;
# JRASC, Vol. 52, pp.193-223; October 1958; SAO/NASA Astrophysics Data System
# (ADS) http://adsabs.harvard.edu/abs/1958JRASC..52..193S from pp.220-1:
# Yukon Interpretation Ordinance, 1955, Chap. 16.
#
# (1) Subject to this section, standard time shall be reckoned as nine
# hours behind Greenwich Time and called Yukon Standard Time.
#
# (2) Notwithstanding subsection (1), the Commissioner may make regulations
# varying the manner of reckoning standard time.
#
# * Yukon Territory Commissioner's Order 1966-20 Interpretation Ordinance
# http://? - no online source found
#
# * Standard Time and Time Zones in Canada; Thomson, Malcolm M.; JRASC,
# Vol. 64, pp.129-162; June 1970; SAO/NASA Astrophysics Data System (ADS)
# http://adsabs.harvard.edu/abs/1970JRASC..64..129T from p.156: Yukon
# Territory Commissioner's Order 1967-59 Interpretation Ordinance ...
#
# 1. Commissioner's Order 1966-20 dated at Whitehorse in the Yukon
# Territory on 27th January, 1966, is hereby revoked.
#
# 2. Yukon (East) Standard Time as defined by section 36 of the
# Interpretation Ordinance from and after mid-night on the 28th day of May,
# 1967 shall be reckoned in the same manner as Pacific Standard Time, that
# is to say, eight hours behind Greenwich Time in the area of the Yukon
# Territory lying east of the 138th degree longitude west.
#
# 3. In the remainder of the Territory, lying west of the 138th degree
# longitude west, Yukon (West) Standard Time shall be reckoned as nine
# hours behind Greenwich Time.
#
# * Yukon Standard Time defined as Pacific Standard Time, YCO 1973/214
# http://www.canlii.org/en/yk/laws/regu/yco-1973-214/latest/yco-1973-214.html
# C.O. 1973/214 INTERPRETATION ACT ...
#
# 1. Effective October 28, 1973 Commissioner's Order 1967/59 is hereby
# revoked.
#
# 2. Yukon Standard Time as defined by section 36 of the Interpretation
# Act from and after midnight on the twenty-eighth day of October, 1973
# shall be reckoned in the same manner as Pacific Standard Time, that is
# to say eight hours behind Greenwich Time.
#
# * O.I.C. 1980/02 INTERPRETATION ACT
# http://? - no online source found
#
# * Yukon Daylight Saving Time, YOIC 1987/56
# http://www.canlii.org/en/yk/laws/regu/yoic-1987-56/latest/yoic-1987-56.html
# O.I.C. 1987/056 INTERPRETATION ACT ...
#
# In every year between
# (a) two o'clock in the morning in the first Sunday in April, and
# (b) two o'clock in the morning in the last Sunday in October,
# Standard Time shall be reckoned as seven hours behind Greenwich Time and
# called Yukon Daylight Saving Time.
# ...
# Dated ... 9th day of March, A.D., 1987.
#
# * Yukon Daylight Saving Time 2006, YOIC 2006/127
# http://www.canlii.org/en/yk/laws/regu/yoic-2006-127/latest/yoic-2006-127.html
# O.I.C. 2006/127 INTERPRETATION ACT ...
#
# 1. In Yukon each year the time for general purposes shall be 7 hours
# behind Greenwich mean time during the period commencing at two o'clock
# in the forenoon on the second Sunday of March and ending at two o'clock
# in the forenoon on the first Sunday of November and shall be called
# Yukon Daylight Saving Time.
#
# 2. Order-in-Council 1987/56 is revoked.
#
# 3. This order comes into force January 1, 2007.
#
# * Interpretation Act, RSY 2002, c 125
# http://www.canlii.org/en/yk/laws/stat/rsy-2002-c-125/latest/rsy-2002-c-125.html
# From Rives McDow (1999-09-04):
# Nunavut ... moved ... to incorporate the whole territory into one time zone.
@ -2134,7 +2203,7 @@ Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT
Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
-9:00 NT_YK Y%sT 1966 Jul 1 2:00
-9:00 NT_YK Y%sT 1967 May 28 0:00
-8:00 NT_YK P%sT 1980
-8:00 Canada P%sT
Zone America/Dawson -9:17:40 - LMT 1900 Aug 20

View File

@ -1121,6 +1121,60 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# Chile
# From Paul Eggert (2015-04-03):
# Shanks & Pottenger says America/Santiago introduced standard time in
# 1890 and rounds its UTC offset to 70W40; guess that in practice this
# was the same offset as in 1916-1919. It also says Pacific/Easter
# standardized on 109W22 in 1890; assume this didn't change the clocks.
#
# Dates for America/Santiago from 1910 to 2004 are primarily from
# the following source, cited by Oscar van Vlijmen (2006-10-08):
# [1] Chile Law
# http://www.webexhibits.org/daylightsaving/chile.html
# This contains a copy of a this official table:
# Cambios en la hora oficial de Chile desde 1900 (retrieved 2008-03-30)
# http://web.archive.org/web/20080330200901/http://www.horaoficial.cl/cambio.htm
# [1] needs several corrections, though.
#
# The first set of corrections is from:
# [2] History of the Official Time of Chile
# http://www.horaoficial.cl/ing/horaof_ing.html (retrieved 2012-03-06). See:
# http://web.archive.org/web/20120306042032/http://www.horaoficial.cl/ing/horaof_ing.html
# This is an English translation of:
# Historia de la hora oficial de Chile (retrieved 2012-10-24). See:
# http://web.archive.org/web/20121024234627/http://www.horaoficial.cl/horaof.htm
# A fancier Spanish version (requiring mouse-clicking) is at:
# http://www.horaoficial.cl/historia_hora.html
# Conflicts between [1] and [2] were resolved as follows:
#
# - [1] says the 1910 transition was Jan 1, [2] says Jan 10 and cites
# Boletín Nº 1, Aviso Nº 1 (1910). Go with [2].
#
# - [1] says SMT was -4:42:45, [2] says Chile's official time from
# 1916 to 1919 was -4:42:46.3, the meridian of Chile's National
# Astronomical Observatory (OAN), then located in what is now
# Quinta Normal in Santiago. Go with [2], rounding it to -4:42:46.
#
# - [1] says the 1918 transition was Sep 1, [2] says Sep 10 and cites
# Boletín Nº 22, Aviso Nº 129/1918 (1918-08-23). Go with [2].
#
# - [1] does not give times for transitions; assume they occur
# at midnight mainland time, the current common practice. However,
# go with [2]'s specification of 23:00 for the 1947-05-21 transition.
#
# Another correction to [1] is from Jesper Nørgaard Welen, who
# wrote (2006-10-08), "I think that there are some obvious mistakes in
# the suggested link from Oscar van Vlijmen,... for instance entry 66
# says that GMT-4 ended 1990-09-12 while entry 67 only begins GMT-3 at
# 1990-09-15 (they should have been 1990-09-15 and 1990-09-16
# respectively), but anyhow it clears up some doubts too."
#
# Data for Pacific/Easter from 1910 through 1967 come from Shanks &
# Pottenger. After that, for lack of better info assume
# Pacific/Easter is always two hours behind America/Santiago;
# this is known to work for DST transitions starting in 2008 and
# may well be true for earlier transitions.
# From Eduardo Krell (1995-10-19):
# The law says to switch to DST at midnight [24:00] on the second SATURDAY
# of October.... The law is the same for March and October.
@ -1133,78 +1187,35 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# Because of the same drought, the government decided to end DST later,
# on April 3, (one-time change).
# From Oscar van Vlijmen (2006-10-08):
# http://www.horaoficial.cl/cambio.htm
# From Jesper Nørgaard Welen (2006-10-08):
# I think that there are some obvious mistakes in the suggested link
# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
# (they should have been 1990-09-15 and 1990-09-16 respectively), but
# anyhow it clears up some doubts too.
# From Paul Eggert (2014-08-12):
# The following data entries for Chile and America/Santiago are from
# <http://www.horaoficial.cl/horaof.htm> (2006-09-20), transcribed by
# Jesper Nørgaard Welen. The data entries for Pacific/Easter are from Shanks
# & Pottenger, except with DST transitions after 1932 cloned from
# America/Santiago. The pre-1980 Pacific/Easter data entries are dubious,
# but we have no other source.
# From Germán Poo-Caamaño (2008-03-03):
# Due to drought, Chile extends Daylight Time in three weeks. This
# is one-time change (Saturday 3/29 at 24:00 for America/Santiago
# and Saturday 3/29 at 22:00 for Pacific/Easter)
# The Supreme Decree is located at
# http://www.shoa.cl/servicios/supremo316.pdf
# and the instructions for 2008 are located in:
# http://www.horaoficial.cl/cambio.htm
#
# From José Miguel Garrido (2008-03-05):
# ...
# You could see the announces of the change on
# http://www.shoa.cl/noticias/2008/04hora/hora.htm
# From Angel Chiang (2010-03-04):
# Subject: DST in Chile exceptionally extended to 3 April due to earthquake
# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
# (in Spanish, last paragraph).
#
# This is breaking news. There should be more information available later.
# From Arthur David Olson (2010-03-06):
# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
# From Glenn Eychaner (2011-03-02):
# It appears that the Chilean government has decided to postpone the
# change from summer time to winter time again, by three weeks to April
# 2nd:
# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
#
# This is not yet reflected in the official "cambio de hora" site, but
# probably will be soon:
# http://www.horaoficial.cl/cambio.htm
# From Arthur David Olson (2011-03-02):
# The emol.com article mentions a water shortage as the cause of the
# postponement, which may mean that it's not a permanent change.
# From Glenn Eychaner (2011-03-28):
# The article:
# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
#
# In English:
# Chile's clocks will go back an hour this year on the 7th of May instead
# of this Saturday. They will go forward again the 3rd Saturday in
# August, not in October as they have since 1968. This is a pilot plan
# which will be reevaluated in 2012.
# August, not in October as they have since 1968.
# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):
# As stated in the website of the Chilean Energy Ministry
# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html
# The Chilean Government has decided to postpone the entrance into winter time
# (to leave DST) from March 11 2012 to April 28th 2012. The decision has not
# been yet formalized but it will within the next days.
# (to leave DST) from March 11 2012 to April 28th 2012....
# Quote from the website communication:
#
# 6. For the year 2012, the dates of entry into winter time will be as follows:
@ -1237,17 +1248,9 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# From Paul Eggert (2015-03-03):
# For now, assume that the extension will persist indefinitely.
# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
# 'antarctica' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
Rule Chile 1927 1931 - Sep 1 0:00 1:00 S
Rule Chile 1928 1932 - Apr 1 0:00 0 -
Rule Chile 1942 only - Jun 1 4:00u 0 -
Rule Chile 1942 only - Aug 1 5:00u 1:00 S
Rule Chile 1946 only - Jul 15 4:00u 1:00 S
Rule Chile 1946 only - Sep 1 3:00u 0:00 -
Rule Chile 1947 only - Apr 1 4:00u 0 -
Rule Chile 1968 only - Nov 3 4:00u 1:00 S
Rule Chile 1969 only - Mar 30 3:00u 0 -
Rule Chile 1969 only - Nov 23 4:00u 1:00 S
@ -1258,10 +1261,8 @@ Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 -
Rule Chile 1973 only - Sep 30 4:00u 1:00 S
Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S
Rule Chile 1987 only - Apr 12 3:00u 0 -
Rule Chile 1988 1989 - Mar Sun>=9 3:00u 0 -
Rule Chile 1988 only - Oct Sun>=1 4:00u 1:00 S
Rule Chile 1989 only - Oct Sun>=9 4:00u 1:00 S
Rule Chile 1990 only - Mar 18 3:00u 0 -
Rule Chile 1988 1990 - Mar Sun>=9 3:00u 0 -
Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 S
Rule Chile 1990 only - Sep 16 4:00u 1:00 S
Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 -
Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S
@ -1284,15 +1285,21 @@ Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 S
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Santiago -4:42:46 - LMT 1890
-4:42:46 - SMT 1910 # Santiago Mean Time
-4:42:46 - SMT 1910 Jan 10 # Santiago Mean Time
-5:00 - CLT 1916 Jul 1 # Chile Time
-4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time
-4:00 - CLT 1919 Jul 1 # Chile Time
-4:42:46 - SMT 1927 Sep 1 # Santiago Mean Time
-5:00 Chile CL%sT 1947 May 22 # Chile Time
-4:42:46 - SMT 1918 Sep 10
-4:00 - CLT 1919 Jul 1
-4:42:46 - SMT 1927 Sep 1
-5:00 Chile CL%sT 1932 Sep 1
-4:00 - CLT 1942 Jun 1
-5:00 - CLT 1942 Aug 1
-4:00 - CLT 1946 Jul 15
-4:00 1:00 CLST 1946 Sep 1 # central Chile
-4:00 - CLT 1947 Apr 1
-5:00 - CLT 1947 May 21 23:00
-4:00 Chile CL%sT 2015 Apr 26 3:00u
-3:00 - CLT
Zone Pacific/Easter -7:17:44 - LMT 1890
Zone Pacific/Easter -7:17:28 - LMT 1890
-7:17:28 - EMT 1932 Sep # Easter Mean Time
-7:00 Chile EAS%sT 1982 Mar 14 3:00u # Easter Time
-6:00 Chile EAS%sT 2015 Apr 26 3:00u
@ -1302,6 +1309,25 @@ Zone Pacific/Easter -7:17:44 - LMT 1890
# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
# and Antarctic bases, are like America/Santiago.
# Antarctic base using South American rules
# (See the file 'antarctica' for more.)
#
# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
#
# From Ethan Dicks (1996-10-06):
# It keeps the same time as Punta Arenas, Chile, because, just like us
# and the South Pole, that's the other end of their supply line....
# I verified with someone who was there that since 1980,
# Palmer has followed Chile. Prior to that, before the Falklands War,
# Palmer used to be supplied from Argentina.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Palmer 0 - zzz 1965
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1982 May
-4:00 Chile CL%sT 2015 Apr 26 3:00u
-3:00 - CLT
# Colombia
# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest. He writes,

View File

@ -827,7 +827,7 @@ ifndef BUILD_HEADLESS_ONLY
LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/java.desktop/macosx/native/libsplashscreen
endif
LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE \
LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE -DPNG_ARM_NEON_OPT=0 \
$(addprefix -I, $(LIBSPLASHSCREEN_DIRS)) \
$(LIBJAVA_HEADER_FLAGS) \
#

View File

@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, 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
@ -25,6 +25,9 @@
include LibCommon.gmk
# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, jdk, lib/Lib-java.instrument.gmk))
################################################################################
LIBINSTRUMENT_SRC := $(JDK_TOPDIR)/src/java.instrument/share/native/libinstrument \

View File

@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, 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
@ -30,33 +30,14 @@ $(eval $(call IncludeCustomExtension, jdk, lib/Lib-java.management.gmk))
################################################################################
BUILD_LIBMANAGEMENT_SRC += $(JDK_TOPDIR)/src/java.management/share/native/libmanagement \
LIBMANAGEMENT_SRC += $(JDK_TOPDIR)/src/java.management/share/native/libmanagement \
$(JDK_TOPDIR)/src/java.management/$(OPENJDK_TARGET_OS_TYPE)/native/libmanagement
BUILD_LIBMANAGEMENT_CFLAGS := -I$(JDK_TOPDIR)/src/java.management/share/native/include \
$(addprefix -I,$(BUILD_LIBMANAGEMENT_SRC)) \
LIBMANAGEMENT_CFLAGS := -I$(JDK_TOPDIR)/src/java.management/share/native/include \
$(addprefix -I,$(LIBMANAGEMENT_SRC)) \
-I$(SUPPORT_OUTPUTDIR)/headers/java.management \
$(LIBJAVA_HEADER_FLAGS) \
#
# In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
# a binary that is compatible with windows versions older than 7/2008R2.
# See MSDN documentation for GetProcessMemoryInfo for more information.
BUILD_LIBMANAGEMENT_CFLAGS += -DPSAPI_VERSION=1
BUILD_LIBMANAGEMENT_EXCLUDES :=
ifneq ($(OPENJDK_TARGET_OS), solaris)
BUILD_LIBMANAGEMENT_EXCLUDES += SolarisOperatingSystem.c
endif
ifneq ($(OPENJDK_TARGET_OS), linux)
BUILD_LIBMANAGEMENT_EXCLUDES += LinuxOperatingSystem.c
endif
ifneq ($(OPENJDK_TARGET_OS), macosx)
BUILD_LIBMANAGEMENT_EXCLUDES += MacosxOperatingSystem.c
endif
LIBMANAGEMENT_OPTIMIZATION := HIGH
ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
ifeq ($(ENABLE_DEBUG_SYMBOLS), true)
@ -64,17 +45,13 @@ ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
endif
endif
# Make it possible to override this variable
LIBMANAGEMENT_MAPFILE ?= $(JDK_TOPDIR)/make/mapfiles/libmanagement/mapfile-vers
$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT, \
LIBRARY := management, \
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
SRC := $(BUILD_LIBMANAGEMENT_SRC), \
EXCLUDE_FILES := $(BUILD_LIBMANAGEMENT_EXCLUDES), \
SRC := $(LIBMANAGEMENT_SRC), \
OPTIMIZATION := $(LIBMANAGEMENT_OPTIMIZATION), \
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) $(BUILD_LIBMANAGEMENT_CFLAGS), \
MAPFILE := $(LIBMANAGEMENT_MAPFILE), \
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) $(LIBMANAGEMENT_CFLAGS), \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libmanagement/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_solaris := -lkstat, \

View File

@ -49,6 +49,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBHPROF, \
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) \
$(BUILD_LIBHPROF_CFLAGS), \
CFLAGS_debug := -DHPROF_LOGGING, \
CFLAGS_windows := -D_WINSOCK_DEPRECATED_NO_WARNINGS, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libhprof/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \

View File

@ -0,0 +1,80 @@
#
# Copyright (c) 2015, 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. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# 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.
#
include LibCommon.gmk
# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, jdk, lib/Lib-jdk.management.gmk))
################################################################################
LIBMANAGEMENT_EXT_SRC += $(JDK_TOPDIR)/src/jdk.management/share/native/libmanagement_ext \
$(JDK_TOPDIR)/src/jdk.management/$(OPENJDK_TARGET_OS_TYPE)/native/libmanagement_ext \
$(JDK_TOPDIR)/src/jdk.management/$(OPENJDK_TARGET_OS)/native/libmanagement_ext
LIBMANAGEMENT_EXT_CFLAGS := -I$(JDK_TOPDIR)/src/java.management/share/native/include \
$(addprefix -I,$(LIBMANAGEMENT_EXT_SRC)) \
-I$(SUPPORT_OUTPUTDIR)/headers/jdk.management \
$(LIBJAVA_HEADER_FLAGS) \
#
# In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
# a binary that is compatible with windows versions older than 7/2008R2.
# See MSDN documentation for GetProcessMemoryInfo for more information.
BUILD_LIBMANAGEMENT_EXT_CFLAGS += -DPSAPI_VERSION=1
LIBMANAGEMENT_EXT_OPTIMIZATION := HIGH
ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
ifeq ($(ENABLE_DEBUG_SYMBOLS), true)
LIBMANAGEMENT_EXT_OPTIMIZATION := LOW
endif
endif
$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT_EXT, \
LIBRARY := management_ext, \
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
SRC := $(LIBMANAGEMENT_EXT_SRC), \
LANG := C, \
OPTIMIZATION := $(LIBMANAGEMENT_EXT_OPTIMIZATION), \
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) $(LIBMANAGEMENT_EXT_CFLAGS), \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libmanagement_ext/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_solaris := -lkstat, \
LDFLAGS_SUFFIX := $(LDFLAGS_JDKLIB_SUFFIX), \
LDFLAGS_SUFFIX_windows := jvm.lib psapi.lib $(WIN_JAVA_LIB) advapi32.lib, \
LDFLAGS_SUFFIX_aix := -lperfstat,\
VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=management_ext.dll" \
-D "JDK_INTERNAL_NAME=management_ext" \
-D "JDK_FTYPE=0x2L", \
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libmanagement_ext, \
DEBUG_SYMBOLS := true))
$(BUILD_LIBMANAGEMENT_EXT): $(call FindLib, java.base, java)
TARGETS += $(BUILD_LIBMANAGEMENT_EXT)
################################################################################

View File

@ -1,5 +1,5 @@
#
# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 2015, 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,37 +27,10 @@
SUNWprivate_1.1 {
global:
Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize0;
Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize0;
Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize0;
Java_sun_management_OperatingSystemImpl_getMaxFileDescriptorCount0;
Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount0;
Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0;
Java_sun_management_OperatingSystemImpl_getProcessCpuTime0;
Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0;
Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize0;
Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize0;
Java_sun_management_OperatingSystemImpl_initialize0;
Java_sun_management_ClassLoadingImpl_setVerboseClass;
Java_sun_management_DiagnosticCommandImpl_executeDiagnosticCommand;
Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommands;
Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommandInfo;
Java_sun_management_DiagnosticCommandImpl_setNotificationEnabled;
Java_sun_management_FileSystemImpl_isAccessUserOnly0;
Java_sun_management_Flag_getAllFlagNames;
Java_sun_management_Flag_getFlags;
Java_sun_management_Flag_getInternalFlagCount;
Java_sun_management_Flag_initialize;
Java_sun_management_Flag_setLongValue;
Java_sun_management_Flag_setBooleanValue;
Java_sun_management_Flag_setStringValue;
Java_sun_management_GarbageCollectorImpl_getCollectionCount;
Java_sun_management_FileSystemImpl_isAccessUserOnly0;
Java_sun_management_GarbageCollectorImpl_getCollectionCount;
Java_sun_management_GarbageCollectorImpl_getCollectionTime;
Java_sun_management_GarbageCollectorImpl_setNotificationEnabled;
Java_sun_management_GcInfoBuilder_fillGcAttributeInfo;
Java_sun_management_GcInfoBuilder_getLastGcInfo0;
Java_sun_management_GcInfoBuilder_getNumGcExtAttributes;
Java_sun_management_HotSpotDiagnostic_dumpHeap0;
Java_sun_management_HotspotThread_getInternalThreadCount;
Java_sun_management_HotspotThread_getInternalThreadTimes0;
Java_sun_management_MemoryImpl_getMemoryManagers0;

View File

@ -0,0 +1,60 @@
#
# Copyright (c) 2015, 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. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# 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.
#
# Define library interface.
SUNWprivate_1.1 {
global:
Java_com_sun_management_internal_OperatingSystemImpl_getCommittedVirtualMemorySize0;
Java_com_sun_management_internal_OperatingSystemImpl_getFreePhysicalMemorySize0;
Java_com_sun_management_internal_OperatingSystemImpl_getFreeSwapSpaceSize0;
Java_com_sun_management_internal_OperatingSystemImpl_getMaxFileDescriptorCount0;
Java_com_sun_management_internal_OperatingSystemImpl_getOpenFileDescriptorCount0;
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuLoad0;
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuTime0;
Java_com_sun_management_internal_OperatingSystemImpl_getSystemCpuLoad0;
Java_com_sun_management_internal_OperatingSystemImpl_getTotalPhysicalMemorySize0;
Java_com_sun_management_internal_OperatingSystemImpl_getTotalSwapSpaceSize0;
Java_com_sun_management_internal_OperatingSystemImpl_initialize0;
Java_com_sun_management_internal_DiagnosticCommandImpl_executeDiagnosticCommand;
Java_com_sun_management_internal_DiagnosticCommandImpl_getDiagnosticCommands;
Java_com_sun_management_internal_DiagnosticCommandImpl_getDiagnosticCommandInfo;
Java_com_sun_management_internal_DiagnosticCommandImpl_setNotificationEnabled;
Java_com_sun_management_internal_Flag_getAllFlagNames;
Java_com_sun_management_internal_Flag_getFlags;
Java_com_sun_management_internal_Flag_getInternalFlagCount;
Java_com_sun_management_internal_Flag_initialize;
Java_com_sun_management_internal_Flag_setLongValue;
Java_com_sun_management_internal_Flag_setBooleanValue;
Java_com_sun_management_internal_Flag_setStringValue;
Java_com_sun_management_internal_GarbageCollectorExtImpl_setNotificationEnabled;
Java_com_sun_management_internal_GcInfoBuilder_fillGcAttributeInfo;
Java_com_sun_management_internal_GcInfoBuilder_getLastGcInfo0;
Java_com_sun_management_internal_GcInfoBuilder_getNumGcExtAttributes;
Java_com_sun_management_internal_HotSpotDiagnostic_dumpHeap0;
JNI_OnLoad;
local:
*;
};

View File

@ -22,6 +22,7 @@ jdk.deploy.osx
jdk.hprof.agent
jdk.httpserver
jdk.jfr
jdk.management
jdk.management.cmm
jdk.naming.rmi
jdk.sctp

View File

@ -38,7 +38,17 @@ import static com.sun.crypto.provider.AESConstants.AES_BLOCK_SIZE;
* under section 6.5. It needs to be constructed w/ an initialized
* cipher object, and initial counter block(ICB). Given an input X
* of arbitrary length, it processes and returns an output which has
* the same length as X.
* the same length as X. The invariants of this class are:
*
* (1) The length of intialCounterBlk (and also of its clones, e.g.,
* fields counter and counterSave) is equal to AES_BLOCK_SIZE.
*
* (2) After construction, the field counter never becomes null, it
* always contains a byte array of length AES_BLOCK_SIZE.
*
* If any invariant is broken, failures can occur because the
* AESCrypt.encryptBlock method can be intrinsified on the HotSpot VM
* (see JDK-8067648 for details).
*
* <p>This function is used in the implementation of GCM mode.
*
@ -59,6 +69,10 @@ final class GCTR {
// NOTE: cipher should already be initialized
GCTR(SymmetricCipher cipher, byte[] initialCounterBlk) {
this.aes = cipher;
if (initialCounterBlk.length != AES_BLOCK_SIZE) {
throw new RuntimeException("length of initial counter block (" + initialCounterBlk.length +
") not equal to AES_BLOCK_SIZE (" + AES_BLOCK_SIZE + ")");
}
this.icb = initialCounterBlk;
this.counter = icb.clone();
}
@ -137,6 +151,8 @@ final class GCTR {
* Restores the content of this object to the previous saved one.
*/
void restore() {
this.counter = this.counterSave;
if (this.counterSave != null) {
this.counter = this.counterSave;
}
}
}

View File

@ -1312,7 +1312,7 @@ public final class Class<T> implements java.io.Serializable,
// e) Anonymous classes
// JVM Spec 4.8.6: A class must have an EnclosingMethod
// JVM Spec 4.7.7: A class must have an EnclosingMethod
// attribute if and only if it is a local class or an
// anonymous class.
EnclosingMethodInfo enclosingInfo = getEnclosingMethodInfo();
@ -1357,28 +1357,7 @@ public final class Class<T> implements java.io.Serializable,
simpleName = getName();
return simpleName.substring(simpleName.lastIndexOf('.')+1); // strip the package name
}
// According to JLS3 "Binary Compatibility" (13.1) the binary
// name of non-package classes (not top level) is the binary
// name of the immediately enclosing class followed by a '$' followed by:
// (for nested and inner classes): the simple name.
// (for local classes): 1 or more digits followed by the simple name.
// (for anonymous classes): 1 or more digits.
// Since getSimpleBinaryName() will strip the binary name of
// the immediately enclosing class, we are now looking at a
// string that matches the regular expression "\$[0-9]*"
// followed by a simple name (considering the simple of an
// anonymous class to be the empty string).
// Remove leading "\$[0-9]*" from the name
int length = simpleName.length();
if (length < 1 || simpleName.charAt(0) != '$')
throw new InternalError("Malformed class name");
int index = 1;
while (index < length && isAsciiDigit(simpleName.charAt(index)))
index++;
// Eventually, this is the empty string iff this is an anonymous class
return simpleName.substring(index);
return simpleName;
}
/**
@ -1489,20 +1468,20 @@ public final class Class<T> implements java.io.Serializable,
Class<?> enclosingClass = getEnclosingClass();
if (enclosingClass == null) // top level class
return null;
// Otherwise, strip the enclosing class' name
try {
return getName().substring(enclosingClass.getName().length());
} catch (IndexOutOfBoundsException ex) {
throw new InternalError("Malformed class name", ex);
}
String name = getSimpleBinaryName0();
if (name == null) // anonymous class
return "";
return name;
}
private native String getSimpleBinaryName0();
/**
* Returns {@code true} if this is a local class or an anonymous
* class. Returns {@code false} otherwise.
*/
private boolean isLocalOrAnonymousClass() {
// JVM Spec 4.8.6: A class must have an EnclosingMethod
// JVM Spec 4.7.7: A class must have an EnclosingMethod
// attribute if and only if it is a local class or an
// anonymous class.
return getEnclosingMethodInfo() != null;

View File

@ -25,9 +25,10 @@
package java.lang.invoke;
import sun.invoke.empty.Empty;
import static java.lang.invoke.MethodHandleStatics.*;
import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
import java.lang.reflect.Field;
import sun.misc.Cleaner;
/**
* A {@code CallSite} is a holder for a variable {@link MethodHandle},
@ -135,6 +136,50 @@ public class CallSite {
this.target = boundTarget;
}
/**
* {@code CallSite} dependency context.
* VM uses context class to store nmethod dependencies on the call site target.
* Can be in 2 states: (a) null; or (b) {@code Cleaner} instance pointing to some Class instance.
* Lazily initialized when CallSite instance is linked to some indy call site or VM needs
* it to store dependencies. As a corollary, "null" context means there are no dependencies
* registered yet. {@code Cleaner} is used in 2 roles:
* (a) context class access for VM;
* (b) stale context class cleanup.
* {@code Cleaner} holds the context class until cleanup action is finished (see {@code PhantomReference}).
* Though it's impossible to get the context class using {@code Reference.get()}, VM extracts it directly
* from {@code Reference.referent} field.
*/
private volatile Cleaner context = null;
/**
* Default context.
* VM uses it to initialize non-linked CallSite context.
*/
private static class DefaultContext {}
private static final Cleaner DEFAULT_CONTEXT = makeContext(DefaultContext.class, null);
private static Cleaner makeContext(Class<?> referent, final CallSite holder) {
return Cleaner.create(referent,
new Runnable() {
@Override public void run() {
MethodHandleNatives.invalidateDependentNMethods(holder);
}
});
}
/** Initialize context class used for nmethod dependency tracking */
/*package-private*/
void initContext(Class<?> newContext) {
// If there are concurrent actions, exactly one succeeds.
if (context == null) {
UNSAFE.compareAndSwapObject(this, CONTEXT_OFFSET, /*expected=*/null, makeContext(newContext, this));
// No need to care about failed CAS attempt.
// Since initContext is called from indy call site linkage in newContext class, there's no risk
// that the context class becomes dead while corresponding context cleaner is alive (causing cleanup
// action in the wrong context).
}
}
/**
* Returns the type of this call site's target.
* Although targets may change, any call site's type is permanent, and can never change to an unequal type.
@ -246,11 +291,13 @@ public class CallSite {
}
// unsafe stuff:
private static final long TARGET_OFFSET;
private static final long TARGET_OFFSET;
private static final long CONTEXT_OFFSET;
static {
try {
TARGET_OFFSET = UNSAFE.objectFieldOffset(CallSite.class.getDeclaredField("target"));
} catch (Exception ex) { throw new Error(ex); }
TARGET_OFFSET = UNSAFE.objectFieldOffset(CallSite.class.getDeclaredField("target"));
CONTEXT_OFFSET = UNSAFE.objectFieldOffset(CallSite.class.getDeclaredField("context"));
} catch (Exception ex) { throw newInternalError(ex); }
}
/*package-private*/

View File

@ -691,10 +691,4 @@ class DirectMethodHandle extends MethodHandle {
}
}
}
@Override
void customize() {
assert(form.customized == null);
// No need to customize DMHs.
}
}

View File

@ -847,11 +847,7 @@ class InvokerBytecodeGenerator {
refKind = REF_invokeVirtual;
}
if (member.getDeclaringClass().isInterface() && refKind == REF_invokeVirtual) {
// Methods from Object declared in an interface can be resolved by JVM to invokevirtual kind.
// Need to convert it back to invokeinterface to pass verification and make the invocation works as expected.
refKind = REF_invokeInterface;
}
assert(!(member.getDeclaringClass().isInterface() && refKind == REF_invokeVirtual));
// push arguments
emitPushArguments(name);

View File

@ -281,7 +281,7 @@ class Invokers {
outArgs[0] = names[CHECK_TYPE];
}
if (CHECK_CUSTOM != -1) {
names[CHECK_CUSTOM] = new Name(NF_checkCustomized, names[CALL_MH]);
names[CHECK_CUSTOM] = new Name(NF_checkCustomized, outArgs[0]);
}
names[LINKER_CALL] = new Name(outCallType, outArgs);
lform = new LambdaForm(debugName, INARG_LIMIT, names);
@ -394,6 +394,7 @@ class Invokers {
@ForceInline
void checkCustomized(Object o) {
MethodHandle mh = (MethodHandle)o;
if (MethodHandleImpl.isCompileConstant(mh)) return;
if (mh.form.customized == null) {
maybeCustomize(mh);
}

View File

@ -722,6 +722,13 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
return result;
}
// Intrinsified by C2. Returns true if obj is a compile-time constant.
@LambdaForm.Hidden
static
boolean isCompileConstant(Object obj) {
return false;
}
static
MethodHandle makeGuardWithTest(MethodHandle test,
MethodHandle target,

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008, 2015, 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
@ -55,121 +55,42 @@ class MethodHandleNatives {
static native Object staticFieldBase(MemberName self); // e.g., returns clazz
static native Object getMemberVMInfo(MemberName self); // returns {vmindex,vmtarget}
/// MethodHandle support
/** Fetch MH-related JVM parameter.
* which=0 retrieves MethodHandlePushLimit
* which=1 retrieves stack slot push size (in address units)
*/
static native int getConstant(int which);
static final boolean COUNT_GWT;
/// CallSite support
/** Tell the JVM that we need to change the target of a CallSite. */
static native void setCallSiteTargetNormal(CallSite site, MethodHandle target);
static native void setCallSiteTargetVolatile(CallSite site, MethodHandle target);
/** Invalidate CallSite context: clean up dependent nmethods and reset call site context to initial state (null). */
static native void invalidateDependentNMethods(CallSite site);
private static native void registerNatives();
static {
registerNatives();
COUNT_GWT = getConstant(Constants.GC_COUNT_GWT) != 0;
// The JVM calls MethodHandleNatives.<clinit>. Cascade the <clinit> calls as needed:
MethodHandleImpl.initStatics();
}
// All compile-time constants go here.
// There is an opportunity to check them against the JVM's idea of them.
/**
* Compile-time constants go here. This collection exists not only for
* reference from clients, but also for ensuring the VM and JDK agree on the
* values of these constants (see {@link #verifyConstants()}).
*/
static class Constants {
Constants() { } // static only
// MethodHandleImpl
static final int // for getConstant
GC_COUNT_GWT = 4,
GC_LAMBDA_SUPPORT = 5;
// MemberName
// The JVM uses values of -2 and above for vtable indexes.
// Field values are simple positive offsets.
// Ref: src/share/vm/oops/methodOop.hpp
// This value is negative enough to avoid such numbers,
// but not too negative.
static final int
MN_IS_METHOD = 0x00010000, // method (not constructor)
MN_IS_CONSTRUCTOR = 0x00020000, // constructor
MN_IS_FIELD = 0x00040000, // field
MN_IS_TYPE = 0x00080000, // nested type
MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
MN_REFERENCE_KIND_SHIFT = 24, // refKind
MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
// The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
MN_SEARCH_SUPERCLASSES = 0x00100000,
MN_SEARCH_INTERFACES = 0x00200000;
/**
* Basic types as encoded in the JVM. These code values are not
* intended for use outside this class. They are used as part of
* a private interface between the JVM and this class.
*/
static final int
T_BOOLEAN = 4,
T_CHAR = 5,
T_FLOAT = 6,
T_DOUBLE = 7,
T_BYTE = 8,
T_SHORT = 9,
T_INT = 10,
T_LONG = 11,
T_OBJECT = 12,
//T_ARRAY = 13
T_VOID = 14,
//T_ADDRESS = 15
T_ILLEGAL = 99;
/**
* Constant pool entry types.
*/
static final byte
CONSTANT_Utf8 = 1,
CONSTANT_Integer = 3,
CONSTANT_Float = 4,
CONSTANT_Long = 5,
CONSTANT_Double = 6,
CONSTANT_Class = 7,
CONSTANT_String = 8,
CONSTANT_Fieldref = 9,
CONSTANT_Methodref = 10,
CONSTANT_InterfaceMethodref = 11,
CONSTANT_NameAndType = 12,
CONSTANT_MethodHandle = 15, // JSR 292
CONSTANT_MethodType = 16, // JSR 292
CONSTANT_InvokeDynamic = 18,
CONSTANT_LIMIT = 19; // Limit to tags found in classfiles
/**
* Access modifier flags.
*/
static final char
ACC_PUBLIC = 0x0001,
ACC_PRIVATE = 0x0002,
ACC_PROTECTED = 0x0004,
ACC_STATIC = 0x0008,
ACC_FINAL = 0x0010,
ACC_SYNCHRONIZED = 0x0020,
ACC_VOLATILE = 0x0040,
ACC_TRANSIENT = 0x0080,
ACC_NATIVE = 0x0100,
ACC_INTERFACE = 0x0200,
ACC_ABSTRACT = 0x0400,
ACC_STRICT = 0x0800,
ACC_SYNTHETIC = 0x1000,
ACC_ANNOTATION = 0x2000,
ACC_ENUM = 0x4000,
// aliases:
ACC_SUPER = ACC_SYNCHRONIZED,
ACC_BRIDGE = ACC_VOLATILE,
ACC_VARARGS = ACC_TRANSIENT;
MN_IS_METHOD = 0x00010000, // method (not constructor)
MN_IS_CONSTRUCTOR = 0x00020000, // constructor
MN_IS_FIELD = 0x00040000, // field
MN_IS_TYPE = 0x00080000, // nested type
MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
MN_REFERENCE_KIND_SHIFT = 24, // refKind
MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
// The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
MN_SEARCH_SUPERCLASSES = 0x00100000,
MN_SEARCH_INTERFACES = 0x00200000;
/**
* Constant pool reference-kind codes, as used by CONSTANT_MethodHandle CP entries.
@ -314,6 +235,7 @@ class MethodHandleNatives {
return Invokers.linkToTargetMethod(type);
} else {
appendixResult[0] = callSite;
callSite.initContext(caller);
return Invokers.linkToCallSiteMethod(type);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2015, 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
@ -567,32 +567,13 @@ class Bits { // package-private
// -- Processor and memory-system properties --
private static final ByteOrder byteOrder;
private static final ByteOrder byteOrder
= unsafe.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
static ByteOrder byteOrder() {
if (byteOrder == null)
throw new Error("Unknown byte order");
return byteOrder;
}
static {
long a = unsafe.allocateMemory(8);
try {
unsafe.putLong(a, 0x0102030405060708L);
byte b = unsafe.getByte(a);
switch (b) {
case 0x01: byteOrder = ByteOrder.BIG_ENDIAN; break;
case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN; break;
default:
assert false;
byteOrder = null;
}
} finally {
unsafe.freeMemory(a);
}
}
private static int pageSize = -1;
static int pageSize() {
@ -605,17 +586,9 @@ class Bits { // package-private
return (int)(size + (long)pageSize() - 1L) / pageSize();
}
private static boolean unaligned;
private static boolean unalignedKnown = false;
private static boolean unaligned = unsafe.unalignedAccess();
static boolean unaligned() {
if (unalignedKnown)
return unaligned;
String arch = AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("os.arch"));
unaligned = arch.equals("i386") || arch.equals("x86")
|| arch.equals("amd64") || arch.equals("x86_64");
unalignedKnown = true;
return unaligned;
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2015, 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,7 @@
package java.nio;
import sun.misc.Unsafe;
/**
#if[rw]
@ -52,6 +53,16 @@ class Heap$Type$Buffer$RW$
#end[rw]
*/
#if[byte]
// Cached unsafe-access object
private static final Unsafe unsafe = Bits.unsafe();
// Cached array base offset
private static final long arrayBaseOffset = unsafe.arrayBaseOffset($type$[].class);
#end[byte]
Heap$Type$Buffer$RW$(int cap, int lim) { // package-private
#if[rw]
super(-1, 0, lim, cap, new $type$[cap], 0);
@ -131,6 +142,12 @@ class Heap$Type$Buffer$RW$
return i + offset;
}
#if[byte]
private long byteOffset(long i) {
return arrayBaseOffset + i + offset;
}
#end[byte]
public $type$ get() {
return hb[ix(nextGetIndex())];
}
@ -256,18 +273,18 @@ class Heap$Type$Buffer$RW$
#if[rw]
public char getChar() {
return Bits.getChar(this, ix(nextGetIndex(2)), bigEndian);
return unsafe.getCharUnaligned(hb, byteOffset(nextGetIndex(2)), bigEndian);
}
public char getChar(int i) {
return Bits.getChar(this, ix(checkIndex(i, 2)), bigEndian);
return unsafe.getCharUnaligned(hb, byteOffset(checkIndex(i, 2)), bigEndian);
}
#end[rw]
public $Type$Buffer putChar(char x) {
#if[rw]
Bits.putChar(this, ix(nextPutIndex(2)), x, bigEndian);
unsafe.putCharUnaligned(hb, byteOffset(nextPutIndex(2)), x, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -276,7 +293,7 @@ class Heap$Type$Buffer$RW$
public $Type$Buffer putChar(int i, char x) {
#if[rw]
Bits.putChar(this, ix(checkIndex(i, 2)), x, bigEndian);
unsafe.putCharUnaligned(hb, byteOffset(checkIndex(i, 2)), x, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -307,18 +324,18 @@ class Heap$Type$Buffer$RW$
#if[rw]
public short getShort() {
return Bits.getShort(this, ix(nextGetIndex(2)), bigEndian);
return unsafe.getShortUnaligned(hb, byteOffset(nextGetIndex(2)), bigEndian);
}
public short getShort(int i) {
return Bits.getShort(this, ix(checkIndex(i, 2)), bigEndian);
return unsafe.getShortUnaligned(hb, byteOffset(checkIndex(i, 2)), bigEndian);
}
#end[rw]
public $Type$Buffer putShort(short x) {
#if[rw]
Bits.putShort(this, ix(nextPutIndex(2)), x, bigEndian);
unsafe.putShortUnaligned(hb, byteOffset(nextPutIndex(2)), x, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -327,7 +344,7 @@ class Heap$Type$Buffer$RW$
public $Type$Buffer putShort(int i, short x) {
#if[rw]
Bits.putShort(this, ix(checkIndex(i, 2)), x, bigEndian);
unsafe.putShortUnaligned(hb, byteOffset(checkIndex(i, 2)), x, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -358,18 +375,18 @@ class Heap$Type$Buffer$RW$
#if[rw]
public int getInt() {
return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian);
return unsafe.getIntUnaligned(hb, byteOffset(nextGetIndex(4)), bigEndian);
}
public int getInt(int i) {
return Bits.getInt(this, ix(checkIndex(i, 4)), bigEndian);
return unsafe.getIntUnaligned(hb, byteOffset(checkIndex(i, 4)), bigEndian);
}
#end[rw]
public $Type$Buffer putInt(int x) {
#if[rw]
Bits.putInt(this, ix(nextPutIndex(4)), x, bigEndian);
unsafe.putIntUnaligned(hb, byteOffset(nextPutIndex(4)), x, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -378,7 +395,7 @@ class Heap$Type$Buffer$RW$
public $Type$Buffer putInt(int i, int x) {
#if[rw]
Bits.putInt(this, ix(checkIndex(i, 4)), x, bigEndian);
unsafe.putIntUnaligned(hb, byteOffset(checkIndex(i, 4)), x, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -409,18 +426,18 @@ class Heap$Type$Buffer$RW$
#if[rw]
public long getLong() {
return Bits.getLong(this, ix(nextGetIndex(8)), bigEndian);
return unsafe.getLongUnaligned(hb, byteOffset(nextGetIndex(8)), bigEndian);
}
public long getLong(int i) {
return Bits.getLong(this, ix(checkIndex(i, 8)), bigEndian);
return unsafe.getLongUnaligned(hb, byteOffset(checkIndex(i, 8)), bigEndian);
}
#end[rw]
public $Type$Buffer putLong(long x) {
#if[rw]
Bits.putLong(this, ix(nextPutIndex(8)), x, bigEndian);
unsafe.putLongUnaligned(hb, byteOffset(nextPutIndex(8)), x, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -429,7 +446,7 @@ class Heap$Type$Buffer$RW$
public $Type$Buffer putLong(int i, long x) {
#if[rw]
Bits.putLong(this, ix(checkIndex(i, 8)), x, bigEndian);
unsafe.putLongUnaligned(hb, byteOffset(checkIndex(i, 8)), x, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -460,18 +477,21 @@ class Heap$Type$Buffer$RW$
#if[rw]
public float getFloat() {
return Bits.getFloat(this, ix(nextGetIndex(4)), bigEndian);
int x = unsafe.getIntUnaligned(hb, byteOffset(nextPutIndex(4)), bigEndian);
return Float.intBitsToFloat(x);
}
public float getFloat(int i) {
return Bits.getFloat(this, ix(checkIndex(i, 4)), bigEndian);
int x = unsafe.getIntUnaligned(hb, byteOffset(checkIndex(i, 4)), bigEndian);
return Float.intBitsToFloat(x);
}
#end[rw]
public $Type$Buffer putFloat(float x) {
#if[rw]
Bits.putFloat(this, ix(nextPutIndex(4)), x, bigEndian);
int y = Float.floatToRawIntBits(x);
unsafe.putIntUnaligned(hb, byteOffset(nextPutIndex(4)), y, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -480,7 +500,8 @@ class Heap$Type$Buffer$RW$
public $Type$Buffer putFloat(int i, float x) {
#if[rw]
Bits.putFloat(this, ix(checkIndex(i, 4)), x, bigEndian);
int y = Float.floatToRawIntBits(x);
unsafe.putIntUnaligned(hb, byteOffset(checkIndex(i, 4)), y, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -511,18 +532,21 @@ class Heap$Type$Buffer$RW$
#if[rw]
public double getDouble() {
return Bits.getDouble(this, ix(nextGetIndex(8)), bigEndian);
long x = unsafe.getLongUnaligned(hb, byteOffset(nextGetIndex(8)), bigEndian);
return Double.longBitsToDouble(x);
}
public double getDouble(int i) {
return Bits.getDouble(this, ix(checkIndex(i, 8)), bigEndian);
long x = unsafe.getLongUnaligned(hb, byteOffset(checkIndex(i, 8)), bigEndian);
return Double.longBitsToDouble(x);
}
#end[rw]
public $Type$Buffer putDouble(double x) {
#if[rw]
Bits.putDouble(this, ix(nextPutIndex(8)), x, bigEndian);
long y = Double.doubleToRawLongBits(x);
unsafe.putLongUnaligned(hb, byteOffset(nextPutIndex(8)), y, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();
@ -531,7 +555,8 @@ class Heap$Type$Buffer$RW$
public $Type$Buffer putDouble(int i, double x) {
#if[rw]
Bits.putDouble(this, ix(checkIndex(i, 8)), x, bigEndian);
long y = Double.doubleToRawLongBits(x);
unsafe.putLongUnaligned(hb, byteOffset(checkIndex(i, 8)), y, bigEndian);
return this;
#else[rw]
throw new ReadOnlyBufferException();

View File

@ -103,6 +103,10 @@ public final class ZoneOffsetTransition
* Serialization version.
*/
private static final long serialVersionUID = -6946044323557704546L;
/**
* The transition epoch-second.
*/
private final long epochSecond;
/**
* The local transition date-time at the transition.
*/
@ -152,6 +156,7 @@ public final class ZoneOffsetTransition
* @param offsetAfter the offset at and after the transition, not null
*/
ZoneOffsetTransition(LocalDateTime transition, ZoneOffset offsetBefore, ZoneOffset offsetAfter) {
this.epochSecond = transition.toEpochSecond(offsetBefore);
this.transition = transition;
this.offsetBefore = offsetBefore;
this.offsetAfter = offsetAfter;
@ -165,6 +170,7 @@ public final class ZoneOffsetTransition
* @param offsetAfter the offset at and after the transition, not null
*/
ZoneOffsetTransition(long epochSecond, ZoneOffset offsetBefore, ZoneOffset offsetAfter) {
this.epochSecond = epochSecond;
this.transition = LocalDateTime.ofEpochSecond(epochSecond, 0, offsetBefore);
this.offsetBefore = offsetBefore;
this.offsetAfter = offsetAfter;
@ -209,7 +215,7 @@ public final class ZoneOffsetTransition
* @throws IOException if an error occurs
*/
void writeExternal(DataOutput out) throws IOException {
Ser.writeEpochSec(toEpochSecond(), out);
Ser.writeEpochSec(epochSecond, out);
Ser.writeOffset(offsetBefore, out);
Ser.writeOffset(offsetAfter, out);
}
@ -253,7 +259,7 @@ public final class ZoneOffsetTransition
* @return the transition epoch second
*/
public long toEpochSecond() {
return transition.toEpochSecond(offsetBefore);
return epochSecond;
}
//-------------------------------------------------------------------------
@ -397,7 +403,13 @@ public final class ZoneOffsetTransition
*/
@Override
public int compareTo(ZoneOffsetTransition transition) {
return this.getInstant().compareTo(transition.getInstant());
if (epochSecond < transition.epochSecond) {
return -1;
} else if (epochSecond > transition.epochSecond) {
return 1;
} else {
return this.getInstant().compareTo(transition.getInstant());
}
}
//-----------------------------------------------------------------------
@ -416,7 +428,8 @@ public final class ZoneOffsetTransition
}
if (other instanceof ZoneOffsetTransition) {
ZoneOffsetTransition d = (ZoneOffsetTransition) other;
return transition.equals(d.transition) &&
return epochSecond == d.epochSecond &&
transition.equals(d.transition) &&
offsetBefore.equals(d.offsetBefore) && offsetAfter.equals(d.offsetAfter);
}
return false;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2015, 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
@ -140,11 +140,24 @@ import java.util.Locale;
*/
public abstract class LocaleServiceProvider {
private static Void checkPermission() {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission("localeServiceProvider"));
}
return null;
}
private LocaleServiceProvider(Void ignore) { }
/**
* Sole constructor. (For invocation by subclass constructors, typically
* implicit.)
* Initializes a new locale service provider.
*
* @throws SecurityException
* If a security manager has been installed and it denies
* {@link RuntimePermission RuntimePermission("localeServiceProvider")}
*/
protected LocaleServiceProvider() {
this(checkPermission());
}
/**

View File

@ -183,7 +183,7 @@ public final class Unsafe {
* <p>
* Unless the reference {@code x} being stored is either null
* or matches the field type, the results are undefined.
* If the reference {@code o} is non-null, car marks or
* If the reference {@code o} is non-null, card marks or
* other store barriers for that object (if the VM requires them)
* are updated.
* @see #putInt(Object, long, int)
@ -219,6 +219,35 @@ public final class Unsafe {
/** @see #putInt(Object, long, int) */
public native void putDouble(Object o, long offset, double x);
// These read VM internal data.
/**
* Fetches an uncompressed reference value from a given native variable
* ignoring the VM's compressed references mode.
*
* @param address a memory address locating the variable
* @return the value fetched from the indicated native variable
*/
public native Object getUncompressedObject(long address);
/**
* Fetches the {@link java.lang.Class} Java mirror for the given native
* metaspace {@code Klass} pointer.
*
* @param metaspaceKlass a native metaspace {@code Klass} pointer
* @return the {@link java.lang.Class} Java mirror
*/
public native Class<?> getJavaMirror(long metaspaceKlass);
/**
* Fetches a native metaspace {@code Klass} pointer for the given Java
* object.
*
* @param o Java heap object for which to fetch the class pointer
* @return a native metaspace {@code Klass} pointer
*/
public native long getKlassPointer(Object o);
// These work on values in the C heap.
/**
@ -934,4 +963,347 @@ public final class Unsafe {
private static void throwIllegalAccessError() {
throw new IllegalAccessError();
}
/**
* @return Returns true if the native byte ordering of this
* platform is big-endian, false if it is little-endian.
*/
public final boolean isBigEndian() { return BE; }
/**
* @return Returns true if this platform is capable of performing
* accesses at addresses which are not aligned for the type of the
* primitive type being accessed, false otherwise.
*/
public final boolean unalignedAccess() { return unalignedAccess; }
/**
* Fetches a value at some byte offset into a given Java object.
* More specifically, fetches a value within the given object
* <code>o</code> at the given offset, or (if <code>o</code> is
* null) from the memory address whose numerical value is the
* given offset. <p>
*
* The specification of this method is the same as {@link
* #getLong(Object, long)} except that the offset does not need to
* have been obtained from {@link #objectFieldOffset} on the
* {@link java.lang.reflect.Field} of some Java field. The value
* in memory is raw data, and need not correspond to any Java
* variable. Unless <code>o</code> is null, the value accessed
* must be entirely within the allocated object. The endianness
* of the value in memory is the endianness of the native platform.
*
* <p> The read will be atomic with respect to the largest power
* of two that divides the GCD of the offset and the storage size.
* For example, getLongUnaligned will make atomic reads of 2-, 4-,
* or 8-byte storage units if the offset is zero mod 2, 4, or 8,
* respectively. There are no other guarantees of atomicity.
* <p>
* 8-byte atomicity is only guaranteed on platforms on which
* support atomic accesses to longs.
*
* @param o Java heap object in which the value resides, if any, else
* null
* @param offset The offset in bytes from the start of the object
* @return the value fetched from the indicated object
* @throws RuntimeException No defined exceptions are thrown, not even
* {@link NullPointerException}
* @since 1.9
*/
public final long getLongUnaligned(Object o, long offset) {
if ((offset & 7) == 0) {
return getLong(o, offset);
} else if ((offset & 3) == 0) {
return makeLong(getInt(o, offset),
getInt(o, offset + 4));
} else if ((offset & 1) == 0) {
return makeLong(getShort(o, offset),
getShort(o, offset + 2),
getShort(o, offset + 4),
getShort(o, offset + 6));
} else {
return makeLong(getByte(o, offset),
getByte(o, offset + 1),
getByte(o, offset + 2),
getByte(o, offset + 3),
getByte(o, offset + 4),
getByte(o, offset + 5),
getByte(o, offset + 6),
getByte(o, offset + 7));
}
}
/**
* As {@link #getLongUnaligned(Object, long)} but with an
* additional argument which specifies the endianness of the value
* as stored in memory.
*
* @param o Java heap object in which the variable resides
* @param offset The offset in bytes from the start of the object
* @param bigEndian The endianness of the value
* @return the value fetched from the indicated object
* @since 1.9
*/
public final long getLongUnaligned(Object o, long offset, boolean bigEndian) {
return convEndian(bigEndian, getLongUnaligned(o, offset));
}
/** @see #getLongUnaligned(Object, long) */
public final int getIntUnaligned(Object o, long offset) {
if ((offset & 3) == 0) {
return getInt(o, offset);
} else if ((offset & 1) == 0) {
return makeInt(getShort(o, offset),
getShort(o, offset + 2));
} else {
return makeInt(getByte(o, offset),
getByte(o, offset + 1),
getByte(o, offset + 2),
getByte(o, offset + 3));
}
}
/** @see #getLongUnaligned(Object, long, boolean) */
public final int getIntUnaligned(Object o, long offset, boolean bigEndian) {
return convEndian(bigEndian, getIntUnaligned(o, offset));
}
/** @see #getLongUnaligned(Object, long) */
public final short getShortUnaligned(Object o, long offset) {
if ((offset & 1) == 0) {
return getShort(o, offset);
} else {
return makeShort(getByte(o, offset),
getByte(o, offset + 1));
}
}
/** @see #getLongUnaligned(Object, long, boolean) */
public final short getShortUnaligned(Object o, long offset, boolean bigEndian) {
return convEndian(bigEndian, getShortUnaligned(o, offset));
}
/** @see #getLongUnaligned(Object, long) */
public final char getCharUnaligned(Object o, long offset) {
return (char)getShortUnaligned(o, offset);
}
/** @see #getLongUnaligned(Object, long, boolean) */
public final char getCharUnaligned(Object o, long offset, boolean bigEndian) {
return convEndian(bigEndian, getCharUnaligned(o, offset));
}
/**
* Stores a value at some byte offset into a given Java object.
* <p>
* The specification of this method is the same as {@link
* #getLong(Object, long)} except that the offset does not need to
* have been obtained from {@link #objectFieldOffset} on the
* {@link java.lang.reflect.Field} of some Java field. The value
* in memory is raw data, and need not correspond to any Java
* variable. The endianness of the value in memory is the
* endianness of the native platform.
* <p>
* The write will be atomic with respect to the largest power of
* two that divides the GCD of the offset and the storage size.
* For example, putLongUnaligned will make atomic writes of 2-, 4-,
* or 8-byte storage units if the offset is zero mod 2, 4, or 8,
* respectively. There are no other guarantees of atomicity.
* <p>
* 8-byte atomicity is only guaranteed on platforms on which
* support atomic accesses to longs.
* <p>
*
* @param o Java heap object in which the value resides, if any, else
* null
* @param offset The offset in bytes from the start of the object
* @param x the value to store
* @throws RuntimeException No defined exceptions are thrown, not even
* {@link NullPointerException}
* @since 1.9
*/
public final void putLongUnaligned(Object o, long offset, long x) {
if ((offset & 7) == 0) {
putLong(o, offset, x);
} else if ((offset & 3) == 0) {
putLongParts(o, offset,
(int)(x >> 0),
(int)(x >>> 32));
} else if ((offset & 1) == 0) {
putLongParts(o, offset,
(short)(x >>> 0),
(short)(x >>> 16),
(short)(x >>> 32),
(short)(x >>> 48));
} else {
putLongParts(o, offset,
(byte)(x >>> 0),
(byte)(x >>> 8),
(byte)(x >>> 16),
(byte)(x >>> 24),
(byte)(x >>> 32),
(byte)(x >>> 40),
(byte)(x >>> 48),
(byte)(x >>> 56));
}
}
/**
* As {@link #putLongUnaligned(Object, long, long)} but with an additional
* argument which specifies the endianness of the value as stored in memory.
* @param o Java heap object in which the value resides
* @param offset The offset in bytes from the start of the object
* @param x the value to store
* @param bigEndian The endianness of the value
* @throws RuntimeException No defined exceptions are thrown, not even
* {@link NullPointerException}
* @since 1.9
*/
public final void putLongUnaligned(Object o, long offset, long x, boolean bigEndian) {
putLongUnaligned(o, offset, convEndian(bigEndian, x));
}
/** @see #putLongUnaligned(Object, long, long) */
public final void putIntUnaligned(Object o, long offset, int x) {
if ((offset & 3) == 0) {
putInt(o, offset, x);
} else if ((offset & 1) == 0) {
putIntParts(o, offset,
(short)(x >> 0),
(short)(x >>> 16));
} else {
putIntParts(o, offset,
(byte)(x >>> 0),
(byte)(x >>> 8),
(byte)(x >>> 16),
(byte)(x >>> 24));
}
}
/** @see #putLongUnaligned(Object, long, long, boolean) */
public final void putIntUnaligned(Object o, long offset, int x, boolean bigEndian) {
putIntUnaligned(o, offset, convEndian(bigEndian, x));
}
/** @see #putLongUnaligned(Object, long, long) */
public final void putShortUnaligned(Object o, long offset, short x) {
if ((offset & 1) == 0) {
putShort(o, offset, x);
} else {
putShortParts(o, offset,
(byte)(x >>> 0),
(byte)(x >>> 8));
}
}
/** @see #putLongUnaligned(Object, long, long, boolean) */
public final void putShortUnaligned(Object o, long offset, short x, boolean bigEndian) {
putShortUnaligned(o, offset, convEndian(bigEndian, x));
}
/** @see #putLongUnaligned(Object, long, long) */
public final void putCharUnaligned(Object o, long offset, char x) {
putShortUnaligned(o, offset, (short)x);
}
/** @see #putLongUnaligned(Object, long, long, boolean) */
public final void putCharUnaligned(Object o, long offset, char x, boolean bigEndian) {
putCharUnaligned(o, offset, convEndian(bigEndian, x));
}
// JVM interface methods
private native boolean unalignedAccess0();
private native boolean isBigEndian0();
// BE is true iff the native endianness of this platform is big.
private static final boolean BE = theUnsafe.isBigEndian0();
// unalignedAccess is true iff this platform can perform unaligned accesses.
private static final boolean unalignedAccess = theUnsafe.unalignedAccess0();
private static int pickPos(int top, int pos) { return BE ? top - pos : pos; }
// These methods construct integers from bytes. The byte ordering
// is the native endianness of this platform.
private static long makeLong(byte i0, byte i1, byte i2, byte i3, byte i4, byte i5, byte i6, byte i7) {
return ((toUnsignedLong(i0) << pickPos(56, 0))
| (toUnsignedLong(i1) << pickPos(56, 8))
| (toUnsignedLong(i2) << pickPos(56, 16))
| (toUnsignedLong(i3) << pickPos(56, 24))
| (toUnsignedLong(i4) << pickPos(56, 32))
| (toUnsignedLong(i5) << pickPos(56, 40))
| (toUnsignedLong(i6) << pickPos(56, 48))
| (toUnsignedLong(i7) << pickPos(56, 56)));
}
private static long makeLong(short i0, short i1, short i2, short i3) {
return ((toUnsignedLong(i0) << pickPos(48, 0))
| (toUnsignedLong(i1) << pickPos(48, 16))
| (toUnsignedLong(i2) << pickPos(48, 32))
| (toUnsignedLong(i3) << pickPos(48, 48)));
}
private static long makeLong(int i0, int i1) {
return (toUnsignedLong(i0) << pickPos(32, 0))
| (toUnsignedLong(i1) << pickPos(32, 32));
}
private static int makeInt(short i0, short i1) {
return (toUnsignedInt(i0) << pickPos(16, 0))
| (toUnsignedInt(i1) << pickPos(16, 16));
}
private static int makeInt(byte i0, byte i1, byte i2, byte i3) {
return ((toUnsignedInt(i0) << pickPos(24, 0))
| (toUnsignedInt(i1) << pickPos(24, 8))
| (toUnsignedInt(i2) << pickPos(24, 16))
| (toUnsignedInt(i3) << pickPos(24, 24)));
}
private static short makeShort(byte i0, byte i1) {
return (short)((toUnsignedInt(i0) << pickPos(8, 0))
| (toUnsignedInt(i1) << pickPos(8, 8)));
}
private static byte pick(byte le, byte be) { return BE ? be : le; }
private static short pick(short le, short be) { return BE ? be : le; }
private static int pick(int le, int be) { return BE ? be : le; }
// These methods write integers to memory from smaller parts
// provided by their caller. The ordering in which these parts
// are written is the native endianness of this platform.
private void putLongParts(Object o, long offset, byte i0, byte i1, byte i2, byte i3, byte i4, byte i5, byte i6, byte i7) {
putByte(o, offset + 0, pick(i0, i7));
putByte(o, offset + 1, pick(i1, i6));
putByte(o, offset + 2, pick(i2, i5));
putByte(o, offset + 3, pick(i3, i4));
putByte(o, offset + 4, pick(i4, i3));
putByte(o, offset + 5, pick(i5, i2));
putByte(o, offset + 6, pick(i6, i1));
putByte(o, offset + 7, pick(i7, i0));
}
private void putLongParts(Object o, long offset, short i0, short i1, short i2, short i3) {
putShort(o, offset + 0, pick(i0, i3));
putShort(o, offset + 2, pick(i1, i2));
putShort(o, offset + 4, pick(i2, i1));
putShort(o, offset + 6, pick(i3, i0));
}
private void putLongParts(Object o, long offset, int i0, int i1) {
putInt(o, offset + 0, pick(i0, i1));
putInt(o, offset + 4, pick(i1, i0));
}
private void putIntParts(Object o, long offset, short i0, short i1) {
putShort(o, offset + 0, pick(i0, i1));
putShort(o, offset + 2, pick(i1, i0));
}
private void putIntParts(Object o, long offset, byte i0, byte i1, byte i2, byte i3) {
putByte(o, offset + 0, pick(i0, i3));
putByte(o, offset + 1, pick(i1, i2));
putByte(o, offset + 2, pick(i2, i1));
putByte(o, offset + 3, pick(i3, i0));
}
private void putShortParts(Object o, long offset, byte i0, byte i1) {
putByte(o, offset + 0, pick(i0, i1));
putByte(o, offset + 1, pick(i1, i0));
}
// Zero-extend an integer
private static int toUnsignedInt(byte n) { return n & 0xff; }
private static int toUnsignedInt(short n) { return n & 0xffff; }
private static long toUnsignedLong(byte n) { return n & 0xffl; }
private static long toUnsignedLong(short n) { return n & 0xffffl; }
private static long toUnsignedLong(int n) { return n & 0xffffffffl; }
// Maybe byte-reverse an integer
private static char convEndian(boolean big, char n) { return big == BE ? n : Character.reverseBytes(n); }
private static short convEndian(boolean big, short n) { return big == BE ? n : Short.reverseBytes(n) ; }
private static int convEndian(boolean big, int n) { return big == BE ? n : Integer.reverseBytes(n) ; }
private static long convEndian(boolean big, long n) { return big == BE ? n : Long.reverseBytes(n) ; }
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2015, 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
@ -1642,23 +1642,22 @@ public final class PKCS12KeyStore extends KeyStoreSpi {
Entry entry = entries.get(alias);
// certificate chain
int chainLen = 1;
Certificate[] certs = null;
Certificate[] certs;
if (entry instanceof PrivateKeyEntry) {
PrivateKeyEntry keyEntry = (PrivateKeyEntry) entry;
if (keyEntry.chain == null) {
chainLen = 0;
} else {
chainLen = keyEntry.chain.length;
}
certs = keyEntry.chain;
if (keyEntry.chain != null) {
certs = keyEntry.chain;
} else {
certs = new Certificate[0];
}
} else if (entry instanceof CertEntry) {
certs = new Certificate[]{((CertEntry) entry).cert};
certs = new Certificate[]{((CertEntry) entry).cert};
} else {
certs = new Certificate[0];
}
for (int i = 0; i < chainLen; i++) {
for (int i = 0; i < certs.length; i++) {
// create SafeBag of Type CertBag
DerOutputStream safeBag = new DerOutputStream();
safeBag.putOID(CertBag_OID);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006, 2015, 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
@ -88,13 +88,8 @@ final class ByteArrayAccess {
// Return whether this platform supports full speed int/long memory access
// at unaligned addresses.
// This code was copied from java.nio.Bits because there is no equivalent
// public API.
private static boolean unaligned() {
String arch = java.security.AccessController.doPrivileged
(new sun.security.action.GetPropertyAction("os.arch", ""));
return arch.equals("i386") || arch.equals("x86") || arch.equals("amd64")
|| arch.equals("x86_64");
return unsafe.unalignedAccess();
}
/**

View File

@ -25,6 +25,8 @@
package sun.util.locale.provider;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.text.spi.BreakIteratorProvider;
import java.text.spi.CollatorProvider;
import java.text.spi.DateFormatProvider;
@ -177,7 +179,9 @@ public abstract class AuxLocaleProviderAdapter extends LocaleProviderAdapter {
* A dummy locale service provider that indicates there is no
* provider available
*/
private static final NullProvider NULL_PROVIDER = new NullProvider();
private static final NullProvider NULL_PROVIDER = AccessController.doPrivileged(
(PrivilegedAction<NullProvider>) () -> new NullProvider());
private static class NullProvider extends LocaleServiceProvider {
@Override
public Locale[] getAvailableLocales() {

View File

@ -26,7 +26,7 @@
package sun.util.locale.provider;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedAction;
import java.security.PrivilegedExceptionAction;
import java.text.spi.BreakIteratorProvider;
import java.text.spi.CollatorProvider;
@ -133,8 +133,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public BreakIteratorProvider getBreakIteratorProvider() {
if (breakIteratorProvider == null) {
BreakIteratorProvider provider = new BreakIteratorProviderImpl(getAdapterType(),
getLanguageTagSet("FormatData"));
BreakIteratorProvider provider = AccessController.doPrivileged(
(PrivilegedAction<BreakIteratorProvider>) () ->
new BreakIteratorProviderImpl(
getAdapterType(),
getLanguageTagSet("FormatData")));
synchronized (this) {
if (breakIteratorProvider == null) {
breakIteratorProvider = provider;
@ -147,8 +151,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public CollatorProvider getCollatorProvider() {
if (collatorProvider == null) {
CollatorProvider provider = new CollatorProviderImpl(getAdapterType(),
getLanguageTagSet("CollationData"));
CollatorProvider provider = AccessController.doPrivileged(
(PrivilegedAction<CollatorProvider>) () ->
new CollatorProviderImpl(
getAdapterType(),
getLanguageTagSet("CollationData")));
synchronized (this) {
if (collatorProvider == null) {
collatorProvider = provider;
@ -161,8 +169,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public DateFormatProvider getDateFormatProvider() {
if (dateFormatProvider == null) {
DateFormatProvider provider = new DateFormatProviderImpl(getAdapterType(),
getLanguageTagSet("FormatData"));
DateFormatProvider provider = AccessController.doPrivileged(
(PrivilegedAction<DateFormatProvider>) () ->
new DateFormatProviderImpl(
getAdapterType(),
getLanguageTagSet("FormatData")));
synchronized (this) {
if (dateFormatProvider == null) {
dateFormatProvider = provider;
@ -175,8 +187,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public DateFormatSymbolsProvider getDateFormatSymbolsProvider() {
if (dateFormatSymbolsProvider == null) {
DateFormatSymbolsProvider provider = new DateFormatSymbolsProviderImpl(getAdapterType(),
getLanguageTagSet("FormatData"));
DateFormatSymbolsProvider provider = AccessController.doPrivileged(
(PrivilegedAction<DateFormatSymbolsProvider>) () ->
new DateFormatSymbolsProviderImpl(
getAdapterType(),
getLanguageTagSet("FormatData")));
synchronized (this) {
if (dateFormatSymbolsProvider == null) {
dateFormatSymbolsProvider = provider;
@ -189,7 +205,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public DecimalFormatSymbolsProvider getDecimalFormatSymbolsProvider() {
if (decimalFormatSymbolsProvider == null) {
DecimalFormatSymbolsProvider provider = new DecimalFormatSymbolsProviderImpl(getAdapterType(), getLanguageTagSet("FormatData"));
DecimalFormatSymbolsProvider provider = AccessController.doPrivileged(
(PrivilegedAction<DecimalFormatSymbolsProvider>) () ->
new DecimalFormatSymbolsProviderImpl(
getAdapterType(),
getLanguageTagSet("FormatData")));
synchronized (this) {
if (decimalFormatSymbolsProvider == null) {
decimalFormatSymbolsProvider = provider;
@ -202,8 +223,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public NumberFormatProvider getNumberFormatProvider() {
if (numberFormatProvider == null) {
NumberFormatProvider provider = new NumberFormatProviderImpl(getAdapterType(),
getLanguageTagSet("FormatData"));
NumberFormatProvider provider = AccessController.doPrivileged(
(PrivilegedAction<NumberFormatProvider>) () ->
new NumberFormatProviderImpl(
getAdapterType(),
getLanguageTagSet("FormatData")));
synchronized (this) {
if (numberFormatProvider == null) {
numberFormatProvider = provider;
@ -219,8 +244,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public CurrencyNameProvider getCurrencyNameProvider() {
if (currencyNameProvider == null) {
CurrencyNameProvider provider = new CurrencyNameProviderImpl(getAdapterType(),
getLanguageTagSet("CurrencyNames"));
CurrencyNameProvider provider = AccessController.doPrivileged(
(PrivilegedAction<CurrencyNameProvider>) () ->
new CurrencyNameProviderImpl(
getAdapterType(),
getLanguageTagSet("CurrencyNames")));
synchronized (this) {
if (currencyNameProvider == null) {
currencyNameProvider = provider;
@ -233,8 +262,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public LocaleNameProvider getLocaleNameProvider() {
if (localeNameProvider == null) {
LocaleNameProvider provider = new LocaleNameProviderImpl(getAdapterType(),
getLanguageTagSet("LocaleNames"));
LocaleNameProvider provider = AccessController.doPrivileged(
(PrivilegedAction<LocaleNameProvider>) () ->
new LocaleNameProviderImpl(
getAdapterType(),
getLanguageTagSet("LocaleNames")));
synchronized (this) {
if (localeNameProvider == null) {
localeNameProvider = provider;
@ -247,8 +280,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public TimeZoneNameProvider getTimeZoneNameProvider() {
if (timeZoneNameProvider == null) {
TimeZoneNameProvider provider = new TimeZoneNameProviderImpl(getAdapterType(),
getLanguageTagSet("TimeZoneNames"));
TimeZoneNameProvider provider = AccessController.doPrivileged(
(PrivilegedAction<TimeZoneNameProvider>) () ->
new TimeZoneNameProviderImpl(
getAdapterType(),
getLanguageTagSet("TimeZoneNames")));
synchronized (this) {
if (timeZoneNameProvider == null) {
timeZoneNameProvider = provider;
@ -261,9 +298,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public CalendarDataProvider getCalendarDataProvider() {
if (calendarDataProvider == null) {
CalendarDataProvider provider;
provider = new CalendarDataProviderImpl(getAdapterType(),
getLanguageTagSet("CalendarData"));
CalendarDataProvider provider = AccessController.doPrivileged(
(PrivilegedAction<CalendarDataProvider>) () ->
new CalendarDataProviderImpl(
getAdapterType(),
getLanguageTagSet("CalendarData")));
synchronized (this) {
if (calendarDataProvider == null) {
calendarDataProvider = provider;
@ -276,9 +316,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public CalendarNameProvider getCalendarNameProvider() {
if (calendarNameProvider == null) {
CalendarNameProvider provider;
provider = new CalendarNameProviderImpl(getAdapterType(),
getLanguageTagSet("FormatData"));
CalendarNameProvider provider = AccessController.doPrivileged(
(PrivilegedAction<CalendarNameProvider>) () ->
new CalendarNameProviderImpl(
getAdapterType(),
getLanguageTagSet("FormatData")));
synchronized (this) {
if (calendarNameProvider == null) {
calendarNameProvider = provider;
@ -294,8 +337,12 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
@Override
public CalendarProvider getCalendarProvider() {
if (calendarProvider == null) {
CalendarProvider provider = new CalendarProviderImpl(getAdapterType(),
getLanguageTagSet("CalendarData"));
CalendarProvider provider = AccessController.doPrivileged(
(PrivilegedAction<CalendarProvider>) () ->
new CalendarProviderImpl(
getAdapterType(),
getLanguageTagSet("CalendarData")));
synchronized (this) {
if (calendarProvider == null) {
calendarProvider = provider;
@ -319,6 +366,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
}
// ResourceBundleBasedAdapter method implementation
@Override
public LocaleData getLocaleData() {
if (localeData == null) {
@ -449,4 +497,4 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R
}
return locales;
}
}
}

View File

@ -152,9 +152,6 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
String GST[] = new String[] {"Gulf Standard Time", "GST",
"Gulf Daylight Time", "GDT",
"Gulf Time", "GT"};
String HAST[] = new String[] {"Hawaii-Aleutian Standard Time", "HAST",
"Hawaii-Aleutian Daylight Time", "HADT",
"Hawaii-Aleutian Time", "HAT"};
String HKT[] = new String[] {"Hong Kong Time", "HKT",
"Hong Kong Summer Time", "HKST",
"Hong Kong Time", "HKT"};
@ -371,7 +368,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -393,7 +390,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
"Paraguay Summer Time", "PYST",
"Paraguay Time", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -395,6 +395,9 @@ JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass);
JNIEXPORT jclass JNICALL
JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass);
JNIEXPORT jstring JNICALL
JVM_GetSimpleBinaryName(JNIEnv *env, jclass ofClass);
/* Generics support (JDK 1.5) */
JNIEXPORT jstring JNICALL
JVM_GetClassSignature(JNIEnv *env, jclass cls);

View File

@ -67,6 +67,7 @@ static JNINativeMethod methods[] = {
{"getProtectionDomain0", "()" PD, (void *)&JVM_GetProtectionDomain},
{"getDeclaredClasses0", "()[" CLS, (void *)&JVM_GetDeclaredClasses},
{"getDeclaringClass0", "()" CLS, (void *)&JVM_GetDeclaringClass},
{"getSimpleBinaryName0", "()" STR, (void *)&JVM_GetSimpleBinaryName},
{"getGenericSignature0", "()" STR, (void *)&JVM_GetClassSignature},
{"getRawAnnotations", "()" BA, (void *)&JVM_GetClassAnnotations},
{"getConstantPool", "()" CPL, (void *)&JVM_GetClassConstantPool},

View File

@ -33,7 +33,6 @@ import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.management.DynamicMBean;
import javax.management.ObjectName;
import sun.management.ManagementFactoryHelper;
import sun.management.spi.PlatformMBeanProvider;
@ -162,8 +161,7 @@ class DefaultPlatformMBeanProvider extends PlatformMBeanProvider {
@Override
public Set<Class<? extends MemoryManagerMXBean>> mbeanInterfaces() {
return Stream.of(MemoryManagerMXBean.class,
GarbageCollectorMXBean.class,
com.sun.management.GarbageCollectorMXBean.class).collect(Collectors.toSet());
GarbageCollectorMXBean.class).collect(Collectors.toSet());
}
@Override
@ -464,39 +462,6 @@ class DefaultPlatformMBeanProvider extends PlatformMBeanProvider {
});
/**
* DynamicMBean
*/
HashMap<ObjectName, DynamicMBean> dynmbeans
= ManagementFactoryHelper.getPlatformDynamicMBeans();
final Set<String> dynamicMBeanInterfaceNames =
Collections.unmodifiableSet(Collections.singleton("javax.management.DynamicMBean"));
for (Map.Entry<ObjectName, DynamicMBean> e : dynmbeans.entrySet()) {
initMBeanList.add(new PlatformComponent<DynamicMBean>() {
@Override
public Set<Class<? extends DynamicMBean>> mbeanInterfaces() {
return Collections.emptySet();
}
@Override
public Set<String> mbeanInterfaceNames() {
return dynamicMBeanInterfaceNames;
}
@Override
public String getObjectNamePattern() {
return e.getKey().getCanonicalName();
}
@Override
public Map<String, DynamicMBean> nameToMBeanMap() {
return Collections.<String, DynamicMBean>singletonMap(
e.getKey().getCanonicalName(),
e.getValue());
}
});
}
initMBeanList.trimToSize();
return initMBeanList;
}

View File

@ -582,7 +582,7 @@ public class ManagementFactory {
final Class<?> cls = mxbeanInterface;
ClassLoader loader =
AccessController.doPrivileged(
(PrivilegedAction<ClassLoader>) () -> cls.getClassLoader());
(PrivilegedAction<ClassLoader>) () -> cls.getClassLoader());
if (!sun.misc.VM.isSystemDomainLoader(loader)) {
throw new IllegalArgumentException(mxbeanName +
" is not a platform MXBean");
@ -883,7 +883,7 @@ public class ManagementFactory {
all.add(new DefaultPlatformMBeanProvider());
return all;
}, null, new FilePermission("<<ALL FILES>>", "read"),
new RuntimePermission("sun.management.spi.PlatformMBeanProvider"));
new RuntimePermission("sun.management.spi.PlatformMBeanProvider.subclass"));
// load all platform components into a map
componentMap = providers.stream()
@ -970,4 +970,11 @@ public class ManagementFactory {
return singleton;
}
}
static {
AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
System.loadLibrary("management");
return null;
});
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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
@ -34,6 +34,7 @@ import java.lang.management.ManagementFactory;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.text.MessageFormat;
import java.util.MissingResourceException;
@ -55,6 +56,125 @@ import sun.misc.VMSupport;
* system class loader. Also jmx framework could be started by jcmd
*/
public class Agent {
/**
* Agent status collector strategy class
*/
private static abstract class StatusCollector {
final protected StringBuilder sb = new StringBuilder();
final public String collect() {
Properties agentProps = VMSupport.getAgentProperties();
String localConnAddr = (String)agentProps.get(LOCAL_CONNECTOR_ADDRESS_PROP);
if (localConnAddr != null || jmxServer != null) {
addAgentStatus(true);
appendConnections(localConnAddr);
} else {
addAgentStatus(false);
}
return sb.toString();
}
private void appendConnections(String localConnAddr) {
appendConnectionsHeader();
if (localConnAddr != null) {
try {
JMXServiceURL u = new JMXServiceURL(localConnAddr);
addConnection(false, u);
} catch (MalformedURLException e) {
// will never happen
}
}
if (jmxServer != null) {
addConnection(true, jmxServer.getAddress());
}
appendConnectionsFooter();
}
private void addConnection(boolean remote, JMXServiceURL u) {
appendConnectionHeader(remote);
addConnectionDetails(u);
if (remote) {
addConfigProperties();
}
appendConnectionFooter(remote);
}
private void addConfigProperties() {
appendConfigPropsHeader();
boolean[] first = new boolean[] {true};
configProps.entrySet().stream().forEach((e) -> {
String key = (String)e.getKey();
if (key.startsWith("com.sun.management.")) {
addConfigProp(key, e.getValue(), first[0]);
first[0] = false;
}
});
appendConfigPropsFooter();
}
abstract protected void addAgentStatus(boolean enabled);
abstract protected void appendConnectionsHeader();
abstract protected void appendConnectionsFooter();
abstract protected void addConnectionDetails(JMXServiceURL u);
abstract protected void appendConnectionHeader(boolean remote);
abstract protected void appendConnectionFooter(boolean remote);
abstract protected void appendConfigPropsHeader();
abstract protected void appendConfigPropsFooter();
abstract protected void addConfigProp(String key, Object value, boolean first);
}
/**
* Free-text status collector strategy implementation
*/
final private static class TextStatusCollector extends StatusCollector {
@Override
protected void addAgentStatus(boolean enabled) {
sb.append("Agent: ").append(enabled ? "enabled" : "disabled").append('\n');
}
@Override
protected void appendConnectionsHeader() {
sb.append('\n');
}
@Override
protected void addConnectionDetails(JMXServiceURL u) {
sb.append("Protocol : ").append(u.getProtocol()).append('\n')
.append("Host : ").append(u.getHost()).append('\n')
.append("URL : ").append(u).append('\n');
}
@Override
protected void appendConnectionHeader(boolean remote) {
sb.append("Connection Type: ").append(remote ? "remote" : "local").append('\n');
}
@Override
protected void appendConfigPropsHeader() {
sb.append("Properties :\n");
}
@Override
protected void addConfigProp(String key, Object value, boolean first) {
if (!first) {
sb.append('\n');
}
sb.append(" ").append(key).append(" = ").append(value);
}
@Override
protected void appendConnectionsFooter() {}
@Override
protected void appendConnectionFooter(boolean remote) {
sb.append('\n');
}
@Override
protected void appendConfigPropsFooter() {}
}
// management properties
private static Properties mgmtProps;
@ -81,6 +201,8 @@ public class Agent {
// The only active agent allowed
private static JMXConnectorServer jmxServer = null;
// The properties used to configure the server
private static Properties configProps = null;
// Parse string com.sun.management.prop=xxx,com.sun.management.prop=yyyy
// and return property set if args is null or empty
@ -161,7 +283,7 @@ public class Agent {
try {
Properties argProps = parseString(args);
Properties configProps = new Properties();
configProps = new Properties();
// Load the management properties from the config file
// if config file is not specified readConfiguration implicitly
@ -228,9 +350,14 @@ public class Agent {
// Don't cause any errors.
jmxServer.stop();
jmxServer = null;
configProps = null;
}
}
private static synchronized String getManagementAgentStatus() throws Exception {
return new TextStatusCollector().collect();
}
private static void startAgent(Properties props) throws Exception {
String snmpPort = props.getProperty(SNMP_PORT);
String jmxremote = props.getProperty(JMXREMOTE);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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
@ -25,168 +25,31 @@
package sun.management;
import com.sun.management.GarbageCollectorMXBean;
import com.sun.management.GarbageCollectionNotificationInfo;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryUsage;
import com.sun.management.GcInfo;
import javax.management.openmbean.CompositeData;
import javax.management.MBeanInfo;
import javax.management.MBeanAttributeInfo;
import javax.management.ObjectName;
import javax.management.MBeanNotificationInfo;
import javax.management.Notification;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.ListenerNotFoundException;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
/**
* Implementation class for the garbage collector.
* Standard and committed hotspot-specific metrics if any.
*
* ManagementFactory.getGarbageCollectorMXBeans() returns a list
* of instances of this class.
*/
class GarbageCollectorImpl extends MemoryManagerImpl
public class GarbageCollectorImpl extends MemoryManagerImpl
implements GarbageCollectorMXBean {
GarbageCollectorImpl(String name) {
protected GarbageCollectorImpl(String name) {
super(name);
}
@Override
public native long getCollectionCount();
@Override
public native long getCollectionTime();
// The memory pools are static and won't be changed.
// TODO: If the hotspot implementation begins to have pools
// dynamically created and removed, this needs to be modified.
private String[] poolNames = null;
synchronized String[] getAllPoolNames() {
if (poolNames == null) {
List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
poolNames = new String[pools.size()];
int i = 0;
for (MemoryPoolMXBean m : pools) {
poolNames[i++] = m.getName();
}
}
return poolNames;
}
// Sun JDK extension
private GcInfoBuilder gcInfoBuilder;
private synchronized GcInfoBuilder getGcInfoBuilder() {
if(gcInfoBuilder == null) {
gcInfoBuilder = new GcInfoBuilder(this, getAllPoolNames());
}
return gcInfoBuilder;
}
public GcInfo getLastGcInfo() {
GcInfo info = getGcInfoBuilder().getLastGcInfo();
return info;
}
private final static String notifName =
"javax.management.Notification";
private final static String[] gcNotifTypes = {
GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION
};
private MBeanNotificationInfo[] notifInfo = null;
public MBeanNotificationInfo[] getNotificationInfo() {
synchronized (this) {
if (notifInfo == null) {
notifInfo = new MBeanNotificationInfo[1];
notifInfo[0] = new MBeanNotificationInfo(gcNotifTypes,
notifName,
"GC Notification");
}
}
return notifInfo;
}
private static long seqNumber = 0;
private static long getNextSeqNumber() {
return ++seqNumber;
}
void createGCNotification(long timestamp,
String gcName,
String gcAction,
String gcCause,
GcInfo gcInfo) {
if (!hasListeners()) {
return;
}
Notification notif = new Notification(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION,
getObjectName(),
getNextSeqNumber(),
timestamp,
gcName);
GarbageCollectionNotificationInfo info =
new GarbageCollectionNotificationInfo(gcName,
gcAction,
gcCause,
gcInfo);
CompositeData cd =
GarbageCollectionNotifInfoCompositeData.toCompositeData(info);
notif.setUserData(cd);
sendNotification(notif);
}
public synchronized void addNotificationListener(NotificationListener listener,
NotificationFilter filter,
Object handback)
{
boolean before = hasListeners();
super.addNotificationListener(listener, filter, handback);
boolean after = hasListeners();
if (!before && after) {
setNotificationEnabled(this, true);
}
}
public synchronized void removeNotificationListener(NotificationListener listener)
throws ListenerNotFoundException {
boolean before = hasListeners();
super.removeNotificationListener(listener);
boolean after = hasListeners();
if (before && !after) {
setNotificationEnabled(this,false);
}
}
public synchronized void removeNotificationListener(NotificationListener listener,
NotificationFilter filter,
Object handback)
throws ListenerNotFoundException
{
boolean before = hasListeners();
super.removeNotificationListener(listener,filter,handback);
boolean after = hasListeners();
if (before && !after) {
setNotificationEnabled(this,false);
}
}
@Override
public ObjectName getObjectName() {
return Util.newObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, getName());
}
native void setNotificationEnabled(GarbageCollectorMXBean gc,
boolean enabled);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2015, 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
@ -115,28 +115,28 @@ public abstract class LazyCompositeData
protected abstract CompositeData getCompositeData();
// Helper methods
static String getString(CompositeData cd, String itemName) {
public static String getString(CompositeData cd, String itemName) {
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");
return (String) cd.get(itemName);
}
static boolean getBoolean(CompositeData cd, String itemName) {
public static boolean getBoolean(CompositeData cd, String itemName) {
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");
return ((Boolean) cd.get(itemName)).booleanValue();
}
static long getLong(CompositeData cd, String itemName) {
public static long getLong(CompositeData cd, String itemName) {
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");
return ((Long) cd.get(itemName)).longValue();
}
static int getInt(CompositeData cd, String itemName) {
public static int getInt(CompositeData cd, String itemName) {
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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
@ -26,8 +26,6 @@
package sun.management;
import java.lang.management.*;
import javax.management.DynamicMBean;
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanServer;
@ -38,30 +36,35 @@ import javax.management.RuntimeOperationsException;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import sun.util.logging.LoggingSupport;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.sun.management.DiagnosticCommandMBean;
import com.sun.management.HotSpotDiagnosticMXBean;
/**
* ManagementFactoryHelper provides static factory methods to create
* instances of the management interface.
*/
public class ManagementFactoryHelper {
static {
// make sure that the management lib is loaded within
// java.lang.management.ManagementFactory
sun.misc.Unsafe.getUnsafe().ensureClassInitialized(ManagementFactory.class);
}
private static final VMManagement jvm = new VMManagementImpl();
private ManagementFactoryHelper() {};
private static VMManagement jvm;
public static VMManagement getVMManagement() {
return jvm;
}
private static ClassLoadingImpl classMBean = null;
private static MemoryImpl memoryMBean = null;
private static ThreadImpl threadMBean = null;
private static RuntimeImpl runtimeMBean = null;
private static CompilationImpl compileMBean = null;
private static OperatingSystemImpl osMBean = null;
private static BaseOperatingSystemImpl osMBean = null;
public static synchronized ClassLoadingMXBean getClassLoadingMXBean() {
if (classMBean == null) {
@ -100,7 +103,7 @@ public class ManagementFactoryHelper {
public static synchronized OperatingSystemMXBean getOperatingSystemMXBean() {
if (osMBean == null) {
osMBean = new OperatingSystemImpl(jvm);
osMBean = new BaseOperatingSystemImpl(jvm);
}
return osMBean;
}
@ -123,7 +126,7 @@ public class ManagementFactoryHelper {
return result;
}
public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() {
public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() {
MemoryManagerMXBean[] mgrs = MemoryImpl.getMemoryManagers();
List<GarbageCollectorMXBean> result = new ArrayList<>(mgrs.length);
for (MemoryManagerMXBean m : mgrs) {
@ -257,20 +260,11 @@ public class ManagementFactoryHelper {
};
}
private static HotSpotDiagnostic hsDiagMBean = null;
private static HotspotRuntime hsRuntimeMBean = null;
private static HotspotClassLoading hsClassMBean = null;
private static HotspotThread hsThreadMBean = null;
private static HotspotCompilation hsCompileMBean = null;
private static HotspotMemory hsMemoryMBean = null;
private static DiagnosticCommandImpl hsDiagCommandMBean = null;
public static synchronized HotSpotDiagnosticMXBean getDiagnosticMXBean() {
if (hsDiagMBean == null) {
hsDiagMBean = new HotSpotDiagnostic();
}
return hsDiagMBean;
}
/**
* This method is for testing only.
@ -312,14 +306,6 @@ public class ManagementFactoryHelper {
return hsMemoryMBean;
}
public static synchronized DiagnosticCommandMBean getDiagnosticCommandMBean() {
// Remote Diagnostic Commands may not be supported
if (hsDiagCommandMBean == null && jvm.isRemoteDiagnosticCommandsSupported()) {
hsDiagCommandMBean = new DiagnosticCommandImpl(jvm);
}
return hsDiagCommandMBean;
}
/**
* This method is for testing only.
*/
@ -374,18 +360,6 @@ public class ManagementFactoryHelper {
private final static String HOTSPOT_THREAD_MBEAN_NAME =
"sun.management:type=HotspotThreading";
final static String HOTSPOT_DIAGNOSTIC_COMMAND_MBEAN_NAME =
"com.sun.management:type=DiagnosticCommand";
public static HashMap<ObjectName, DynamicMBean> getPlatformDynamicMBeans() {
HashMap<ObjectName, DynamicMBean> map = new HashMap<>();
DiagnosticCommandMBean diagMBean = getDiagnosticCommandMBean();
if (diagMBean != null) {
map.put(Util.newObjectName(HOTSPOT_DIAGNOSTIC_COMMAND_MBEAN_NAME), diagMBean);
}
return map;
}
static void registerInternalMBeans(MBeanServer mbs) {
// register all internal MBeans if not registered
// No exception is thrown if a MBean with that object name
@ -441,17 +415,6 @@ public class ManagementFactoryHelper {
}
}
static {
AccessController.doPrivileged(
new java.security.PrivilegedAction<Void>() {
public Void run() {
System.loadLibrary("management");
return null;
}
});
jvm = new VMManagementImpl();
}
public static boolean isThreadSuspended(int state) {
return ((state & JMM_THREAD_STATE_FLAG_SUSPENDED) != 0);
}
@ -471,4 +434,20 @@ public class ManagementFactoryHelper {
private static final int JMM_THREAD_STATE_FLAG_SUSPENDED = 0x00100000;
private static final int JMM_THREAD_STATE_FLAG_NATIVE = 0x00400000;
// Invoked by the VM
private static MemoryPoolMXBean createMemoryPool
(String name, boolean isHeap, long uThreshold, long gcThreshold) {
return new MemoryPoolImpl(name, isHeap, uThreshold, gcThreshold);
}
private static MemoryManagerMXBean createMemoryManager(String name) {
return new MemoryManagerImpl(name);
}
private static GarbageCollectorMXBean
createGarbageCollector(String name, String type) {
// ignore type parameter which is for future extension
return new GarbageCollectorImpl(name);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2015, 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
@ -38,10 +38,8 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import javax.management.*;
import javax.management.openmbean.*;
import static javax.management.openmbean.SimpleType.*;
import com.sun.management.VMOption;
/**
* A mapped mxbean type maps a Java type to an open type.
@ -113,7 +111,7 @@ public abstract class MappedMXBeanType {
return mt;
}
static synchronized MappedMXBeanType getMappedType(Type t)
public static synchronized MappedMXBeanType getMappedType(Type t)
throws OpenDataException {
MappedMXBeanType mt = convertedTypes.get(t);
if (mt == null) {
@ -152,7 +150,7 @@ public abstract class MappedMXBeanType {
}
// Return the mapped open type
OpenType<?> getOpenType() {
public OpenType<?> getOpenType() {
return openType;
}
@ -177,10 +175,10 @@ public abstract class MappedMXBeanType {
// return name of the class or the generic type
abstract String getName();
abstract Object toOpenTypeData(Object javaTypeData)
public abstract Object toOpenTypeData(Object javaTypeData)
throws OpenDataException;
abstract Object toJavaTypeData(Object openTypeData)
public abstract Object toJavaTypeData(Object openTypeData)
throws OpenDataException, InvalidObjectException;
// Basic Types - Classes that do not require data conversion
@ -208,11 +206,11 @@ public abstract class MappedMXBeanType {
return basicType.getName();
}
Object toOpenTypeData(Object data) throws OpenDataException {
public Object toOpenTypeData(Object data) throws OpenDataException {
return data;
}
Object toJavaTypeData(Object data)
public Object toJavaTypeData(Object data)
throws OpenDataException, InvalidObjectException {
return data;
@ -243,11 +241,11 @@ public abstract class MappedMXBeanType {
return enumClass.getName();
}
Object toOpenTypeData(Object data) throws OpenDataException {
public Object toOpenTypeData(Object data) throws OpenDataException {
return ((Enum) data).name();
}
Object toJavaTypeData(Object data)
public Object toJavaTypeData(Object data)
throws OpenDataException, InvalidObjectException {
try {
@ -315,7 +313,7 @@ public abstract class MappedMXBeanType {
return arrayClass.getName();
}
Object toOpenTypeData(Object data) throws OpenDataException {
public Object toOpenTypeData(Object data) throws OpenDataException {
// If the base element type is a basic type
// return the data as no conversion is needed.
// Primitive types are not converted to wrappers.
@ -340,7 +338,7 @@ public abstract class MappedMXBeanType {
}
Object toJavaTypeData(Object data)
public Object toJavaTypeData(Object data)
throws OpenDataException, InvalidObjectException {
// If the base element type is a basic type
@ -457,7 +455,7 @@ public abstract class MappedMXBeanType {
return typeName;
}
Object toOpenTypeData(Object data) throws OpenDataException {
public Object toOpenTypeData(Object data) throws OpenDataException {
final List<Object> list = (List<Object>) data;
final Object[] openArray = (Object[])
@ -470,7 +468,7 @@ public abstract class MappedMXBeanType {
return openArray;
}
Object toJavaTypeData(Object data)
public Object toJavaTypeData(Object data)
throws OpenDataException, InvalidObjectException {
final Object[] openArray = (Object[]) data;
@ -538,7 +536,7 @@ public abstract class MappedMXBeanType {
return typeName;
}
Object toOpenTypeData(Object data) throws OpenDataException {
public Object toOpenTypeData(Object data) throws OpenDataException {
final Map<Object,Object> map = (Map<Object,Object>) data;
final TabularType tabularType = (TabularType) openType;
final TabularData table = new TabularDataSupport(tabularType);
@ -556,7 +554,7 @@ public abstract class MappedMXBeanType {
return table;
}
Object toJavaTypeData(Object data)
public Object toJavaTypeData(Object data)
throws OpenDataException, InvalidObjectException {
final TabularData td = (TabularData) data;
@ -605,8 +603,9 @@ public abstract class MappedMXBeanType {
//
static class CompositeDataMXBeanType extends MappedMXBeanType {
final Class<?> javaClass;
final boolean isCompositeData;
boolean isCompositeData = false;
Method fromMethod = null;
Method toMethod = null;
CompositeDataMXBeanType(Class<?> c) throws OpenDataException {
this.javaClass = c;
@ -624,6 +623,26 @@ public abstract class MappedMXBeanType {
// that has no from method to be embeded in another class.
}
// check if a static "toCompositeData" method exists
try {
toMethod = AccessController.doPrivileged(new PrivilegedExceptionAction<Method>() {
public Method run() throws NoSuchMethodException {
Method m = javaClass.getDeclaredMethod("toCompositeData", javaClass);
if (m != null
&& CompositeData.class.isAssignableFrom(m.getReturnType())
&& Modifier.isStatic(m.getModifiers())) {
m.setAccessible(true);
return m;
} else {
return null;
}
}
});
} catch (PrivilegedActionException e) {
// ignore NoSuchMethodException since we allow classes
// that has no from method to be embeded in another class.
}
if (COMPOSITE_DATA_CLASS.isAssignableFrom(c)) {
// c implements CompositeData - set openType to null
// defer generating the CompositeType
@ -636,16 +655,16 @@ public abstract class MappedMXBeanType {
// Make a CompositeData containing all the getters
final Method[] methods =
AccessController.doPrivileged(new PrivilegedAction<Method[]>() {
public Method[] run() {
return javaClass.getMethods();
}
});
public Method[] run() {
return javaClass.getMethods();
}
});
final List<String> names = new ArrayList<>();
final List<OpenType<?>> types = new ArrayList<>();
/* Select public methods that look like "T getX()" or "boolean
isX()", where T is not void and X is not the empty
string. Exclude "Class getClass()" inherited from Object. */
isX()", where T is not void and X is not the empty
string. Exclude "Class getClass()" inherited from Object. */
for (int i = 0; i < methods.length; i++) {
final Method method = methods[i];
final String name = method.getName();
@ -676,10 +695,10 @@ public abstract class MappedMXBeanType {
final String[] nameArray = names.toArray(new String[0]);
openType = new CompositeType(c.getName(),
c.getName(),
nameArray, // field names
nameArray, // field descriptions
types.toArray(new OpenType<?>[0]));
c.getName(),
nameArray, // field names
nameArray, // field descriptions
types.toArray(new OpenType<?>[0]));
}
}
@ -691,7 +710,23 @@ public abstract class MappedMXBeanType {
return javaClass.getName();
}
Object toOpenTypeData(Object data) throws OpenDataException {
public Object toOpenTypeData(Object data) throws OpenDataException {
if (toMethod != null) {
try {
return toMethod.invoke(null, data);
} catch (IllegalAccessException e) {
// should never reach here
throw new AssertionError(e);
} catch (InvocationTargetException e) {
final OpenDataException ode
= new OpenDataException("Failed to invoke "
+ toMethod.getName() + " to convert " + javaClass.getName()
+ " to CompositeData");
ode.initCause(e);
throw ode;
}
}
if (data instanceof MemoryUsage) {
return MemoryUsageCompositeData.toCompositeData((MemoryUsage) data);
}
@ -712,10 +747,6 @@ public abstract class MappedMXBeanType {
toCompositeData((MemoryNotificationInfo) data);
}
if (data instanceof VMOption) {
return VMOptionCompositeData.toCompositeData((VMOption) data);
}
if (isCompositeData) {
// Classes that implement CompositeData
//
@ -732,7 +763,7 @@ public abstract class MappedMXBeanType {
" is not supported for platform MXBeans");
}
Object toJavaTypeData(Object data)
public Object toJavaTypeData(Object data)
throws OpenDataException, InvalidObjectException {
if (fromMethod == null) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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
@ -34,13 +34,12 @@ import javax.management.NotificationListener;
import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Collections;
/**
* Abstract helper class for notification emitter support.
*/
abstract class NotificationEmitterSupport implements NotificationEmitter {
public abstract class NotificationEmitterSupport implements NotificationEmitter {
protected NotificationEmitterSupport() {
}
@ -135,7 +134,7 @@ abstract class NotificationEmitterSupport implements NotificationEmitter {
}
}
void sendNotification(Notification notification) {
public void sendNotification(Notification notification) {
if (notification == null) {
return;
@ -162,7 +161,7 @@ abstract class NotificationEmitterSupport implements NotificationEmitter {
}
}
boolean hasListeners() {
public boolean hasListeners() {
synchronized (listenerLock) {
return !listenerList.isEmpty();
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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
@ -26,20 +26,18 @@
package sun.management;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import javax.management.ObjectName;
/**
* Implementation class for the thread subsystem.
* Standard and committed hotspot-specific metrics if any.
*
* ManagementFactory.getThreadMXBean() returns an instance
* of this class.
* Implementation for java.lang.management.ThreadMXBean as well as providing the
* supporting method for com.sun.management.ThreadMXBean.
* The supporting method for com.sun.management.ThreadMXBean can be moved to
* jdk.management in the future.
*/
class ThreadImpl implements com.sun.management.ThreadMXBean {
public class ThreadImpl implements ThreadMXBean {
private final VMManagement jvm;
// default for thread contention monitoring is disabled.
@ -50,32 +48,38 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
/**
* Constructor of ThreadImpl class.
*/
ThreadImpl(VMManagement vm) {
protected ThreadImpl(VMManagement vm) {
this.jvm = vm;
this.cpuTimeEnabled = jvm.isThreadCpuTimeEnabled();
this.allocatedMemoryEnabled = jvm.isThreadAllocatedMemoryEnabled();
}
@Override
public int getThreadCount() {
return jvm.getLiveThreadCount();
}
@Override
public int getPeakThreadCount() {
return jvm.getPeakThreadCount();
}
@Override
public long getTotalStartedThreadCount() {
return jvm.getTotalThreadCount();
}
@Override
public int getDaemonThreadCount() {
return jvm.getDaemonThreadCount();
}
@Override
public boolean isThreadContentionMonitoringSupported() {
return jvm.isThreadContentionMonitoringSupported();
}
@Override
public synchronized boolean isThreadContentionMonitoringEnabled() {
if (!isThreadContentionMonitoringSupported()) {
throw new UnsupportedOperationException(
@ -84,18 +88,21 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return contentionMonitoringEnabled;
}
@Override
public boolean isThreadCpuTimeSupported() {
return jvm.isOtherThreadCpuTimeSupported();
}
@Override
public boolean isCurrentThreadCpuTimeSupported() {
return jvm.isCurrentThreadCpuTimeSupported();
}
public boolean isThreadAllocatedMemorySupported() {
protected boolean isThreadAllocatedMemorySupported() {
return jvm.isThreadAllocatedMemorySupported();
}
@Override
public boolean isThreadCpuTimeEnabled() {
if (!isThreadCpuTimeSupported() &&
!isCurrentThreadCpuTimeSupported()) {
@ -105,7 +112,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return cpuTimeEnabled;
}
public boolean isThreadAllocatedMemoryEnabled() {
protected boolean isThreadAllocatedMemoryEnabled() {
if (!isThreadAllocatedMemorySupported()) {
throw new UnsupportedOperationException(
"Thread allocated memory measurement is not supported");
@ -113,6 +120,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return allocatedMemoryEnabled;
}
@Override
public long[] getAllThreadIds() {
Util.checkMonitorAccess();
@ -126,6 +134,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return ids;
}
@Override
public ThreadInfo getThreadInfo(long id) {
long[] ids = new long[1];
ids[0] = id;
@ -133,6 +142,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return infos[0];
}
@Override
public ThreadInfo getThreadInfo(long id, int maxDepth) {
long[] ids = new long[1];
ids[0] = id;
@ -140,6 +150,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return infos[0];
}
@Override
public ThreadInfo[] getThreadInfo(long[] ids) {
return getThreadInfo(ids, 0);
}
@ -157,6 +168,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
}
}
@Override
public ThreadInfo[] getThreadInfo(long[] ids, int maxDepth) {
verifyThreadIds(ids);
@ -165,6 +177,10 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
"Invalid maxDepth parameter: " + maxDepth);
}
// ids has been verified to be non-null
// an empty array of ids should return an empty array of ThreadInfos
if (ids.length == 0) return new ThreadInfo[0];
Util.checkMonitorAccess();
ThreadInfo[] infos = new ThreadInfo[ids.length]; // nulls
@ -176,6 +192,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return infos;
}
@Override
public void setThreadContentionMonitoringEnabled(boolean enable) {
if (!isThreadContentionMonitoringSupported()) {
throw new UnsupportedOperationException(
@ -209,6 +226,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return isThreadCpuTimeEnabled();
}
@Override
public long getCurrentThreadCpuTime() {
if (verifyCurrentThreadCpuTime()) {
return getThreadTotalCpuTime0(0);
@ -216,6 +234,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return -1;
}
@Override
public long getThreadCpuTime(long id) {
long[] ids = new long[1];
ids[0] = id;
@ -247,7 +266,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return isThreadCpuTimeEnabled();
}
public long[] getThreadCpuTime(long[] ids) {
protected long[] getThreadCpuTime(long[] ids) {
boolean verified = verifyThreadCpuTime(ids);
int length = ids.length;
@ -268,6 +287,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return times;
}
@Override
public long getCurrentThreadUserTime() {
if (verifyCurrentThreadCpuTime()) {
return getThreadUserCpuTime0(0);
@ -275,6 +295,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return -1;
}
@Override
public long getThreadUserTime(long id) {
long[] ids = new long[1];
ids[0] = id;
@ -282,7 +303,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return times[0];
}
public long[] getThreadUserTime(long[] ids) {
protected long[] getThreadUserTime(long[] ids) {
boolean verified = verifyThreadCpuTime(ids);
int length = ids.length;
@ -303,6 +324,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return times;
}
@Override
public void setThreadCpuTimeEnabled(boolean enable) {
if (!isThreadCpuTimeSupported() &&
!isCurrentThreadCpuTimeSupported()) {
@ -320,7 +342,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
}
}
public long getThreadAllocatedBytes(long id) {
protected long getThreadAllocatedBytes(long id) {
long[] ids = new long[1];
ids[0] = id;
final long[] sizes = getThreadAllocatedBytes(ids);
@ -339,7 +361,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return isThreadAllocatedMemoryEnabled();
}
public long[] getThreadAllocatedBytes(long[] ids) {
protected long[] getThreadAllocatedBytes(long[] ids) {
boolean verified = verifyThreadAllocatedMemory(ids);
long[] sizes = new long[ids.length];
@ -351,7 +373,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return sizes;
}
public void setThreadAllocatedMemoryEnabled(boolean enable) {
protected void setThreadAllocatedMemoryEnabled(boolean enable) {
if (!isThreadAllocatedMemorySupported()) {
throw new UnsupportedOperationException(
"Thread allocated memory measurement is not supported.");
@ -367,6 +389,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
}
}
@Override
public long[] findMonitorDeadlockedThreads() {
Util.checkMonitorAccess();
@ -383,6 +406,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return ids;
}
@Override
public long[] findDeadlockedThreads() {
if (!isSynchronizerUsageSupported()) {
throw new UnsupportedOperationException(
@ -404,15 +428,18 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
return ids;
}
@Override
public void resetPeakThreadCount() {
Util.checkControlAccess();
resetPeakThreadCount0();
}
@Override
public boolean isObjectMonitorUsageSupported() {
return jvm.isObjectMonitorUsageSupported();
}
@Override
public boolean isSynchronizerUsageSupported() {
return jvm.isSynchronizerUsageSupported();
}
@ -432,14 +459,20 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
Util.checkMonitorAccess();
}
@Override
public ThreadInfo[] getThreadInfo(long[] ids,
boolean lockedMonitors,
boolean lockedSynchronizers) {
verifyThreadIds(ids);
// ids has been verified to be non-null
// an empty array of ids should return an empty array of ThreadInfos
if (ids.length == 0) return new ThreadInfo[0];
verifyDumpThreads(lockedMonitors, lockedSynchronizers);
return dumpThreads0(ids, lockedMonitors, lockedSynchronizers);
}
@Override
public ThreadInfo[] dumpAllThreads(boolean lockedMonitors,
boolean lockedSynchronizers) {
verifyDumpThreads(lockedMonitors, lockedSynchronizers);
@ -469,6 +502,7 @@ class ThreadImpl implements com.sun.management.ThreadMXBean {
// tid == 0 to reset contention times for all threads
private static native void resetContentionTimes0(long tid);
@Override
public ObjectName getObjectName() {
return Util.newObjectName(ManagementFactory.THREAD_MXBEAN_NAME);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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
@ -81,7 +81,7 @@ public class Util {
static void checkMonitorAccess() throws SecurityException {
checkAccess(monitorPermission);
}
static void checkControlAccess() throws SecurityException {
public static void checkControlAccess() throws SecurityException {
checkAccess(controlPermission);
}
}

View File

@ -205,7 +205,7 @@ public abstract class PlatformMBeanProvider {
* Instantiates a new PlatformMBeanProvider.
*
* @throws SecurityException if the subclass (and calling code) does not
* have {@code RuntimePermission("sun.management.spi.PlatformMBeanProvider", "subclass")}
* have {@code RuntimePermission("sun.management.spi.PlatformMBeanProvider.subclass")}
*/
protected PlatformMBeanProvider () {
this(checkSubclassPermission());
@ -226,7 +226,7 @@ public abstract class PlatformMBeanProvider {
private static Void checkSubclassPermission() {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission(PlatformMBeanProvider.class.getName(), "subclass"));
sm.checkPermission(new RuntimePermission(PlatformMBeanProvider.class.getName()+".subclass"));
}
return null;
}

View File

@ -36,17 +36,3 @@ JNIEXPORT jlong JNICALL Java_sun_management_GarbageCollectorImpl_getCollectionTi
(JNIEnv *env, jobject mgr) {
return jmm_interface->GetLongAttribute(env, mgr, JMM_GC_TIME_MS);
}
JNIEXPORT void JNICALL Java_sun_management_GarbageCollectorImpl_setNotificationEnabled
(JNIEnv *env, jobject dummy, jobject gc,jboolean enabled) {
if (gc == NULL) {
JNU_ThrowNullPointerException(env, "Invalid GarbageCollectorMBean");
return;
}
if((jmm_version > JMM_VERSION_1_2)
|| (jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF)>=1))) {
jmm_interface->SetGCNotificationEnabled(env, gc, enabled);
}
}

View File

@ -59,6 +59,8 @@ public class GSSUtil {
GSSUtil.createOid("1.2.840.113554.1.2.2");
public static final Oid GSS_KRB5_MECH_OID2 =
GSSUtil.createOid("1.3.5.1.5.2");
public static final Oid GSS_KRB5_MECH_OID_MS =
GSSUtil.createOid("1.2.840.48018.1.2.2");
public static final Oid GSS_SPNEGO_MECH_OID =
GSSUtil.createOid("1.3.6.1.5.5.2");
@ -101,7 +103,8 @@ public class GSSUtil {
public static boolean isKerberosMech(Oid oid) {
return (GSS_KRB5_MECH_OID.equals(oid) ||
GSS_KRB5_MECH_OID2.equals(oid));
GSS_KRB5_MECH_OID2.equals(oid) ||
GSS_KRB5_MECH_OID_MS.equals(oid));
}

View File

@ -538,14 +538,21 @@ public class SpNegoContext implements GSSContextSpi {
// get the token for mechanism
byte[] accept_token;
if (mechList[0].equals(mech_wanted)) {
if (mechList[0].equals(mech_wanted) ||
(GSSUtil.isKerberosMech(mechList[0]) &&
GSSUtil.isKerberosMech(mech_wanted))) {
// get the mechanism token
if (DEBUG && !mech_wanted.equals(mechList[0])) {
System.out.println("SpNegoContext.acceptSecContext: " +
"negotiated mech adjusted to " + mechList[0]);
}
byte[] mechToken = initToken.getMechToken();
if (mechToken == null) {
throw new GSSException(GSSException.FAILURE, -1,
"mechToken is missing");
}
accept_token = GSS_acceptSecContext(mechToken);
mech_wanted = mechList[0];
} else {
accept_token = null;
}

View File

@ -389,7 +389,7 @@ JNIEXPORT jobject JNICALL Java_sun_security_krb5_Credentials_acquireDefaultNativ
jobject authTime, renewTillTime, hostAddresses = NULL;
KERB_EXTERNAL_TICKET *msticket;
int found = 0;
FILETIME Now, EndTime, LocalEndTime;
FILETIME Now, EndTime;
int i, netypes;
jint *etypes = NULL;
@ -476,8 +476,7 @@ JNIEXPORT jobject JNICALL Java_sun_security_krb5_Credentials_acquireDefaultNativ
GetSystemTimeAsFileTime(&Now);
EndTime.dwLowDateTime = msticket->EndTime.LowPart;
EndTime.dwHighDateTime = msticket->EndTime.HighPart;
FileTimeToLocalFileTime(&EndTime, &LocalEndTime);
if (CompareFileTime(&Now, &LocalEndTime) < 0) {
if (CompareFileTime(&Now, &EndTime) < 0) {
for (i=0; i<netypes; i++) {
if (etypes[i] == msticket->SessionKey.KeyType) {
found = 1;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2015, 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
@ -130,6 +130,15 @@ final public class InterfaceTypeImpl extends InvokableTypeImpl
return null;
}
@Override
boolean isAssignableTo(ReferenceType type) {
if (type.name().equals("java.lang.Object")) {
// interfaces are always assignable to j.l.Object
return true;
}
return super.isAssignableTo(type);
}
@Override
List<InterfaceType> interfaces() {
return superinterfaces();
@ -140,4 +149,4 @@ final public class InterfaceTypeImpl extends InvokableTypeImpl
// method must be directly in this interface
return this.equals(method.declaringType());
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2015, 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
@ -64,15 +64,9 @@ public class Jstatd {
int localport = (port < 0) ? Registry.REGISTRY_PORT : port;
registry = LocateRegistry.createRegistry(localport);
bind(name, remoteHost);
} else {
throw e;
}
else {
System.out.println("Could not contact registry\n"
+ e.getMessage());
e.printStackTrace();
}
} catch (RemoteException e) {
System.err.println("Could not bind " + name + " to RMI Registry");
e.printStackTrace();
}
}
@ -142,23 +136,28 @@ public class Jstatd {
RemoteHost stub = (RemoteHost) UnicastRemoteObject.exportObject(
remoteHost, 0);
bind(name.toString(), remoteHost);
System.out.println("jstatd started (bound to " + name.toString() + ")");
System.out.flush();
} catch (MalformedURLException e) {
if (rminame != null) {
System.out.println("Bad RMI server name: " + rminame);
} else {
System.out.println("Bad RMI URL: " + name + " : "
+ e.getMessage());
System.out.println("Bad RMI URL: " + name);
}
e.printStackTrace(System.out);
System.exit(1);
} catch (java.rmi.ConnectException e) {
// could not attach to or create a registry
System.out.println("Could not contact RMI registry\n"
+ e.getMessage());
System.out.println("Could not contact RMI registry");
e.printStackTrace(System.out);
System.exit(1);
} catch (RemoteException e) {
System.out.println("Could not bind " + name + " to RMI Registry");
e.printStackTrace(System.out);
System.exit(1);
} catch (Exception e) {
System.out.println("Could not create remote object\n"
+ e.getMessage());
e.printStackTrace();
System.out.println("Could not create remote object");
e.printStackTrace(System.out);
System.exit(1);
}
}

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
String GST[] = new String[] {"Golf Normalzeit", "GST",
"Golf Sommerzeit", "GDT",
"Zeitzone f\u00FCr Persischen Golf", "GT"};
String HAST[] = new String[] {"Hawaii-Aleutische Normalzeit", "HAST",
"Hawaii-Aleutische Sommerzeit", "HADT",
"Zeitzone f\u00FCr Hawaii und Al\u00EButen", "HAT"};
String HKT[] = new String[] {"Hongkong Zeit", "HKT",
"Hongkong Sommerzeit", "HKST",
"Hongkong Zeit", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
"Paraguay Sommerzeit", "PYST",
"Paraguay Zeit", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
String GST[] = new String[] {"Hora est\u00e1ndar del Golfo", "GST",
"Hora de verano del Golfo", "GDT",
"Hora del Golfo", "GT"};
String HAST[] = new String[] {"Hora est\u00e1ndar de Hawaii-Aleutianas", "HAST",
"Hora de verano de Hawaii-Aleutianas", "HADT",
"Hora de Hawaii-Aleutian", "HAT"};
String HKT[] = new String[] {"Hora de Hong Kong", "HKT",
"Hora de verano de Hong Kong", "HKST",
"Hora de Hong Kong", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
"Hora de verano de Paraguay", "PYST",
"Hora de Paraguay", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
String GST[] = new String[] {"Heure normale du Golfe", "GST",
"Heure avanc\u00e9e du Golfe", "GDT",
"Golfe", "GT"} ;
String HAST[] = new String[] {"Heure normale d'Hawa\u00ef-Al\u00e9outiennes", "HAST",
"Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT",
"Hawa\u00EF-Iles Al\u00E9outiennes", "HAT"} ;
String HKT[] = new String[] {"Heure de Hong Kong", "HKT",
"Heure d'\u00e9t\u00e9 de Hong Kong", "HKST",
"Heure de Hong-Kong", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
"Heure d'\u00e9t\u00e9 du Paraguay", "PYST",
"Heure du Paraguay", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
String GST[] = new String[] {"Ora solare del golfo", "GST",
"Ora legale del golfo", "GDT",
"Ora del golfo", "GT"};
String HAST[] = new String[] {"Ora solare delle Isole Hawaii-Aleutine", "HAST",
"Ora solare delle Isole Hawaii-Aleutine", "HADT",
"Ora Hawaii-Aleutine", "HAT"};
String HKT[] = new String[] {"Ora di Hong Kong", "HKT",
"Ora estiva di Hong Kong", "HKST",
"Ora di Hong Kong", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
"Ora estiva del Paraguay", "PYST",
"Ora del Paraguay", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
String GST[] = new String[] {"\u6e7e\u5cb8\u6a19\u6e96\u6642", "GST",
"\u6e7e\u5cb8\u590f\u6642\u9593", "GDT",
"\u6E7E\u5CB8\u6642\u9593", "GT"};
String HAST[] = new String[] {"\u30cf\u30ef\u30a4 - \u30a2\u30ea\u30e5\u30fc\u30b7\u30e3\u30f3\u6a19\u6e96\u6642", "HAST",
"\u30cf\u30ef\u30a4 - \u30a2\u30ea\u30e5\u30fc\u30b7\u30e3\u30f3\u590f\u6642\u9593", "HADT",
"\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593", "HAT"};
String HKT[] = new String[] {"\u9999\u6e2f\u6642\u9593", "HKT",
"\u9999\u6e2f\u590f\u6642\u9593", "HKST",
"\u9999\u6E2F\u6642\u9593", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
"\u30d1\u30e9\u30b0\u30a2\u30a4\u590f\u6642\u9593", "PYST",
"\u30D1\u30E9\u30B0\u30A2\u30A4\u6642\u9593", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
String GST[] = new String[] {"\uac78\ud504\ub9cc \ud45c\uc900\uc2dc", "GST",
"\uac78\ud504\ub9cc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GDT",
"\uAC78\uD504\uB9CC \uD45C\uC900\uC2DC", "GT"};
String HAST[] = new String[] {"\ud558\uc640\uc774 \uc54c\ub958\uc0e8 \ud45c\uc900\uc2dc", "HAST",
"\ud558\uc640\uc774 \uc54c\ub958\uc0e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HADT",
"\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC", "HAT"};
String HKT[] = new String[] {"\ud64d\ucf69 \uc2dc\uac04", "HKT",
"\ud64d\ucf69 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HKST",
"\uD64D\uCF69 \uD45C\uC900\uC2DC", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
"\ud30c\ub77c\uacfc\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PYST",
"\uD30C\uB77C\uACFC\uC774 \uD45C\uC900\uC2DC", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -150,9 +150,6 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
String GST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do golfo", "GST",
"Hor\u00e1rio de luz natural do golfo", "GDT",
"Hor\u00E1rio do Golfo", "GT"};
String HAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed-Aleutian", "HAST",
"Hor\u00e1rio de luz natural do Hava\u00ed-Aleutian", "HADT",
"Hor\u00E1rio do Hava\u00ED-Aleutas", "HAT"};
String HKT[] = new String[] {"Fuso hor\u00e1rio de Hong Kong", "HKT",
"Fuso hor\u00e1rio de ver\u00e3o de Hong Kong", "HKST",
"Hor\u00E1rio de Hong Kong", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
"Fuso hor\u00e1rio de ver\u00e3o do Paraguai", "PYST",
"Hor\u00E1rio do Paraguai", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
String GST[] = new String[] {"Gulf-normaltid", "GST",
"Gulf-sommartid", "GDT",
"Golfens tid", "GT"};
String HAST[] = new String[] {"Hawaii-Aleuterna, normaltid", "HAST",
"Hawaii-Aleuterna, sommartid", "HADT",
"Hawaiiansk-aleutisk tid", "HAT"};
String HKT[] = new String[] {"Hong Kong, normaltid", "HKT",
"Hong Kong, sommartid", "HKST",
"Hongkong-tid", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
"Paraguay, sommartid", "PYST",
"Paraguayansk tid", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
String GST[] = new String[] {"\u6ce2\u65af\u6e7e\u6807\u51c6\u65f6\u95f4", "GST",
"\u6ce2\u65af\u6e7e\u590f\u4ee4\u65f6", "GDT",
"\u6D77\u6E7E\u65F6\u95F4", "GT"};
String HAST[] = new String[] {"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "HAST",
"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5c9b\u590f\u4ee4\u65f6", "HADT",
"\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4", "HAT"};
String HKT[] = new String[] {"\u9999\u6e2f\u65f6\u95f4", "HKT",
"\u9999\u6e2f\u590f\u4ee4\u65f6", "HKST",
"\u9999\u6E2F\u65F6\u95F4", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
"\u5df4\u62c9\u572d\u590f\u4ee4\u65f6", "PYST",
"\u5DF4\u62C9\u572D\u65F6\u95F4", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1024,7 +1021,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -153,9 +153,6 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
String GST[] = new String[] {"\u6ce2\u65af\u7063\u6a19\u6e96\u6642\u9593", "GST",
"\u6ce2\u65af\u7063\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "GDT",
"\u6CE2\u65AF\u7063\u6642\u9593", "GT"};
String HAST[] = new String[] {"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5cf6\u6a19\u6e96\u6642\u9593", "HAST",
"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "HADT",
"\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593", "HAT"};
String HKT[] = new String[] {"\u9999\u6e2f\u6642\u9593", "HKT",
"\u9999\u6e2f\u590f\u4ee4\u6642\u9593", "HKST",
"\u9999\u6E2F\u6642\u9593", "HKT"};
@ -372,7 +369,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
{"America/Adak", HST},
{"America/Anguilla", AST},
{"America/Antigua", AST},
{"America/Araguaina", BRT},
@ -394,7 +391,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
"\u5df4\u62c9\u572d\u590f\u4ee4\u6642\u9593", "PYST",
"\u5DF4\u62C9\u572D\u6642\u9593", "PYT"}},
{"America/Atikokan", EST},
{"America/Atka", HAST},
{"America/Atka", HST},
{"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST},
@ -1026,7 +1023,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
{"UCT", UTC},
{"Universal", UTC},
{"US/Alaska", AKST},
{"US/Aleutian", HAST},
{"US/Aleutian", HST},
{"US/Arizona", MST},
{"US/Central", CST},
{"US/Eastern", EST},

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015, 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
@ -36,7 +36,7 @@
#include <dlfcn.h>
#include <pthread.h>
#include <inttypes.h>
#include "sun_management_OperatingSystemImpl.h"
#include "com_sun_management_internal_OperatingSystemImpl.h"
struct ticks {
uint64_t used;
@ -311,7 +311,7 @@ double get_process_load() {
}
JNIEXPORT jdouble JNICALL
Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0
Java_com_sun_management_internal_OperatingSystemImpl_getSystemCpuLoad0
(JNIEnv *env, jobject dummy)
{
if(perfInit() == 0) {
@ -322,7 +322,7 @@ Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0
}
JNIEXPORT jdouble JNICALL
Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuLoad0
(JNIEnv *env, jobject dummy)
{
if(perfInit() == 0) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015, 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,7 +23,7 @@
* questions.
*/
#include "sun_management_OperatingSystemImpl.h"
#include "com_sun_management_internal_OperatingSystemImpl.h"
#include <sys/time.h>
#include <mach/mach.h>
@ -32,7 +32,7 @@
#include "jvm.h"
JNIEXPORT jdouble JNICALL
Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0
Java_com_sun_management_internal_OperatingSystemImpl_getSystemCpuLoad0
(JNIEnv *env, jobject dummy)
{
// This code is influenced by the darwin top source
@ -84,7 +84,7 @@ Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0
JNIEXPORT jdouble JNICALL
Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuLoad0
(JNIEnv *env, jobject dummy)
{
// This code is influenced by the darwin top source

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015, 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
@ -25,13 +25,10 @@
package com.sun.management;
import javax.management.Notification;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataView;
import javax.management.openmbean.CompositeType;
import java.util.Collection;
import java.util.Collections;
import sun.management.GarbageCollectionNotifInfoCompositeData;
import com.sun.management.internal.GarbageCollectionNotifInfoCompositeData;
/**
* The information about a garbage collection

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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
@ -33,9 +33,8 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import sun.management.GcInfoCompositeData;
import sun.management.GcInfoBuilder;
import com.sun.management.internal.GcInfoCompositeData;
import com.sun.management.internal.GcInfoBuilder;
/**
* Garbage collection information. It contains the following

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2015, 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
@ -25,7 +25,7 @@
package com.sun.management;
import sun.management.VMOptionCompositeData;
import com.sun.management.internal.VMOptionCompositeData;
import javax.management.openmbean.CompositeData;
/**
@ -241,5 +241,8 @@ public class VMOption {
}
// for sun.management.MappedMXBeanType
static CompositeData toCompositeData(VMOption option) {
return VMOptionCompositeData.toCompositeData(option);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2015, 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,7 +23,7 @@
* questions.
*/
package sun.management;
package com.sun.management.internal;
/**
* Diagnostic Command Argument information. It contains the description

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2015, 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,21 +23,41 @@
* questions.
*/
package sun.management;
package com.sun.management.internal;
import com.sun.management.DiagnosticCommandMBean;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.security.Permission;
import java.util.*;
import javax.management.*;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
import javax.management.Descriptor;
import javax.management.ImmutableDescriptor;
import javax.management.InvalidAttributeValueException;
import javax.management.ListenerNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.MBeanNotificationInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.MalformedObjectNameException;
import javax.management.Notification;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import sun.management.ManagementFactoryHelper;
import sun.management.NotificationEmitterSupport;
import sun.management.VMManagement;
/**
* Implementation class for the diagnostic commands subsystem.
*
* @since 1.8
*/
class DiagnosticCommandImpl extends NotificationEmitterSupport
public class DiagnosticCommandImpl extends NotificationEmitterSupport
implements DiagnosticCommandMBean {
private final VMManagement jvm;
@ -45,6 +65,17 @@ class DiagnosticCommandImpl extends NotificationEmitterSupport
private static final String strClassName = "".getClass().getName();
private static final String strArrayClassName = String[].class.getName();
private final boolean isSupported;
private static DiagnosticCommandImpl diagCommandMBean = null;
static synchronized DiagnosticCommandMBean getDiagnosticCommandMBean() {
VMManagement jvm = ManagementFactoryHelper.getVMManagement();
// Remote Diagnostic Commands may not be supported
if (diagCommandMBean == null && jvm.isRemoteDiagnosticCommandsSupported()) {
diagCommandMBean = new DiagnosticCommandImpl(jvm);
}
return diagCommandMBean;
}
@Override
public Object getAttribute(String attribute) throws AttributeNotFoundException,
@ -327,7 +358,7 @@ class DiagnosticCommandImpl extends NotificationEmitterSupport
}
ObjectName on = null;
try {
on = ObjectName.getInstance(ManagementFactoryHelper.HOTSPOT_DIAGNOSTIC_COMMAND_MBEAN_NAME);
on = ObjectName.getInstance(PlatformMBeanProviderImpl.DIAGNOSTIC_COMMAND_MBEAN_NAME);
} catch (MalformedObjectNameException e) { }
Notification notif = new Notification("jmx.mbean.info.changed",
on,

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2015, 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,7 +23,7 @@
* questions.
*/
package sun.management;
package com.sun.management.internal;
import java.util.List;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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,7 +23,7 @@
* questions.
*/
package sun.management;
package com.sun.management.internal;
import java.util.*;
import com.sun.management.VMOption;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015, 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,11 +23,10 @@
* questions.
*/
package sun.management;
package com.sun.management.internal;
import com.sun.management.GarbageCollectionNotificationInfo;
import com.sun.management.GcInfo;
import java.lang.reflect.Method;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.CompositeDataSupport;
@ -38,6 +37,9 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.lang.reflect.Field;
import java.util.HashMap;
import sun.management.LazyCompositeData;
import static sun.management.LazyCompositeData.getString;
import sun.management.Util;
/**
* A CompositeData for GarbageCollectionNotificationInfo for the local management support.
@ -95,7 +97,7 @@ public class GarbageCollectionNotifInfoCompositeData extends LazyCompositeData {
compositeTypeByBuilder.put(builder,gict);
} catch (OpenDataException e) {
// shouldn't reach here
throw Util.newException(e);
throw new RuntimeException(e);
}
}
}
@ -205,7 +207,7 @@ public class GarbageCollectionNotifInfoCompositeData extends LazyCompositeData {
baseGcNotifInfoItemTypes);
} catch (OpenDataException e) {
// shouldn't reach here
throw Util.newException(e);
throw new RuntimeException(e);
}
}
return baseGcNotifInfoCompositeType;

View File

@ -0,0 +1,181 @@
/*
* Copyright (c) 2003, 2015, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package com.sun.management.internal;
import com.sun.management.GarbageCollectionNotificationInfo;
import com.sun.management.GarbageCollectorMXBean;
import com.sun.management.GcInfo;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.util.List;
import javax.management.ListenerNotFoundException;
import javax.management.MBeanNotificationInfo;
import javax.management.Notification;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.openmbean.CompositeData;
import sun.management.GarbageCollectorImpl;
/**
* Implementation class for the garbage collector.
* Standard and committed hotspot-specific metrics if any.
*
* ManagementFactory.getGarbageCollectorMXBeans() returns a list
* of instances of this class.
*/
public class GarbageCollectorExtImpl extends GarbageCollectorImpl
implements GarbageCollectorMXBean {
public GarbageCollectorExtImpl(String name) {
super(name);
}
// The memory pools are static and won't be changed.
// TODO: If the hotspot implementation begins to have pools
// dynamically created and removed, this needs to be modified.
private String[] poolNames = null;
private synchronized String[] getAllPoolNames() {
if (poolNames == null) {
List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
poolNames = new String[pools.size()];
int i = 0;
for (MemoryPoolMXBean m : pools) {
poolNames[i++] = m.getName();
}
}
return poolNames;
}
public GcInfo getLastGcInfo() {
GcInfo info = getGcInfoBuilder().getLastGcInfo();
return info;
}
private final static String notifName =
"javax.management.Notification";
private final static String[] gcNotifTypes = {
GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION
};
private MBeanNotificationInfo[] notifInfo = null;
public MBeanNotificationInfo[] getNotificationInfo() {
synchronized (this) {
if (notifInfo == null) {
notifInfo = new MBeanNotificationInfo[1];
notifInfo[0] = new MBeanNotificationInfo(gcNotifTypes,
notifName,
"GC Notification");
}
}
return notifInfo;
}
private static long seqNumber = 0;
private static long getNextSeqNumber() {
return ++seqNumber;
}
protected void createGCNotification(long timestamp,
String gcName,
String gcAction,
String gcCause,
GcInfo gcInfo) {
if (!hasListeners()) {
return;
}
Notification notif = new Notification(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION,
getObjectName(),
getNextSeqNumber(),
timestamp,
gcName);
GarbageCollectionNotificationInfo info =
new GarbageCollectionNotificationInfo(gcName,
gcAction,
gcCause,
gcInfo);
CompositeData cd =
GarbageCollectionNotifInfoCompositeData.toCompositeData(info);
notif.setUserData(cd);
sendNotification(notif);
}
public synchronized void addNotificationListener(NotificationListener listener,
NotificationFilter filter,
Object handback)
{
boolean before = hasListeners();
super.addNotificationListener(listener, filter, handback);
boolean after = hasListeners();
if (!before && after) {
setNotificationEnabled(this, true);
}
}
public synchronized void removeNotificationListener(NotificationListener listener)
throws ListenerNotFoundException {
boolean before = hasListeners();
super.removeNotificationListener(listener);
boolean after = hasListeners();
if (before && !after) {
setNotificationEnabled(this,false);
}
}
public synchronized void removeNotificationListener(NotificationListener listener,
NotificationFilter filter,
Object handback)
throws ListenerNotFoundException
{
boolean before = hasListeners();
super.removeNotificationListener(listener,filter,handback);
boolean after = hasListeners();
if (before && !after) {
setNotificationEnabled(this,false);
}
}
private GcInfoBuilder gcInfoBuilder;
// Invoked also by the VM
private synchronized GcInfoBuilder getGcInfoBuilder() {
if(gcInfoBuilder == null) {
gcInfoBuilder = new GcInfoBuilder(this, getAllPoolNames());
}
return gcInfoBuilder;
}
private native void setNotificationEnabled(GarbageCollectorMXBean gc,
boolean enabled);
// Invoked by the VM
private static java.lang.management.GarbageCollectorMXBean
createGarbageCollector(String name, String type) {
return new GarbageCollectorExtImpl(name);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2015, 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
@ -22,20 +22,16 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.management;
package com.sun.management.internal;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.MemoryUsage;
import javax.management.openmbean.OpenType;
import javax.management.openmbean.SimpleType;
import javax.management.openmbean.TabularType;
import javax.management.openmbean.TabularData;
import javax.management.openmbean.TabularDataSupport;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.OpenDataException;
import com.sun.management.GcInfo;
import sun.management.Util;
/**
* Helper class to build composite data.
@ -164,7 +160,7 @@ public class GcInfoBuilder {
allItemTypes);
} catch (OpenDataException e) {
// shouldn't reach here
throw Util.newException(e);
throw new RuntimeException(e);
}
gcInfoCompositeType = gict;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2015, 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,16 +23,12 @@
* questions.
*/
package sun.management;
package com.sun.management.internal;
import java.lang.management.MemoryUsage;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.Collections;
import java.io.InvalidObjectException;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.CompositeData;
@ -42,9 +38,12 @@ import javax.management.openmbean.SimpleType;
import javax.management.openmbean.OpenType;
import javax.management.openmbean.OpenDataException;
import com.sun.management.GcInfo;
import com.sun.management.GarbageCollectionNotificationInfo;
import java.security.AccessController;
import java.security.PrivilegedAction;
import sun.management.LazyCompositeData;
import static sun.management.LazyCompositeData.getLong;
import sun.management.MappedMXBeanType;
import sun.management.Util;
/**
* A CompositeData for GcInfo for the local management support.
@ -266,7 +265,7 @@ public class GcInfoCompositeData extends LazyCompositeData {
getBaseGcInfoItemTypes());
} catch (OpenDataException e) {
// shouldn't reach here
throw Util.newException(e);
throw new RuntimeException(e);
}
}
return baseGcInfoCompositeType;

Some files were not shown because too many files have changed in this diff Show More