diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 6a7cb46c540..fe1310f80db 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -244,3 +244,4 @@ a4afb0a8d55ef75aef5b0d77b434070468fb89f8 jdk8-b117 cd3825b2983045784d6fc6d1729c799b08215752 jdk8-b120 1e1f86d5d4e22c15a9bf9f1581acddb8c59abae2 jdk9-b00 50669e45cec4491de0d921d3118a3fe2e767020a jdk9-b01 +135f0c7af57ebace31383d8877f47e32172759ff jdk9-b02 diff --git a/common/autoconf/basics.m4 b/common/autoconf/basics.m4 index 9ef7b0400da..d34615d5a2a 100644 --- a/common/autoconf/basics.m4 +++ b/common/autoconf/basics.m4 @@ -236,35 +236,119 @@ AC_DEFUN_ONCE([BASIC_INIT], # Test that variable $1 denoting a program is not empty. If empty, exit with an error. # $1: variable to check -# $2: executable name to print in warning (optional) AC_DEFUN([BASIC_CHECK_NONEMPTY], [ if test "x[$]$1" = x; then - if test "x$2" = x; then - PROG_NAME=translit($1,A-Z,a-z) - else - PROG_NAME=$2 - fi - AC_MSG_NOTICE([Could not find $PROG_NAME!]) - AC_MSG_ERROR([Cannot continue]) + AC_MSG_ERROR([Could not find required tool for $1]) fi ]) -# Does AC_PATH_PROG followed by BASIC_CHECK_NONEMPTY. -# Arguments as AC_PATH_PROG: -# $1: variable to set -# $2: executable name to look for -AC_DEFUN([BASIC_REQUIRE_PROG], +# Check that there are no unprocessed overridden variables left. +# If so, they are an incorrect argument and we will exit with an error. +AC_DEFUN([BASIC_CHECK_LEFTOVER_OVERRIDDEN], [ - AC_PATH_PROGS($1, $2) - BASIC_CHECK_NONEMPTY($1, $2) + if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then + # Replace the separating ! with spaces before presenting for end user. + unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ } + AC_MSG_WARN([The following variables might be unknown to configure: $unknown_variables]) + fi +]) + +# Setup a tool for the given variable. If correctly specified by the user, +# use that value, otherwise search for the tool using the supplied code snippet. +# $1: variable to set +# $2: code snippet to call to look for the tool +AC_DEFUN([BASIC_SETUP_TOOL], +[ + # Publish this variable in the help. + AC_ARG_VAR($1, [Override default value for $1]) + + if test "x[$]$1" = x; then + # The variable is not set by user, try to locate tool using the code snippet + $2 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !$1! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!$1!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "x$1" != xBASH; then + AC_MSG_WARN([Ignoring value of $1 from the environment. Use command line variables instead.]) + fi + # Try to locate tool using the code snippet + $2 + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="[$]$1" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + AC_MSG_NOTICE([Will search for user supplied tool $1=$tool_basename]) + AC_PATH_PROG($1, $tool_basename) + if test "x[$]$1" = x; then + AC_MSG_ERROR([User supplied tool $tool_basename could not be found]) + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + AC_MSG_NOTICE([Will use user supplied tool $1=$tool_specified]) + AC_MSG_CHECKING([for $1]) + if test ! -x "$tool_specified"; then + AC_MSG_RESULT([not found]) + AC_MSG_ERROR([User supplied tool $1=$tool_specified does not exist or is not executable]) + fi + AC_MSG_RESULT([$tool_specified]) + fi + fi + fi +]) + +# Call BASIC_SETUP_TOOL with AC_PATH_PROGS to locate the tool +# $1: variable to set +# $2: executable name (or list of names) to look for +AC_DEFUN([BASIC_PATH_PROGS], +[ + BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2)]) +]) + +# Call BASIC_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool +# $1: variable to set +# $2: executable name (or list of names) to look for +AC_DEFUN([BASIC_CHECK_TOOLS], +[ + BASIC_SETUP_TOOL($1, [AC_CHECK_TOOLS($1, $2)]) +]) + +# Like BASIC_PATH_PROGS but fails if no tool was found. +# $1: variable to set +# $2: executable name (or list of names) to look for +AC_DEFUN([BASIC_REQUIRE_PROGS], +[ + BASIC_PATH_PROGS($1, $2) + BASIC_CHECK_NONEMPTY($1) +]) + +# Like BASIC_SETUP_TOOL but fails if no tool was found. +# $1: variable to set +# $2: autoconf macro to call to look for the special tool +AC_DEFUN([BASIC_REQUIRE_SPECIAL], +[ + BASIC_SETUP_TOOL($1, [$2]) + BASIC_CHECK_NONEMPTY($1) ]) # Setup the most fundamental tools that relies on not much else to set up, # but is used by much of the early bootstrap code. AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], [ - # Start with tools that do not need have cross compilation support # and can be expected to be found in the default PATH. These tools are # used by configure. Nor are these tools expected to be found in the @@ -272,57 +356,50 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], # needed to download the devkit. # First are all the simple required tools. - BASIC_REQUIRE_PROG(BASENAME, basename) - BASIC_REQUIRE_PROG(BASH, bash) - BASIC_REQUIRE_PROG(CAT, cat) - BASIC_REQUIRE_PROG(CHMOD, chmod) - BASIC_REQUIRE_PROG(CMP, cmp) - BASIC_REQUIRE_PROG(COMM, comm) - BASIC_REQUIRE_PROG(CP, cp) - BASIC_REQUIRE_PROG(CPIO, cpio) - BASIC_REQUIRE_PROG(CUT, cut) - BASIC_REQUIRE_PROG(DATE, date) - BASIC_REQUIRE_PROG(DIFF, [gdiff diff]) - BASIC_REQUIRE_PROG(DIRNAME, dirname) - BASIC_REQUIRE_PROG(ECHO, echo) - BASIC_REQUIRE_PROG(EXPR, expr) - BASIC_REQUIRE_PROG(FILE, file) - BASIC_REQUIRE_PROG(FIND, find) - BASIC_REQUIRE_PROG(HEAD, head) - BASIC_REQUIRE_PROG(LN, ln) - BASIC_REQUIRE_PROG(LS, ls) - BASIC_REQUIRE_PROG(MKDIR, mkdir) - BASIC_REQUIRE_PROG(MKTEMP, mktemp) - BASIC_REQUIRE_PROG(MV, mv) - BASIC_REQUIRE_PROG(PRINTF, printf) - BASIC_REQUIRE_PROG(RM, rm) - BASIC_REQUIRE_PROG(SH, sh) - BASIC_REQUIRE_PROG(SORT, sort) - BASIC_REQUIRE_PROG(TAIL, tail) - BASIC_REQUIRE_PROG(TAR, tar) - BASIC_REQUIRE_PROG(TEE, tee) - BASIC_REQUIRE_PROG(TOUCH, touch) - BASIC_REQUIRE_PROG(TR, tr) - BASIC_REQUIRE_PROG(UNAME, uname) - BASIC_REQUIRE_PROG(UNIQ, uniq) - BASIC_REQUIRE_PROG(WC, wc) - BASIC_REQUIRE_PROG(WHICH, which) - BASIC_REQUIRE_PROG(XARGS, xargs) + BASIC_REQUIRE_PROGS(BASENAME, basename) + BASIC_REQUIRE_PROGS(BASH, bash) + BASIC_REQUIRE_PROGS(CAT, cat) + BASIC_REQUIRE_PROGS(CHMOD, chmod) + BASIC_REQUIRE_PROGS(CMP, cmp) + BASIC_REQUIRE_PROGS(COMM, comm) + BASIC_REQUIRE_PROGS(CP, cp) + BASIC_REQUIRE_PROGS(CPIO, cpio) + BASIC_REQUIRE_PROGS(CUT, cut) + BASIC_REQUIRE_PROGS(DATE, date) + BASIC_REQUIRE_PROGS(DIFF, [gdiff diff]) + BASIC_REQUIRE_PROGS(DIRNAME, dirname) + BASIC_REQUIRE_PROGS(ECHO, echo) + BASIC_REQUIRE_PROGS(EXPR, expr) + BASIC_REQUIRE_PROGS(FILE, file) + BASIC_REQUIRE_PROGS(FIND, find) + BASIC_REQUIRE_PROGS(HEAD, head) + BASIC_REQUIRE_PROGS(LN, ln) + BASIC_REQUIRE_PROGS(LS, ls) + BASIC_REQUIRE_PROGS(MKDIR, mkdir) + BASIC_REQUIRE_PROGS(MKTEMP, mktemp) + BASIC_REQUIRE_PROGS(MV, mv) + BASIC_REQUIRE_PROGS(NAWK, [nawk gawk awk]) + BASIC_REQUIRE_PROGS(PRINTF, printf) + BASIC_REQUIRE_PROGS(RM, rm) + BASIC_REQUIRE_PROGS(SH, sh) + BASIC_REQUIRE_PROGS(SORT, sort) + BASIC_REQUIRE_PROGS(TAIL, tail) + BASIC_REQUIRE_PROGS(TAR, tar) + BASIC_REQUIRE_PROGS(TEE, tee) + BASIC_REQUIRE_PROGS(TOUCH, touch) + BASIC_REQUIRE_PROGS(TR, tr) + BASIC_REQUIRE_PROGS(UNAME, uname) + BASIC_REQUIRE_PROGS(UNIQ, uniq) + BASIC_REQUIRE_PROGS(WC, wc) + BASIC_REQUIRE_PROGS(WHICH, which) + BASIC_REQUIRE_PROGS(XARGS, xargs) # Then required tools that require some special treatment. - AC_PROG_AWK - BASIC_CHECK_NONEMPTY(AWK) - AC_PROG_GREP - BASIC_CHECK_NONEMPTY(GREP) - AC_PROG_EGREP - BASIC_CHECK_NONEMPTY(EGREP) - AC_PROG_FGREP - BASIC_CHECK_NONEMPTY(FGREP) - AC_PROG_SED - BASIC_CHECK_NONEMPTY(SED) - - AC_PATH_PROGS(NAWK, [nawk gawk awk]) - BASIC_CHECK_NONEMPTY(NAWK) + BASIC_REQUIRE_SPECIAL(AWK, [AC_PROG_AWK]) + BASIC_REQUIRE_SPECIAL(GREP, [AC_PROG_GREP]) + BASIC_REQUIRE_SPECIAL(EGREP, [AC_PROG_EGREP]) + BASIC_REQUIRE_SPECIAL(FGREP, [AC_PROG_FGREP]) + BASIC_REQUIRE_SPECIAL(SED, [AC_PROG_SED]) # Always force rm. RM="$RM -f" @@ -332,10 +409,10 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], THEPWDCMD=pwd # These are not required on all platforms - AC_PATH_PROG(CYGPATH, cygpath) - AC_PATH_PROG(READLINK, readlink) - AC_PATH_PROG(DF, df) - AC_PATH_PROG(SETFILE, SetFile) + BASIC_PATH_PROGS(CYGPATH, cygpath) + BASIC_PATH_PROGS(READLINK, [greadlink readlink]) + BASIC_PATH_PROGS(DF, df) + BASIC_PATH_PROGS(SETFILE, SetFile) ]) # Setup basic configuration paths, and platform-specific stuff related to PATHs. @@ -622,26 +699,26 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS], # These tools might not be installed by default, # need hint on how to install them. - BASIC_REQUIRE_PROG(UNZIP, unzip) - BASIC_REQUIRE_PROG(ZIP, zip) + BASIC_REQUIRE_PROGS(UNZIP, unzip) + BASIC_REQUIRE_PROGS(ZIP, zip) # Non-required basic tools - AC_PATH_PROG(LDD, ldd) + BASIC_PATH_PROGS(LDD, ldd) if test "x$LDD" = "x"; then # List shared lib dependencies is used for # debug output and checking for forbidden dependencies. # We can build without it. LDD="true" fi - AC_PATH_PROG(OTOOL, otool) + BASIC_PATH_PROGS(OTOOL, otool) if test "x$OTOOL" = "x"; then OTOOL="true" fi - AC_PATH_PROGS(READELF, [readelf greadelf]) - AC_PATH_PROG(HG, hg) - AC_PATH_PROG(STAT, stat) - AC_PATH_PROG(TIME, time) + BASIC_PATH_PROGS(READELF, [greadelf readelf]) + BASIC_PATH_PROGS(HG, hg) + BASIC_PATH_PROGS(STAT, stat) + BASIC_PATH_PROGS(TIME, time) # Check if it's GNU time IS_GNU_TIME=`$TIME --version 2>&1 | $GREP 'GNU time'` if test "x$IS_GNU_TIME" != x; then @@ -652,13 +729,13 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS], AC_SUBST(IS_GNU_TIME) if test "x$OPENJDK_TARGET_OS" = "xwindows"; then - BASIC_REQUIRE_PROG(COMM, comm) + BASIC_REQUIRE_PROGS(COMM, comm) fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - BASIC_REQUIRE_PROG(DSYMUTIL, dsymutil) - BASIC_REQUIRE_PROG(XATTR, xattr) - AC_PATH_PROG(CODESIGN, codesign) + BASIC_REQUIRE_PROGS(DSYMUTIL, dsymutil) + BASIC_REQUIRE_PROGS(XATTR, xattr) + BASIC_PATH_PROGS(CODESIGN, codesign) if test "x$CODESIGN" != "x"; then # Verify that the openjdk_codesign certificate is present AC_MSG_CHECKING([if openjdk_codesign certificate is present]) @@ -720,6 +797,9 @@ AC_DEFUN_ONCE([BASIC_CHECK_SRC_PERMS], AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], [ + # Did user specify any unknown variables? + BASIC_CHECK_LEFTOVER_OVERRIDDEN + AC_MSG_CHECKING([if build directory is on local disk]) BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUT_ROOT, [OUTPUT_DIR_IS_LOCAL="yes"], @@ -738,12 +818,4 @@ AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], else IS_RECONFIGURE=no fi - - if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then - HIDE_PERFORMANCE_HINTS=yes - else - HIDE_PERFORMANCE_HINTS=no - # Hide it the next time around... - $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 - fi ]) diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4 index a4805a92c03..dde3c926c2f 100644 --- a/common/autoconf/boot-jdk.m4 +++ b/common/autoconf/boot-jdk.m4 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,34 @@ # questions. # +######################################################################## +# This file handles detection of the Boot JDK. The Boot JDK detection +# process has been developed as a response to solve a complex real-world +# problem. Initially, it was simple, but it has grown as platform after +# platform, idiosyncracy after idiosyncracy has been supported. +# +# The basic idea is this: +# 1) You need an acceptable *) JDK to use as a Boot JDK +# 2) There are several ways to locate a JDK, that are mostly platform +# dependent **) +# 3) You can have multiple JDKs installed +# 4) If possible, configure should try to dig out an acceptable JDK +# automatically, without having to resort to command-line options +# +# *) acceptable means e.g. JDK7 for building JDK8, a complete JDK (with +# javac) and not a JRE, etc. +# +# **) On Windows we typically use a well-known path. +# On MacOSX we typically use the tool java_home. +# On Linux we typically find javac in the $PATH, and then follow a +# chain of symlinks that often ends up in a real JDK. +# +# This leads to the code where we check in different ways to locate a +# JDK, and if one is found, check if it is acceptable. If not, we print +# our reasons for rejecting it (useful when debugging non-working +# configure situations) and continue checking the next one. +######################################################################## + # Execute the check given as argument, and verify the result # If the Boot JDK was previously found, do nothing # $1 A command line (typically autoconf macro) to execute @@ -54,10 +82,10 @@ AC_DEFUN([BOOTJDK_DO_CHECK], BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - [FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] - if test "x$FOUND_VERSION_78" = x; then + [FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'`] + if test "x$FOUND_CORRECT_VERSION" = x; then AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring]) - AC_MSG_NOTICE([(Your Boot JDK must be version 7 or 8)]) + AC_MSG_NOTICE([(Your Boot JDK must be version 7, 8 or 9)]) BOOT_JDK_FOUND=no else # We're done! :-) @@ -136,12 +164,26 @@ AC_DEFUN([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK], ]) # Test: Is there a /usr/libexec/java_home? (Typically on MacOSX) +# $1: Argument to the java_home binary (optional) AC_DEFUN([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME], [ if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` + BOOT_JDK=`/usr/libexec/java_home $1` BOOT_JDK_FOUND=maybe - AC_MSG_NOTICE([Found potential Boot JDK using /usr/libexec/java_home]) + AC_MSG_NOTICE([Found potential Boot JDK using /usr/libexec/java_home $1]) + fi +]) + +# Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home? +AC_DEFUN([BOOTJDK_CHECK_MACOSX_JAVA_LOCATOR], +[ + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # First check at user selected default + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME()]) + # If that did not work out (e.g. too old), try explicit versions instead + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.9])]) + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.8])]) + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.7])]) fi ]) @@ -201,14 +243,19 @@ AC_DEFUN([BOOTJDK_CHECK_WELL_KNOWN_LOCATIONS], # $2 = name of binary AC_DEFUN([BOOTJDK_CHECK_TOOL_IN_BOOTJDK], [ - AC_MSG_CHECKING([for $2 in Boot JDK]) - $1=$BOOT_JDK/bin/$2 - if test ! -x [$]$1; then - AC_MSG_RESULT(not found) - AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk]) - AC_MSG_ERROR([Could not find $2 in the Boot JDK]) - fi - AC_MSG_RESULT(ok) + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + BASIC_SETUP_TOOL($1, + [ + AC_MSG_CHECKING([for $2 in Boot JDK]) + $1=$BOOT_JDK/bin/$2 + if test ! -x [$]$1; then + AC_MSG_RESULT(not found) + AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk]) + AC_MSG_ERROR([Could not find $2 in the Boot JDK]) + fi + AC_MSG_RESULT(ok) + AC_SUBST($1) + ]) ]) ############################################################################### @@ -238,12 +285,12 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK], # Test: Is bootjdk available from builddeps? BOOTJDK_DO_CHECK([BOOTJDK_CHECK_BUILDDEPS]) + # Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home? + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_MACOSX_JAVA_LOCATOR]) + # Test: Is $JAVA_HOME set? BOOTJDK_DO_CHECK([BOOTJDK_CHECK_JAVA_HOME]) - # Test: Is there a /usr/libexec/java_home? (Typically on MacOSX) - BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME]) - # Test: Is there a java or javac in the PATH, which is a symlink to the JDK? BOOTJDK_DO_CHECK([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK]) @@ -275,13 +322,12 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK], AC_SUBST(BOOT_JDK) # Setup tools from the Boot JDK. - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVA,java) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAC,javac) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAH,javah) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAP,javap) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAR,jar) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(RMIC,rmic) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(NATIVE2ASCII,native2ascii) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVA, java) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAC, javac) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAH, javah) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAR, jar) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(NATIVE2ASCII, native2ascii) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JARSIGNER, jarsigner) # Finally, set some other options... @@ -316,7 +362,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], # Minimum amount of heap memory. ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) - if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + if test "x$OPENJDK_TARGET_OS" = "xmacosx" || test "x$OPENJDK_TARGET_CPU" = "xppc64" ; then # Why does macosx need more heap? Its the huge JDK batch. ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA]) else diff --git a/common/autoconf/build-aux/config.guess b/common/autoconf/build-aux/config.guess index bd41aec580d..b0c03a79629 100644 --- a/common/autoconf/build-aux/config.guess +++ b/common/autoconf/build-aux/config.guess @@ -60,4 +60,20 @@ if test $? = 0; then esac fi +# Test and fix architecture string on AIX +# On AIX 'config.guess' returns 'powerpc' as architecture but 'powerpc' is +# implicitely handled as 32-bit architecture in 'platform.m4' so we check +# for the kernel mode rewrite it to 'powerpc64' if we'Re running in 64-bit mode. +# The check could also be done with `/usr/sbin/prtconf | grep "Kernel Type" | grep "64-bit"` +echo $OUT | grep powerpc-ibm-aix > /dev/null 2> /dev/null +if test $? = 0; then + if [ -x /bin/getconf ] ; then + KERNEL_BITMODE=`getconf KERNEL_BITMODE` + if [ "$KERNEL_BITMODE" = "32" ]; then + KERNEL_BITMODE="" + fi + fi + OUT=powerpc$KERNEL_BITMODE`echo $OUT | sed -e 's/[^-]*//'` +fi + echo $OUT diff --git a/common/autoconf/build-performance.m4 b/common/autoconf/build-performance.m4 index ff7b250508f..1bf5628485c 100644 --- a/common/autoconf/build-performance.m4 +++ b/common/autoconf/build-performance.m4 @@ -41,6 +41,9 @@ AC_DEFUN([BPERF_CHECK_CORES], # Looks like a MacOSX system NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` FOUND_CORES=yes + elif test "x$OPENJDK_BUILD_OS" = xaix ; then + NUM_CORES=`/usr/sbin/prtconf | grep "^Number Of Processors" | awk '{ print [$]4 }'` + FOUND_CORES=yes elif test -n "$NUMBER_OF_PROCESSORS"; then # On windows, look in the env NUM_CORES=$NUMBER_OF_PROCESSORS @@ -68,8 +71,8 @@ AC_DEFUN([BPERF_CHECK_MEMORY_SIZE], MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` FOUND_MEM=yes elif test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'` + # Looks like a Solaris or AIX system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [[Ss]]ize" | awk '{ print [$]3 }'` FOUND_MEM=yes elif test -x /usr/sbin/system_profiler; then # Looks like a MacOSX system @@ -157,20 +160,28 @@ AC_DEFUN_ONCE([BPERF_SETUP_BUILD_JOBS], AC_DEFUN([BPERF_SETUP_CCACHE], [ AC_ARG_ENABLE([ccache], - [AS_HELP_STRING([--disable-ccache], - [disable using ccache to speed up recompilations @<:@enabled@:>@])], - [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) - if test "x$ENABLE_CCACHE" = xyes; then + [AS_HELP_STRING([--enable-ccache], + [enable using ccache to speed up recompilations @<:@disabled@:>@])]) + + CCACHE= + AC_MSG_CHECKING([is ccache enabled]) + ENABLE_CCACHE=$enable_ccache + if test "x$enable_ccache" = xyes; then + AC_MSG_RESULT([yes]) OLD_PATH="$PATH" if test "x$TOOLS_DIR" != x; then PATH=$TOOLS_DIR:$PATH fi - AC_PATH_PROG(CCACHE, ccache) + BASIC_REQUIRE_PROGS(CCACHE, ccache) + CCACHE_STATUS="enabled" PATH="$OLD_PATH" + elif test "x$enable_ccache" = xno; then + AC_MSG_RESULT([no, explicitly disabled]) + elif test "x$enable_ccache" = x; then + AC_MSG_RESULT([no]) else - AC_MSG_CHECKING([for ccache]) - AC_MSG_RESULT([explicitly disabled]) - CCACHE= + AC_MSG_RESULT([unknown]) + AC_MSG_ERROR([--enable-ccache does not accept any parameters]) fi AC_SUBST(CCACHE) @@ -182,8 +193,11 @@ AC_DEFUN([BPERF_SETUP_CCACHE], # When using a non home ccache directory, assume the use is to share ccache files # with other users. Thus change the umask. SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + if test "x$CCACHE" = x; then + AC_MSG_WARN([--with-ccache-dir has no meaning when ccache is not enabled]) + fi fi - CCACHE_FOUND="" + if test "x$CCACHE" != x; then BPERF_SETUP_CCACHE_USAGE fi @@ -192,7 +206,6 @@ AC_DEFUN([BPERF_SETUP_CCACHE], AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], [ if test "x$CCACHE" != x; then - CCACHE_FOUND="true" # Only use ccache if it is 3.1.4 or later, which supports # precompiled headers. AC_MSG_CHECKING([if ccache supports precompiled headers]) @@ -200,6 +213,7 @@ AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], if test "x$HAS_GOOD_CCACHE" = x; then AC_MSG_RESULT([no, disabling ccache]) CCACHE= + CCACHE_STATUS="disabled" else AC_MSG_RESULT([yes]) AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) @@ -212,6 +226,7 @@ AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], else AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) CCACHE= + CCACHE_STATUS="disabled" fi fi fi diff --git a/common/autoconf/configure b/common/autoconf/configure index 00a07fccae1..b73609a1de2 100644 --- a/common/autoconf/configure +++ b/common/autoconf/configure @@ -121,15 +121,23 @@ do case $conf_option in --openjdk-target=*) conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` - continue ;; + ;; --debug-configure) if test "x$conf_debug_configure" != xrecursive; then conf_debug_configure=true export conf_debug_configure fi - continue ;; + ;; + [^-]*=*) + # Add name of variable to CONFIGURE_OVERRIDDEN_VARIABLES list inside !...!. + conf_env_var=`expr "x$conf_option" : 'x\([^=]*\)='` + CONFIGURE_OVERRIDDEN_VARIABLES="$CONFIGURE_OVERRIDDEN_VARIABLES!$conf_env_var!" + # ... and then process argument as usual + conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") + ;; *) - conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") ;; + conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") + ;; esac case $conf_option in @@ -212,6 +220,9 @@ Additional (non-autoconf) OpenJDK Options: Please be aware that, when cross-compiling, the OpenJDK configure script will generally use 'target' where autoconf traditionally uses 'host'. + +Also note that variables must be passed on the command line. Variables in the +environment will generally be ignored, unlike traditional autoconf scripts. EOT fi else diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac index 238e4a44274..7e02b636b40 100644 --- a/common/autoconf/configure.ac +++ b/common/autoconf/configure.ac @@ -88,6 +88,7 @@ JDKOPT_SETUP_OPEN_OR_CUSTOM # These are needed to be able to create a configuration name (and thus the output directory) JDKOPT_SETUP_JDK_VARIANT +JDKOPT_SETUP_JVM_INTERPRETER JDKOPT_SETUP_JVM_VARIANTS JDKOPT_SETUP_DEBUG_LEVEL diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 43e26631193..a03ee5cdb85 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -665,6 +665,7 @@ CXXFLAGS_DEBUG_SYMBOLS CFLAGS_DEBUG_SYMBOLS ZIP_DEBUGINFO_FILES ENABLE_DEBUG_SYMBOLS +USING_BROKEN_SUSE_LD COMPILER_SUPPORTS_TARGET_BITS_FLAG ZERO_ARCHFLAG LDFLAGS_CXX_JDK @@ -715,6 +716,8 @@ ac_ct_OBJDUMP OBJDUMP ac_ct_OBJCOPY OBJCOPY +ac_ct_STRIP +ac_ct_NM MCS STRIP GNM @@ -734,6 +737,7 @@ WINLD HOTSPOT_LD HOTSPOT_CXX ARFLAGS +ac_ct_AR AR LDEXECXX LDCXX @@ -747,8 +751,9 @@ CXXFLAGS CXX ac_ct_PROPER_COMPILER_CXX PROPER_COMPILER_CXX -POTENTIAL_CXX TOOLS_DIR_CXX +POTENTIAL_CXX +COMPILER_TARGET_BITS_FLAG OBJEXT EXEEXT ac_ct_CC @@ -758,8 +763,8 @@ CFLAGS CC ac_ct_PROPER_COMPILER_CC PROPER_COMPILER_CC -POTENTIAL_CC TOOLS_DIR_CC +POTENTIAL_CC BUILD_LD BUILD_CXX BUILD_CC @@ -787,6 +792,12 @@ LANGTOOLS_TOPDIR BOOT_JDK_JVMARGS JAVAC_FLAGS BOOT_JDK_SOURCETARGET +JARSIGNER +NATIVE2ASCII +JAR +JAVAH +JAVAC +JAVA BOOT_JDK BOOT_TOOLSJAR BOOT_RTJAR @@ -851,6 +862,7 @@ VARIANT DEBUG_LEVEL MACOSX_UNIVERSAL INCLUDE_SA +JVM_VARIANT_CORE JVM_VARIANT_ZEROSHARK JVM_VARIANT_ZERO JVM_VARIANT_KERNEL @@ -858,6 +870,7 @@ JVM_VARIANT_MINIMAL1 JVM_VARIANT_CLIENT JVM_VARIANT_SERVER JVM_VARIANTS +JVM_INTERPRETER JDK_VARIANT SET_OPENJDK BUILD_LOG_WRAPPER @@ -910,7 +923,6 @@ SETFILE DF READLINK CYGPATH -NAWK SED FGREP EGREP @@ -930,6 +942,7 @@ SORT SH RM PRINTF +NAWK MV MKTEMP MKDIR @@ -1003,6 +1016,7 @@ with_tools_dir with_devkit enable_openjdk_only with_jdk_variant +with_jvm_interpreter with_jvm_variants enable_debug with_debug_level @@ -1068,7 +1082,73 @@ with_ccache_dir ac_precious_vars='build_alias host_alias target_alias +BASENAME +BASH +CAT +CHMOD +CMP +COMM +CP +CPIO +CUT +DATE +DIFF +DIRNAME +ECHO +EXPR +FILE +FIND +HEAD +LN +LS +MKDIR +MKTEMP +MV +NAWK +PRINTF +RM +SH +SORT +TAIL +TAR +TEE +TOUCH +TR +UNAME +UNIQ +WC +WHICH +XARGS +AWK +GREP +EGREP +FGREP +SED +CYGPATH +READLINK +DF +SETFILE +UNZIP +ZIP +LDD +OTOOL +READELF +HG +STAT +TIME +DSYMUTIL +XATTR +CODESIGN PKG_CONFIG +JAVA +JAVAC +JAVAH +JAR +NATIVE2ASCII +JARSIGNER +BUILD_CC +BUILD_CXX +BUILD_LD CC CFLAGS LDFLAGS @@ -1079,15 +1159,26 @@ CXXFLAGS CCC OBJC OBJCFLAGS +AR CPP CXXCPP +AS +NM +GNM +STRIP +MCS +OBJCOPY +OBJDUMP +LIPO +JTREGEXE XMKMF FREETYPE_CFLAGS FREETYPE_LIBS ALSA_CFLAGS ALSA_LIBS LIBFFI_CFLAGS -LIBFFI_LIBS' +LIBFFI_LIBS +CCACHE' # Initialize some variables set by options. @@ -1731,8 +1822,8 @@ Optional Features: --disable-precompiled-headers disable using precompiled headers when compiling C++ [enabled] - --disable-ccache disable using ccache to speed up recompilations - [enabled] + --enable-ccache enable using ccache to speed up recompilations + [disabled] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1747,8 +1838,10 @@ Optional Packages: --with-devkit use this directory as base for tools-dir and sys-root (for cross-compiling) --with-jdk-variant JDK variant to build (normal) [normal] + --with-jvm-interpreter JVM interpreter to build (template, cpp) [template] --with-jvm-variants JVM variants (separated by commas) to build (server, - client, minimal1, kernel, zero, zeroshark) [server] + client, minimal1, kernel, zero, zeroshark, core) + [server] --with-debug-level set the debug level (release, fastdebug, slowdebug) [release] --with-conf-name use this as the name of the configuration [generated @@ -1841,7 +1934,74 @@ Optional Packages: --with-ccache-dir where to store ccache files [~/.ccache] Some influential environment variables: + BASENAME Override default value for BASENAME + BASH Override default value for BASH + CAT Override default value for CAT + CHMOD Override default value for CHMOD + CMP Override default value for CMP + COMM Override default value for COMM + CP Override default value for CP + CPIO Override default value for CPIO + CUT Override default value for CUT + DATE Override default value for DATE + DIFF Override default value for DIFF + DIRNAME Override default value for DIRNAME + ECHO Override default value for ECHO + EXPR Override default value for EXPR + FILE Override default value for FILE + FIND Override default value for FIND + HEAD Override default value for HEAD + LN Override default value for LN + LS Override default value for LS + MKDIR Override default value for MKDIR + MKTEMP Override default value for MKTEMP + MV Override default value for MV + NAWK Override default value for NAWK + PRINTF Override default value for PRINTF + RM Override default value for RM + SH Override default value for SH + SORT Override default value for SORT + TAIL Override default value for TAIL + TAR Override default value for TAR + TEE Override default value for TEE + TOUCH Override default value for TOUCH + TR Override default value for TR + UNAME Override default value for UNAME + UNIQ Override default value for UNIQ + WC Override default value for WC + WHICH Override default value for WHICH + XARGS Override default value for XARGS + AWK Override default value for AWK + GREP Override default value for GREP + EGREP Override default value for EGREP + FGREP Override default value for FGREP + SED Override default value for SED + CYGPATH Override default value for CYGPATH + READLINK Override default value for READLINK + DF Override default value for DF + SETFILE Override default value for SETFILE + UNZIP Override default value for UNZIP + ZIP Override default value for ZIP + LDD Override default value for LDD + OTOOL Override default value for OTOOL + READELF Override default value for READELF + HG Override default value for HG + STAT Override default value for STAT + TIME Override default value for TIME + DSYMUTIL Override default value for DSYMUTIL + XATTR Override default value for XATTR + CODESIGN Override default value for CODESIGN PKG_CONFIG path to pkg-config utility + JAVA Override default value for JAVA + JAVAC Override default value for JAVAC + JAVAH Override default value for JAVAH + JAR Override default value for JAR + NATIVE2ASCII + Override default value for NATIVE2ASCII + JARSIGNER Override default value for JARSIGNER + BUILD_CC Override default value for BUILD_CC + BUILD_CXX Override default value for BUILD_CXX + BUILD_LD Override default value for BUILD_LD CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a @@ -1853,8 +2013,18 @@ Some influential environment variables: CXXFLAGS C++ compiler flags OBJC Objective C compiler command OBJCFLAGS Objective C compiler flags + AR Override default value for AR CPP C preprocessor CXXCPP C++ preprocessor + AS Override default value for AS + NM Override default value for NM + GNM Override default value for GNM + STRIP Override default value for STRIP + MCS Override default value for MCS + OBJCOPY Override default value for OBJCOPY + OBJDUMP Override default value for OBJDUMP + LIPO Override default value for LIPO + JTREGEXE Override default value for JTREGEXE XMKMF Path to xmkmf, Makefile generator for X Window System FREETYPE_CFLAGS C compiler flags for FREETYPE, overriding pkg-config @@ -1865,6 +2035,7 @@ Some influential environment variables: LIBFFI_CFLAGS C compiler flags for LIBFFI, overriding pkg-config LIBFFI_LIBS linker flags for LIBFFI, overriding pkg-config + CCACHE Override default value for CCACHE Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -3167,13 +3338,36 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Test that variable $1 denoting a program is not empty. If empty, exit with an error. # $1: variable to check -# $2: executable name to print in warning (optional) -# Does AC_PATH_PROG followed by BASIC_CHECK_NONEMPTY. -# Arguments as AC_PATH_PROG: +# Check that there are no unprocessed overridden variables left. +# If so, they are an incorrect argument and we will exit with an error. + + +# Setup a tool for the given variable. If correctly specified by the user, +# use that value, otherwise search for the tool using the supplied code snippet. # $1: variable to set -# $2: executable name to look for +# $2: code snippet to call to look for the tool + + +# Call BASIC_SETUP_TOOL with AC_PATH_PROGS to locate the tool +# $1: variable to set +# $2: executable name (or list of names) to look for + + +# Call BASIC_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool +# $1: variable to set +# $2: executable name (or list of names) to look for + + +# Like BASIC_PATH_PROGS but fails if no tool was found. +# $1: variable to set +# $2: executable name (or list of names) to look for + + +# Like BASIC_SETUP_TOOL but fails if no tool was found. +# $1: variable to set +# $2: autoconf macro to call to look for the special tool # Setup the most fundamental tools that relies on not much else to set up, @@ -3310,7 +3504,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # ... then the rest # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, 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 @@ -3334,6 +3528,34 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # questions. # +######################################################################## +# This file handles detection of the Boot JDK. The Boot JDK detection +# process has been developed as a response to solve a complex real-world +# problem. Initially, it was simple, but it has grown as platform after +# platform, idiosyncracy after idiosyncracy has been supported. +# +# The basic idea is this: +# 1) You need an acceptable *) JDK to use as a Boot JDK +# 2) There are several ways to locate a JDK, that are mostly platform +# dependent **) +# 3) You can have multiple JDKs installed +# 4) If possible, configure should try to dig out an acceptable JDK +# automatically, without having to resort to command-line options +# +# *) acceptable means e.g. JDK7 for building JDK8, a complete JDK (with +# javac) and not a JRE, etc. +# +# **) On Windows we typically use a well-known path. +# On MacOSX we typically use the tool java_home. +# On Linux we typically find javac in the $PATH, and then follow a +# chain of symlinks that often ends up in a real JDK. +# +# This leads to the code where we check in different ways to locate a +# JDK, and if one is found, check if it is acceptable. If not, we print +# our reasons for rejecting it (useful when debugging non-working +# configure situations) and continue checking the next one. +######################################################################## + # Execute the check given as argument, and verify the result # If the Boot JDK was previously found, do nothing # $1 A command line (typically autoconf macro) to execute @@ -3352,6 +3574,10 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Test: Is there a /usr/libexec/java_home? (Typically on MacOSX) +# $1: Argument to the java_home binary (optional) + + +# Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home? # Look for a jdk in the given path. If there are multiple, try to select the newest. @@ -3485,8 +3711,6 @@ http://www.freetype.org/ If you put the resulting build in \"C:\Program Files\GnuWin32\", it will be found automatically." fi ;; - * ) - break ;; esac } @@ -3512,8 +3736,6 @@ apt_help() { PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;; ccache) PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; - * ) - break ;; esac } @@ -3535,8 +3757,6 @@ yum_help() { PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel" ;; ccache) PKGHANDLER_COMMAND="sudo yum install ccache" ;; - * ) - break ;; esac } @@ -3586,6 +3806,8 @@ pkgadd_help() { + + ############################################################################### # # Should we build only OpenJDK even if closed sources are present? @@ -3865,7 +4087,7 @@ fi #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1389815815 +DATE_WHEN_GENERATED=1391160222 ############################################################################### # @@ -3888,7 +4110,6 @@ $as_echo "$as_me: Configuration created at $DATE_WHEN_CONFIGURED." >&6;} $as_echo "$as_me: configure script generated at timestamp $DATE_WHEN_GENERATED." >&6;} - # Start with tools that do not need have cross compilation support # and can be expected to be found in the default PATH. These tools are # used by configure. Nor are these tools expected to be found in the @@ -3897,7 +4118,14 @@ $as_echo "$as_me: configure script generated at timestamp $DATE_WHEN_GENERATED." # First are all the simple required tools. - for ac_prog in basename + + + # Publish this variable in the help. + + + if test "x$BASENAME" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in basename do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -3942,21 +4170,155 @@ fi test -n "$BASENAME" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BASENAME! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BASENAME!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBASENAME" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BASENAME from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BASENAME from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in basename +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BASENAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BASENAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASENAME="$BASENAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BASENAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASENAME=$ac_cv_path_BASENAME +if test -n "$BASENAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASENAME" >&5 +$as_echo "$BASENAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BASENAME" && break +done - if test "x$BASENAME" = x; then - if test "xbasename" = x; then - PROG_NAME=basename else - PROG_NAME=basename + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BASENAME" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BASENAME=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BASENAME=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BASENAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BASENAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASENAME="$BASENAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BASENAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASENAME=$ac_cv_path_BASENAME +if test -n "$BASENAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASENAME" >&5 +$as_echo "$BASENAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BASENAME" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BASENAME=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BASENAME=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BASENAME" >&5 +$as_echo_n "checking for BASENAME... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BASENAME=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in bash + if test "x$BASENAME" = x; then + as_fn_error $? "Could not find required tool for BASENAME" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$BASH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in bash do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4001,21 +4363,155 @@ fi test -n "$BASH" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BASH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BASH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBASH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BASH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BASH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in bash +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BASH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BASH in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASH="$BASH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASH=$ac_cv_path_BASH +if test -n "$BASH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5 +$as_echo "$BASH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BASH" && break +done - if test "x$BASH" = x; then - if test "xbash" = x; then - PROG_NAME=bash else - PROG_NAME=bash + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BASH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BASH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BASH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BASH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BASH in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASH="$BASH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASH=$ac_cv_path_BASH +if test -n "$BASH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5 +$as_echo "$BASH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BASH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BASH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BASH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BASH" >&5 +$as_echo_n "checking for BASH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BASH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cat + if test "x$BASH" = x; then + as_fn_error $? "Could not find required tool for BASH" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CAT" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cat do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4060,21 +4556,155 @@ fi test -n "$CAT" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CAT! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CAT!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCAT" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CAT from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CAT from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cat +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CAT="$CAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CAT=$ac_cv_path_CAT +if test -n "$CAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 +$as_echo "$CAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CAT" && break +done - if test "x$CAT" = x; then - if test "xcat" = x; then - PROG_NAME=cat else - PROG_NAME=cat + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CAT" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CAT=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CAT=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CAT="$CAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CAT=$ac_cv_path_CAT +if test -n "$CAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 +$as_echo "$CAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CAT" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CAT=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CAT=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAT" >&5 +$as_echo_n "checking for CAT... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CAT=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in chmod + if test "x$CAT" = x; then + as_fn_error $? "Could not find required tool for CAT" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CHMOD" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in chmod do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4119,21 +4749,155 @@ fi test -n "$CHMOD" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CHMOD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CHMOD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCHMOD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CHMOD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CHMOD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in chmod +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CHMOD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHMOD=$ac_cv_path_CHMOD +if test -n "$CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 +$as_echo "$CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHMOD" && break +done - if test "x$CHMOD" = x; then - if test "xchmod" = x; then - PROG_NAME=chmod else - PROG_NAME=chmod + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CHMOD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CHMOD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CHMOD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CHMOD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHMOD=$ac_cv_path_CHMOD +if test -n "$CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 +$as_echo "$CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CHMOD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CHMOD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CHMOD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CHMOD" >&5 +$as_echo_n "checking for CHMOD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CHMOD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cmp + if test "x$CHMOD" = x; then + as_fn_error $? "Could not find required tool for CHMOD" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CMP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cmp do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4178,21 +4942,155 @@ fi test -n "$CMP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CMP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CMP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCMP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CMP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CMP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cmp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CMP="$CMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CMP=$ac_cv_path_CMP +if test -n "$CMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CMP" >&5 +$as_echo "$CMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CMP" && break +done - if test "x$CMP" = x; then - if test "xcmp" = x; then - PROG_NAME=cmp else - PROG_NAME=cmp + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CMP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CMP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CMP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CMP="$CMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CMP=$ac_cv_path_CMP +if test -n "$CMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CMP" >&5 +$as_echo "$CMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CMP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CMP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CMP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CMP" >&5 +$as_echo_n "checking for CMP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CMP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in comm + if test "x$CMP" = x; then + as_fn_error $? "Could not find required tool for CMP" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$COMM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in comm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4237,21 +5135,155 @@ fi test -n "$COMM" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !COMM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!COMM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCOMM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of COMM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of COMM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in comm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_COMM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$COMM" && break +done - if test "x$COMM" = x; then - if test "xcomm" = x; then - PROG_NAME=comm else - PROG_NAME=comm + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$COMM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool COMM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool COMM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_COMM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$COMM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool COMM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool COMM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for COMM" >&5 +$as_echo_n "checking for COMM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool COMM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cp + if test "x$COMM" = x; then + as_fn_error $? "Could not find required tool for COMM" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cp do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4296,21 +5328,155 @@ fi test -n "$CP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CP="$CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CP=$ac_cv_path_CP +if test -n "$CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 +$as_echo "$CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CP" && break +done - if test "x$CP" = x; then - if test "xcp" = x; then - PROG_NAME=cp else - PROG_NAME=cp + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CP="$CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CP=$ac_cv_path_CP +if test -n "$CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 +$as_echo "$CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CP" >&5 +$as_echo_n "checking for CP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cpio + if test "x$CP" = x; then + as_fn_error $? "Could not find required tool for CP" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CPIO" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cpio do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4355,21 +5521,155 @@ fi test -n "$CPIO" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CPIO! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CPIO!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCPIO" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CPIO from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CPIO from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cpio +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CPIO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CPIO in + [\\/]* | ?:[\\/]*) + ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CPIO=$ac_cv_path_CPIO +if test -n "$CPIO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 +$as_echo "$CPIO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CPIO" && break +done - if test "x$CPIO" = x; then - if test "xcpio" = x; then - PROG_NAME=cpio else - PROG_NAME=cpio + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CPIO" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CPIO=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CPIO=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CPIO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CPIO in + [\\/]* | ?:[\\/]*) + ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CPIO=$ac_cv_path_CPIO +if test -n "$CPIO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 +$as_echo "$CPIO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CPIO" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CPIO=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CPIO=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CPIO" >&5 +$as_echo_n "checking for CPIO... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CPIO=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cut + if test "x$CPIO" = x; then + as_fn_error $? "Could not find required tool for CPIO" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CUT" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cut do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4414,21 +5714,155 @@ fi test -n "$CUT" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CUT! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CUT!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCUT" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CUT from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CUT from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cut +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CUT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUT="$CUT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUT=$ac_cv_path_CUT +if test -n "$CUT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 +$as_echo "$CUT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CUT" && break +done - if test "x$CUT" = x; then - if test "xcut" = x; then - PROG_NAME=cut else - PROG_NAME=cut + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CUT" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CUT=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CUT=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CUT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUT="$CUT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUT=$ac_cv_path_CUT +if test -n "$CUT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 +$as_echo "$CUT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CUT" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CUT=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CUT=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUT" >&5 +$as_echo_n "checking for CUT... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CUT=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in date + if test "x$CUT" = x; then + as_fn_error $? "Could not find required tool for CUT" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$DATE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in date do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4473,21 +5907,155 @@ fi test -n "$DATE" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DATE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DATE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDATE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DATE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DATE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in date +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DATE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DATE in + [\\/]* | ?:[\\/]*) + ac_cv_path_DATE="$DATE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DATE=$ac_cv_path_DATE +if test -n "$DATE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 +$as_echo "$DATE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DATE" && break +done - if test "x$DATE" = x; then - if test "xdate" = x; then - PROG_NAME=date else - PROG_NAME=date + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DATE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DATE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DATE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DATE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DATE in + [\\/]* | ?:[\\/]*) + ac_cv_path_DATE="$DATE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DATE=$ac_cv_path_DATE +if test -n "$DATE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 +$as_echo "$DATE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DATE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DATE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DATE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DATE" >&5 +$as_echo_n "checking for DATE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DATE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in gdiff diff + if test "x$DATE" = x; then + as_fn_error $? "Could not find required tool for DATE" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$DIFF" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in gdiff diff do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4532,21 +6100,155 @@ fi test -n "$DIFF" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DIFF! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DIFF!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDIFF" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DIFF from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DIFF from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in gdiff diff +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DIFF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DIFF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIFF=$ac_cv_path_DIFF +if test -n "$DIFF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 +$as_echo "$DIFF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DIFF" && break +done - if test "x$DIFF" = x; then - if test "xgdiff diff" = x; then - PROG_NAME=diff else - PROG_NAME=gdiff diff + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DIFF" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DIFF=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DIFF=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DIFF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DIFF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIFF=$ac_cv_path_DIFF +if test -n "$DIFF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 +$as_echo "$DIFF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DIFF" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DIFF=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DIFF=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DIFF" >&5 +$as_echo_n "checking for DIFF... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DIFF=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in dirname + if test "x$DIFF" = x; then + as_fn_error $? "Could not find required tool for DIFF" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$DIRNAME" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in dirname do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4591,21 +6293,155 @@ fi test -n "$DIRNAME" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DIRNAME! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DIRNAME!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDIRNAME" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DIRNAME from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DIRNAME from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in dirname +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DIRNAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DIRNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DIRNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIRNAME=$ac_cv_path_DIRNAME +if test -n "$DIRNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIRNAME" >&5 +$as_echo "$DIRNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DIRNAME" && break +done - if test "x$DIRNAME" = x; then - if test "xdirname" = x; then - PROG_NAME=dirname else - PROG_NAME=dirname + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DIRNAME" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DIRNAME=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DIRNAME=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DIRNAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DIRNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DIRNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIRNAME=$ac_cv_path_DIRNAME +if test -n "$DIRNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIRNAME" >&5 +$as_echo "$DIRNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DIRNAME" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DIRNAME=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DIRNAME=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DIRNAME" >&5 +$as_echo_n "checking for DIRNAME... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DIRNAME=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in echo + if test "x$DIRNAME" = x; then + as_fn_error $? "Could not find required tool for DIRNAME" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$ECHO" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in echo do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4650,21 +6486,155 @@ fi test -n "$ECHO" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !ECHO! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ECHO!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xECHO" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ECHO from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of ECHO from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in echo +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ECHO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ECHO in + [\\/]* | ?:[\\/]*) + ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ECHO=$ac_cv_path_ECHO +if test -n "$ECHO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 +$as_echo "$ECHO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ECHO" && break +done - if test "x$ECHO" = x; then - if test "xecho" = x; then - PROG_NAME=echo else - PROG_NAME=echo + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$ECHO" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ECHO=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool ECHO=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ECHO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ECHO in + [\\/]* | ?:[\\/]*) + ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ECHO=$ac_cv_path_ECHO +if test -n "$ECHO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 +$as_echo "$ECHO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ECHO" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ECHO=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool ECHO=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ECHO" >&5 +$as_echo_n "checking for ECHO... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool ECHO=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in expr + if test "x$ECHO" = x; then + as_fn_error $? "Could not find required tool for ECHO" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$EXPR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in expr do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4709,21 +6679,155 @@ fi test -n "$EXPR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !EXPR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!EXPR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xEXPR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of EXPR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of EXPR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in expr +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_EXPR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $EXPR in + [\\/]* | ?:[\\/]*) + ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EXPR=$ac_cv_path_EXPR +if test -n "$EXPR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 +$as_echo "$EXPR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$EXPR" && break +done - if test "x$EXPR" = x; then - if test "xexpr" = x; then - PROG_NAME=expr else - PROG_NAME=expr + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$EXPR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool EXPR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool EXPR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_EXPR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $EXPR in + [\\/]* | ?:[\\/]*) + ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EXPR=$ac_cv_path_EXPR +if test -n "$EXPR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 +$as_echo "$EXPR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$EXPR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool EXPR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool EXPR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXPR" >&5 +$as_echo_n "checking for EXPR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool EXPR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in file + if test "x$EXPR" = x; then + as_fn_error $? "Could not find required tool for EXPR" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$FILE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in file do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4768,21 +6872,155 @@ fi test -n "$FILE" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !FILE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!FILE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xFILE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of FILE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of FILE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in file +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_FILE="$FILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FILE=$ac_cv_path_FILE +if test -n "$FILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 +$as_echo "$FILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$FILE" && break +done - if test "x$FILE" = x; then - if test "xfile" = x; then - PROG_NAME=file else - PROG_NAME=file + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$FILE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool FILE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool FILE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_FILE="$FILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FILE=$ac_cv_path_FILE +if test -n "$FILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 +$as_echo "$FILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FILE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool FILE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool FILE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FILE" >&5 +$as_echo_n "checking for FILE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool FILE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in find + if test "x$FILE" = x; then + as_fn_error $? "Could not find required tool for FILE" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$FIND" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in find do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4827,21 +7065,155 @@ fi test -n "$FIND" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !FIND! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!FIND!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xFIND" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of FIND from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of FIND from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in find +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FIND+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FIND=$ac_cv_path_FIND +if test -n "$FIND"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 +$as_echo "$FIND" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$FIND" && break +done - if test "x$FIND" = x; then - if test "xfind" = x; then - PROG_NAME=find else - PROG_NAME=find + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$FIND" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool FIND=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool FIND=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FIND+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FIND=$ac_cv_path_FIND +if test -n "$FIND"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 +$as_echo "$FIND" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FIND" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool FIND=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool FIND=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FIND" >&5 +$as_echo_n "checking for FIND... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool FIND=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in head + if test "x$FIND" = x; then + as_fn_error $? "Could not find required tool for FIND" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$HEAD" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in head do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4886,21 +7258,155 @@ fi test -n "$HEAD" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !HEAD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!HEAD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xHEAD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of HEAD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of HEAD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in head +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HEAD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HEAD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HEAD=$ac_cv_path_HEAD +if test -n "$HEAD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 +$as_echo "$HEAD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HEAD" && break +done - if test "x$HEAD" = x; then - if test "xhead" = x; then - PROG_NAME=head else - PROG_NAME=head + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$HEAD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool HEAD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool HEAD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HEAD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HEAD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HEAD=$ac_cv_path_HEAD +if test -n "$HEAD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 +$as_echo "$HEAD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$HEAD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool HEAD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool HEAD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HEAD" >&5 +$as_echo_n "checking for HEAD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool HEAD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in ln + if test "x$HEAD" = x; then + as_fn_error $? "Could not find required tool for HEAD" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$LN" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ln do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4945,21 +7451,155 @@ fi test -n "$LN" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !LN! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!LN!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xLN" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of LN from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of LN from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ln +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LN in + [\\/]* | ?:[\\/]*) + ac_cv_path_LN="$LN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LN=$ac_cv_path_LN +if test -n "$LN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 +$as_echo "$LN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LN" && break +done - if test "x$LN" = x; then - if test "xln" = x; then - PROG_NAME=ln else - PROG_NAME=ln + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$LN" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool LN=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool LN=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LN in + [\\/]* | ?:[\\/]*) + ac_cv_path_LN="$LN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LN=$ac_cv_path_LN +if test -n "$LN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 +$as_echo "$LN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LN" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool LN=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool LN=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LN" >&5 +$as_echo_n "checking for LN... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool LN=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in ls + if test "x$LN" = x; then + as_fn_error $? "Could not find required tool for LN" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$LS" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ls do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5004,21 +7644,155 @@ fi test -n "$LS" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !LS! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!LS!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xLS" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of LS from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of LS from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ls +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LS in + [\\/]* | ?:[\\/]*) + ac_cv_path_LS="$LS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LS=$ac_cv_path_LS +if test -n "$LS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 +$as_echo "$LS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LS" && break +done - if test "x$LS" = x; then - if test "xls" = x; then - PROG_NAME=ls else - PROG_NAME=ls + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$LS" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool LS=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool LS=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LS in + [\\/]* | ?:[\\/]*) + ac_cv_path_LS="$LS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LS=$ac_cv_path_LS +if test -n "$LS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 +$as_echo "$LS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LS" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool LS=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool LS=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LS" >&5 +$as_echo_n "checking for LS... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool LS=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in mkdir + if test "x$LS" = x; then + as_fn_error $? "Could not find required tool for LS" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$MKDIR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in mkdir do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5063,21 +7837,155 @@ fi test -n "$MKDIR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !MKDIR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!MKDIR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xMKDIR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of MKDIR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of MKDIR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in mkdir +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKDIR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKDIR=$ac_cv_path_MKDIR +if test -n "$MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 +$as_echo "$MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MKDIR" && break +done - if test "x$MKDIR" = x; then - if test "xmkdir" = x; then - PROG_NAME=mkdir else - PROG_NAME=mkdir + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$MKDIR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool MKDIR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool MKDIR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKDIR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKDIR=$ac_cv_path_MKDIR +if test -n "$MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 +$as_echo "$MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$MKDIR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool MKDIR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool MKDIR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MKDIR" >&5 +$as_echo_n "checking for MKDIR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool MKDIR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in mktemp + if test "x$MKDIR" = x; then + as_fn_error $? "Could not find required tool for MKDIR" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$MKTEMP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in mktemp do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5122,21 +8030,155 @@ fi test -n "$MKTEMP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !MKTEMP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!MKTEMP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xMKTEMP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of MKTEMP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of MKTEMP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in mktemp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKTEMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKTEMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKTEMP="$MKTEMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKTEMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKTEMP=$ac_cv_path_MKTEMP +if test -n "$MKTEMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKTEMP" >&5 +$as_echo "$MKTEMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MKTEMP" && break +done - if test "x$MKTEMP" = x; then - if test "xmktemp" = x; then - PROG_NAME=mktemp else - PROG_NAME=mktemp + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$MKTEMP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool MKTEMP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool MKTEMP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKTEMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKTEMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKTEMP="$MKTEMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKTEMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKTEMP=$ac_cv_path_MKTEMP +if test -n "$MKTEMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKTEMP" >&5 +$as_echo "$MKTEMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$MKTEMP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool MKTEMP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool MKTEMP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MKTEMP" >&5 +$as_echo_n "checking for MKTEMP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool MKTEMP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in mv + if test "x$MKTEMP" = x; then + as_fn_error $? "Could not find required tool for MKTEMP" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$MV" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in mv do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5181,21 +8223,348 @@ fi test -n "$MV" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !MV! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!MV!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xMV" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of MV from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of MV from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in mv +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MV in + [\\/]* | ?:[\\/]*) + ac_cv_path_MV="$MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MV=$ac_cv_path_MV +if test -n "$MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 +$as_echo "$MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MV" && break +done - if test "x$MV" = x; then - if test "xmv" = x; then - PROG_NAME=mv else - PROG_NAME=mv + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$MV" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool MV=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool MV=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MV in + [\\/]* | ?:[\\/]*) + ac_cv_path_MV="$MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MV=$ac_cv_path_MV +if test -n "$MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 +$as_echo "$MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$MV" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool MV=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool MV=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MV" >&5 +$as_echo_n "checking for MV... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool MV=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in printf + if test "x$MV" = x; then + as_fn_error $? "Could not find required tool for MV" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$NAWK" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in nawk gawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NAWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NAWK" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NAWK! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NAWK!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNAWK" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NAWK from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NAWK from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in nawk gawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NAWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NAWK" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$NAWK" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NAWK=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NAWK=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NAWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NAWK" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NAWK=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NAWK=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NAWK" >&5 +$as_echo_n "checking for NAWK... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NAWK=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + if test "x$NAWK" = x; then + as_fn_error $? "Could not find required tool for NAWK" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$PRINTF" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in printf do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5240,21 +8609,155 @@ fi test -n "$PRINTF" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !PRINTF! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!PRINTF!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xPRINTF" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of PRINTF from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of PRINTF from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in printf +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PRINTF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PRINTF in + [\\/]* | ?:[\\/]*) + ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PRINTF=$ac_cv_path_PRINTF +if test -n "$PRINTF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 +$as_echo "$PRINTF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PRINTF" && break +done - if test "x$PRINTF" = x; then - if test "xprintf" = x; then - PROG_NAME=printf else - PROG_NAME=printf + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$PRINTF" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool PRINTF=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool PRINTF=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PRINTF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PRINTF in + [\\/]* | ?:[\\/]*) + ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PRINTF=$ac_cv_path_PRINTF +if test -n "$PRINTF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 +$as_echo "$PRINTF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$PRINTF" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool PRINTF=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool PRINTF=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PRINTF" >&5 +$as_echo_n "checking for PRINTF... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool PRINTF=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in rm + if test "x$PRINTF" = x; then + as_fn_error $? "Could not find required tool for PRINTF" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$RM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in rm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5299,21 +8802,155 @@ fi test -n "$RM" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !RM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!RM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xRM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of RM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of RM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in rm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_RM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$RM" && break +done - if test "x$RM" = x; then - if test "xrm" = x; then - PROG_NAME=rm else - PROG_NAME=rm + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$RM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool RM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool RM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_RM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$RM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool RM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool RM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RM" >&5 +$as_echo_n "checking for RM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool RM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in sh + if test "x$RM" = x; then + as_fn_error $? "Could not find required tool for RM" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$SH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in sh do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5358,21 +8995,155 @@ fi test -n "$SH" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !SH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!SH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of SH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of SH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in sh +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SH in + [\\/]* | ?:[\\/]*) + ac_cv_path_SH="$SH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SH=$ac_cv_path_SH +if test -n "$SH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 +$as_echo "$SH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$SH" && break +done - if test "x$SH" = x; then - if test "xsh" = x; then - PROG_NAME=sh else - PROG_NAME=sh + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$SH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool SH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool SH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SH in + [\\/]* | ?:[\\/]*) + ac_cv_path_SH="$SH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SH=$ac_cv_path_SH +if test -n "$SH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 +$as_echo "$SH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$SH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool SH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool SH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SH" >&5 +$as_echo_n "checking for SH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool SH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in sort + if test "x$SH" = x; then + as_fn_error $? "Could not find required tool for SH" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$SORT" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in sort do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5417,21 +9188,155 @@ fi test -n "$SORT" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !SORT! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!SORT!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSORT" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of SORT from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of SORT from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in sort +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SORT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SORT in + [\\/]* | ?:[\\/]*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SORT=$ac_cv_path_SORT +if test -n "$SORT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 +$as_echo "$SORT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$SORT" && break +done - if test "x$SORT" = x; then - if test "xsort" = x; then - PROG_NAME=sort else - PROG_NAME=sort + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$SORT" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool SORT=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool SORT=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SORT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SORT in + [\\/]* | ?:[\\/]*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SORT=$ac_cv_path_SORT +if test -n "$SORT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 +$as_echo "$SORT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$SORT" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool SORT=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool SORT=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SORT" >&5 +$as_echo_n "checking for SORT... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool SORT=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in tail + if test "x$SORT" = x; then + as_fn_error $? "Could not find required tool for SORT" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TAIL" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in tail do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5476,21 +9381,155 @@ fi test -n "$TAIL" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TAIL! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TAIL!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTAIL" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TAIL from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TAIL from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in tail +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TAIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TAIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAIL=$ac_cv_path_TAIL +if test -n "$TAIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 +$as_echo "$TAIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TAIL" && break +done - if test "x$TAIL" = x; then - if test "xtail" = x; then - PROG_NAME=tail else - PROG_NAME=tail + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TAIL" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TAIL=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TAIL=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TAIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TAIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAIL=$ac_cv_path_TAIL +if test -n "$TAIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 +$as_echo "$TAIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TAIL" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TAIL=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TAIL=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TAIL" >&5 +$as_echo_n "checking for TAIL... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TAIL=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in tar + if test "x$TAIL" = x; then + as_fn_error $? "Could not find required tool for TAIL" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TAR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in tar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5535,21 +9574,155 @@ fi test -n "$TAR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TAR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TAR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTAR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TAR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TAR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in tar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAR="$TAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAR=$ac_cv_path_TAR +if test -n "$TAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 +$as_echo "$TAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TAR" && break +done - if test "x$TAR" = x; then - if test "xtar" = x; then - PROG_NAME=tar else - PROG_NAME=tar + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TAR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TAR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TAR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAR="$TAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAR=$ac_cv_path_TAR +if test -n "$TAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 +$as_echo "$TAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TAR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TAR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TAR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TAR" >&5 +$as_echo_n "checking for TAR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TAR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in tee + if test "x$TAR" = x; then + as_fn_error $? "Could not find required tool for TAR" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TEE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in tee do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5594,21 +9767,155 @@ fi test -n "$TEE" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TEE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TEE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTEE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TEE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TEE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in tee +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TEE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TEE in + [\\/]* | ?:[\\/]*) + ac_cv_path_TEE="$TEE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TEE=$ac_cv_path_TEE +if test -n "$TEE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 +$as_echo "$TEE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TEE" && break +done - if test "x$TEE" = x; then - if test "xtee" = x; then - PROG_NAME=tee else - PROG_NAME=tee + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TEE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TEE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TEE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TEE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TEE in + [\\/]* | ?:[\\/]*) + ac_cv_path_TEE="$TEE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TEE=$ac_cv_path_TEE +if test -n "$TEE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 +$as_echo "$TEE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TEE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TEE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TEE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TEE" >&5 +$as_echo_n "checking for TEE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TEE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in touch + if test "x$TEE" = x; then + as_fn_error $? "Could not find required tool for TEE" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TOUCH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in touch do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5653,21 +9960,155 @@ fi test -n "$TOUCH" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TOUCH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TOUCH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTOUCH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TOUCH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TOUCH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in touch +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TOUCH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TOUCH in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TOUCH=$ac_cv_path_TOUCH +if test -n "$TOUCH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 +$as_echo "$TOUCH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TOUCH" && break +done - if test "x$TOUCH" = x; then - if test "xtouch" = x; then - PROG_NAME=touch else - PROG_NAME=touch + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TOUCH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TOUCH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TOUCH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TOUCH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TOUCH in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TOUCH=$ac_cv_path_TOUCH +if test -n "$TOUCH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 +$as_echo "$TOUCH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TOUCH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TOUCH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TOUCH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TOUCH" >&5 +$as_echo_n "checking for TOUCH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TOUCH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in tr + if test "x$TOUCH" = x; then + as_fn_error $? "Could not find required tool for TOUCH" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in tr do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5712,21 +10153,155 @@ fi test -n "$TR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in tr +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TR="$TR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TR=$ac_cv_path_TR +if test -n "$TR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 +$as_echo "$TR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TR" && break +done - if test "x$TR" = x; then - if test "xtr" = x; then - PROG_NAME=tr else - PROG_NAME=tr + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TR="$TR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TR=$ac_cv_path_TR +if test -n "$TR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 +$as_echo "$TR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TR" >&5 +$as_echo_n "checking for TR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in uname + if test "x$TR" = x; then + as_fn_error $? "Could not find required tool for TR" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$UNAME" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in uname do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5771,21 +10346,155 @@ fi test -n "$UNAME" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !UNAME! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!UNAME!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xUNAME" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of UNAME from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of UNAME from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in uname +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNAME=$ac_cv_path_UNAME +if test -n "$UNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 +$as_echo "$UNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNAME" && break +done - if test "x$UNAME" = x; then - if test "xuname" = x; then - PROG_NAME=uname else - PROG_NAME=uname + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$UNAME" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool UNAME=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool UNAME=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNAME=$ac_cv_path_UNAME +if test -n "$UNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 +$as_echo "$UNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$UNAME" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool UNAME=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool UNAME=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UNAME" >&5 +$as_echo_n "checking for UNAME... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool UNAME=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in uniq + if test "x$UNAME" = x; then + as_fn_error $? "Could not find required tool for UNAME" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$UNIQ" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in uniq do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5830,21 +10539,155 @@ fi test -n "$UNIQ" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !UNIQ! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!UNIQ!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xUNIQ" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of UNIQ from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of UNIQ from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in uniq +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNIQ+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNIQ in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNIQ="$UNIQ" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNIQ="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNIQ=$ac_cv_path_UNIQ +if test -n "$UNIQ"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNIQ" >&5 +$as_echo "$UNIQ" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNIQ" && break +done - if test "x$UNIQ" = x; then - if test "xuniq" = x; then - PROG_NAME=uniq else - PROG_NAME=uniq + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$UNIQ" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool UNIQ=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool UNIQ=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNIQ+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNIQ in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNIQ="$UNIQ" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNIQ="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNIQ=$ac_cv_path_UNIQ +if test -n "$UNIQ"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNIQ" >&5 +$as_echo "$UNIQ" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$UNIQ" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool UNIQ=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool UNIQ=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UNIQ" >&5 +$as_echo_n "checking for UNIQ... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool UNIQ=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in wc + if test "x$UNIQ" = x; then + as_fn_error $? "Could not find required tool for UNIQ" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$WC" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in wc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5889,21 +10732,155 @@ fi test -n "$WC" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !WC! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!WC!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xWC" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of WC from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of WC from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in wc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WC in + [\\/]* | ?:[\\/]*) + ac_cv_path_WC="$WC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WC=$ac_cv_path_WC +if test -n "$WC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 +$as_echo "$WC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$WC" && break +done - if test "x$WC" = x; then - if test "xwc" = x; then - PROG_NAME=wc else - PROG_NAME=wc + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$WC" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool WC=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool WC=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WC in + [\\/]* | ?:[\\/]*) + ac_cv_path_WC="$WC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WC=$ac_cv_path_WC +if test -n "$WC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 +$as_echo "$WC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$WC" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool WC=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool WC=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for WC" >&5 +$as_echo_n "checking for WC... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool WC=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in which + if test "x$WC" = x; then + as_fn_error $? "Could not find required tool for WC" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$WHICH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in which do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5948,21 +10925,155 @@ fi test -n "$WHICH" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !WHICH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!WHICH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xWHICH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of WHICH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of WHICH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in which +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WHICH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WHICH in + [\\/]* | ?:[\\/]*) + ac_cv_path_WHICH="$WHICH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WHICH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WHICH=$ac_cv_path_WHICH +if test -n "$WHICH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WHICH" >&5 +$as_echo "$WHICH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$WHICH" && break +done - if test "x$WHICH" = x; then - if test "xwhich" = x; then - PROG_NAME=which else - PROG_NAME=which + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$WHICH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool WHICH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool WHICH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WHICH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WHICH in + [\\/]* | ?:[\\/]*) + ac_cv_path_WHICH="$WHICH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WHICH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WHICH=$ac_cv_path_WHICH +if test -n "$WHICH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WHICH" >&5 +$as_echo "$WHICH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$WHICH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool WHICH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool WHICH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for WHICH" >&5 +$as_echo_n "checking for WHICH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool WHICH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in xargs + if test "x$WHICH" = x; then + as_fn_error $? "Could not find required tool for WHICH" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$XARGS" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in xargs do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -6007,22 +11118,156 @@ fi test -n "$XARGS" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !XARGS! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!XARGS!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xXARGS" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of XARGS from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of XARGS from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in xargs +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XARGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XARGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XARGS=$ac_cv_path_XARGS +if test -n "$XARGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 +$as_echo "$XARGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$XARGS" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$XARGS" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool XARGS=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool XARGS=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XARGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XARGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XARGS=$ac_cv_path_XARGS +if test -n "$XARGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 +$as_echo "$XARGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$XARGS" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool XARGS=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool XARGS=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XARGS" >&5 +$as_echo_n "checking for XARGS... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool XARGS=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$XARGS" = x; then - if test "xxargs" = x; then - PROG_NAME=xargs - else - PROG_NAME=xargs - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 + as_fn_error $? "Could not find required tool for XARGS" "$LINENO" 5 fi # Then required tools that require some special treatment. - for ac_prog in gawk mawk nawk awk + + + # Publish this variable in the help. + + + if test "x$AWK" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -6064,19 +11309,150 @@ fi test -n "$AWK" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !AWK! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!AWK!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xAWK" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of AWK from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of AWK from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done - if test "x$AWK" = x; then - if test "x" = x; then - PROG_NAME=awk else - PROG_NAME= + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$AWK" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool AWK=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool AWK=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AWK=$ac_cv_path_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$AWK" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool AWK=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool AWK=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AWK" >&5 +$as_echo_n "checking for AWK... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool AWK=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 + + if test "x$AWK" = x; then + as_fn_error $? "Could not find required tool for AWK" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$GREP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 @@ -6139,19 +11515,171 @@ $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" + else + # The variable is set, but is it from the command line or the environment? - if test "x$GREP" = x; then - if test "x" = x; then - PROG_NAME=grep - else - PROG_NAME= + # Try to remove the string !GREP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!GREP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xGREP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of GREP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of GREP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$GREP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool GREP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool GREP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_GREP="$GREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GREP=$ac_cv_path_GREP +if test -n "$GREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GREP" >&5 +$as_echo "$GREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$GREP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool GREP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool GREP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GREP" >&5 +$as_echo_n "checking for GREP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool GREP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 + + if test "x$GREP" = x; then + as_fn_error $? "Could not find required tool for GREP" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$EGREP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 @@ -6218,19 +11746,175 @@ $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" + else + # The variable is set, but is it from the command line or the environment? - if test "x$EGREP" = x; then - if test "x" = x; then - PROG_NAME=egrep - else - PROG_NAME= + # Try to remove the string !EGREP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!EGREP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xEGREP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of EGREP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of EGREP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$EGREP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool EGREP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool EGREP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_EGREP="$EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EGREP=$ac_cv_path_EGREP +if test -n "$EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EGREP" >&5 +$as_echo "$EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$EGREP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool EGREP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool EGREP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGREP" >&5 +$as_echo_n "checking for EGREP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool EGREP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 + + if test "x$EGREP" = x; then + as_fn_error $? "Could not find required tool for EGREP" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$FGREP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 @@ -6297,19 +11981,175 @@ $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" + else + # The variable is set, but is it from the command line or the environment? - if test "x$FGREP" = x; then - if test "x" = x; then - PROG_NAME=fgrep - else - PROG_NAME= + # Try to remove the string !FGREP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!FGREP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xFGREP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of FGREP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of FGREP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$FGREP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool FGREP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool FGREP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_FGREP="$FGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FGREP=$ac_cv_path_FGREP +if test -n "$FGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FGREP" >&5 +$as_echo "$FGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FGREP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool FGREP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool FGREP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FGREP" >&5 +$as_echo_n "checking for FGREP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool FGREP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 + + if test "x$FGREP" = x; then + as_fn_error $? "Could not find required tool for FGREP" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$SED" = x; then + # The variable is not set by user, try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 @@ -6378,31 +12218,113 @@ $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed + else + # The variable is set, but is it from the command line or the environment? - if test "x$SED" = x; then - if test "x" = x; then - PROG_NAME=sed - else - PROG_NAME= - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - for ac_prog in nawk gawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NAWK+:} false; then : + # Try to remove the string !SED! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!SED!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSED" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of SED from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of SED from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else - case $NAWK in + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$SED" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool SED=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool SED=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SED in [\\/]* | ?:[\\/]*) - ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ac_cv_path_SED="$SED" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6412,7 +12334,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6423,32 +12345,43 @@ IFS=$as_save_IFS ;; esac fi -NAWK=$ac_cv_path_NAWK -if test -n "$NAWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 -$as_echo "$NAWK" >&6; } +SED=$ac_cv_path_SED +if test -n "$SED"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 +$as_echo "$SED" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$NAWK" && break -done - - - if test "x$NAWK" = x; then - if test "x" = x; then - PROG_NAME=nawk - else - PROG_NAME= + if test "x$SED" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool SED=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool SED=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SED" >&5 +$as_echo_n "checking for SED... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool SED=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi + if test "x$SED" = x; then + as_fn_error $? "Could not find required tool for SED" "$LINENO" 5 + fi + + + # Always force rm. RM="$RM -f" @@ -6457,8 +12390,17 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} THEPWDCMD=pwd # These are not required on all platforms - # Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$CYGPATH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cygpath +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CYGPATH+:} false; then : @@ -6497,8 +12439,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 + test -n "$CYGPATH" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CYGPATH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CYGPATH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCYGPATH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CYGPATH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CYGPATH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cygpath +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CYGPATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CYGPATH" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CYGPATH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CYGPATH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CYGPATH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CYGPATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CYGPATH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CYGPATH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CYGPATH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CYGPATH" >&5 +$as_echo_n "checking for CYGPATH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CYGPATH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$READLINK" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in greadlink readlink +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_READLINK+:} false; then : @@ -6537,8 +12625,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "df", so it can be a program name with args. -set dummy df; ac_word=$2 + test -n "$READLINK" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !READLINK! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!READLINK!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xREADLINK" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of READLINK from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of READLINK from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in greadlink readlink +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_READLINK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$READLINK" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$READLINK" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool READLINK=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool READLINK=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_READLINK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READLINK" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool READLINK=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool READLINK=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for READLINK" >&5 +$as_echo_n "checking for READLINK... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool READLINK=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$DF" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in df +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DF+:} false; then : @@ -6577,8 +12811,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "SetFile", so it can be a program name with args. -set dummy SetFile; ac_word=$2 + test -n "$DF" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DF! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DF!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDF" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DF from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DF from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in df +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DF="$DF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DF" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DF" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DF=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DF=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DF="$DF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DF" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DF=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DF=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DF" >&5 +$as_echo_n "checking for DF... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DF=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$SETFILE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in SetFile +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SETFILE+:} false; then : @@ -6617,6 +12997,143 @@ $as_echo "no" >&6; } fi + test -n "$SETFILE" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !SETFILE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!SETFILE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSETFILE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of SETFILE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of SETFILE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in SetFile +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SETFILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SETFILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_SETFILE="$SETFILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SETFILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SETFILE=$ac_cv_path_SETFILE +if test -n "$SETFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SETFILE" >&5 +$as_echo "$SETFILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$SETFILE" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$SETFILE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool SETFILE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool SETFILE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SETFILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SETFILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_SETFILE="$SETFILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SETFILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SETFILE=$ac_cv_path_SETFILE +if test -n "$SETFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SETFILE" >&5 +$as_echo "$SETFILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$SETFILE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool SETFILE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool SETFILE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SETFILE" >&5 +$as_echo_n "checking for SETFILE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool SETFILE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + # Now we can determine OpenJDK build and target platforms. This is required to @@ -6784,6 +13301,11 @@ test -n "$target_alias" && VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; + *aix*) + VAR_OS=aix + VAR_OS_API=posix + VAR_OS_ENV=aix + ;; *) as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 ;; @@ -6904,6 +13426,11 @@ $as_echo "$OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU" >&6; } VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; + *aix*) + VAR_OS=aix + VAR_OS_API=posix + VAR_OS_ENV=aix + ;; *) as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 ;; @@ -7810,6 +14337,37 @@ fi $as_echo "$JDK_VARIANT" >&6; } +############################################################################### +# +# Check which interpreter of the JVM we want to build. +# Currently we have: +# template: Template interpreter (the default) +# cpp : C++ interpreter +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which interpreter of the JVM to build" >&5 +$as_echo_n "checking which interpreter of the JVM to build... " >&6; } + +# Check whether --with-jvm-interpreter was given. +if test "${with_jvm_interpreter+set}" = set; then : + withval=$with_jvm_interpreter; +fi + + +if test "x$with_jvm_interpreter" = x; then + with_jvm_interpreter="template" +fi + +JVM_INTERPRETER="$with_jvm_interpreter" + +if test "x$JVM_INTERPRETER" != xtemplate && test "x$JVM_INTERPRETER" != xcpp; then + as_fn_error $? "The available JVM interpreters are: template, cpp" "$LINENO" 5 +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_interpreter" >&5 +$as_echo "$with_jvm_interpreter" >&6; } + + ############################################################################### # @@ -7822,6 +14380,7 @@ $as_echo "$JDK_VARIANT" >&6; } # ie normal interpreter and C1, only the serial GC, kernel jvmti etc # zero: no machine code interpreter, no compiler # zeroshark: zero interpreter and shark/llvm compiler backend +# core: interpreter only, no compiler (only works on some platforms) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM to build" >&5 $as_echo_n "checking which variants of the JVM to build... " >&6; } @@ -7836,10 +14395,10 @@ fi fi JVM_VARIANTS=",$with_jvm_variants," - TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//' -e 's/core,//'` if test "x$TEST_VARIANTS" != "x,"; then - as_fn_error $? "The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark" "$LINENO" 5 + as_fn_error $? "The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark, core" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5 $as_echo "$with_jvm_variants" >&6; } @@ -7850,6 +14409,7 @@ $as_echo "$with_jvm_variants" >&6; } JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + JVM_VARIANT_CORE=`$ECHO "$JVM_VARIANTS" | $SED -e '/,core,/!s/.*/false/g' -e '/,core,/s/.*/true/g'` if test "x$JVM_VARIANT_CLIENT" = xtrue; then if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then @@ -7868,8 +14428,8 @@ $as_echo "$with_jvm_variants" >&6; } fi # Replace the commas with AND for use in the build directory name. - ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` - COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` + ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/g'` + COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/' -e 's/core,/1/'` if test "x$COUNT_VARIANTS" != "x,1"; then BUILDING_MULTIPLE_JVM_VARIANTS=yes else @@ -7884,6 +14444,7 @@ $as_echo "$with_jvm_variants" >&6; } + INCLUDE_SA=true if test "x$JVM_VARIANT_ZERO" = xtrue ; then INCLUDE_SA=false @@ -7891,6 +14452,9 @@ $as_echo "$with_jvm_variants" >&6; } if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then INCLUDE_SA=false fi + if test "x$VAR_CPU" = xppc64 ; then + INCLUDE_SA=false + fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then @@ -8006,6 +14570,10 @@ $as_echo "$DEBUG_LEVEL" >&6; } HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " fi + if test "x$JVM_VARIANT_CORE" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}core " + fi + HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" # On Macosx universal binaries are produced, but they only contain @@ -10085,7 +16653,14 @@ $as_echo "yes" >&6; } # These tools might not be installed by default, # need hint on how to install them. - for ac_prog in unzip + + + # Publish this variable in the help. + + + if test "x$UNZIP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in unzip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10130,21 +16705,155 @@ fi test -n "$UNZIP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !UNZIP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!UNZIP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xUNZIP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of UNZIP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of UNZIP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNZIP" && break +done - if test "x$UNZIP" = x; then - if test "xunzip" = x; then - PROG_NAME=unzip else - PROG_NAME=unzip + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$UNZIP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool UNZIP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool UNZIP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$UNZIP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool UNZIP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool UNZIP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UNZIP" >&5 +$as_echo_n "checking for UNZIP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool UNZIP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in zip + if test "x$UNZIP" = x; then + as_fn_error $? "Could not find required tool for UNZIP" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$ZIP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in zip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10189,24 +16898,160 @@ fi test -n "$ZIP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !ZIP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ZIP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xZIP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ZIP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of ZIP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in zip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ZIP" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$ZIP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ZIP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool ZIP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ZIP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ZIP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool ZIP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZIP" >&5 +$as_echo_n "checking for ZIP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool ZIP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$ZIP" = x; then - if test "xzip" = x; then - PROG_NAME=zip - else - PROG_NAME=zip - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 + as_fn_error $? "Could not find required tool for ZIP" "$LINENO" 5 fi # Non-required basic tools - # Extract the first word of "ldd", so it can be a program name with args. -set dummy ldd; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$LDD" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ldd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LDD+:} false; then : @@ -10245,14 +17090,160 @@ $as_echo "no" >&6; } fi + test -n "$LDD" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !LDD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!LDD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xLDD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of LDD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of LDD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ldd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LDD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LDD" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$LDD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool LDD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool LDD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LDD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LDD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool LDD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool LDD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LDD" >&5 +$as_echo_n "checking for LDD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool LDD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$LDD" = "x"; then # List shared lib dependencies is used for # debug output and checking for forbidden dependencies. # We can build without it. LDD="true" fi - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$OTOOL" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in otool +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_OTOOL+:} false; then : @@ -10291,10 +17282,154 @@ $as_echo "no" >&6; } fi + test -n "$OTOOL" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !OTOOL! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!OTOOL!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xOTOOL" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of OTOOL from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of OTOOL from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in otool +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OTOOL" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$OTOOL" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool OTOOL=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool OTOOL=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$OTOOL" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool OTOOL=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool OTOOL=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OTOOL" >&5 +$as_echo_n "checking for OTOOL... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool OTOOL=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OTOOL" = "x"; then OTOOL="true" fi - for ac_prog in readelf greadelf + + + # Publish this variable in the help. + + + if test "x$READELF" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in greadelf readelf do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10339,8 +17474,151 @@ fi test -n "$READELF" && break done - # Extract the first word of "hg", so it can be a program name with args. -set dummy hg; ac_word=$2 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !READELF! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!READELF!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xREADELF" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of READELF from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of READELF from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in greadelf readelf +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$READELF" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$READELF" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool READELF=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool READELF=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READELF" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool READELF=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool READELF=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for READELF" >&5 +$as_echo_n "checking for READELF... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool READELF=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$HG" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in hg +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_HG+:} false; then : @@ -10379,8 +17657,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "stat", so it can be a program name with args. -set dummy stat; ac_word=$2 + test -n "$HG" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !HG! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!HG!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xHG" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of HG from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of HG from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in hg +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HG" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$HG" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool HG=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool HG=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$HG" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool HG=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool HG=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HG" >&5 +$as_echo_n "checking for HG... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool HG=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$STAT" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in stat +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_STAT+:} false; then : @@ -10419,8 +17843,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "time", so it can be a program name with args. -set dummy time; ac_word=$2 + test -n "$STAT" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !STAT! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!STAT!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSTAT" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of STAT from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of STAT from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in stat +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_STAT="$STAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STAT=$ac_cv_path_STAT +if test -n "$STAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STAT" >&5 +$as_echo "$STAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$STAT" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$STAT" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool STAT=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool STAT=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_STAT="$STAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STAT=$ac_cv_path_STAT +if test -n "$STAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STAT" >&5 +$as_echo "$STAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$STAT" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool STAT=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool STAT=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for STAT" >&5 +$as_echo_n "checking for STAT... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool STAT=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$TIME" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in time +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_TIME+:} false; then : @@ -10459,6 +18029,143 @@ $as_echo "no" >&6; } fi + test -n "$TIME" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TIME! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TIME!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTIME" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TIME from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TIME from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in time +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TIME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TIME in + [\\/]* | ?:[\\/]*) + ac_cv_path_TIME="$TIME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TIME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TIME=$ac_cv_path_TIME +if test -n "$TIME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TIME" >&5 +$as_echo "$TIME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TIME" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TIME" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TIME=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TIME=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TIME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TIME in + [\\/]* | ?:[\\/]*) + ac_cv_path_TIME="$TIME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TIME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TIME=$ac_cv_path_TIME +if test -n "$TIME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TIME" >&5 +$as_echo "$TIME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TIME" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TIME=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TIME=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIME" >&5 +$as_echo_n "checking for TIME... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TIME=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + # Check if it's GNU time IS_GNU_TIME=`$TIME --version 2>&1 | $GREP 'GNU time'` if test "x$IS_GNU_TIME" != x; then @@ -10470,7 +18177,14 @@ fi if test "x$OPENJDK_TARGET_OS" = "xwindows"; then - for ac_prog in comm + + + # Publish this variable in the help. + + + if test "x$COMM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in comm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10515,16 +18229,143 @@ fi test -n "$COMM" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !COMM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!COMM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCOMM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of COMM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of COMM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in comm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_COMM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$COMM" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$COMM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool COMM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool COMM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_COMM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$COMM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool COMM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool COMM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for COMM" >&5 +$as_echo_n "checking for COMM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool COMM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$COMM" = x; then - if test "xcomm" = x; then - PROG_NAME=comm - else - PROG_NAME=comm - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 + as_fn_error $? "Could not find required tool for COMM" "$LINENO" 5 fi @@ -10532,7 +18373,14 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - for ac_prog in dsymutil + + + # Publish this variable in the help. + + + if test "x$DSYMUTIL" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in dsymutil do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10577,21 +18425,155 @@ fi test -n "$DSYMUTIL" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DSYMUTIL! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DSYMUTIL!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDSYMUTIL" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DSYMUTIL from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DSYMUTIL from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in dsymutil +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DSYMUTIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_DSYMUTIL="$DSYMUTIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DSYMUTIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DSYMUTIL=$ac_cv_path_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DSYMUTIL" && break +done - if test "x$DSYMUTIL" = x; then - if test "xdsymutil" = x; then - PROG_NAME=dsymutil else - PROG_NAME=dsymutil + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DSYMUTIL" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DSYMUTIL=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DSYMUTIL=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DSYMUTIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_DSYMUTIL="$DSYMUTIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DSYMUTIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DSYMUTIL=$ac_cv_path_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DSYMUTIL" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DSYMUTIL=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DSYMUTIL=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DSYMUTIL" >&5 +$as_echo_n "checking for DSYMUTIL... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DSYMUTIL=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in xattr + if test "x$DSYMUTIL" = x; then + as_fn_error $? "Could not find required tool for DSYMUTIL" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$XATTR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in xattr do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10636,21 +18618,157 @@ fi test -n "$XATTR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !XATTR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!XATTR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xXATTR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of XATTR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of XATTR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in xattr +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XATTR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XATTR in + [\\/]* | ?:[\\/]*) + ac_cv_path_XATTR="$XATTR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XATTR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XATTR=$ac_cv_path_XATTR +if test -n "$XATTR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XATTR" >&5 +$as_echo "$XATTR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$XATTR" && break +done - if test "x$XATTR" = x; then - if test "xxattr" = x; then - PROG_NAME=xattr else - PROG_NAME=xattr + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$XATTR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool XATTR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool XATTR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XATTR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XATTR in + [\\/]* | ?:[\\/]*) + ac_cv_path_XATTR="$XATTR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XATTR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XATTR=$ac_cv_path_XATTR +if test -n "$XATTR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XATTR" >&5 +$as_echo "$XATTR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$XATTR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool XATTR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool XATTR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XATTR" >&5 +$as_echo_n "checking for XATTR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool XATTR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - # Extract the first word of "codesign", so it can be a program name with args. -set dummy codesign; ac_word=$2 + + if test "x$XATTR" = x; then + as_fn_error $? "Could not find required tool for XATTR" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$CODESIGN" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in codesign +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CODESIGN+:} false; then : @@ -10689,6 +18807,143 @@ $as_echo "no" >&6; } fi + test -n "$CODESIGN" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CODESIGN! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CODESIGN!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCODESIGN" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CODESIGN from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CODESIGN from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in codesign +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CODESIGN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CODESIGN in + [\\/]* | ?:[\\/]*) + ac_cv_path_CODESIGN="$CODESIGN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CODESIGN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CODESIGN=$ac_cv_path_CODESIGN +if test -n "$CODESIGN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CODESIGN" >&5 +$as_echo "$CODESIGN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CODESIGN" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CODESIGN" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CODESIGN=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CODESIGN=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CODESIGN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CODESIGN in + [\\/]* | ?:[\\/]*) + ac_cv_path_CODESIGN="$CODESIGN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CODESIGN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CODESIGN=$ac_cv_path_CODESIGN +if test -n "$CODESIGN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CODESIGN" >&5 +$as_echo "$CODESIGN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CODESIGN" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CODESIGN=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CODESIGN=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CODESIGN" >&5 +$as_echo_n "checking for CODESIGN... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CODESIGN=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$CODESIGN" != "x"; then # Verify that the openjdk_codesign certificate is present { $as_echo "$as_me:${as_lineno-$LINENO}: checking if openjdk_codesign certificate is present" >&5 @@ -11287,12 +19542,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -11619,12 +19874,942 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # 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) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + + # Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home? + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # First check at user selected default + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home ` + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home " >&5 +$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home " >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # 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) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + # If that did not work out (e.g. too old), try explicit versions instead + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home -v 1.9` + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home -v 1.9" >&5 +$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home -v 1.9" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # 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) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home -v 1.8` + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home -v 1.8" >&5 +$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home -v 1.8" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # 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) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home -v 1.7` + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home -v 1.7" >&5 +$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home -v 1.7" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # 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) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -11937,200 +21122,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} - BOOT_JDK_FOUND=no - else - # We're done! :-) - BOOT_JDK_FOUND=yes - - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - - # Input might be given as Windows format, start by converting to - # unix format. - path="$BOOT_JDK" - new_path=`$CYGPATH -u "$path"` - - # Cygwin tries to hide some aspects of the Windows file system, such that binaries are - # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered - # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then - # "foo.exe" is OK but "foo" is an error. - # - # This test is therefore slightly more accurate than "test -f" to check for file precense. - # It is also a way to make sure we got the proper file name for the real test later on. - test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` - if test "x$test_shortpath" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 -$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} - as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 - fi - - # Call helper function which possibly converts this using DOS-style short mode. - # If so, the updated path is stored in $new_path. - - input_path="$new_path" - # Check if we need to convert this using DOS-style short mode. If the path - # contains just simple characters, use it. Otherwise (spaces, weird characters), - # take no chances and rewrite it. - # Note: m4 eats our [], so we need to use [ and ] instead. - has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` - if test "x$has_forbidden_chars" != x; then - # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) - shortmode_path=`$CYGPATH -s -m -a "$input_path"` - path_after_shortmode=`$CYGPATH -u "$shortmode_path"` - if test "x$path_after_shortmode" != "x$input_to_shortpath"; then - # 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) - input_path=`$CYGPATH -u "$shortmode_path"` - new_path="$input_path" - fi - fi - - test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` - if test "x$test_cygdrive_prefix" = x; then - # As a simple fix, exclude /usr/bin since it's not a real path. - if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then - # The path is in a Cygwin special directory (e.g. /home). We need this converted to - # a path prefixed by /cygdrive for fixpath to work. - new_path="$CYGWIN_ROOT_PATH$input_path" - fi - fi - - - if test "x$path" != "x$new_path"; then - BOOT_JDK="$new_path" - { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 -$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} - fi - - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - - path="$BOOT_JDK" - has_colon=`$ECHO $path | $GREP ^.:` - new_path="$path" - if test "x$has_colon" = x; then - # Not in mixed or Windows style, start by that. - new_path=`cmd //c echo $path` - fi - - - input_path="$new_path" - # Check if we need to convert this using DOS-style short mode. If the path - # contains just simple characters, use it. Otherwise (spaces, weird characters), - # take no chances and rewrite it. - # Note: m4 eats our [], so we need to use [ and ] instead. - has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` - if test "x$has_forbidden_chars" != x; then - # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) - new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - fi - - - windows_path="$new_path" - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - unix_path=`$CYGPATH -u "$windows_path"` - new_path="$unix_path" - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` - new_path="$unix_path" - fi - - if test "x$path" != "x$new_path"; then - BOOT_JDK="$new_path" - { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 -$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} - fi - - # Save the first 10 bytes of this path to the storage, so fixpath can work. - all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") - - else - # We're on a posix platform. Hooray! :) - path="$BOOT_JDK" - has_space=`$ECHO "$path" | $GREP " "` - if test "x$has_space" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 -$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} - as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 - fi - - # Use eval to expand a potential ~ - eval path="$path" - if test ! -f "$path" && test ! -d "$path"; then - as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 - fi - - BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 -$as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 -$as_echo "$BOOT_JDK" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 -$as_echo_n "checking Boot JDK version... " >&6; } - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 -$as_echo "$BOOT_JDK_VERSION" >&6; } - fi # end check jdk version - fi # end check rt.jar - fi # end check javac - fi # end check java - fi # end check boot jdk found - fi - - - # Test: Is there a /usr/libexec/java_home? (Typically on MacOSX) - - if test "x$BOOT_JDK_FOUND" = xno; then - # Now execute the test - - if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home" >&5 -$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home" >&6;} - fi - - - # If previous step claimed to have found a JDK, check it to see if it seems to be valid. - if test "x$BOOT_JDK_FOUND" = xmaybe; then - # Do we have a bin/java? - if test ! -x "$BOOT_JDK/bin/java"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 -$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} - BOOT_JDK_FOUND=no - else - # Do we have a bin/javac? - if test ! -x "$BOOT_JDK/bin/javac"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 -$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 -$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} - BOOT_JDK_FOUND=no - else - # Do we have an rt.jar? (On MacOSX it is called classes.jar) - if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 -$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} - BOOT_JDK_FOUND=no - else - # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` - - # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 -$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -12453,12 +21450,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -12668,12 +21665,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -12848,12 +21845,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13056,12 +22053,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13236,12 +22233,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13444,12 +22441,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13624,12 +22621,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13832,12 +22829,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14012,12 +23009,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14207,12 +23204,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14385,12 +23382,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14581,12 +23578,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14759,12 +23756,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14954,12 +23951,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15132,12 +24129,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15328,12 +24325,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15506,12 +24503,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15683,12 +24680,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15857,8 +24854,6 @@ $as_echo "$BOOT_JDK_VERSION" >&6; } pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -15891,104 +24886,768 @@ $as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >& # Setup tools from the Boot JDK. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JAVA" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 $as_echo_n "checking for java in Boot JDK... " >&6; } - JAVA=$BOOT_JDK/bin/java - if test ! -x $JAVA; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + JAVA=$BOOT_JDK/bin/java + if test ! -x $JAVA; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JAVA! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JAVA!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJAVA" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JAVA from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JAVA from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 +$as_echo_n "checking for java in Boot JDK... " >&6; } + JAVA=$BOOT_JDK/bin/java + if test ! -x $JAVA; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JAVA" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JAVA=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JAVA=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JAVA+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JAVA in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVA="$JAVA" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVA=$ac_cv_path_JAVA +if test -n "$JAVA"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 +$as_echo "$JAVA" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVA" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JAVA=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JAVA=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAVA" >&5 +$as_echo_n "checking for JAVA... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JAVA=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JAVAC" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 $as_echo_n "checking for javac in Boot JDK... " >&6; } - JAVAC=$BOOT_JDK/bin/javac - if test ! -x $JAVAC; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + JAVAC=$BOOT_JDK/bin/javac + if test ! -x $JAVAC; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JAVAC! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JAVAC!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJAVAC" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JAVAC from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JAVAC from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 +$as_echo_n "checking for javac in Boot JDK... " >&6; } + JAVAC=$BOOT_JDK/bin/javac + if test ! -x $JAVAC; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JAVAC" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JAVAC=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JAVAC=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JAVAC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JAVAC in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVAC="$JAVAC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JAVAC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVAC=$ac_cv_path_JAVAC +if test -n "$JAVAC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 +$as_echo "$JAVAC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVAC" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JAVAC=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JAVAC=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAVAC" >&5 +$as_echo_n "checking for JAVAC... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JAVAC=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JAVAH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 $as_echo_n "checking for javah in Boot JDK... " >&6; } - JAVAH=$BOOT_JDK/bin/javah - if test ! -x $JAVAH; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + JAVAH=$BOOT_JDK/bin/javah + if test ! -x $JAVAH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javap in Boot JDK" >&5 -$as_echo_n "checking for javap in Boot JDK... " >&6; } - JAVAP=$BOOT_JDK/bin/javap - if test ! -x $JAVAP; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JAVAH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JAVAH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJAVAH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JAVAH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JAVAH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 +$as_echo_n "checking for javah in Boot JDK... " >&6; } + JAVAH=$BOOT_JDK/bin/javah + if test ! -x $JAVAH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find javap in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JAVAH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JAVAH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JAVAH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JAVAH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JAVAH in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVAH="$JAVAH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JAVAH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVAH=$ac_cv_path_JAVAH +if test -n "$JAVAH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAH" >&5 +$as_echo "$JAVAH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVAH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JAVAH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JAVAH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAVAH" >&5 +$as_echo_n "checking for JAVAH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JAVAH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JAR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 $as_echo_n "checking for jar in Boot JDK... " >&6; } - JAR=$BOOT_JDK/bin/jar - if test ! -x $JAR; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + JAR=$BOOT_JDK/bin/jar + if test ! -x $JAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5 -$as_echo_n "checking for rmic in Boot JDK... " >&6; } - RMIC=$BOOT_JDK/bin/rmic - if test ! -x $RMIC; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JAR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JAR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJAR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JAR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JAR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 +$as_echo_n "checking for jar in Boot JDK... " >&6; } + JAR=$BOOT_JDK/bin/jar + if test ! -x $JAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find rmic in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JAR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JAR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JAR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAR="$JAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAR=$ac_cv_path_JAR +if test -n "$JAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5 +$as_echo "$JAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JAR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JAR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAR" >&5 +$as_echo_n "checking for JAR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JAR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$NATIVE2ASCII" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 $as_echo_n "checking for native2ascii in Boot JDK... " >&6; } - NATIVE2ASCII=$BOOT_JDK/bin/native2ascii - if test ! -x $NATIVE2ASCII; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + NATIVE2ASCII=$BOOT_JDK/bin/native2ascii + if test ! -x $NATIVE2ASCII; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find native2ascii in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find native2ascii in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NATIVE2ASCII! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NATIVE2ASCII!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNATIVE2ASCII" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NATIVE2ASCII from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NATIVE2ASCII from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 +$as_echo_n "checking for native2ascii in Boot JDK... " >&6; } + NATIVE2ASCII=$BOOT_JDK/bin/native2ascii + if test ! -x $NATIVE2ASCII; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find native2ascii in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$NATIVE2ASCII" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NATIVE2ASCII=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NATIVE2ASCII=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NATIVE2ASCII+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NATIVE2ASCII in + [\\/]* | ?:[\\/]*) + ac_cv_path_NATIVE2ASCII="$NATIVE2ASCII" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NATIVE2ASCII="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NATIVE2ASCII=$ac_cv_path_NATIVE2ASCII +if test -n "$NATIVE2ASCII"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NATIVE2ASCII" >&5 +$as_echo "$NATIVE2ASCII" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NATIVE2ASCII" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NATIVE2ASCII=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NATIVE2ASCII=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NATIVE2ASCII" >&5 +$as_echo_n "checking for NATIVE2ASCII... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NATIVE2ASCII=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JARSIGNER" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jarsigner in Boot JDK" >&5 +$as_echo_n "checking for jarsigner in Boot JDK... " >&6; } + JARSIGNER=$BOOT_JDK/bin/jarsigner + if test ! -x $JARSIGNER; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find jarsigner in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JARSIGNER! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JARSIGNER!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJARSIGNER" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JARSIGNER from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JARSIGNER from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jarsigner in Boot JDK" >&5 +$as_echo_n "checking for jarsigner in Boot JDK... " >&6; } + JARSIGNER=$BOOT_JDK/bin/jarsigner + if test ! -x $JARSIGNER; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find jarsigner in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JARSIGNER" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JARSIGNER=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JARSIGNER=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JARSIGNER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JARSIGNER in + [\\/]* | ?:[\\/]*) + ac_cv_path_JARSIGNER="$JARSIGNER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JARSIGNER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JARSIGNER=$ac_cv_path_JARSIGNER +if test -n "$JARSIGNER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JARSIGNER" >&5 +$as_echo "$JARSIGNER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JARSIGNER" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JARSIGNER=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JARSIGNER=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JARSIGNER" >&5 +$as_echo_n "checking for JARSIGNER... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JARSIGNER=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + # Finally, set some other options... # When compiling code to be executed by the Boot JDK, force jdk7 compatibility. @@ -16037,7 +25696,7 @@ fi JVM_ARG_OK=false fi - if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + if test "x$OPENJDK_TARGET_OS" = "xmacosx" || test "x$OPENJDK_TARGET_CPU" = "xppc64" ; then # Why does macosx need more heap? Its the huge JDK batch. $ECHO "Check if jvm arg is ok: -Xmx1600M" >&5 @@ -16621,7 +26280,14 @@ $as_echo "$JTREGEXE" >&6; } else # try to find jtreg on path - for ac_prog in jtreg + + + # Publish this variable in the help. + + + if test "x$JTREGEXE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in jtreg do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -16666,16 +26332,143 @@ fi test -n "$JTREGEXE" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JTREGEXE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JTREGEXE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJTREGEXE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JTREGEXE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JTREGEXE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in jtreg +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JTREGEXE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JTREGEXE in + [\\/]* | ?:[\\/]*) + ac_cv_path_JTREGEXE="$JTREGEXE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JTREGEXE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JTREGEXE=$ac_cv_path_JTREGEXE +if test -n "$JTREGEXE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JTREGEXE" >&5 +$as_echo "$JTREGEXE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$JTREGEXE" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JTREGEXE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JTREGEXE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JTREGEXE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JTREGEXE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JTREGEXE in + [\\/]* | ?:[\\/]*) + ac_cv_path_JTREGEXE="$JTREGEXE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JTREGEXE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JTREGEXE=$ac_cv_path_JTREGEXE +if test -n "$JTREGEXE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JTREGEXE" >&5 +$as_echo "$JTREGEXE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JTREGEXE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JTREGEXE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JTREGEXE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JTREGEXE" >&5 +$as_echo_n "checking for JTREGEXE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JTREGEXE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$JTREGEXE" = x; then - if test "xjtreg" = x; then - PROG_NAME=jtregexe - else - PROG_NAME=jtreg - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 + as_fn_error $? "Could not find required tool for JTREGEXE" "$LINENO" 5 fi @@ -17964,6 +27757,13 @@ fi # otherwise we might pick up cross-compilers which don't use standard naming. # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have # to wait until they are properly discovered. + + + # Publish this variable in the help. + + + if test "x$BUILD_CC" = x; then + # The variable is not set by user, try to locate tool using the code snippet for ac_prog in cl cc gcc do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -18009,6 +27809,140 @@ fi test -n "$BUILD_CC" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BUILD_CC! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BUILD_CC!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBUILD_CC" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BUILD_CC from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BUILD_CC from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cl cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_CC="$BUILD_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_CC=$ac_cv_path_BUILD_CC +if test -n "$BUILD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5 +$as_echo "$BUILD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_CC" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BUILD_CC" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BUILD_CC=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BUILD_CC=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_CC="$BUILD_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_CC=$ac_cv_path_BUILD_CC +if test -n "$BUILD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5 +$as_echo "$BUILD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BUILD_CC" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BUILD_CC=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BUILD_CC=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_CC" >&5 +$as_echo_n "checking for BUILD_CC... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BUILD_CC=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -18275,6 +28209,13 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting BUILD_CC to \"$new_complete\"" >&6;} fi + + + # Publish this variable in the help. + + + if test "x$BUILD_CXX" = x; then + # The variable is not set by user, try to locate tool using the code snippet for ac_prog in cl CC g++ do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -18320,6 +28261,140 @@ fi test -n "$BUILD_CXX" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BUILD_CXX! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BUILD_CXX!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBUILD_CXX" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BUILD_CXX from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BUILD_CXX from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cl CC g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_CXX="$BUILD_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_CXX=$ac_cv_path_BUILD_CXX +if test -n "$BUILD_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CXX" >&5 +$as_echo "$BUILD_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_CXX" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BUILD_CXX" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BUILD_CXX=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BUILD_CXX=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_CXX="$BUILD_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_CXX=$ac_cv_path_BUILD_CXX +if test -n "$BUILD_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CXX" >&5 +$as_echo "$BUILD_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BUILD_CXX" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BUILD_CXX=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BUILD_CXX=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_CXX" >&5 +$as_echo_n "checking for BUILD_CXX... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BUILD_CXX=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -18586,8 +28661,17 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting BUILD_CXX to \"$new_complete\"" >&6;} fi - # Extract the first word of "ld", so it can be a program name with args. -set dummy ld; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$BUILD_LD" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ld +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_BUILD_LD+:} false; then : @@ -18626,6 +28710,143 @@ $as_echo "no" >&6; } fi + test -n "$BUILD_LD" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BUILD_LD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BUILD_LD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBUILD_LD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BUILD_LD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BUILD_LD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ld +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_LD in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_LD="$BUILD_LD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_LD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_LD=$ac_cv_path_BUILD_LD +if test -n "$BUILD_LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_LD" >&5 +$as_echo "$BUILD_LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_LD" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BUILD_LD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BUILD_LD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BUILD_LD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_LD in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_LD="$BUILD_LD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_LD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_LD=$ac_cv_path_BUILD_LD +if test -n "$BUILD_LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_LD" >&5 +$as_echo "$BUILD_LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BUILD_LD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BUILD_LD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BUILD_LD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_LD" >&5 +$as_echo_n "checking for BUILD_LD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BUILD_LD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -19073,78 +29294,29 @@ $as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_serve # On Solaris, cc is preferred to gcc. # Elsewhere, gcc is preferred to cc. - if test "x$CC" != x; then - COMPILER_CHECK_LIST="$CC" - elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then COMPILER_CHECK_LIST="cl" elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then COMPILER_CHECK_LIST="cc gcc" + elif test "x$OPENJDK_TARGET_OS" = "xaix"; then + # Do not probe for cc on AIX. + COMPILER_CHECK_LIST="xlc_r" else COMPILER_CHECK_LIST="gcc cc" fi COMPILER_NAME=C + SEARCH_LIST="$COMPILER_CHECK_LIST" - CC= - # If TOOLS_DIR is set, check for all compiler names in there first - # before checking the rest of the PATH. - if test -n "$TOOLS_DIR"; then - PATH_save="$PATH" - PATH="$TOOLS_DIR" - for ac_prog in $COMPILER_CHECK_LIST -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_TOOLS_DIR_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $TOOLS_DIR_CC in - [\\/]* | ?:[\\/]*) - ac_cv_path_TOOLS_DIR_CC="$TOOLS_DIR_CC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_TOOLS_DIR_CC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + if test "x$CC" != x; then + # User has supplied compiler name already, always let that override. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied compiler CC=$CC" >&5 +$as_echo "$as_me: Will use user supplied compiler CC=$CC" >&6;} + if test "x`basename $CC`" = "x$CC"; then + # A command without a complete path is provided, search $PATH. - ;; -esac -fi -TOOLS_DIR_CC=$ac_cv_path_TOOLS_DIR_CC -if test -n "$TOOLS_DIR_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOOLS_DIR_CC" >&5 -$as_echo "$TOOLS_DIR_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$TOOLS_DIR_CC" && break -done - - CC=$TOOLS_DIR_CC - PATH="$PATH_save" - fi - - # AC_PATH_PROGS can't be run multiple times with the same variable, - # so create a new name for this run. - if test "x$CC" = x; then - for ac_prog in $COMPILER_CHECK_LIST + for ac_prog in $CC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -19189,10 +29361,126 @@ fi test -n "$POTENTIAL_CC" && break done - CC=$POTENTIAL_CC + if test "x$POTENTIAL_CC" != x; then + CC=$POTENTIAL_CC + else + as_fn_error $? "User supplied compiler CC=$CC could not be found" "$LINENO" 5 + fi + else + # Otherwise it might already be a complete path + if test ! -x "$CC"; then + as_fn_error $? "User supplied compiler CC=$CC does not exist" "$LINENO" 5 + fi + fi + else + # No user supplied value. Locate compiler ourselves + CC= + # If TOOLS_DIR is set, check for all compiler names in there first + # before checking the rest of the PATH. + if test -n "$TOOLS_DIR"; then + PATH_save="$PATH" + PATH="$TOOLS_DIR" + for ac_prog in $SEARCH_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TOOLS_DIR_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TOOLS_DIR_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOOLS_DIR_CC="$TOOLS_DIR_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TOOLS_DIR_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS - if test "x$CC" = x; then + ;; +esac +fi +TOOLS_DIR_CC=$ac_cv_path_TOOLS_DIR_CC +if test -n "$TOOLS_DIR_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOOLS_DIR_CC" >&5 +$as_echo "$TOOLS_DIR_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TOOLS_DIR_CC" && break +done + + CC=$TOOLS_DIR_CC + PATH="$PATH_save" + fi + + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + if test "x$CC" = x; then + for ac_prog in $SEARCH_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_POTENTIAL_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $POTENTIAL_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_POTENTIAL_CC="$POTENTIAL_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_POTENTIAL_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POTENTIAL_CC=$ac_cv_path_POTENTIAL_CC +if test -n "$POTENTIAL_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POTENTIAL_CC" >&5 +$as_echo "$POTENTIAL_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$POTENTIAL_CC" && break +done + + CC=$POTENTIAL_CC + fi + + if test "x$CC" = x; then # Print a helpful message on how to acquire the necessary build dependency. # devkit is the help tag: freetype, cups, pulse, alsa etc @@ -19216,8 +29504,6 @@ done pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -19225,9 +29511,12 @@ done fi fi - as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + fi fi + # Now we have a compiler binary in CC. Make sure it's okay. + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then # First separate the path from the arguments. This will split at the first @@ -19493,9 +29782,12 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting CC to \"$new_complete\"" >&6;} fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CC" >&5 -$as_echo_n "checking resolved symbolic links for CC... " >&6; } TEST_COMPILER="$CC" + # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links + # to 'xlc' but it is crucial that we invoke the compiler with the right name! + if test "x$OPENJDK_BUILD_OS" != xaix; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CC" >&5 +$as_echo_n "checking resolved symbolic links for CC... " >&6; } if test "x$OPENJDK_BUILD_OS" != xwindows; then # Follow a chain of symbolic links. Use readlink @@ -19544,8 +29836,9 @@ $as_echo_n "checking resolved symbolic links for CC... " >&6; } fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 $as_echo "$TEST_COMPILER" >&6; } + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CC is disguised ccache" >&5 $as_echo_n "checking if CC is disguised ccache... " >&6; } @@ -20009,6 +30302,15 @@ $as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_TEST\ COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/p"` COMPILER_VENDOR="Sun Studio" fi + elif test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_VERSION_TEST=`$COMPILER -qversion 2>&1 | $TAIL -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null + if test $? -ne 0; then + as_fn_error $? "Failed to detect the compiler version of $COMPILER ...." "$LINENO" 5 + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \(0-90-9\.0-90-9*\).*/\1/p'` + COMPILER_VENDOR='IBM' + fi elif test "x$OPENJDK_TARGET_OS" = xwindows; then # First line typically looks something like: # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 @@ -20650,80 +30952,39 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + # Option used to tell the compiler whether to create 32- or 64-bit executables + # Notice that CC contains the full compiler path at this point. + case $CC in + *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";; + *) COMPILER_TARGET_BITS_FLAG="-m";; + esac + + ### Locate C++ compiler (CXX) - if test "x$CXX" != x; then - COMPILER_CHECK_LIST="$CXX" - elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then COMPILER_CHECK_LIST="cl" elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then COMPILER_CHECK_LIST="CC g++" + elif test "x$OPENJDK_TARGET_OS" = "xaix"; then + # Do not probe for CC on AIX . + COMPILER_CHECK_LIST="xlC_r" else COMPILER_CHECK_LIST="g++ CC" fi COMPILER_NAME=C++ + SEARCH_LIST="$COMPILER_CHECK_LIST" - CXX= - # If TOOLS_DIR is set, check for all compiler names in there first - # before checking the rest of the PATH. - if test -n "$TOOLS_DIR"; then - PATH_save="$PATH" - PATH="$TOOLS_DIR" - for ac_prog in $COMPILER_CHECK_LIST -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_TOOLS_DIR_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $TOOLS_DIR_CXX in - [\\/]* | ?:[\\/]*) - ac_cv_path_TOOLS_DIR_CXX="$TOOLS_DIR_CXX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_TOOLS_DIR_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + if test "x$CXX" != x; then + # User has supplied compiler name already, always let that override. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied compiler CXX=$CXX" >&5 +$as_echo "$as_me: Will use user supplied compiler CXX=$CXX" >&6;} + if test "x`basename $CXX`" = "x$CXX"; then + # A command without a complete path is provided, search $PATH. - ;; -esac -fi -TOOLS_DIR_CXX=$ac_cv_path_TOOLS_DIR_CXX -if test -n "$TOOLS_DIR_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOOLS_DIR_CXX" >&5 -$as_echo "$TOOLS_DIR_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$TOOLS_DIR_CXX" && break -done - - CXX=$TOOLS_DIR_CXX - PATH="$PATH_save" - fi - - # AC_PATH_PROGS can't be run multiple times with the same variable, - # so create a new name for this run. - if test "x$CXX" = x; then - for ac_prog in $COMPILER_CHECK_LIST + for ac_prog in $CXX do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -20768,10 +31029,126 @@ fi test -n "$POTENTIAL_CXX" && break done - CXX=$POTENTIAL_CXX + if test "x$POTENTIAL_CXX" != x; then + CXX=$POTENTIAL_CXX + else + as_fn_error $? "User supplied compiler CXX=$CXX could not be found" "$LINENO" 5 + fi + else + # Otherwise it might already be a complete path + if test ! -x "$CXX"; then + as_fn_error $? "User supplied compiler CXX=$CXX does not exist" "$LINENO" 5 + fi + fi + else + # No user supplied value. Locate compiler ourselves + CXX= + # If TOOLS_DIR is set, check for all compiler names in there first + # before checking the rest of the PATH. + if test -n "$TOOLS_DIR"; then + PATH_save="$PATH" + PATH="$TOOLS_DIR" + for ac_prog in $SEARCH_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TOOLS_DIR_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TOOLS_DIR_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOOLS_DIR_CXX="$TOOLS_DIR_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TOOLS_DIR_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS - if test "x$CXX" = x; then + ;; +esac +fi +TOOLS_DIR_CXX=$ac_cv_path_TOOLS_DIR_CXX +if test -n "$TOOLS_DIR_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOOLS_DIR_CXX" >&5 +$as_echo "$TOOLS_DIR_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TOOLS_DIR_CXX" && break +done + + CXX=$TOOLS_DIR_CXX + PATH="$PATH_save" + fi + + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + if test "x$CXX" = x; then + for ac_prog in $SEARCH_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_POTENTIAL_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $POTENTIAL_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_POTENTIAL_CXX="$POTENTIAL_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_POTENTIAL_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POTENTIAL_CXX=$ac_cv_path_POTENTIAL_CXX +if test -n "$POTENTIAL_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POTENTIAL_CXX" >&5 +$as_echo "$POTENTIAL_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$POTENTIAL_CXX" && break +done + + CXX=$POTENTIAL_CXX + fi + + if test "x$CXX" = x; then # Print a helpful message on how to acquire the necessary build dependency. # devkit is the help tag: freetype, cups, pulse, alsa etc @@ -20795,8 +31172,6 @@ done pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -20804,9 +31179,12 @@ done fi fi - as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + fi fi + # Now we have a compiler binary in CXX. Make sure it's okay. + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then # First separate the path from the arguments. This will split at the first @@ -21072,9 +31450,12 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting CXX to \"$new_complete\"" >&6;} fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CXX" >&5 -$as_echo_n "checking resolved symbolic links for CXX... " >&6; } TEST_COMPILER="$CXX" + # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links + # to 'xlc' but it is crucial that we invoke the compiler with the right name! + if test "x$OPENJDK_BUILD_OS" != xaix; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CXX" >&5 +$as_echo_n "checking resolved symbolic links for CXX... " >&6; } if test "x$OPENJDK_BUILD_OS" != xwindows; then # Follow a chain of symbolic links. Use readlink @@ -21123,8 +31504,9 @@ $as_echo_n "checking resolved symbolic links for CXX... " >&6; } fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 $as_echo "$TEST_COMPILER" >&6; } + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CXX is disguised ccache" >&5 $as_echo_n "checking if CXX is disguised ccache... " >&6; } @@ -21588,6 +31970,15 @@ $as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_TEST\ COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/p"` COMPILER_VENDOR="Sun Studio" fi + elif test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_VERSION_TEST=`$COMPILER -qversion 2>&1 | $TAIL -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null + if test $? -ne 0; then + as_fn_error $? "Failed to detect the compiler version of $COMPILER ...." "$LINENO" 5 + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \(0-90-9\.0-90-9*\).*/\1/p'` + COMPILER_VENDOR='IBM' + fi elif test "x$OPENJDK_TARGET_OS" = xwindows; then # First line typically looks something like: # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 @@ -22432,9 +32823,18 @@ $as_echo "$as_me: Rewriting OBJC to \"$new_complete\"" >&6;} if test "x$OPENJDK_TARGET_OS" != xwindows; then + + + # Publish this variable in the help. + + + if test "x$AR" = x; then + # The variable is not set by user, try to locate tool using the code snippet if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : @@ -22450,7 +32850,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -22470,11 +32870,15 @@ $as_echo "no" >&6; } fi + test -n "$AR" && break + done fi -if test -z "$ac_cv_prog_AR"; then +if test -z "$AR"; then ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : @@ -22490,7 +32894,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" + ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -22509,6 +32913,10 @@ else $as_echo "no" >&6; } fi + + test -n "$ac_ct_AR" && break +done + if test "x$ac_ct_AR" = x; then AR="" else @@ -22520,10 +32928,197 @@ ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi -else - AR="$ac_cv_prog_AR" fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !AR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!AR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xAR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of AR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of AR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$AR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool AR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool AR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AR in + [\\/]* | ?:[\\/]*) + ac_cv_path_AR="$AR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AR=$ac_cv_path_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$AR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool AR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool AR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AR" >&5 +$as_echo_n "checking for AR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool AR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -22793,6 +33388,8 @@ $as_echo "$as_me: Rewriting AR to \"$new_complete\"" >&6;} fi if test "x$OPENJDK_TARGET_OS" = xmacosx; then ARFLAGS="-r" + elif test "x$OPENJDK_TARGET_OS" = xaix; then + ARFLAGS="-X64" else ARFLAGS="" fi @@ -25310,8 +35907,17 @@ $as_echo "$as_me: Rewriting CXXCPP to \"$new_complete\"" >&6;} # Find the right assembler. if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$AS" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in as +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_AS+:} false; then : @@ -25350,6 +35956,143 @@ $as_echo "no" >&6; } fi + test -n "$AS" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !AS! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!AS!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xAS" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of AS from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of AS from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in as +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AS in + [\\/]* | ?:[\\/]*) + ac_cv_path_AS="$AS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AS=$ac_cv_path_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AS" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$AS" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool AS=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool AS=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AS in + [\\/]* | ?:[\\/]*) + ac_cv_path_AS="$AS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AS=$ac_cv_path_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$AS" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool AS=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool AS=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AS" >&5 +$as_echo_n "checking for AS... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool AS=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -25622,8 +36365,17 @@ $as_echo "$as_me: Rewriting AS to \"$new_complete\"" >&6;} if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$NM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_NM+:} false; then : @@ -25662,6 +36414,143 @@ $as_echo "no" >&6; } fi + test -n "$NM" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NM" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$NM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NM" >&5 +$as_echo_n "checking for NM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -25928,8 +36817,17 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting NM to \"$new_complete\"" >&6;} fi - # Extract the first word of "gnm", so it can be a program name with args. -set dummy gnm; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$GNM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in gnm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GNM+:} false; then : @@ -25968,6 +36866,143 @@ $as_echo "no" >&6; } fi + test -n "$GNM" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !GNM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!GNM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xGNM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of GNM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of GNM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in gnm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GNM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GNM in + [\\/]* | ?:[\\/]*) + ac_cv_path_GNM="$GNM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GNM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GNM=$ac_cv_path_GNM +if test -n "$GNM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNM" >&5 +$as_echo "$GNM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GNM" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$GNM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool GNM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool GNM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GNM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GNM in + [\\/]* | ?:[\\/]*) + ac_cv_path_GNM="$GNM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GNM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GNM=$ac_cv_path_GNM +if test -n "$GNM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNM" >&5 +$as_echo "$GNM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$GNM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool GNM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool GNM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNM" >&5 +$as_echo_n "checking for GNM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool GNM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -26234,8 +37269,17 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting GNM to \"$new_complete\"" >&6;} fi - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$STRIP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in strip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_STRIP+:} false; then : @@ -26274,6 +37318,143 @@ $as_echo "no" >&6; } fi + test -n "$STRIP" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !STRIP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!STRIP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSTRIP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of STRIP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of STRIP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in strip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$STRIP" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$STRIP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool STRIP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool STRIP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$STRIP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool STRIP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool STRIP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for STRIP" >&5 +$as_echo_n "checking for STRIP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool STRIP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -26540,8 +37721,17 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting STRIP to \"$new_complete\"" >&6;} fi - # Extract the first word of "mcs", so it can be a program name with args. -set dummy mcs; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$MCS" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in mcs +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MCS+:} false; then : @@ -26580,6 +37770,143 @@ $as_echo "no" >&6; } fi + test -n "$MCS" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !MCS! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!MCS!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xMCS" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of MCS from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of MCS from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in mcs +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MCS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MCS in + [\\/]* | ?:[\\/]*) + ac_cv_path_MCS="$MCS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MCS=$ac_cv_path_MCS +if test -n "$MCS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 +$as_echo "$MCS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MCS" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$MCS" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool MCS=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool MCS=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MCS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MCS in + [\\/]* | ?:[\\/]*) + ac_cv_path_MCS="$MCS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MCS=$ac_cv_path_MCS +if test -n "$MCS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 +$as_echo "$MCS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$MCS" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool MCS=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool MCS=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MCS" >&5 +$as_echo_n "checking for MCS... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool MCS=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -26847,9 +38174,18 @@ $as_echo "$as_me: Rewriting MCS to \"$new_complete\"" >&6;} fi elif test "x$OPENJDK_TARGET_OS" != xwindows; then + + + # Publish this variable in the help. + + + if test "x$NM" = x; then + # The variable is not set by user, try to locate tool using the code snippet if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. -set dummy ${ac_tool_prefix}nm; ac_word=$2 + for ac_prog in nm + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NM+:} false; then : @@ -26865,7 +38201,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_NM="${ac_tool_prefix}nm" + ac_cv_prog_NM="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -26885,11 +38221,15 @@ $as_echo "no" >&6; } fi + test -n "$NM" && break + done fi -if test -z "$ac_cv_prog_NM"; then +if test -z "$NM"; then ac_ct_NM=$NM - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NM+:} false; then : @@ -26905,7 +38245,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_NM="nm" + ac_cv_prog_ac_ct_NM="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -26924,6 +38264,10 @@ else $as_echo "no" >&6; } fi + + test -n "$ac_ct_NM" && break +done + if test "x$ac_ct_NM" = x; then NM="" else @@ -26935,10 +38279,197 @@ ac_tool_warned=yes ;; esac NM=$ac_ct_NM fi -else - NM="$ac_cv_prog_NM" fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in nm + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + ac_cv_prog_NM="$NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NM="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NM=$ac_cv_prog_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NM" && break + done +fi +if test -z "$NM"; then + ac_ct_NM=$NM + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NM"; then + ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NM="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NM=$ac_cv_prog_ac_ct_NM +if test -n "$ac_ct_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 +$as_echo "$ac_ct_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_NM" && break +done + + if test "x$ac_ct_NM" = x; then + NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NM=$ac_ct_NM + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$NM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NM" >&5 +$as_echo_n "checking for NM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -27207,9 +38738,18 @@ $as_echo "$as_me: Rewriting NM to \"$new_complete\"" >&6;} GNM="$NM" + + + # Publish this variable in the help. + + + if test "x$STRIP" = x; then + # The variable is not set by user, try to locate tool using the code snippet if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 + for ac_prog in strip + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : @@ -27225,7 +38765,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" + ac_cv_prog_STRIP="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -27245,11 +38785,15 @@ $as_echo "no" >&6; } fi + test -n "$STRIP" && break + done fi -if test -z "$ac_cv_prog_STRIP"; then +if test -z "$STRIP"; then ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 + for ac_prog in strip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : @@ -27265,7 +38809,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" + ac_cv_prog_ac_ct_STRIP="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -27284,6 +38828,10 @@ else $as_echo "no" >&6; } fi + + test -n "$ac_ct_STRIP" && break +done + if test "x$ac_ct_STRIP" = x; then STRIP="" else @@ -27295,10 +38843,197 @@ ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi -else - STRIP="$ac_cv_prog_STRIP" fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !STRIP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!STRIP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSTRIP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of STRIP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of STRIP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in strip + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$STRIP" && break + done +fi +if test -z "$STRIP"; then + ac_ct_STRIP=$STRIP + for ac_prog in strip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_STRIP" && break +done + + if test "x$ac_ct_STRIP" = x; then + STRIP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$STRIP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool STRIP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool STRIP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$STRIP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool STRIP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool STRIP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for STRIP" >&5 +$as_echo_n "checking for STRIP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool STRIP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -27570,6 +39305,13 @@ $as_echo "$as_me: Rewriting STRIP to \"$new_complete\"" >&6;} # objcopy is used for moving debug symbols to separate files when # full debug symbols are enabled. if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then + + + # Publish this variable in the help. + + + if test "x$OBJCOPY" = x; then + # The variable is not set by user, try to locate tool using the code snippet if test -n "$ac_tool_prefix"; then for ac_prog in gobjcopy objcopy do @@ -27670,6 +39412,195 @@ esac fi fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !OBJCOPY! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!OBJCOPY!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xOBJCOPY" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of OBJCOPY from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of OBJCOPY from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in gobjcopy objcopy + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJCOPY"; then + ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJCOPY="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJCOPY=$ac_cv_prog_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJCOPY" && break + done +fi +if test -z "$OBJCOPY"; then + ac_ct_OBJCOPY=$OBJCOPY + for ac_prog in gobjcopy objcopy +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJCOPY"; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY +if test -n "$ac_ct_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5 +$as_echo "$ac_ct_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJCOPY" && break +done + + if test "x$ac_ct_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_ct_OBJCOPY + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$OBJCOPY" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool OBJCOPY=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool OBJCOPY=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJCOPY=$ac_cv_path_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$OBJCOPY" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool OBJCOPY=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool OBJCOPY=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OBJCOPY" >&5 +$as_echo_n "checking for OBJCOPY... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool OBJCOPY=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + # Only call fixup if objcopy was found. if test -n "$OBJCOPY"; then @@ -27941,7 +39872,14 @@ $as_echo "$as_me: Rewriting OBJCOPY to \"$new_complete\"" >&6;} fi fi - if test -n "$ac_tool_prefix"; then + + + # Publish this variable in the help. + + + if test "x$OBJDUMP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then for ac_prog in gobjdump objdump do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. @@ -28041,6 +39979,195 @@ esac fi fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !OBJDUMP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!OBJDUMP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xOBJDUMP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of OBJDUMP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of OBJDUMP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in gobjdump objdump + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJDUMP" && break + done +fi +if test -z "$OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + for ac_prog in gobjdump objdump +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJDUMP" && break +done + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$OBJDUMP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool OBJDUMP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool OBJDUMP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJDUMP="$OBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJDUMP=$ac_cv_path_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$OBJDUMP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool OBJDUMP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool OBJDUMP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OBJDUMP" >&5 +$as_echo_n "checking for OBJDUMP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool OBJDUMP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OBJDUMP" != x; then # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. @@ -28312,8 +40439,17 @@ $as_echo "$as_me: Rewriting OBJDUMP to \"$new_complete\"" >&6;} fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$LIPO" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in lipo +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LIPO+:} false; then : @@ -28352,6 +40488,143 @@ $as_echo "no" >&6; } fi + test -n "$LIPO" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !LIPO! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!LIPO!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xLIPO" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of LIPO from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of LIPO from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in lipo +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIPO in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIPO="$LIPO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LIPO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LIPO=$ac_cv_path_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LIPO" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$LIPO" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool LIPO=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool LIPO=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIPO in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIPO="$LIPO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LIPO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LIPO=$ac_cv_path_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LIPO" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool LIPO=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool LIPO=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIPO" >&5 +$as_echo_n "checking for LIPO... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool LIPO=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -28768,16 +41041,17 @@ done # is made at runtime.) # - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Always specify -m flags on Solaris + if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xaix; then + # Always specify -m flag on Solaris + # And -q on AIX because otherwise the compiler produces 32-bit objects by default # When we add flags to the "official" CFLAGS etc, we need to # keep track of these additions in ADDED_CFLAGS etc. These # will later be checked to make sure only controlled additions # have been made to CFLAGS etc. - ADDED_CFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_CXXFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_LDFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" + ADDED_CFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_CXXFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_LDFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" CFLAGS="${CFLAGS}${ADDED_CFLAGS}" CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" @@ -28795,9 +41069,9 @@ done # keep track of these additions in ADDED_CFLAGS etc. These # will later be checked to make sure only controlled additions # have been made to CFLAGS etc. - ADDED_CFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_CXXFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_LDFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" + ADDED_CFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_CXXFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_LDFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" CFLAGS="${CFLAGS}${ADDED_CFLAGS}" CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" @@ -28871,20 +41145,85 @@ _ACEOF - if test "x$SIZEOF_INT_P" != "x$ac_cv_sizeof_int_p"; then - # Workaround autoconf bug, see http://lists.gnu.org/archive/html/autoconf/2010-07/msg00004.html - SIZEOF_INT_P="$ac_cv_sizeof_int_p" - fi - - if test "x$SIZEOF_INT_P" = x; then + # AC_CHECK_SIZEOF defines 'ac_cv_sizeof_int_p' to hold the number of bytes used by an 'int*' + if test "x$ac_cv_sizeof_int_p" = x; then # The test failed, lets stick to the assumed value. { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The number of bits in the target could not be determined, using $OPENJDK_TARGET_CPU_BITS." >&5 $as_echo "$as_me: WARNING: The number of bits in the target could not be determined, using $OPENJDK_TARGET_CPU_BITS." >&2;} else - TESTED_TARGET_CPU_BITS=`expr 8 \* $SIZEOF_INT_P` + TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then - as_fn_error $? "The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" "$LINENO" 5 + # This situation may happen on 64-bit platforms where the compiler by default only generates 32-bit objects + # Let's try to implicitely set the compilers target architecture and retry the test + { $as_echo "$as_me:${as_lineno-$LINENO}: The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)." >&5 +$as_echo "$as_me: The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" >&5 +$as_echo "$as_me: I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" >&6;} + + # When we add flags to the "official" CFLAGS etc, we need to + # keep track of these additions in ADDED_CFLAGS etc. These + # will later be checked to make sure only controlled additions + # have been made to CFLAGS etc. + ADDED_CFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_CXXFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_LDFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + + + # We have to unset 'ac_cv_sizeof_int_p' first, otherwise AC_CHECK_SIZEOF will use the previously cached value! + unset ac_cv_sizeof_int_p + # And we have to undef the definition of SIZEOF_INT_P in confdefs.h by the previous invocation of AC_CHECK_SIZEOF + cat >>confdefs.h <<_ACEOF +#undef SIZEOF_INT_P +_ACEOF + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5 +$as_echo_n "checking size of int *... " >&6; } +if ${ac_cv_sizeof_int_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int *) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int_p=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5 +$as_echo "$ac_cv_sizeof_int_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT_P $ac_cv_sizeof_int_p +_ACEOF + + + + TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then + as_fn_error $? "The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" "$LINENO" 5 + fi fi fi @@ -29197,6 +41536,29 @@ $as_echo "$ac_cv_c_bigendian" >&6; } POST_STRIP_CMD="$STRIP -x" POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_NAME=xlc + PICFLAG="-qpic=large" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib$1.so' + STATIC_LIBRARY='lib$1.a' + SHARED_LIBRARY_FLAGS="-qmkshrobj" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='' + SET_EXECUTABLE_ORIGIN="" + CFLAGS_JDK="" + CXXFLAGS_JDK="" + CFLAGS_JDKLIB_EXTRA='' + POST_STRIP_CMD="$STRIP -X32_64" + POST_MCS_CMD="" + fi if test "x$OPENJDK_TARGET_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler COMPILER_NAME=cl @@ -29382,6 +41744,24 @@ rm -f core conftest.err conftest.$ac_objext \ CFLAGS_DEBUG_SYMBOLS="-g -xs" CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + ;; + xlc ) + C_FLAG_DEPS="-qmakedep=gcc -MF" + CXX_FLAG_DEPS="-qmakedep=gcc -MF" + C_O_FLAG_HIGHEST="-O3" + C_O_FLAG_HI="-O3 -qstrict" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-O3" + CXX_O_FLAG_HI="-O3 -qstrict" + CXX_O_FLAG_NORM="-O2" + CXX_O_FLAG_NONE="" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall" + CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" + ;; esac ;; CL ) @@ -29505,6 +41885,13 @@ fi LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext" LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" ;; + xlc ) + CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" + CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" + + LDFLAGS_JDK="$LDFLAGS_JDK" + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK" + ;; cl ) CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ @@ -29574,6 +41961,9 @@ fi if test "x$OPENJDK_TARGET_OS" = xsolaris; then CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64" + fi if test "x$OPENJDK_TARGET_OS" = xmacosx; then CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" # Setting these parameters makes it an error to link to macosx APIs that are @@ -29706,10 +42096,10 @@ fi # ZERO_ARCHFLAG tells the compiler which mode to build for case "${OPENJDK_TARGET_CPU}" in s390) - ZERO_ARCHFLAG="-m31" + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31" ;; *) - ZERO_ARCHFLAG="-m${OPENJDK_TARGET_CPU_BITS}" + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"$ZERO_ARCHFLAG\"" >&5 @@ -29778,15 +42168,15 @@ $as_echo "$supports" >&6; } - # Check that the compiler supports -mX flags + # Check that the compiler supports -mX (or -qX on AIX) flags # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"-m${OPENJDK_TARGET_CPU_BITS}\"" >&5 -$as_echo_n "checking if compiler supports \"-m${OPENJDK_TARGET_CPU_BITS}\"... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"" >&5 +$as_echo_n "checking if compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"... " >&6; } supports=yes saved_cflags="$CFLAGS" - CFLAGS="$CFLAGS -m${OPENJDK_TARGET_CPU_BITS}" + CFLAGS="$CFLAGS ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -29812,7 +42202,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CFLAGS="$saved_cflags" saved_cxxflags="$CXXFLAGS" - CXXFLAGS="$CXXFLAG -m${OPENJDK_TARGET_CPU_BITS}" + CXXFLAGS="$CXXFLAG ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -29848,6 +42238,27 @@ $as_echo "$supports" >&6; } + # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed in executable.' + USING_BROKEN_SUSE_LD=no + if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$GCC" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken SuSE 'ld' which only understands anonymous version tags in executables" >&5 +$as_echo_n "checking for broken SuSE 'ld' which only understands anonymous version tags in executables... " >&6; } + echo "SUNWprivate_1.1 { local: *; };" > version-script.map + echo "int main() { }" > main.c + if $CXX -Xlinker -version-script=version-script.map main.c 2>&5 >&5; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USING_BROKEN_SUSE_LD=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USING_BROKEN_SUSE_LD=yes + fi + rm -rf version-script.map main.c + fi + + + # Setup debug symbols (need objcopy from the toolchain for that) # @@ -30004,6 +42415,16 @@ $as_echo_n "checking what is not needed on Solaris?... " >&6; } $as_echo "alsa pulse" >&6; } fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on AIX?" >&5 +$as_echo_n "checking what is not needed on AIX?... " >&6; } + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 +$as_echo "alsa pulse" >&6; } + fi + + if test "x$OPENJDK_TARGET_OS" = xwindows; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5 $as_echo_n "checking what is not needed on Windows?... " >&6; } @@ -30814,8 +43235,6 @@ fi pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -30906,8 +43325,6 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -31168,8 +43585,6 @@ $as_echo "$CUPS_FOUND" >&6; } pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -33930,8 +46345,6 @@ $as_echo "$FREETYPE_LIB_PATH" >&6; } pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -34267,8 +46680,6 @@ $as_echo "$as_me: Using FREETYPE_CFLAGS=$FREETYPE_CFLAGS and FREETYPE_LIBS=$FREE pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -34620,8 +47031,6 @@ done pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -35424,6 +47833,9 @@ $as_echo_n "checking for number of cores... " >&6; } # Looks like a MacOSX system NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` FOUND_CORES=yes + elif test "x$OPENJDK_BUILD_OS" = xaix ; then + NUM_CORES=`/usr/sbin/prtconf | grep "^Number Of Processors" | awk '{ print $4 }'` + FOUND_CORES=yes elif test -n "$NUMBER_OF_PROCESSORS"; then # On windows, look in the env NUM_CORES=$NUMBER_OF_PROCESSORS @@ -35468,8 +47880,8 @@ $as_echo_n "checking for memory size... " >&6; } MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` FOUND_MEM=yes elif test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'` + # Looks like a Solaris or AIX system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [Ss]ize" | awk '{ print $3 }'` FOUND_MEM=yes elif test -x /usr/sbin/system_profiler; then # Looks like a MacOSX system @@ -35802,18 +48214,33 @@ $as_echo "yes" >&6; } # Check whether --enable-ccache was given. if test "${enable_ccache+set}" = set; then : - enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache} -else - ENABLE_CCACHE=yes + enableval=$enable_ccache; fi - if test "x$ENABLE_CCACHE" = xyes; then + + CCACHE= + { $as_echo "$as_me:${as_lineno-$LINENO}: checking is ccache enabled" >&5 +$as_echo_n "checking is ccache enabled... " >&6; } + ENABLE_CCACHE=$enable_ccache + if test "x$enable_ccache" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } OLD_PATH="$PATH" if test "x$TOOLS_DIR" != x; then PATH=$TOOLS_DIR:$PATH fi - # Extract the first word of "ccache", so it can be a program name with args. -set dummy ccache; ac_word=$2 + + + + # Publish this variable in the help. + + + if test "x$CCACHE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ccache +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CCACHE+:} false; then : @@ -35852,13 +48279,161 @@ $as_echo "no" >&6; } fi - PATH="$OLD_PATH" + test -n "$CCACHE" && break +done + else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5 -$as_echo_n "checking for ccache... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5 -$as_echo "explicitly disabled" >&6; } - CCACHE= + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CCACHE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CCACHE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCCACHE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CCACHE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CCACHE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ccache +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CCACHE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CCACHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CCACHE=$ac_cv_path_CCACHE +if test -n "$CCACHE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 +$as_echo "$CCACHE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CCACHE" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CCACHE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CCACHE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CCACHE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CCACHE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CCACHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CCACHE=$ac_cv_path_CCACHE +if test -n "$CCACHE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 +$as_echo "$CCACHE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CCACHE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CCACHE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CCACHE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CCACHE" >&5 +$as_echo_n "checking for CCACHE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CCACHE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + if test "x$CCACHE" = x; then + as_fn_error $? "Could not find required tool for CCACHE" "$LINENO" 5 + fi + + + CCACHE_STATUS="enabled" + PATH="$OLD_PATH" + elif test "x$enable_ccache" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, explicitly disabled" >&5 +$as_echo "no, explicitly disabled" >&6; } + elif test "x$enable_ccache" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } + as_fn_error $? "--enable-ccache does not accept any parameters" "$LINENO" 5 fi @@ -35873,12 +48448,15 @@ fi # When using a non home ccache directory, assume the use is to share ccache files # with other users. Thus change the umask. SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + if test "x$CCACHE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-ccache-dir has no meaning when ccache is not enabled" >&5 +$as_echo "$as_me: WARNING: --with-ccache-dir has no meaning when ccache is not enabled" >&2;} + fi fi - CCACHE_FOUND="" + if test "x$CCACHE" != x; then if test "x$CCACHE" != x; then - CCACHE_FOUND="true" # Only use ccache if it is 3.1.4 or later, which supports # precompiled headers. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 @@ -35888,6 +48466,7 @@ $as_echo_n "checking if ccache supports precompiled headers... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 $as_echo "no, disabling ccache" >&6; } CCACHE= + CCACHE_STATUS="disabled" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } @@ -35920,6 +48499,7 @@ $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 $as_echo "no, disabling ccaching of precompiled headers" >&6; } CCACHE= + CCACHE_STATUS="disabled" fi fi fi @@ -35954,6 +48534,16 @@ $as_echo "no, disabling ccaching of precompiled headers" >&6; } fi + # Did user specify any unknown variables? + + if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then + # Replace the separating ! with spaces before presenting for end user. + unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The following variables might be unknown to configure: $unknown_variables" >&5 +$as_echo "$as_me: WARNING: The following variables might be unknown to configure: $unknown_variables" >&2;} + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5 $as_echo_n "checking if build directory is on local disk... " >&6; } @@ -35996,14 +48586,6 @@ $as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } IS_RECONFIGURE=no fi - if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then - HIDE_PERFORMANCE_HINTS=yes - else - HIDE_PERFORMANCE_HINTS=no - # Hide it the next time around... - $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 - fi - # At the end, call the custom hook. (Dummy macro if no custom sources available) @@ -37305,22 +49887,6 @@ $CHMOD +x $OUTPUT_ROOT/compare.sh # Finally output some useful information to the user - if test "x$CCACHE_FOUND" != x; then - if test "x$HAS_GOOD_CCACHE" = x; then - CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" - CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." - else - CCACHE_STATUS="installed and in use" - fi - else - if test "x$GCC" = xyes; then - CCACHE_STATUS="not installed (consider installing)" - CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." - else - CCACHE_STATUS="not available for your system" - fi - fi - printf "\n" printf "====================================================\n" printf "A new configuration has been successfully created in\n" @@ -37351,48 +49917,11 @@ $CHMOD +x $OUTPUT_ROOT/compare.sh printf "Build performance summary:\n" printf "* Cores to use: $JOBS\n" printf "* Memory limit: $MEMORY_SIZE MB\n" - printf "* ccache status: $CCACHE_STATUS\n" + if test "x$CCACHE_STATUS" != "x"; then + printf "* ccache status: $CCACHE_STATUS\n" + fi printf "\n" - if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then - printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" - printf "$CCACHE_HELP_MSG\n" - - # Print a helpful message on how to acquire the necessary build dependency. - # ccache is the help tag: freetype, cups, pulse, alsa etc - MISSING_DEPENDENCY=ccache - - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - cygwin_help $MISSING_DEPENDENCY - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - msys_help $MISSING_DEPENDENCY - else - PKGHANDLER_COMMAND= - - case $PKGHANDLER in - apt-get) - apt_help $MISSING_DEPENDENCY ;; - yum) - yum_help $MISSING_DEPENDENCY ;; - port) - port_help $MISSING_DEPENDENCY ;; - pkgutil) - pkgutil_help $MISSING_DEPENDENCY ;; - pkgadd) - pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; - esac - - if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." - fi - fi - - printf "$HELP_MSG\n" - printf "\n" - fi - if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then printf "NOTE: You have requested to build more than one version of the JVM, which\n" printf "will result in longer build times.\n" diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4 index 5cfcc6fcfc1..89ecfbef68c 100644 --- a/common/autoconf/help.m4 +++ b/common/autoconf/help.m4 @@ -52,8 +52,6 @@ AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY], pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -92,8 +90,6 @@ http://www.freetype.org/ If you put the resulting build in \"C:\Program Files\GnuWin32\", it will be found automatically." fi ;; - * ) - break ;; esac } @@ -119,8 +115,6 @@ apt_help() { PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;; ccache) PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; - * ) - break ;; esac } @@ -142,8 +136,6 @@ yum_help() { PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel" ;; ccache) PKGHANDLER_COMMAND="sudo yum install ccache" ;; - * ) - break ;; esac } @@ -163,22 +155,6 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS], [ # Finally output some useful information to the user - if test "x$CCACHE_FOUND" != x; then - if test "x$HAS_GOOD_CCACHE" = x; then - CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" - CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." - else - CCACHE_STATUS="installed and in use" - fi - else - if test "x$GCC" = xyes; then - CCACHE_STATUS="not installed (consider installing)" - CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." - else - CCACHE_STATUS="not available for your system" - fi - fi - printf "\n" printf "====================================================\n" printf "A new configuration has been successfully created in\n" @@ -209,16 +185,10 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS], printf "Build performance summary:\n" printf "* Cores to use: $JOBS\n" printf "* Memory limit: $MEMORY_SIZE MB\n" - printf "* ccache status: $CCACHE_STATUS\n" - printf "\n" - - if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then - printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" - printf "$CCACHE_HELP_MSG\n" - HELP_MSG_MISSING_DEPENDENCY([ccache]) - printf "$HELP_MSG\n" - printf "\n" + if test "x$CCACHE_STATUS" != "x"; then + printf "* ccache status: $CCACHE_STATUS\n" fi + printf "\n" if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then printf "NOTE: You have requested to build more than one version of the JVM, which\n" diff --git a/common/autoconf/hotspot-spec.gmk.in b/common/autoconf/hotspot-spec.gmk.in index 82677a5be58..25aca388fbe 100644 --- a/common/autoconf/hotspot-spec.gmk.in +++ b/common/autoconf/hotspot-spec.gmk.in @@ -91,6 +91,11 @@ LLVM_LDFLAGS=@LLVM_LDFLAGS@ ALT_OUTPUTDIR=$(HOTSPOT_OUTPUTDIR) ALT_EXPORT_PATH=$(HOTSPOT_DIST) +JVM_INTERPRETER:=@JVM_INTERPRETER@ +ifeq ($(JVM_INTERPRETER), cpp) + CC_INTERP=true +endif + HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ @STATIC_CXX_SETTING@ # This is used from the libjvm build for C/C++ code. HOTSPOT_BUILD_JOBS:=$(JOBS) diff --git a/common/autoconf/jdk-options.m4 b/common/autoconf/jdk-options.m4 index 9db8c238030..095fa79bf9a 100644 --- a/common/autoconf/jdk-options.m4 +++ b/common/autoconf/jdk-options.m4 @@ -51,6 +51,33 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT], AC_MSG_RESULT([$JDK_VARIANT]) ]) +AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_INTERPRETER], +[ +############################################################################### +# +# Check which interpreter of the JVM we want to build. +# Currently we have: +# template: Template interpreter (the default) +# cpp : C++ interpreter +AC_MSG_CHECKING([which interpreter of the JVM to build]) +AC_ARG_WITH([jvm-interpreter], [AS_HELP_STRING([--with-jvm-interpreter], + [JVM interpreter to build (template, cpp) @<:@template@:>@])]) + +if test "x$with_jvm_interpreter" = x; then + with_jvm_interpreter="template" +fi + +JVM_INTERPRETER="$with_jvm_interpreter" + +if test "x$JVM_INTERPRETER" != xtemplate && test "x$JVM_INTERPRETER" != xcpp; then + AC_MSG_ERROR([The available JVM interpreters are: template, cpp]) +fi + +AC_SUBST(JVM_INTERPRETER) + +AC_MSG_RESULT([$with_jvm_interpreter]) +]) + AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], [ @@ -65,19 +92,20 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], # ie normal interpreter and C1, only the serial GC, kernel jvmti etc # zero: no machine code interpreter, no compiler # zeroshark: zero interpreter and shark/llvm compiler backend +# core: interpreter only, no compiler (only works on some platforms) AC_MSG_CHECKING([which variants of the JVM to build]) AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], - [JVM variants (separated by commas) to build (server, client, minimal1, kernel, zero, zeroshark) @<:@server@:>@])]) + [JVM variants (separated by commas) to build (server, client, minimal1, kernel, zero, zeroshark, core) @<:@server@:>@])]) if test "x$with_jvm_variants" = x; then with_jvm_variants="server" fi JVM_VARIANTS=",$with_jvm_variants," - TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//' -e 's/core,//'` if test "x$TEST_VARIANTS" != "x,"; then - AC_MSG_ERROR([The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark]) + AC_MSG_ERROR([The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark, core]) fi AC_MSG_RESULT([$with_jvm_variants]) @@ -87,6 +115,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + JVM_VARIANT_CORE=`$ECHO "$JVM_VARIANTS" | $SED -e '/,core,/!s/.*/false/g' -e '/,core,/s/.*/true/g'` if test "x$JVM_VARIANT_CLIENT" = xtrue; then if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then @@ -106,7 +135,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], # Replace the commas with AND for use in the build directory name. ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/g'` - COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` + COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/' -e 's/core,/1/'` if test "x$COUNT_VARIANTS" != "x,1"; then BUILDING_MULTIPLE_JVM_VARIANTS=yes else @@ -120,6 +149,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], AC_SUBST(JVM_VARIANT_KERNEL) AC_SUBST(JVM_VARIANT_ZERO) AC_SUBST(JVM_VARIANT_ZEROSHARK) + AC_SUBST(JVM_VARIANT_CORE) INCLUDE_SA=true if test "x$JVM_VARIANT_ZERO" = xtrue ; then @@ -128,6 +158,9 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then INCLUDE_SA=false fi + if test "x$VAR_CPU" = xppc64 ; then + INCLUDE_SA=false + fi AC_SUBST(INCLUDE_SA) if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then @@ -236,6 +269,10 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL], HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " fi + if test "x$JVM_VARIANT_CORE" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}core " + fi + HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" # On Macosx universal binaries are produced, but they only contain diff --git a/common/autoconf/libraries.m4 b/common/autoconf/libraries.m4 index c2cc3794429..fa96a03fa88 100644 --- a/common/autoconf/libraries.m4 +++ b/common/autoconf/libraries.m4 @@ -43,6 +43,14 @@ AC_DEFUN_ONCE([LIB_SETUP_INIT], AC_MSG_RESULT([alsa pulse]) fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + AC_MSG_CHECKING([what is not needed on AIX?]) + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + AC_MSG_RESULT([alsa pulse]) + fi + + if test "x$OPENJDK_TARGET_OS" = xwindows; then AC_MSG_CHECKING([what is not needed on Windows?]) CUPS_NOT_NEEDED=yes diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4 index 757bf227e78..d1b1573b101 100644 --- a/common/autoconf/platform.m4 +++ b/common/autoconf/platform.m4 @@ -126,6 +126,11 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS], VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; + *aix*) + VAR_OS=aix + VAR_OS_API=posix + VAR_OS_ENV=aix + ;; *) AC_MSG_ERROR([unsupported operating system $1]) ;; @@ -432,9 +437,9 @@ AC_DEFUN([PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS], # keep track of these additions in ADDED_CFLAGS etc. These # will later be checked to make sure only controlled additions # have been made to CFLAGS etc. - ADDED_CFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_CXXFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_LDFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" + ADDED_CFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_CXXFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_LDFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" CFLAGS="${CFLAGS}${ADDED_CFLAGS}" CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" @@ -454,8 +459,9 @@ AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_BITS], # is made at runtime.) # - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Always specify -m flags on Solaris + if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xaix; then + # Always specify -m flag on Solaris + # And -q on AIX because otherwise the compiler produces 32-bit objects by default PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS elif test "x$COMPILE_TYPE" = xreduced; then if test "x$OPENJDK_TARGET_OS" != xwindows; then @@ -477,19 +483,34 @@ AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_BITS], AC_CHECK_SIZEOF([int *], [1111]) - if test "x$SIZEOF_INT_P" != "x$ac_cv_sizeof_int_p"; then - # Workaround autoconf bug, see http://lists.gnu.org/archive/html/autoconf/2010-07/msg00004.html - SIZEOF_INT_P="$ac_cv_sizeof_int_p" - fi - - if test "x$SIZEOF_INT_P" = x; then + # AC_CHECK_SIZEOF defines 'ac_cv_sizeof_int_p' to hold the number of bytes used by an 'int*' + if test "x$ac_cv_sizeof_int_p" = x; then # The test failed, lets stick to the assumed value. AC_MSG_WARN([The number of bits in the target could not be determined, using $OPENJDK_TARGET_CPU_BITS.]) else - TESTED_TARGET_CPU_BITS=`expr 8 \* $SIZEOF_INT_P` + TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then - AC_MSG_ERROR([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) + # This situation may happen on 64-bit platforms where the compiler by default only generates 32-bit objects + # Let's try to implicitely set the compilers target architecture and retry the test + AC_MSG_NOTICE([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS).]) + AC_MSG_NOTICE([I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}]) + PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS + + # We have to unset 'ac_cv_sizeof_int_p' first, otherwise AC_CHECK_SIZEOF will use the previously cached value! + unset ac_cv_sizeof_int_p + # And we have to undef the definition of SIZEOF_INT_P in confdefs.h by the previous invocation of AC_CHECK_SIZEOF + cat >>confdefs.h <<_ACEOF +#undef SIZEOF_INT_P +_ACEOF + + AC_CHECK_SIZEOF([int *], [1111]) + + TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then + AC_MSG_ERROR([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) + fi fi fi diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index e8649ddbee5..ee18cb1b07a 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, 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 @@ -37,6 +37,8 @@ X:= SPACE:=$(X) $(X) COMMA:=, HASH:=\# +LEFT_PAREN:=( +RIGHT_PAREN:=) SQUOTE:=' #' DQUOTE:=" @@ -208,6 +210,7 @@ JVM_VARIANT_MINIMAL1:=@JVM_VARIANT_MINIMAL1@ JVM_VARIANT_KERNEL:=@JVM_VARIANT_KERNEL@ JVM_VARIANT_ZERO:=@JVM_VARIANT_ZERO@ JVM_VARIANT_ZEROSHARK:=@JVM_VARIANT_ZEROSHARK@ +JVM_VARIANT_CORE:=@JVM_VARIANT_CORE@ # Universal binaries on macosx MACOSX_UNIVERSAL=@MACOSX_UNIVERSAL@ @@ -297,6 +300,8 @@ MACOSX_VERSION_MIN=@MACOSX_VERSION_MIN@ COMPILER_TYPE:=@COMPILER_TYPE@ COMPILER_NAME:=@COMPILER_NAME@ +# Option used to tell the compiler whether to create 32- or 64-bit executables +COMPILER_TARGET_BITS_FLAG:=@COMPILER_TARGET_BITS_FLAG@ COMPILER_SUPPORTS_TARGET_BITS_FLAG=@COMPILER_SUPPORTS_TARGET_BITS_FLAG@ CC_OUT_OPTION:=@CC_OUT_OPTION@ @@ -340,6 +345,11 @@ CPP:=@FIXPATH@ @CPP@ # The linker can be gcc or ld on posix systems, or link.exe on windows systems. LD:=@FIXPATH@ @LD@ +# The linker on older SuSE distros (e.g. on SLES 10) complains with: +# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable." +# if feeded with a version script which contains named tags. +USING_BROKEN_SUSE_LD:=@USING_BROKEN_SUSE_LD@ + # LDFLAGS used to link the jdk native libraries (C-code) LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@ LDFLAGS_JDKLIB_SUFFIX:=@LDFLAGS_JDKLIB_SUFFIX@ @@ -430,28 +440,29 @@ POST_MCS_CMD:=@POST_MCS_CMD@ JAVA_FLAGS:=@BOOT_JDK_JVMARGS@ -JAVA=@FIXPATH@ $(BOOT_JDK)/bin/java $(JAVA_FLAGS) +JAVA=@FIXPATH@ @JAVA@ $(JAVA_FLAGS) -JAVAC=@FIXPATH@ $(BOOT_JDK)/bin/javac +JAVAC:=@FIXPATH@ @JAVAC@ # Hotspot sets this variable before reading the SPEC when compiling sa-jdi.jar. Avoid # overriding that value by using ?=. JAVAC_FLAGS?=@JAVAC_FLAGS@ -JAVAH=@FIXPATH@ $(BOOT_JDK)/bin/javah +JAVAH:=@FIXPATH@ @JAVAH@ -JAR=@FIXPATH@ $(BOOT_JDK)/bin/jar +JAR:=@FIXPATH@ @JAR@ -RMIC=@FIXPATH@ $(BOOT_JDK)/bin/rmic +NATIVE2ASCII:=@FIXPATH@ @NATIVE2ASCII@ -NATIVE2ASCII=@FIXPATH@ $(BOOT_JDK)/bin/native2ascii - -JARSIGNER=@FIXPATH@ $(BOOT_JDK)/bin/jarsigner +JARSIGNER:=@FIXPATH@ @JARSIGNER@ # You run the new javac using the boot jdk with $(BOOT_JDK)/bin/java $(NEW_JAVAC) ... -BOOTSTRAP_JAVAC_JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar -BOOTSTRAP_JAVAC_ARGS:="-Xbootclasspath/p:$(BOOTSTRAP_JAVAC_JAR)" -cp $(BOOTSTRAP_JAVAC_JAR) -NEW_JAVAC = $(BOOTSTRAP_JAVAC_ARGS) com.sun.tools.javac.Main -NEW_JAVADOC = $(BOOTSTRAP_JAVAC_ARGS) com.sun.tools.javadoc.Main +INTERIM_LANGTOOLS_JAR := $(LANGTOOLS_OUTPUTDIR)/dist/interim_langtools.jar +INTERIM_LANGTOOLS_ARGS := "-Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR)" -cp $(INTERIM_LANGTOOLS_JAR) +NEW_JAVAC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javac.Main +NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javadoc.Main + +# The interim corba jar is needed for running rmic +INTERIM_CORBA_JAR := $(CORBA_OUTPUTDIR)/dist/interim_corba.jar # Base flags for RC # Guarding this against resetting value. Legacy make files include spec multiple diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 index 84793969b92..f358daf3473 100644 --- a/common/autoconf/toolchain.m4 +++ b/common/autoconf/toolchain.m4 @@ -44,6 +44,15 @@ AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*@<:@ ,\t@:>@$COMPILER_NAME@<:@ ,\t@:>@\(@<:@1-9@:>@\.@<:@0-9@:>@@<:@0-9@:>@*\).*/\1/p"` COMPILER_VENDOR="Sun Studio" fi + elif test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_VERSION_TEST=`$COMPILER -qversion 2>&1 | $TAIL -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null + if test $? -ne 0; then + AC_MSG_ERROR([Failed to detect the compiler version of $COMPILER ....]) + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \([0-9][0-9]\.[0-9][0-9]*\).*/\1/p'` + COMPILER_VENDOR='IBM' + fi elif test "x$OPENJDK_TARGET_OS" = xwindows; then # First line typically looks something like: # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 @@ -113,34 +122,62 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], AC_DEFUN([TOOLCHAIN_FIND_COMPILER], [ COMPILER_NAME=$2 + SEARCH_LIST="$3" - $1= - # If TOOLS_DIR is set, check for all compiler names in there first - # before checking the rest of the PATH. - if test -n "$TOOLS_DIR"; then - PATH_save="$PATH" - PATH="$TOOLS_DIR" - AC_PATH_PROGS(TOOLS_DIR_$1, $3) - $1=$TOOLS_DIR_$1 - PATH="$PATH_save" + if test "x[$]$1" != x; then + # User has supplied compiler name already, always let that override. + AC_MSG_NOTICE([Will use user supplied compiler $1=[$]$1]) + if test "x`basename [$]$1`" = "x[$]$1"; then + # A command without a complete path is provided, search $PATH. + + AC_PATH_PROGS(POTENTIAL_$1, [$]$1) + if test "x$POTENTIAL_$1" != x; then + $1=$POTENTIAL_$1 + else + AC_MSG_ERROR([User supplied compiler $1=[$]$1 could not be found]) + fi + else + # Otherwise it might already be a complete path + if test ! -x "[$]$1"; then + AC_MSG_ERROR([User supplied compiler $1=[$]$1 does not exist]) + fi + fi + else + # No user supplied value. Locate compiler ourselves + $1= + # If TOOLS_DIR is set, check for all compiler names in there first + # before checking the rest of the PATH. + if test -n "$TOOLS_DIR"; then + PATH_save="$PATH" + PATH="$TOOLS_DIR" + AC_PATH_PROGS(TOOLS_DIR_$1, $SEARCH_LIST) + $1=$TOOLS_DIR_$1 + PATH="$PATH_save" + fi + + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + if test "x[$]$1" = x; then + AC_PATH_PROGS(POTENTIAL_$1, $SEARCH_LIST) + $1=$POTENTIAL_$1 + fi + + if test "x[$]$1" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG]) + fi fi - # AC_PATH_PROGS can't be run multiple times with the same variable, - # so create a new name for this run. - if test "x[$]$1" = x; then - AC_PATH_PROGS(POTENTIAL_$1, $3) - $1=$POTENTIAL_$1 - fi - - if test "x[$]$1" = x; then - HELP_MSG_MISSING_DEPENDENCY([devkit]) - AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG]) - fi + # Now we have a compiler binary in $1. Make sure it's okay. BASIC_FIXUP_EXECUTABLE($1) - AC_MSG_CHECKING([resolved symbolic links for $1]) TEST_COMPILER="[$]$1" - BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER) - AC_MSG_RESULT([$TEST_COMPILER]) + # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links + # to 'xlc' but it is crucial that we invoke the compiler with the right name! + if test "x$OPENJDK_BUILD_OS" != xaix; then + AC_MSG_CHECKING([resolved symbolic links for $1]) + BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER) + AC_MSG_RESULT([$TEST_COMPILER]) + fi AC_MSG_CHECKING([if $1 is disguised ccache]) COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` @@ -201,11 +238,11 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], # otherwise we might pick up cross-compilers which don't use standard naming. # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have # to wait until they are properly discovered. - AC_PATH_PROGS(BUILD_CC, [cl cc gcc]) + BASIC_PATH_PROGS(BUILD_CC, [cl cc gcc]) BASIC_FIXUP_EXECUTABLE(BUILD_CC) - AC_PATH_PROGS(BUILD_CXX, [cl CC g++]) + BASIC_PATH_PROGS(BUILD_CXX, [cl CC g++]) BASIC_FIXUP_EXECUTABLE(BUILD_CXX) - AC_PATH_PROG(BUILD_LD, ld) + BASIC_PATH_PROGS(BUILD_LD, ld) BASIC_FIXUP_EXECUTABLE(BUILD_LD) fi AC_SUBST(BUILD_CC) @@ -248,12 +285,13 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], # On Solaris, cc is preferred to gcc. # Elsewhere, gcc is preferred to cc. - if test "x$CC" != x; then - COMPILER_CHECK_LIST="$CC" - elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then COMPILER_CHECK_LIST="cl" elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then COMPILER_CHECK_LIST="cc gcc" + elif test "x$OPENJDK_TARGET_OS" = "xaix"; then + # Do not probe for cc on AIX. + COMPILER_CHECK_LIST="xlc_r" else COMPILER_CHECK_LIST="gcc cc" fi @@ -262,14 +300,23 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], # Now that we have resolved CC ourself, let autoconf have its go at it AC_PROG_CC([$CC]) + # Option used to tell the compiler whether to create 32- or 64-bit executables + # Notice that CC contains the full compiler path at this point. + case $CC in + *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";; + *) COMPILER_TARGET_BITS_FLAG="-m";; + esac + AC_SUBST(COMPILER_TARGET_BITS_FLAG) + ### Locate C++ compiler (CXX) - if test "x$CXX" != x; then - COMPILER_CHECK_LIST="$CXX" - elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then COMPILER_CHECK_LIST="cl" elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then COMPILER_CHECK_LIST="CC g++" + elif test "x$OPENJDK_TARGET_OS" = "xaix"; then + # Do not probe for CC on AIX . + COMPILER_CHECK_LIST="xlC_r" else COMPILER_CHECK_LIST="g++ CC" fi @@ -306,11 +353,13 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], AC_SUBST(LDEXECXX) if test "x$OPENJDK_TARGET_OS" != xwindows; then - AC_CHECK_TOOL(AR, ar) + BASIC_CHECK_TOOLS(AR, ar) BASIC_FIXUP_EXECUTABLE(AR) fi if test "x$OPENJDK_TARGET_OS" = xmacosx; then ARFLAGS="-r" + elif test "x$OPENJDK_TARGET_OS" = xaix; then + ARFLAGS="-X64" else ARFLAGS="" fi @@ -431,7 +480,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], # Find the right assembler. if test "x$OPENJDK_TARGET_OS" = xsolaris; then - AC_PATH_PROG(AS, as) + BASIC_PATH_PROGS(AS, as) BASIC_FIXUP_EXECUTABLE(AS) else AS="$CC -c" @@ -439,41 +488,41 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], AC_SUBST(AS) if test "x$OPENJDK_TARGET_OS" = xsolaris; then - AC_PATH_PROG(NM, nm) + BASIC_PATH_PROGS(NM, nm) BASIC_FIXUP_EXECUTABLE(NM) - AC_PATH_PROG(GNM, gnm) + BASIC_PATH_PROGS(GNM, gnm) BASIC_FIXUP_EXECUTABLE(GNM) - AC_PATH_PROG(STRIP, strip) + BASIC_PATH_PROGS(STRIP, strip) BASIC_FIXUP_EXECUTABLE(STRIP) - AC_PATH_PROG(MCS, mcs) + BASIC_PATH_PROGS(MCS, mcs) BASIC_FIXUP_EXECUTABLE(MCS) elif test "x$OPENJDK_TARGET_OS" != xwindows; then - AC_CHECK_TOOL(NM, nm) + BASIC_CHECK_TOOLS(NM, nm) BASIC_FIXUP_EXECUTABLE(NM) GNM="$NM" AC_SUBST(GNM) - AC_CHECK_TOOL(STRIP, strip) + BASIC_CHECK_TOOLS(STRIP, strip) BASIC_FIXUP_EXECUTABLE(STRIP) fi # objcopy is used for moving debug symbols to separate files when # full debug symbols are enabled. if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then - AC_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy]) + BASIC_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy]) # Only call fixup if objcopy was found. if test -n "$OBJCOPY"; then BASIC_FIXUP_EXECUTABLE(OBJCOPY) fi fi - AC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump]) + BASIC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump]) if test "x$OBJDUMP" != x; then # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. BASIC_FIXUP_EXECUTABLE(OBJDUMP) fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - AC_PATH_PROG(LIPO, lipo) + BASIC_PATH_PROGS(LIPO, lipo) BASIC_FIXUP_EXECUTABLE(LIPO) fi @@ -554,6 +603,29 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS], POST_STRIP_CMD="$STRIP -x" POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_NAME=xlc + PICFLAG="-qpic=large" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib[$]1.so' + STATIC_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_FLAGS="-qmkshrobj" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='' + SET_EXECUTABLE_ORIGIN="" + CFLAGS_JDK="" + CXXFLAGS_JDK="" + CFLAGS_JDKLIB_EXTRA='' + POST_STRIP_CMD="$STRIP -X32_64" + POST_MCS_CMD="" + fi if test "x$OPENJDK_TARGET_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler COMPILER_NAME=cl @@ -730,6 +802,24 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], CFLAGS_DEBUG_SYMBOLS="-g -xs" CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + ;; + xlc ) + C_FLAG_DEPS="-qmakedep=gcc -MF" + CXX_FLAG_DEPS="-qmakedep=gcc -MF" + C_O_FLAG_HIGHEST="-O3" + C_O_FLAG_HI="-O3 -qstrict" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-O3" + CXX_O_FLAG_HI="-O3 -qstrict" + CXX_O_FLAG_NORM="-O2" + CXX_O_FLAG_NONE="" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall" + CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" + ;; esac ;; CL ) @@ -840,6 +930,13 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext" LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" ;; + xlc ) + CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" + CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" + + LDFLAGS_JDK="$LDFLAGS_JDK" + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK" + ;; cl ) CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ @@ -909,6 +1006,9 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], if test "x$OPENJDK_TARGET_OS" = xsolaris; then CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64" + fi if test "x$OPENJDK_TARGET_OS" = xmacosx; then CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" # Setting these parameters makes it an error to link to macosx APIs that are @@ -1076,20 +1176,38 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_MISC], # ZERO_ARCHFLAG tells the compiler which mode to build for case "${OPENJDK_TARGET_CPU}" in s390) - ZERO_ARCHFLAG="-m31" + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31" ;; *) - ZERO_ARCHFLAG="-m${OPENJDK_TARGET_CPU_BITS}" + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" esac TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""]) AC_SUBST(ZERO_ARCHFLAG) - # Check that the compiler supports -mX flags + # Check that the compiler supports -mX (or -qX on AIX) flags # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does - TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([-m${OPENJDK_TARGET_CPU_BITS}], + TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}], [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true], [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false]) AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG) + + + # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed in executable.' + USING_BROKEN_SUSE_LD=no + if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$GCC" = xyes; then + AC_MSG_CHECKING([for broken SuSE 'ld' which only understands anonymous version tags in executables]) + echo "SUNWprivate_1.1 { local: *; };" > version-script.map + echo "int main() { }" > main.c + if $CXX -Xlinker -version-script=version-script.map main.c 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then + AC_MSG_RESULT(no) + USING_BROKEN_SUSE_LD=no + else + AC_MSG_RESULT(yes) + USING_BROKEN_SUSE_LD=yes + fi + rm -rf version-script.map main.c + fi + AC_SUBST(USING_BROKEN_SUSE_LD) ]) # Setup the JTREG paths @@ -1126,7 +1244,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG], AC_MSG_RESULT($JTREGEXE) else # try to find jtreg on path - BASIC_REQUIRE_PROG(JTREGEXE, jtreg) + BASIC_REQUIRE_PROGS(JTREGEXE, jtreg) JT_HOME="`$DIRNAME $JTREGEXE`" fi fi diff --git a/corba/.hgtags b/corba/.hgtags index 914430fb54c..03c69ec949f 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -244,3 +244,4 @@ d6820a414f182a011a53a29a52370c696cd58dab jdk8-b118 53fd772d28c8a9f0f43adfc06f75f6b3cfa93cb5 jdk8-b120 a7d3638deb2f4e33217b1ecf889479e90f9e5b50 jdk9-b00 79a8136b18c1c6848f500088f5a4b39f262f082d jdk9-b01 +8394993063135a42b63a94473280399fb2a13aa7 jdk9-b02 diff --git a/corba/make/BuildCorba.gmk b/corba/make/BuildCorba.gmk index 3190ce899cf..05bcbe31337 100644 --- a/corba/make/BuildCorba.gmk +++ b/corba/make/BuildCorba.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2014, 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 @@ -31,235 +31,15 @@ default: all include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk -include IdlCompilation.gmk -# The Corba sources are old and generates a LOT of warnings. -# Disable these using Xlint, until someone cares to fix them. -DISABLE_CORBA_WARNINGS := -Xlint:all,-deprecation,-unchecked,-serial,-fallthrough,-cast,-rawtypes,-static,-dep-ann +gensrc-corba: + +$(MAKE) -f $(CORBA_TOPDIR)/make/GensrcCorba.gmk -# The "generate old bytecode" javac setup uses the new compiler to compile for the -# boot jdk to generate tools that need to be run with the boot jdk. -# Thus we force the target bytecode to the boot jdk bytecode. -$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \ - JVM := $(JAVA), \ - JAVAC := $(NEW_JAVAC), \ - FLAGS := $(BOOT_JDK_SOURCETARGET) \ - -bootclasspath "$(BOOT_RTJAR)$(PATH_SEP)$(BOOT_TOOLSJAR)" \ - $(DISABLE_CORBA_WARNINGS), \ - SERVER_DIR := $(SJAVAC_SERVER_DIR), \ - SERVER_JVM := $(SJAVAC_SERVER_JAVA))) +compile-corba: gensrc-corba + +$(MAKE) -f $(CORBA_TOPDIR)/make/CompileCorba.gmk -# The "generate new bytecode" uses the new compiler to generate bytecode -# for the new jdk that is being built. The code compiled by this setup -# cannot necessarily be run with the boot jdk. -$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE, \ - JVM := $(JAVA), \ - JAVAC := $(NEW_JAVAC), \ - FLAGS := -cp $(BOOT_TOOLSJAR) -XDignore.symbol.file=true $(DISABLE_CORBA_WARNINGS), \ - SERVER_DIR := $(SJAVAC_SERVER_DIR), \ - SERVER_JVM := $(SJAVAC_SERVER_JAVA))) - -$(eval $(call SetupJavaCompilation,BUILD_STRIPPROP, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(CORBA_TOPDIR)/make/tools/src, \ - BIN := $(CORBA_OUTPUTDIR)/btclasses/stripprop_classes)) - -$(eval $(call SetupArchive,ARCHIVE_STRIPPROP, $(BUILD_STRIPPROP), \ - SRCS := $(CORBA_OUTPUTDIR)/btclasses/stripprop_classes, \ - JAR := $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar, \ - JARMAIN := build.tools.stripproperties.StripPropertiesCorba)) - -$(eval $(call SetupJavaCompilation,BUILD_IDLJ, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(CORBA_TOPDIR)/src/share/classes, \ - BIN := $(CORBA_OUTPUTDIR)/btclasses/idlj_classes, \ - COPY := .prp, \ - INCLUDES := com/sun/tools/corba/se/idl, \ - EXCLUDE_FILES := ResourceBundleUtil.java)) - -$(eval $(call SetupArchive,ARCHIVE_IDLJ, $(BUILD_IDLJ), \ - SRCS := $(CORBA_OUTPUTDIR)/btclasses/idlj_classes, \ - SUFFIXES := .class .prp, \ - JAR := $(CORBA_OUTPUTDIR)/btjars/idlj.jar, \ - JARMAIN := com.sun.tools.corba.se.idl.toJavaPortable.Compile)) - -$(eval $(call SetupJavaCompilation,BUILD_LOGUTIL, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(CORBA_TOPDIR)/src/share/classes, \ - BIN := $(CORBA_OUTPUTDIR)/btclasses/logutil_classes, \ - INCLUDES := com/sun/tools/corba/se/logutil)) - -$(eval $(call SetupArchive,ARCHIVE_LOGUTIL, $(BUILD_LOGUTIL), \ - SRCS := $(CORBA_OUTPUTDIR)/btclasses/logutil_classes, \ - JAR := $(CORBA_OUTPUTDIR)/btjars/logutil.jar, \ - JARMAIN := com.sun.tools.corba.se.logutil.MC)) - -# Generate LogWrapper classes -$(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/%SystemException.java: \ - $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ - $(CORBA_OUTPUTDIR)/btjars/logutil.jar - $(MKDIR) -p $(@D) - $(RM) -f $(@D)/_the_wrappers.d - $(ECHO) $(LOG_INFO) Generating class file from $*.mc - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-class $< $(@D) - -# Generate LogWrapper properties file by concatening resource files -$(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties: \ - $(CORBA_OUTPUTDIR)/logwrappers/ActivationSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/IORSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/InterceptorsSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/NamingSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/OMGSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/ORBUtilSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/POASystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/UtilSystemException.resource - $(MKDIR) -p $(@D) - $(ECHO) $(LOG_INFO) Concatenating 8 resource files into $(@F) - $(CAT) $^ > $@ - -# The resources files are generated from lisp-like .mc files. -$(CORBA_OUTPUTDIR)/logwrappers/%SystemException.resource: $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc $(CORBA_OUTPUTDIR)/btjars/logutil.jar - $(MKDIR) -p $(@D) - $(RM) -f $(@D)/_the_wrappers.d - $(ECHO) $(LOG_INFO) Generating resource file from $*.mc - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-resource $< $(@D) +all: compile-corba -$(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d: $(CORBA_OUTPUTDIR)/btjars/logutil.jar \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ActivationSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/IORSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/InterceptorsSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/NamingSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/OMGSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ORBUtilSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/POASystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/UtilSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties - $(MKDIR) -p $(@D) - $(ECHO) LOGWRAPPERS_ARE_CREATED = yes > $@ - -# Trigger the generation of the logwrappers. After the logwrapper classes and -# resources have been created, then the makefile will restart and the newly -# created java files will become part of the build further along in the makefile. --include $(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d - -ifeq ($(LOGWRAPPERS_ARE_CREATED), yes) - - $(eval $(call SetupIdlCompilation,BUILD_IDLS, \ - IDLJ := $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/idlj.jar, \ - SRC := $(CORBA_TOPDIR)/src/share/classes, \ - BIN := $(CORBA_OUTPUTDIR)/gensrc, \ - EXCLUDES := com/sun/tools/corba/se/idl/% \ - org/omg/CORBA/% \ - com/sun/corba/se/GiopIDL/% \ - org/omg/PortableServer/corba.idl, \ - INCLUDES := %, \ - OLDIMPLBASES := com/sun/corba/se/PortableActivationIDL/activation.idl \ - com/sun/corba/se/spi/activation/activation.idl, \ - DELETES := DYNANYDELETEFILES org/omg/DynamicAny/*POA* org/omg/DynamicAny/*Holder* org/omg/DynamicAny/DynValueBoxHelper.java org/omg/DynamicAny/DynValueCommonHelper.java org/omg/DynamicAny/_DynValueCommonStub.java org/omg/DynamicAny/_DynValueBoxStub.java org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.java org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.java org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.java IOPDELETEFILES org/omg/IOP/BI_DIR_IIOP.java org/omg/IOP/ChainBypassCheck.java org/omg/IOP/ChainBypassInfo.java org/omg/IOP/FORWARDED_IDENTITY.java org/omg/IOP/INVOCATION_POLICIES.java org/omg/IOP/LogicalThreadId.java org/omg/IOP/SendingContextRunTime.java org/omg/IOP/UnknownExceptionInfo.java org/omg/IOP/TaggedComponentSeqHolder.java POAHELHOLFILES org/omg/PortableServer/CurrentPackage/NoContextHolder.java org/omg/PortableServer/ForwardRequestHolder.java org/omg/PortableServer/IdAssignmentPolicyValueHelper.java org/omg/PortableServer/IdAssignmentPolicyValueHolder.java org/omg/PortableServer/IdUniquenessPolicyValueHelper.java org/omg/PortableServer/IdUniquenessPolicyValueHolder.java org/omg/PortableServer/ImplicitActivationPolicyValueHelper.java org/omg/PortableServer/ImplicitActivationPolicyValueHolder.java org/omg/PortableServer/LifespanPolicyValueHelper.java org/omg/PortableServer/LifespanPolicyValueHolder.java org/omg/PortableServer/ServantRetentionPolicyValueHelper.java org/omg/PortableServer/ServantRetentionPolicyValueHolder.java org/omg/PortableServer/ObjectIdHelper.java org/omg/PortableServer/ObjectIdHolder.java org/omg/PortableServer/POAListHelper.java org/omg/PortableServer/POAListHolder.java org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.java org/omg/PortableServer/POAManagerPackage/StateHelper.java org/omg/PortableServer/POAManagerPackage/StateHolder.java org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.java org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.java org/omg/PortableServer/POAPackage/InvalidPolicyHolder.java org/omg/PortableServer/POAPackage/NoServantHolder.java org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.java org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ServantNotActiveHolder.java org/omg/PortableServer/POAPackage/WrongAdapterHolder.java org/omg/PortableServer/POAPackage/WrongPolicyHolder.java org/omg/PortableServer/RequestProcessingPolicyValueHelper.java org/omg/PortableServer/RequestProcessingPolicyValueHolder.java org/omg/PortableServer/ServantActivatorHolder.java org/omg/PortableServer/ServantLocatorHolder.java org/omg/PortableServer/ThreadPolicyValueHelper.java org/omg/PortableServer/ThreadPolicyValueHolder.java PIHELHOLFILES org/omg/PortableInterceptor/ClientRequestInfoHelper.java org/omg/PortableInterceptor/ClientRequestInterceptorHelper.java org/omg/PortableInterceptor/IORInfoHelper.java org/omg/PortableInterceptor/IORInterceptorHelper.java org/omg/PortableInterceptor/InterceptorHelper.java org/omg/PortableInterceptor/ORBInitInfoHelper.java org/omg/PortableInterceptor/ORBInitializerHelper.java org/omg/PortableInterceptor/PolicyFactoryHelper.java org/omg/PortableInterceptor/ReplyStatusHelper.java org/omg/PortableInterceptor/RequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInterceptorHelper.java org/omg/PortableInterceptor/SlotIdHelper.java org/omg/PortableInterceptor/ClientRequestInfoHolder.java org/omg/PortableInterceptor/ClientRequestInterceptorHolder.java org/omg/PortableInterceptor/CurrentHolder.java org/omg/PortableInterceptor/ForwardRequestHolder.java org/omg/PortableInterceptor/IORInfoHolder.java org/omg/PortableInterceptor/IORInterceptorHolder.java org/omg/PortableInterceptor/InterceptorHolder.java org/omg/PortableInterceptor/InvalidSlotHolder.java org/omg/PortableInterceptor/ORBInitInfoHolder.java org/omg/PortableInterceptor/ORBInitializerHolder.java org/omg/PortableInterceptor/PolicyFactoryHolder.java org/omg/PortableInterceptor/RequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInterceptorHolder.java org/omg/PortableInterceptor/TaggedComponentSeqHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHolder.java org/omg/IOP/CodecPackage/FormatMismatchHolder.java org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.java org/omg/IOP/CodecPackage/TypeMismatchHolder.java org/omg/IOP/CodecHelper.java org/omg/IOP/EncodingFormatHelper.java org/omg/IOP/EncodingHelper.java org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.java org/omg/IOP/CodecFactoryHolder.java org/omg/IOP/CodecHolder.java org/omg/IOP/EncodingHolder.java org/omg/IOP/TaggedComponentSeqHelper.java org/omg/Dynamic/ContextListHelper.java org/omg/Dynamic/ExceptionListHelper.java org/omg/Dynamic/ParameterHolder.java org/omg/Dynamic/ParameterListHolder.java org/omg/Dynamic/ExceptionListHolder.java org/omg/Dynamic/ParameterHelper.java org/omg/Dynamic/ParameterListHelper.java org/omg/Dynamic/RequestContextHelper.java CORBAX org/omg/CORBA/OctetSeqHelper.java org/omg/CORBA/OctetSeqHolder.java org/omg/CORBA/PolicyError.java org/omg/CORBA/RepositoryIdHelper.java)) - - $(BUILD_IDLS): $(CORBA_OUTPUTDIR)/btjars/idlj.jar - - $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d: $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/btjars/idlj.jar - $(MKDIR) -p $(@D) - $(ECHO) IDLS_ARE_CREATED = yes > $@ - - -include $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d - - ifeq ($(IDLS_ARE_CREATED), yes) - - $(eval $(call SetupJavaCompilation,BUILD_CORBA, \ - SETUP := GENERATE_NEWBYTECODE, \ - SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers, \ - EXCLUDES := com/sun/corba/se/PortableActivationIDL \ - com/sun/tools/corba/se/logutil, \ - EXCLUDE_FILES := com/sun/corba/se/impl/presentation/rmi/JNDIStateFactoryImpl.java \ - com/sun/corba/se/spi/presentation/rmi/StubWrapper.java \ - com/sun/org/omg/CORBA/IDLTypeOperations.java \ - com/sun/org/omg/CORBA/IRObjectOperations.java \ - org/omg/PortableInterceptor/UNKNOWN.java \ - com/sun/tools/corba/se/idl/ResourceBundleUtil.java \ - com/sun/corba/se/impl/presentation/rmi/jndi.properties, \ - COPY := .prp LogStrings.properties, \ - BIN := $(CORBA_OUTPUTDIR)/classes)) - - $(eval $(call SetupJavaCompilation,BUILD_BOOTSTRAP_CORBA, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(BUILD_CORBA_SRC), \ - EXCLUDES := $(BUILD_CORBA_EXCLUDES), \ - EXCLUDE_FILES := $(BUILD_CORBA_EXCLUDE_FILES), \ - COPY := $(BUILD_CORBA_COPY), \ - BIN := $(CORBA_OUTPUTDIR)/btclasses/corba_classes, \ - JAR := $(CORBA_OUTPUTDIR)/btjars/btcorba.jar)) - - # Separate src.zip call to include sources that were excluded in the build to - # mimic behavior in old build system. - $(eval $(call SetupZipArchive,ARCHIVE_BUILD_CORBA, \ - SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers, \ - ZIP := $(CORBA_OUTPUTDIR)/dist/lib/src.zip)) - - $(BUILD_CORBA): $(BUILD_IDLS) $(LOGWRAPPER_DEPENDENCIES) - - # Run stripproperties on all sunorb resource files. - STRIP_PROP_SRC_FILES := $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb*.properties") - STRIP_PROP_FILES := $(patsubst $(CORBA_TOPDIR)/src/share/classes/%, $(CORBA_OUTPUTDIR)/classes/%, \ - $(STRIP_PROP_SRC_FILES)) - # Simple delivery of zh_HK properties files just copies zh_TW properties files - STRIP_PROP_FILES += $(patsubst $(CORBA_TOPDIR)/src/share/classes/%_zh_TW.properties, \ - $(CORBA_OUTPUTDIR)/classes/%_zh_HK.properties, \ - $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties")) - STRIP_PROP_SRC_FILES += $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties") - STRIP_PROP_CMDLINE := $(subst _SPACE_, $(SPACE), \ - $(join $(addprefix -clean_SPACE_, $(STRIP_PROP_SRC_FILES)), \ - $(addprefix _SPACE_, $(STRIP_PROP_FILES)))) - - $(CORBA_OUTPUTDIR)/_the.stripped_properties: $(STRIP_PROP_SRC_FILES) \ - $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar - $(MKDIR) -p $(sort $(dir $(STRIP_PROP_FILES))) - $(call ListPathsSafely,STRIP_PROP_CMDLINE,\n, >> $(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline) - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \ - @$(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline - $(TOUCH) $@ - - $(eval $(call SetupArchive,ARCHIVE_CORBA, \ - $(BUILD_CORBA) $(CORBA_OUTPUTDIR)/_the.stripped_properties, \ - SRCS := $(CORBA_OUTPUTDIR)/classes, \ - SUFFIXES := .class .prp .properties, \ - JAR := $(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) - - # The created classes.jar now contains Corba compiled to run on the target JDK - # and is ready for inclusion in jdk rt.jar. - - # The created src.zip now contains .java and .properties files used to create the classes in classes.jar - # and is ready for inclusion into the jdk src.zip - - BIN_FILES := $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/orb.idl \ - $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/ir.idl - - $(CORBA_OUTPUTDIR)/dist/lib/bin.zip: $(BIN_FILES) $(CORBA_OUTPUTDIR)/dist/lib/classes.jar - $(MKDIR) -p $(CORBA_OUTPUTDIR)/dist/lib - $(MKDIR) -p $(CORBA_OUTPUTDIR)/lib - $(RM) -f $@ - $(ECHO) Creating `basename $@` - $(CP) $(BIN_FILES) $(CORBA_OUTPUTDIR)/lib - $(CHMOD) ug+w $(CORBA_OUTPUTDIR)/lib/* - (cd $(CORBA_OUTPUTDIR); $(ZIP) -q $@ lib/orb.idl lib/ir.idl) - - # The created bin.zip now contains the corba specific binaries: orb.idl, ir.idl - - all: $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \ - $(CORBA_OUTPUTDIR)/btjars/idlj.jar \ - $(CORBA_OUTPUTDIR)/btjars/logutil.jar \ - $(CORBA_OUTPUTDIR)/btjars/btcorba.jar \ - $(CORBA_OUTPUTDIR)/dist/lib/classes.jar \ - $(CORBA_OUTPUTDIR)/dist/lib/src.zip \ - $(CORBA_OUTPUTDIR)/dist/lib/bin.zip - endif -endif - -clean: - $(RM) -rf $(CORBA_OUTPUTDIR) - -.PHONY: default all clean clobber +.PHONY: default all +.PHONY: gensrc-corba compile-corba diff --git a/corba/make/CommonCorba.gmk b/corba/make/CommonCorba.gmk new file mode 100644 index 00000000000..11b69b6f715 --- /dev/null +++ b/corba/make/CommonCorba.gmk @@ -0,0 +1,53 @@ +# +# Copyright (c) 2014, 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. +# + +################################################################################ +# The Corba sources are old and generates a LOT of warnings. +# Disable these using Xlint, until someone cares to fix them. +DISABLE_CORBA_WARNINGS := -Xlint:all,-deprecation,-unchecked,-serial,-fallthrough,-cast,-rawtypes,-static,-dep-ann + +# The "generate old bytecode" javac setup uses the new compiler to compile for the +# boot jdk to generate tools that need to be run with the boot jdk. +# Thus we force the target bytecode to the boot jdk bytecode. +$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \ + JVM := $(JAVA), \ + JAVAC := $(NEW_JAVAC), \ + FLAGS := $(BOOT_JDK_SOURCETARGET) \ + -bootclasspath "$(BOOT_RTJAR)$(PATH_SEP)$(BOOT_TOOLSJAR)" \ + $(DISABLE_CORBA_WARNINGS), \ + SERVER_DIR := $(SJAVAC_SERVER_DIR), \ + SERVER_JVM := $(SJAVAC_SERVER_JAVA))) + +# The "generate new bytecode" uses the new compiler to generate bytecode +# for the new jdk that is being built. The code compiled by this setup +# cannot necessarily be run with the boot jdk. +$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE, \ + JVM := $(JAVA), \ + JAVAC := $(NEW_JAVAC), \ + FLAGS := -cp $(BOOT_TOOLSJAR) -XDignore.symbol.file=true $(DISABLE_CORBA_WARNINGS), \ + SERVER_DIR := $(SJAVAC_SERVER_DIR), \ + SERVER_JVM := $(SJAVAC_SERVER_JAVA))) + +################################################################################ diff --git a/corba/make/CompileCorba.gmk b/corba/make/CompileCorba.gmk new file mode 100644 index 00000000000..16e0c4e679d --- /dev/null +++ b/corba/make/CompileCorba.gmk @@ -0,0 +1,87 @@ +# +# Copyright (c) 2014, 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. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +include CommonCorba.gmk + +################################################################################ + +$(eval $(call SetupJavaCompilation,BUILD_CORBA, \ + SETUP := GENERATE_NEWBYTECODE, \ + SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc, \ + EXCLUDES := com/sun/corba/se/PortableActivationIDL \ + com/sun/tools/corba/se/logutil, \ + EXCLUDE_FILES := com/sun/corba/se/impl/presentation/rmi/JNDIStateFactoryImpl.java \ + com/sun/corba/se/spi/presentation/rmi/StubWrapper.java \ + com/sun/org/omg/CORBA/IDLTypeOperations.java \ + com/sun/org/omg/CORBA/IRObjectOperations.java \ + org/omg/PortableInterceptor/UNKNOWN.java \ + com/sun/tools/corba/se/idl/ResourceBundleUtil.java \ + com/sun/corba/se/impl/presentation/rmi/jndi.properties, \ + COPY := .prp LogStrings.properties, \ + BIN := $(CORBA_OUTPUTDIR)/classes, \ + JAR := $(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) + +$(eval $(call SetupJavaCompilation,BUILD_INTERIM_CORBA, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(BUILD_CORBA_SRC), \ + EXCLUDES := $(BUILD_CORBA_EXCLUDES), \ + EXCLUDE_FILES := $(BUILD_CORBA_EXCLUDE_FILES), \ + COPY := $(BUILD_CORBA_COPY), \ + BIN := $(CORBA_OUTPUTDIR)/interim_classes, \ + JAR := $(INTERIM_CORBA_JAR))) + +# Separate src.zip call to include sources that were excluded in the build to +# mimic behavior in old build system. +$(eval $(call SetupZipArchive,ARCHIVE_CORBA_SRC, \ + SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc, \ + ZIP := $(CORBA_OUTPUTDIR)/dist/lib/src.zip)) + JAR := $(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) + +################################################################################ +# Create bin.zip containing the corba specific binaries: orb.idl, ir.idl +BIN_FILES := $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/orb.idl \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/ir.idl + +$(CORBA_OUTPUTDIR)/dist/lib/bin.zip: $(BIN_FILES) + $(MKDIR) -p $(CORBA_OUTPUTDIR)/dist/lib + $(MKDIR) -p $(CORBA_OUTPUTDIR)/lib + $(RM) -f $@ + $(ECHO) Creating `basename $@` + $(CP) $(BIN_FILES) $(CORBA_OUTPUTDIR)/lib + $(CHMOD) ug+w $(CORBA_OUTPUTDIR)/lib/* + (cd $(CORBA_OUTPUTDIR); $(ZIP) -q $@ lib/orb.idl lib/ir.idl) + +################################################################################ + + +all: $(BUILD_CORBA) $(BUILD_INTERIM_CORBA) $(ARCHIVE_CORBA_SRC) \ + $(CORBA_OUTPUTDIR)/dist/lib/bin.zip diff --git a/corba/make/GensrcCorba.gmk b/corba/make/GensrcCorba.gmk new file mode 100644 index 00000000000..61030ed5af7 --- /dev/null +++ b/corba/make/GensrcCorba.gmk @@ -0,0 +1,153 @@ +# +# Copyright (c) 2014, 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. +# + +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk +include IdlCompilation.gmk + +include CommonCorba.gmk + +################################################################################ + +$(eval $(call SetupJavaCompilation,BUILD_STRIPPROP, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(CORBA_TOPDIR)/make/tools/src, \ + BIN := $(CORBA_OUTPUTDIR)/stripprop_classes)) + +TOOL_STRIPPROP_CMD := $(JAVA) -cp $(CORBA_OUTPUTDIR)/stripprop_classes \ + build.tools.stripproperties.StripPropertiesCorba + +$(eval $(call SetupJavaCompilation,BUILD_IDLJ, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(CORBA_TOPDIR)/src/share/classes, \ + BIN := $(CORBA_OUTPUTDIR)/idlj_classes, \ + COPY := .prp, \ + INCLUDES := com/sun/tools/corba/se/idl, \ + EXCLUDE_FILES := ResourceBundleUtil.java)) + +TOOL_IDLJ_CMD := $(JAVA) -cp $(CORBA_OUTPUTDIR)/idlj_classes \ + com.sun.tools.corba.se.idl.toJavaPortable.Compile + +$(eval $(call SetupJavaCompilation,BUILD_LOGUTIL, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(CORBA_TOPDIR)/src/share/classes, \ + BIN := $(CORBA_OUTPUTDIR)/logutil_classes, \ + INCLUDES := com/sun/tools/corba/se/logutil)) + +TOOL_LOGUTIL_CMD := $(JAVA) -cp $(CORBA_OUTPUTDIR)/logutil_classes \ + com.sun.tools.corba.se.logutil.MC + +################################################################################ + +# Generate LogWrapper classes +$(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/%SystemException.java: \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ + $(BUILD_LOGUTIL) + $(MKDIR) -p $(@D) + $(RM) -f $(@D)/_the_wrappers.d + $(ECHO) $(LOG_INFO) Generating class file from $*.mc + $(TOOL_LOGUTIL_CMD) make-class $< $(@D) + +# Generate LogWrapper properties file by concatening resource files +$(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/LogStrings.properties: \ + $(CORBA_OUTPUTDIR)/logwrappers/ActivationSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/IORSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/InterceptorsSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/NamingSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/OMGSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/ORBUtilSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/POASystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/UtilSystemException.resource + $(MKDIR) -p $(@D) + $(ECHO) $(LOG_INFO) Concatenating 8 resource files into $(@F) + $(CAT) $^ > $@ + +# The resources files are generated from lisp-like .mc files. +$(CORBA_OUTPUTDIR)/logwrappers/%SystemException.resource: \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ + $(BUILD_LOGUTIL) + $(MKDIR) -p $(@D) + $(RM) -f $(@D)/_the_wrappers.d + $(ECHO) $(LOG_INFO) Generating resource file from $*.mc + $(TOOL_LOGUTIL_CMD) make-resource $< $(@D) + + +LOGWRAPPER_TARGETS := \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/ActivationSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/IORSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/InterceptorsSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/NamingSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/OMGSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/ORBUtilSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/POASystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/UtilSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/LogStrings.properties + +################################################################################ +# Build the IDLs. + +$(eval $(call SetupIdlCompilation,BUILD_IDLS, \ + IDLJ := $(TOOL_IDLJ_CMD), \ + SRC := $(CORBA_TOPDIR)/src/share/classes, \ + BIN := $(CORBA_OUTPUTDIR)/gensrc, \ + EXCLUDES := com/sun/tools/corba/se/idl/% \ + org/omg/CORBA/% \ + com/sun/corba/se/GiopIDL/% \ + org/omg/PortableServer/corba.idl, \ + INCLUDES := %, \ + OLDIMPLBASES := com/sun/corba/se/PortableActivationIDL/activation.idl \ + com/sun/corba/se/spi/activation/activation.idl, \ + DELETES := DYNANYDELETEFILES org/omg/DynamicAny/*POA* org/omg/DynamicAny/*Holder* org/omg/DynamicAny/DynValueBoxHelper.java org/omg/DynamicAny/DynValueCommonHelper.java org/omg/DynamicAny/_DynValueCommonStub.java org/omg/DynamicAny/_DynValueBoxStub.java org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.java org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.java org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.java IOPDELETEFILES org/omg/IOP/BI_DIR_IIOP.java org/omg/IOP/ChainBypassCheck.java org/omg/IOP/ChainBypassInfo.java org/omg/IOP/FORWARDED_IDENTITY.java org/omg/IOP/INVOCATION_POLICIES.java org/omg/IOP/LogicalThreadId.java org/omg/IOP/SendingContextRunTime.java org/omg/IOP/UnknownExceptionInfo.java org/omg/IOP/TaggedComponentSeqHolder.java POAHELHOLFILES org/omg/PortableServer/CurrentPackage/NoContextHolder.java org/omg/PortableServer/ForwardRequestHolder.java org/omg/PortableServer/IdAssignmentPolicyValueHelper.java org/omg/PortableServer/IdAssignmentPolicyValueHolder.java org/omg/PortableServer/IdUniquenessPolicyValueHelper.java org/omg/PortableServer/IdUniquenessPolicyValueHolder.java org/omg/PortableServer/ImplicitActivationPolicyValueHelper.java org/omg/PortableServer/ImplicitActivationPolicyValueHolder.java org/omg/PortableServer/LifespanPolicyValueHelper.java org/omg/PortableServer/LifespanPolicyValueHolder.java org/omg/PortableServer/ServantRetentionPolicyValueHelper.java org/omg/PortableServer/ServantRetentionPolicyValueHolder.java org/omg/PortableServer/ObjectIdHelper.java org/omg/PortableServer/ObjectIdHolder.java org/omg/PortableServer/POAListHelper.java org/omg/PortableServer/POAListHolder.java org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.java org/omg/PortableServer/POAManagerPackage/StateHelper.java org/omg/PortableServer/POAManagerPackage/StateHolder.java org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.java org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.java org/omg/PortableServer/POAPackage/InvalidPolicyHolder.java org/omg/PortableServer/POAPackage/NoServantHolder.java org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.java org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ServantNotActiveHolder.java org/omg/PortableServer/POAPackage/WrongAdapterHolder.java org/omg/PortableServer/POAPackage/WrongPolicyHolder.java org/omg/PortableServer/RequestProcessingPolicyValueHelper.java org/omg/PortableServer/RequestProcessingPolicyValueHolder.java org/omg/PortableServer/ServantActivatorHolder.java org/omg/PortableServer/ServantLocatorHolder.java org/omg/PortableServer/ThreadPolicyValueHelper.java org/omg/PortableServer/ThreadPolicyValueHolder.java PIHELHOLFILES org/omg/PortableInterceptor/ClientRequestInfoHelper.java org/omg/PortableInterceptor/ClientRequestInterceptorHelper.java org/omg/PortableInterceptor/IORInfoHelper.java org/omg/PortableInterceptor/IORInterceptorHelper.java org/omg/PortableInterceptor/InterceptorHelper.java org/omg/PortableInterceptor/ORBInitInfoHelper.java org/omg/PortableInterceptor/ORBInitializerHelper.java org/omg/PortableInterceptor/PolicyFactoryHelper.java org/omg/PortableInterceptor/ReplyStatusHelper.java org/omg/PortableInterceptor/RequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInterceptorHelper.java org/omg/PortableInterceptor/SlotIdHelper.java org/omg/PortableInterceptor/ClientRequestInfoHolder.java org/omg/PortableInterceptor/ClientRequestInterceptorHolder.java org/omg/PortableInterceptor/CurrentHolder.java org/omg/PortableInterceptor/ForwardRequestHolder.java org/omg/PortableInterceptor/IORInfoHolder.java org/omg/PortableInterceptor/IORInterceptorHolder.java org/omg/PortableInterceptor/InterceptorHolder.java org/omg/PortableInterceptor/InvalidSlotHolder.java org/omg/PortableInterceptor/ORBInitInfoHolder.java org/omg/PortableInterceptor/ORBInitializerHolder.java org/omg/PortableInterceptor/PolicyFactoryHolder.java org/omg/PortableInterceptor/RequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInterceptorHolder.java org/omg/PortableInterceptor/TaggedComponentSeqHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHolder.java org/omg/IOP/CodecPackage/FormatMismatchHolder.java org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.java org/omg/IOP/CodecPackage/TypeMismatchHolder.java org/omg/IOP/CodecHelper.java org/omg/IOP/EncodingFormatHelper.java org/omg/IOP/EncodingHelper.java org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.java org/omg/IOP/CodecFactoryHolder.java org/omg/IOP/CodecHolder.java org/omg/IOP/EncodingHolder.java org/omg/IOP/TaggedComponentSeqHelper.java org/omg/Dynamic/ContextListHelper.java org/omg/Dynamic/ExceptionListHelper.java org/omg/Dynamic/ParameterHolder.java org/omg/Dynamic/ParameterListHolder.java org/omg/Dynamic/ExceptionListHolder.java org/omg/Dynamic/ParameterHelper.java org/omg/Dynamic/ParameterListHelper.java org/omg/Dynamic/RequestContextHelper.java CORBAX org/omg/CORBA/OctetSeqHelper.java org/omg/CORBA/OctetSeqHolder.java org/omg/CORBA/PolicyError.java org/omg/CORBA/RepositoryIdHelper.java)) + +$(BUILD_IDLS): $(BUILD_IDLJ) + +################################################################################ +# Run stripproperties on all sunorb resource files. + +STRIP_PROP_SRC_FILES := $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb*.properties") +STRIP_PROP_FILES := $(patsubst $(CORBA_TOPDIR)/src/share/classes/%, $(CORBA_OUTPUTDIR)/classes/%, \ + $(STRIP_PROP_SRC_FILES)) +# Simple delivery of zh_HK properties files just copies zh_TW properties files +STRIP_PROP_SRC_FILE_ZH_TW := $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties") +STRIP_PROP_SRC_FILES += $(STRIP_PROP_SRC_FILE_ZH_TW) +STRIP_PROP_FILES += $(patsubst $(CORBA_TOPDIR)/src/share/classes/%_zh_TW.properties, \ + $(CORBA_OUTPUTDIR)/classes/%_zh_HK.properties, $(STRIP_PROP_SRC_FILE_ZH_TW)) +STRIP_PROP_CMDLINE := $(subst _SPACE_, $(SPACE), \ + $(join $(addprefix -clean_SPACE_, $(STRIP_PROP_SRC_FILES)), \ + $(addprefix _SPACE_, $(STRIP_PROP_FILES)))) + +$(CORBA_OUTPUTDIR)/_the.stripped_properties: $(STRIP_PROP_SRC_FILES) \ + $(BUILD_STRIPPROP) + $(MKDIR) -p $(sort $(dir $(STRIP_PROP_FILES))) + $(call ListPathsSafely,STRIP_PROP_CMDLINE,\n, >> $(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline) + $(TOOL_STRIPPROP_CMD) @$(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline + $(TOUCH) $@ + +################################################################################ + +all: $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/_the.stripped_properties $(LOGWRAPPER_TARGETS) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 7b9d7597d6e..9b4aa750ec2 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -404,3 +404,4 @@ ce42d815dd2130250acf6132b51b624001638f0d jdk8-b119 fca262db9c4309f99d2f5542ab0780e45c2f1578 jdk8-b120 ce2d7e46f3c7e41241f3b407705a4071323a11ab jdk9-b00 050a626a88951140df874f7b163e304d07b6c296 jdk9-b01 +b188446de75bda5fc52d102cddf242c3ef5ecbdf jdk9-b02 diff --git a/hotspot/agent/make/mkinstall b/hotspot/agent/make/mkinstall index a9940005317..4277e54f1f6 100644 --- a/hotspot/agent/make/mkinstall +++ b/hotspot/agent/make/mkinstall @@ -27,7 +27,9 @@ jar -cvf $SA_NAME/sa.jar -C ../build/classes . cp ../src/os/solaris/proc/amd64/libsaproc.so $SA_NAME/solaris/amd64 cp ../src/os/solaris/proc/sparc/libsaproc.so $SA_NAME/solaris/sparc +cp ../src/os/solaris/proc/sparc/libsaproc_audit.so $SA_NAME/solaris/sparc cp ../src/os/solaris/proc/sparcv9/libsaproc.so $SA_NAME/solaris/sparcv9 +cp ../src/os/solaris/proc/sparcv9/libsaproc_audit.so $SA_NAME/solaris/sparcv9 cp ../src/os/solaris/proc/i386/libsaproc.so $SA_NAME/solaris/i386 cp ../src/os/linux/i386/libsaproc.so $SA_NAME/linux/i386 cp ../src/os/linux/ia64/libsaproc.so $SA_NAME/linux/ia64 diff --git a/hotspot/agent/make/saenv.sh b/hotspot/agent/make/saenv.sh index ab9a0a431c4..15fb0aca2b0 100644 --- a/hotspot/agent/make/saenv.sh +++ b/hotspot/agent/make/saenv.sh @@ -48,16 +48,17 @@ if [ "$OS" = "Linux" ]; then CPU=i386 fi else - # configure audit helper library if SA_ALTROOT is set - if [ -n "$SA_ALTROOT" ]; then - LD_AUDIT_32=$STARTDIR/../src/os/solaris/proc/`uname -p`/libsaproc_audit.so - export LD_AUDIT_32 - if [ ! -f $LD_AUDIT_32 ]; then - echo "SA_ALTROOT is set and can't find libsaproc_audit.so." - echo "Make sure to build it with 'make natives'." - exit 1 - fi + # configure audit helper library for solaris + LD_AUDIT_32=$STARTDIR/../src/os/solaris/proc/`uname -p`/libsaproc_audit.so + if [ ! -f $LD_AUDIT_32 ]; then + LD_AUDIT_32=$STARTDIR/solaris/`uname -p`/libsaproc_audit.so + fi + if [ ! -f $LD_AUDIT_32 ]; then + echo "Can't find libsaproc_audit.so." + echo "Make sure to build it with 'make natives'." + exit 1 fi + export LD_AUDIT_32 SA_LIBPATH=$STARTDIR/../src/os/solaris/proc/`uname -p`:$STARTDIR/solaris/`uname -p` OPTIONS="-Dsa.library.path=$SA_LIBPATH -Dsun.jvm.hotspot.debugger.useProcDebugger" CPU=sparc diff --git a/hotspot/agent/make/saenv64.sh b/hotspot/agent/make/saenv64.sh index c00dc0d17c0..a68d34c99a2 100644 --- a/hotspot/agent/make/saenv64.sh +++ b/hotspot/agent/make/saenv64.sh @@ -43,16 +43,19 @@ else fi fi -# configure audit helper library if SA_ALTROOT is set -if [ -n "$SA_ALTROOT" ]; then - LD_AUDIT_64=$STARTDIR/../src/os/solaris/proc/$CPU/libsaproc_audit.so - export LD_AUDIT_64 - if [ ! -f $LD_AUDIT_64 ]; then - echo "SA_ALTROOT is set and can't find libsaproc_audit.so." - echo "Make sure to build it with 'make natives'." - exit 1 - fi +# configure audit helper library +LD_AUDIT_64=$STARTDIR/../src/os/solaris/proc/$CPU/libsaproc_audit.so +if [ ! -f $LD_AUDIT_64 ]; then + LD_AUDIT_64=$STARTDIR/solaris/$CPU/libsaproc_audit.so fi + +if [ ! -f $LD_AUDIT_64 ]; then + echo "Can't find libsaproc_audit.so." + echo "Make sure to build it with 'make natives'." + exit 1 +fi + +export LD_AUDIT_64 SA_LIBPATH=$STARTDIR/../src/os/solaris/proc/$CPU:$STARTDIR/solaris/$CPU OPTIONS="-Dsa.library.path=$SA_LIBPATH -Dsun.jvm.hotspot.debugger.useProcDebugger" diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java index 2b81bf09d50..a055fe1619c 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -152,7 +152,7 @@ public class ConstantPool extends Metadata implements ClassConstants { private long indexOffset(long index) { if (Assert.ASSERTS_ENABLED) { - Assert.that(index > 0 && index < getLength(), "invalid cp index " + index + " " + getLength()); + Assert.that(index >= 0 && index < getLength(), "invalid cp index " + index + " " + getLength()); } return (index * getElementSize()) + headerSize; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java index 40dc912fd8e..0c5202f9c5f 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -98,11 +98,14 @@ public class ByteCodeRewriter break; default: throw new IllegalArgumentException(); } + if (cpCache == null) { return (short) cpCacheIndex; } else if (fmt.indexOf("JJJJ") >= 0) { - // change byte-ordering and go via secondary cache entry - throw new InternalError("unimplemented"); + // Invokedynamic require special handling + cpCacheIndex = ~cpCacheIndex; + cpCacheIndex = bytes.swapInt(cpCacheIndex); + return (short) cpCache.getEntryAt(cpCacheIndex).getConstantPoolIndex(); } else if (fmt.indexOf("JJ") >= 0) { // change byte-ordering and go via cache return (short) cpCache.getEntryAt((int) (0xFFFF & bytes.swapShort((short)cpCacheIndex))).getConstantPoolIndex(); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java index e9248e74fdc..e2281e7b321 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -61,8 +61,9 @@ public class Hashtable extends BasicHashtable { long h = 0; int s = 0; int len = buf.length; + // Emulate the unsigned int in java_lang_String::hash_code while (len-- > 0) { - h = 31*h + (0xFFL & buf[s]); + h = 31*h + (0xFFFFFFFFL & buf[s]); s++; } return h & 0xFFFFFFFFL; diff --git a/hotspot/make/bsd/makefiles/adjust-mflags.sh b/hotspot/make/bsd/makefiles/adjust-mflags.sh index 484fa85e8bb..97bc02db7f1 100644 --- a/hotspot/make/bsd/makefiles/adjust-mflags.sh +++ b/hotspot/make/bsd/makefiles/adjust-mflags.sh @@ -64,7 +64,7 @@ MFLAGS=` echo "$MFLAGS" \ | sed ' s/^-/ -/ - s/ -\([^ ][^ ]*\)j/ -\1 -j/ + s/ -\([^ I][^ I]*\)j/ -\1 -j/ s/ -j[0-9][0-9]*/ -j/ s/ -j\([^ ]\)/ -j -\1/ s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/ diff --git a/hotspot/make/bsd/makefiles/debug.make b/hotspot/make/bsd/makefiles/debug.make index c14d974fbfb..1c4ef1418b1 100644 --- a/hotspot/make/bsd/makefiles/debug.make +++ b/hotspot/make/bsd/makefiles/debug.make @@ -36,6 +36,9 @@ CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_ # Linker mapfile MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-debug +ifeq ($(OS_VENDOR), Darwin) +MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-darwin-debug +endif VERSION = debug SYSDEFS += -DASSERT diff --git a/hotspot/make/bsd/makefiles/dtrace.make b/hotspot/make/bsd/makefiles/dtrace.make index 9374062d115..7bef4f8a616 100644 --- a/hotspot/make/bsd/makefiles/dtrace.make +++ b/hotspot/make/bsd/makefiles/dtrace.make @@ -68,11 +68,9 @@ endif # Use mapfile with libjvm_db.so LIBJVM_DB_MAPFILE = # no mapfile for usdt2 # $(MAKEFILES_DIR)/mapfile-vers-jvm_db -#LFLAGS_JVM_DB += $(MAPFLAG:FILENAME=$(LIBJVM_DB_MAPFILE)) # Use mapfile with libjvm_dtrace.so LIBJVM_DTRACE_MAPFILE = # no mapfile for usdt2 # $(MAKEFILES_DIR)/mapfile-vers-jvm_dtrace -#LFLAGS_JVM_DTRACE += $(MAPFLAG:FILENAME=$(LIBJVM_DTRACE_MAPFILE)) LFLAGS_JVM_DB += $(PICFLAG) # -D_REENTRANT LFLAGS_JVM_DTRACE += $(PICFLAG) # -D_REENTRANT @@ -260,9 +258,6 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) endif endif -#$(DTRACE).d: $(DTRACE_SRCDIR)/hotspot.d $(DTRACE_SRCDIR)/hotspot_jni.d \ -# $(DTRACE_SRCDIR)/hs_private.d $(DTRACE_SRCDIR)/jhelper.d -# $(QUIETLY) cat $^ > $@ $(DtraceOutDir): mkdir $(DtraceOutDir) @@ -276,100 +271,25 @@ $(DtraceOutDir)/hotspot_jni.h: $(DTRACE_SRCDIR)/hotspot_jni.d | $(DtraceOutDir) $(DtraceOutDir)/hs_private.h: $(DTRACE_SRCDIR)/hs_private.d | $(DtraceOutDir) $(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/hs_private.d -$(DtraceOutDir)/jhelper.h: $(DTRACE_SRCDIR)/jhelper.d $(JVMOFFS).o | $(DtraceOutDir) - $(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/jhelper.d - -# jhelper currently disabled dtrace_gen_headers: $(DtraceOutDir)/hotspot.h $(DtraceOutDir)/hotspot_jni.h $(DtraceOutDir)/hs_private.h -DTraced_Files = ciEnv.o \ - classLoadingService.o \ - compileBroker.o \ - hashtable.o \ - instanceKlass.o \ - java.o \ - jni.o \ - jvm.o \ - memoryManager.o \ - nmethod.o \ - objectMonitor.o \ - runtimeService.o \ - sharedRuntime.o \ - synchronizer.o \ - thread.o \ - unsafe.o \ - vmThread.o \ - vmCMSOperations.o \ - vmPSOperations.o \ - vmGCOperations.o \ - -# Dtrace is available, so we build $(DTRACE.o) -#$(DTRACE.o): $(DTRACE).d $(JVMOFFS).h $(JVMOFFS)Index.h $(DTraced_Files) -# @echo Compiling $(DTRACE).d - -# $(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -G -xlazyload -o $@ -s $(DTRACE).d \ -# $(DTraced_Files) ||\ -# STATUS=$$?;\ -# if [ x"$$STATUS" = x"1" -a \ -# x`uname -r` = x"5.10" -a \ -# x`uname -p` = x"sparc" ]; then\ -# echo "*****************************************************************";\ -# echo "* If you are building server compiler, and the error message is ";\ -# echo "* \"incorrect ELF machine type...\", you have run into solaris bug ";\ -# echo "* 6213962, \"dtrace -G doesn't work on sparcv8+ object files\".";\ -# echo "* Either patch/upgrade your system (>= S10u1_15), or set the ";\ -# echo "* environment variable HOTSPOT_DISABLE_DTRACE_PROBES to disable ";\ -# echo "* dtrace probes for this build.";\ -# echo "*****************************************************************";\ -# fi;\ -# exit $$STATUS - # Since some DTraced_Files are in LIBJVM.o and they are touched by this - # command, and libgenerateJvmOffsets.so depends on LIBJVM.o, 'make' will - # think it needs to rebuild libgenerateJvmOffsets.so and thus JvmOffsets* - # files, but it doesn't, so we touch the necessary files to prevent later - # recompilation. Note: we only touch the necessary files if they already - # exist in order to close a race where an empty file can be created - # before the real build rule is executed. - # But, we can't touch the *.h files: This rule depends - # on them, and that would cause an infinite cycle of rebuilding. - # Neither the *.h or *.ccp files need to be touched, since they have - # rules which do not update them when the generator file has not - # changed their contents. -# $(QUIETLY) if [ -f lib$(GENOFFS).so ]; then touch lib$(GENOFFS).so; fi -# $(QUIETLY) if [ -f $(GENOFFS) ]; then touch $(GENOFFS); fi -# $(QUIETLY) if [ -f $(JVMOFFS.o) ]; then touch $(JVMOFFS.o); fi .PHONY: dtraceCheck -#SYSTEM_DTRACE_H = /usr/include/dtrace.h SYSTEM_DTRACE_PROG = /usr/sbin/dtrace -#PATCH_DTRACE_PROG = /opt/SUNWdtrd/sbin/dtrace systemDtraceFound := $(wildcard ${SYSTEM_DTRACE_PROG}) -#patchDtraceFound := $(wildcard ${PATCH_DTRACE_PROG}) -#systemDtraceHdrFound := $(wildcard $(SYSTEM_DTRACE_H)) -#ifneq ("$(systemDtraceHdrFound)", "") -#CFLAGS += -DHAVE_DTRACE_H -#endif - -#ifneq ("$(patchDtraceFound)", "") -#DTRACE_PROG=$(PATCH_DTRACE_PROG) -#DTRACE_INCL=-I/opt/SUNWdtrd/include -#else ifneq ("$(systemDtraceFound)", "") DTRACE_PROG=$(SYSTEM_DTRACE_PROG) else -endif # ifneq ("$(systemDtraceFound)", "") -#endif # ifneq ("$(patchDtraceFound)", "") +endif ifneq ("${DTRACE_PROG}", "") ifeq ("${HOTSPOT_DISABLE_DTRACE_PROBES}", "") DTRACE_OBJS = $(DTRACE.o) #$(JVMOFFS.o) CFLAGS += -DDTRACE_ENABLED #$(DTRACE_INCL) -#clangCFLAGS += -DDTRACE_ENABLED -fno-optimize-sibling-calls -#MAPFILE_DTRACE_OPT = $(MAPFILE_DTRACE) dtraceCheck: diff --git a/hotspot/make/bsd/makefiles/fastdebug.make b/hotspot/make/bsd/makefiles/fastdebug.make index d1019f07d3f..9ff25742f21 100644 --- a/hotspot/make/bsd/makefiles/fastdebug.make +++ b/hotspot/make/bsd/makefiles/fastdebug.make @@ -57,6 +57,9 @@ CFLAGS$(HOTSPARC_GENERIC) += $(OPT_CFLAGS/BYFILE) # Linker mapfile MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-debug +ifeq ($(OS_VENDOR), Darwin) +MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-darwin-debug +endif VERSION = fastdebug SYSDEFS += -DASSERT -DCHECK_UNHANDLED_OOPS diff --git a/hotspot/make/bsd/makefiles/mapfile-vers-darwin-debug b/hotspot/make/bsd/makefiles/mapfile-vers-darwin-debug new file mode 100644 index 00000000000..d446cc81d84 --- /dev/null +++ b/hotspot/make/bsd/makefiles/mapfile-vers-darwin-debug @@ -0,0 +1,256 @@ +# +# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# +# +# Only used for OSX/Darwin builds + +# Define public interface. + # _JNI + _JNI_CreateJavaVM + _JNI_GetCreatedJavaVMs + _JNI_GetDefaultJavaVMInitArgs + + # _JVM + _JVM_Accept + _JVM_ActiveProcessorCount + _JVM_AllocateNewArray + _JVM_AllocateNewObject + _JVM_ArrayCopy + _JVM_AssertionStatusDirectives + _JVM_Available + _JVM_Bind + _JVM_ClassDepth + _JVM_ClassLoaderDepth + _JVM_Clone + _JVM_Close + _JVM_CX8Field + _JVM_CompileClass + _JVM_CompileClasses + _JVM_CompilerCommand + _JVM_Connect + _JVM_ConstantPoolGetClassAt + _JVM_ConstantPoolGetClassAtIfLoaded + _JVM_ConstantPoolGetDoubleAt + _JVM_ConstantPoolGetFieldAt + _JVM_ConstantPoolGetFieldAtIfLoaded + _JVM_ConstantPoolGetFloatAt + _JVM_ConstantPoolGetIntAt + _JVM_ConstantPoolGetLongAt + _JVM_ConstantPoolGetMethodAt + _JVM_ConstantPoolGetMethodAtIfLoaded + _JVM_ConstantPoolGetMemberRefInfoAt + _JVM_ConstantPoolGetSize + _JVM_ConstantPoolGetStringAt + _JVM_ConstantPoolGetUTF8At + _JVM_CountStackFrames + _JVM_CurrentClassLoader + _JVM_CurrentLoadedClass + _JVM_CurrentThread + _JVM_CurrentTimeMillis + _JVM_DefineClass + _JVM_DefineClassWithSource + _JVM_DefineClassWithSourceCond + _JVM_DesiredAssertionStatus + _JVM_DisableCompiler + _JVM_DoPrivileged + _JVM_DTraceGetVersion + _JVM_DTraceActivate + _JVM_DTraceIsProbeEnabled + _JVM_DTraceIsSupported + _JVM_DTraceDispose + _JVM_DumpAllStacks + _JVM_DumpThreads + _JVM_EnableCompiler + _JVM_Exit + _JVM_FillInStackTrace + _JVM_FindClassFromClass + _JVM_FindClassFromClassLoader + _JVM_FindClassFromBootLoader + _JVM_FindLibraryEntry + _JVM_FindLoadedClass + _JVM_FindPrimitiveClass + _JVM_FindSignal + _JVM_FreeMemory + _JVM_GC + _JVM_GetAllThreads + _JVM_GetArrayElement + _JVM_GetArrayLength + _JVM_GetCPClassNameUTF + _JVM_GetCPFieldClassNameUTF + _JVM_GetCPFieldModifiers + _JVM_GetCPFieldNameUTF + _JVM_GetCPFieldSignatureUTF + _JVM_GetCPMethodClassNameUTF + _JVM_GetCPMethodModifiers + _JVM_GetCPMethodNameUTF + _JVM_GetCPMethodSignatureUTF + _JVM_GetCallerClass + _JVM_GetClassAccessFlags + _JVM_GetClassAnnotations + _JVM_GetClassCPEntriesCount + _JVM_GetClassCPTypes + _JVM_GetClassConstantPool + _JVM_GetClassContext + _JVM_GetClassDeclaredConstructors + _JVM_GetClassDeclaredFields + _JVM_GetClassDeclaredMethods + _JVM_GetClassFieldsCount + _JVM_GetClassInterfaces + _JVM_GetClassLoader + _JVM_GetClassMethodsCount + _JVM_GetClassModifiers + _JVM_GetClassName + _JVM_GetClassNameUTF + _JVM_GetClassSignature + _JVM_GetClassSigners + _JVM_GetClassTypeAnnotations + _JVM_GetComponentType + _JVM_GetDeclaredClasses + _JVM_GetDeclaringClass + _JVM_GetEnclosingMethodInfo + _JVM_GetFieldAnnotations + _JVM_GetFieldIxModifiers + _JVM_GetFieldTypeAnnotations + _JVM_GetHostName + _JVM_GetInheritedAccessControlContext + _JVM_GetInterfaceVersion + _JVM_GetLastErrorString + _JVM_GetManagement + _JVM_GetMethodAnnotations + _JVM_GetMethodDefaultAnnotationValue + _JVM_GetMethodIxArgsSize + _JVM_GetMethodIxByteCode + _JVM_GetMethodIxByteCodeLength + _JVM_GetMethodIxExceptionIndexes + _JVM_GetMethodIxExceptionTableEntry + _JVM_GetMethodIxExceptionTableLength + _JVM_GetMethodIxExceptionsCount + _JVM_GetMethodIxLocalsCount + _JVM_GetMethodIxMaxStack + _JVM_GetMethodIxModifiers + _JVM_GetMethodIxNameUTF + _JVM_GetMethodIxSignatureUTF + _JVM_GetMethodParameterAnnotations + _JVM_GetMethodParameters + _JVM_GetMethodTypeAnnotations + _JVM_GetPrimitiveArrayElement + _JVM_GetProtectionDomain + _JVM_GetSockName + _JVM_GetSockOpt + _JVM_GetStackAccessControlContext + _JVM_GetStackTraceDepth + _JVM_GetStackTraceElement + _JVM_GetSystemPackage + _JVM_GetSystemPackages + _JVM_GetThreadStateNames + _JVM_GetThreadStateValues + _JVM_GetVersionInfo + _JVM_Halt + _JVM_HoldsLock + _JVM_IHashCode + _JVM_InitAgentProperties + _JVM_InitProperties + _JVM_InitializeCompiler + _JVM_InitializeSocketLibrary + _JVM_InternString + _JVM_Interrupt + _JVM_InvokeMethod + _JVM_IsArrayClass + _JVM_IsConstructorIx + _JVM_IsInterface + _JVM_IsInterrupted + _JVM_IsNaN + _JVM_IsPrimitiveClass + _JVM_IsSameClassPackage + _JVM_IsSilentCompiler + _JVM_IsSupportedJNIVersion + _JVM_IsThreadAlive + _JVM_IsVMGeneratedMethodIx + _JVM_LatestUserDefinedLoader + _JVM_Listen + _JVM_LoadClass0 + _JVM_LoadLibrary + _JVM_Lseek + _JVM_MaxObjectInspectionAge + _JVM_MaxMemory + _JVM_MonitorNotify + _JVM_MonitorNotifyAll + _JVM_MonitorWait + _JVM_NanoTime + _JVM_NativePath + _JVM_NewArray + _JVM_NewInstanceFromConstructor + _JVM_NewMultiArray + _JVM_OnExit + _JVM_Open + _JVM_RaiseSignal + _JVM_RawMonitorCreate + _JVM_RawMonitorDestroy + _JVM_RawMonitorEnter + _JVM_RawMonitorExit + _JVM_Read + _JVM_Recv + _JVM_RecvFrom + _JVM_RegisterSignal + _JVM_ReleaseUTF + _JVM_ResolveClass + _JVM_ResumeThread + _JVM_Send + _JVM_SendTo + _JVM_SetArrayElement + _JVM_SetClassSigners + _JVM_SetLength + _JVM_SetNativeThreadName + _JVM_SetPrimitiveArrayElement + _JVM_SetSockOpt + _JVM_SetThreadPriority + _JVM_Sleep + _JVM_Socket + _JVM_SocketAvailable + _JVM_SocketClose + _JVM_SocketShutdown + _JVM_StartThread + _JVM_StopThread + _JVM_SuspendThread + _JVM_SupportsCX8 + _JVM_Sync + _JVM_Timeout + _JVM_TotalMemory + _JVM_TraceInstructions + _JVM_TraceMethodCalls + _JVM_UnloadLibrary + _JVM_Write + _JVM_Yield + _JVM_handle_bsd_signal + + # miscellaneous functions + _jio_fprintf + _jio_printf + _jio_snprintf + _jio_vfprintf + _jio_vsnprintf + + # This is for Forte Analyzer profiling support. + _AsyncGetCallTrace + + # INSERT VTABLE SYMBOLS HERE + diff --git a/hotspot/make/bsd/makefiles/mapfile-vers-darwin-product b/hotspot/make/bsd/makefiles/mapfile-vers-darwin-product new file mode 100644 index 00000000000..d446cc81d84 --- /dev/null +++ b/hotspot/make/bsd/makefiles/mapfile-vers-darwin-product @@ -0,0 +1,256 @@ +# +# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# +# +# Only used for OSX/Darwin builds + +# Define public interface. + # _JNI + _JNI_CreateJavaVM + _JNI_GetCreatedJavaVMs + _JNI_GetDefaultJavaVMInitArgs + + # _JVM + _JVM_Accept + _JVM_ActiveProcessorCount + _JVM_AllocateNewArray + _JVM_AllocateNewObject + _JVM_ArrayCopy + _JVM_AssertionStatusDirectives + _JVM_Available + _JVM_Bind + _JVM_ClassDepth + _JVM_ClassLoaderDepth + _JVM_Clone + _JVM_Close + _JVM_CX8Field + _JVM_CompileClass + _JVM_CompileClasses + _JVM_CompilerCommand + _JVM_Connect + _JVM_ConstantPoolGetClassAt + _JVM_ConstantPoolGetClassAtIfLoaded + _JVM_ConstantPoolGetDoubleAt + _JVM_ConstantPoolGetFieldAt + _JVM_ConstantPoolGetFieldAtIfLoaded + _JVM_ConstantPoolGetFloatAt + _JVM_ConstantPoolGetIntAt + _JVM_ConstantPoolGetLongAt + _JVM_ConstantPoolGetMethodAt + _JVM_ConstantPoolGetMethodAtIfLoaded + _JVM_ConstantPoolGetMemberRefInfoAt + _JVM_ConstantPoolGetSize + _JVM_ConstantPoolGetStringAt + _JVM_ConstantPoolGetUTF8At + _JVM_CountStackFrames + _JVM_CurrentClassLoader + _JVM_CurrentLoadedClass + _JVM_CurrentThread + _JVM_CurrentTimeMillis + _JVM_DefineClass + _JVM_DefineClassWithSource + _JVM_DefineClassWithSourceCond + _JVM_DesiredAssertionStatus + _JVM_DisableCompiler + _JVM_DoPrivileged + _JVM_DTraceGetVersion + _JVM_DTraceActivate + _JVM_DTraceIsProbeEnabled + _JVM_DTraceIsSupported + _JVM_DTraceDispose + _JVM_DumpAllStacks + _JVM_DumpThreads + _JVM_EnableCompiler + _JVM_Exit + _JVM_FillInStackTrace + _JVM_FindClassFromClass + _JVM_FindClassFromClassLoader + _JVM_FindClassFromBootLoader + _JVM_FindLibraryEntry + _JVM_FindLoadedClass + _JVM_FindPrimitiveClass + _JVM_FindSignal + _JVM_FreeMemory + _JVM_GC + _JVM_GetAllThreads + _JVM_GetArrayElement + _JVM_GetArrayLength + _JVM_GetCPClassNameUTF + _JVM_GetCPFieldClassNameUTF + _JVM_GetCPFieldModifiers + _JVM_GetCPFieldNameUTF + _JVM_GetCPFieldSignatureUTF + _JVM_GetCPMethodClassNameUTF + _JVM_GetCPMethodModifiers + _JVM_GetCPMethodNameUTF + _JVM_GetCPMethodSignatureUTF + _JVM_GetCallerClass + _JVM_GetClassAccessFlags + _JVM_GetClassAnnotations + _JVM_GetClassCPEntriesCount + _JVM_GetClassCPTypes + _JVM_GetClassConstantPool + _JVM_GetClassContext + _JVM_GetClassDeclaredConstructors + _JVM_GetClassDeclaredFields + _JVM_GetClassDeclaredMethods + _JVM_GetClassFieldsCount + _JVM_GetClassInterfaces + _JVM_GetClassLoader + _JVM_GetClassMethodsCount + _JVM_GetClassModifiers + _JVM_GetClassName + _JVM_GetClassNameUTF + _JVM_GetClassSignature + _JVM_GetClassSigners + _JVM_GetClassTypeAnnotations + _JVM_GetComponentType + _JVM_GetDeclaredClasses + _JVM_GetDeclaringClass + _JVM_GetEnclosingMethodInfo + _JVM_GetFieldAnnotations + _JVM_GetFieldIxModifiers + _JVM_GetFieldTypeAnnotations + _JVM_GetHostName + _JVM_GetInheritedAccessControlContext + _JVM_GetInterfaceVersion + _JVM_GetLastErrorString + _JVM_GetManagement + _JVM_GetMethodAnnotations + _JVM_GetMethodDefaultAnnotationValue + _JVM_GetMethodIxArgsSize + _JVM_GetMethodIxByteCode + _JVM_GetMethodIxByteCodeLength + _JVM_GetMethodIxExceptionIndexes + _JVM_GetMethodIxExceptionTableEntry + _JVM_GetMethodIxExceptionTableLength + _JVM_GetMethodIxExceptionsCount + _JVM_GetMethodIxLocalsCount + _JVM_GetMethodIxMaxStack + _JVM_GetMethodIxModifiers + _JVM_GetMethodIxNameUTF + _JVM_GetMethodIxSignatureUTF + _JVM_GetMethodParameterAnnotations + _JVM_GetMethodParameters + _JVM_GetMethodTypeAnnotations + _JVM_GetPrimitiveArrayElement + _JVM_GetProtectionDomain + _JVM_GetSockName + _JVM_GetSockOpt + _JVM_GetStackAccessControlContext + _JVM_GetStackTraceDepth + _JVM_GetStackTraceElement + _JVM_GetSystemPackage + _JVM_GetSystemPackages + _JVM_GetThreadStateNames + _JVM_GetThreadStateValues + _JVM_GetVersionInfo + _JVM_Halt + _JVM_HoldsLock + _JVM_IHashCode + _JVM_InitAgentProperties + _JVM_InitProperties + _JVM_InitializeCompiler + _JVM_InitializeSocketLibrary + _JVM_InternString + _JVM_Interrupt + _JVM_InvokeMethod + _JVM_IsArrayClass + _JVM_IsConstructorIx + _JVM_IsInterface + _JVM_IsInterrupted + _JVM_IsNaN + _JVM_IsPrimitiveClass + _JVM_IsSameClassPackage + _JVM_IsSilentCompiler + _JVM_IsSupportedJNIVersion + _JVM_IsThreadAlive + _JVM_IsVMGeneratedMethodIx + _JVM_LatestUserDefinedLoader + _JVM_Listen + _JVM_LoadClass0 + _JVM_LoadLibrary + _JVM_Lseek + _JVM_MaxObjectInspectionAge + _JVM_MaxMemory + _JVM_MonitorNotify + _JVM_MonitorNotifyAll + _JVM_MonitorWait + _JVM_NanoTime + _JVM_NativePath + _JVM_NewArray + _JVM_NewInstanceFromConstructor + _JVM_NewMultiArray + _JVM_OnExit + _JVM_Open + _JVM_RaiseSignal + _JVM_RawMonitorCreate + _JVM_RawMonitorDestroy + _JVM_RawMonitorEnter + _JVM_RawMonitorExit + _JVM_Read + _JVM_Recv + _JVM_RecvFrom + _JVM_RegisterSignal + _JVM_ReleaseUTF + _JVM_ResolveClass + _JVM_ResumeThread + _JVM_Send + _JVM_SendTo + _JVM_SetArrayElement + _JVM_SetClassSigners + _JVM_SetLength + _JVM_SetNativeThreadName + _JVM_SetPrimitiveArrayElement + _JVM_SetSockOpt + _JVM_SetThreadPriority + _JVM_Sleep + _JVM_Socket + _JVM_SocketAvailable + _JVM_SocketClose + _JVM_SocketShutdown + _JVM_StartThread + _JVM_StopThread + _JVM_SuspendThread + _JVM_SupportsCX8 + _JVM_Sync + _JVM_Timeout + _JVM_TotalMemory + _JVM_TraceInstructions + _JVM_TraceMethodCalls + _JVM_UnloadLibrary + _JVM_Write + _JVM_Yield + _JVM_handle_bsd_signal + + # miscellaneous functions + _jio_fprintf + _jio_printf + _jio_snprintf + _jio_vfprintf + _jio_vsnprintf + + # This is for Forte Analyzer profiling support. + _AsyncGetCallTrace + + # INSERT VTABLE SYMBOLS HERE + diff --git a/hotspot/make/bsd/makefiles/mapfile-vers-debug b/hotspot/make/bsd/makefiles/mapfile-vers-debug index d446cc81d84..4936ba711f9 100644 --- a/hotspot/make/bsd/makefiles/mapfile-vers-debug +++ b/hotspot/make/bsd/makefiles/mapfile-vers-debug @@ -19,238 +19,250 @@ # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. +# # -# -# Only used for OSX/Darwin builds # Define public interface. - # _JNI - _JNI_CreateJavaVM - _JNI_GetCreatedJavaVMs - _JNI_GetDefaultJavaVMInitArgs - # _JVM - _JVM_Accept - _JVM_ActiveProcessorCount - _JVM_AllocateNewArray - _JVM_AllocateNewObject - _JVM_ArrayCopy - _JVM_AssertionStatusDirectives - _JVM_Available - _JVM_Bind - _JVM_ClassDepth - _JVM_ClassLoaderDepth - _JVM_Clone - _JVM_Close - _JVM_CX8Field - _JVM_CompileClass - _JVM_CompileClasses - _JVM_CompilerCommand - _JVM_Connect - _JVM_ConstantPoolGetClassAt - _JVM_ConstantPoolGetClassAtIfLoaded - _JVM_ConstantPoolGetDoubleAt - _JVM_ConstantPoolGetFieldAt - _JVM_ConstantPoolGetFieldAtIfLoaded - _JVM_ConstantPoolGetFloatAt - _JVM_ConstantPoolGetIntAt - _JVM_ConstantPoolGetLongAt - _JVM_ConstantPoolGetMethodAt - _JVM_ConstantPoolGetMethodAtIfLoaded - _JVM_ConstantPoolGetMemberRefInfoAt - _JVM_ConstantPoolGetSize - _JVM_ConstantPoolGetStringAt - _JVM_ConstantPoolGetUTF8At - _JVM_CountStackFrames - _JVM_CurrentClassLoader - _JVM_CurrentLoadedClass - _JVM_CurrentThread - _JVM_CurrentTimeMillis - _JVM_DefineClass - _JVM_DefineClassWithSource - _JVM_DefineClassWithSourceCond - _JVM_DesiredAssertionStatus - _JVM_DisableCompiler - _JVM_DoPrivileged - _JVM_DTraceGetVersion - _JVM_DTraceActivate - _JVM_DTraceIsProbeEnabled - _JVM_DTraceIsSupported - _JVM_DTraceDispose - _JVM_DumpAllStacks - _JVM_DumpThreads - _JVM_EnableCompiler - _JVM_Exit - _JVM_FillInStackTrace - _JVM_FindClassFromClass - _JVM_FindClassFromClassLoader - _JVM_FindClassFromBootLoader - _JVM_FindLibraryEntry - _JVM_FindLoadedClass - _JVM_FindPrimitiveClass - _JVM_FindSignal - _JVM_FreeMemory - _JVM_GC - _JVM_GetAllThreads - _JVM_GetArrayElement - _JVM_GetArrayLength - _JVM_GetCPClassNameUTF - _JVM_GetCPFieldClassNameUTF - _JVM_GetCPFieldModifiers - _JVM_GetCPFieldNameUTF - _JVM_GetCPFieldSignatureUTF - _JVM_GetCPMethodClassNameUTF - _JVM_GetCPMethodModifiers - _JVM_GetCPMethodNameUTF - _JVM_GetCPMethodSignatureUTF - _JVM_GetCallerClass - _JVM_GetClassAccessFlags - _JVM_GetClassAnnotations - _JVM_GetClassCPEntriesCount - _JVM_GetClassCPTypes - _JVM_GetClassConstantPool - _JVM_GetClassContext - _JVM_GetClassDeclaredConstructors - _JVM_GetClassDeclaredFields - _JVM_GetClassDeclaredMethods - _JVM_GetClassFieldsCount - _JVM_GetClassInterfaces - _JVM_GetClassLoader - _JVM_GetClassMethodsCount - _JVM_GetClassModifiers - _JVM_GetClassName - _JVM_GetClassNameUTF - _JVM_GetClassSignature - _JVM_GetClassSigners - _JVM_GetClassTypeAnnotations - _JVM_GetComponentType - _JVM_GetDeclaredClasses - _JVM_GetDeclaringClass - _JVM_GetEnclosingMethodInfo - _JVM_GetFieldAnnotations - _JVM_GetFieldIxModifiers - _JVM_GetFieldTypeAnnotations - _JVM_GetHostName - _JVM_GetInheritedAccessControlContext - _JVM_GetInterfaceVersion - _JVM_GetLastErrorString - _JVM_GetManagement - _JVM_GetMethodAnnotations - _JVM_GetMethodDefaultAnnotationValue - _JVM_GetMethodIxArgsSize - _JVM_GetMethodIxByteCode - _JVM_GetMethodIxByteCodeLength - _JVM_GetMethodIxExceptionIndexes - _JVM_GetMethodIxExceptionTableEntry - _JVM_GetMethodIxExceptionTableLength - _JVM_GetMethodIxExceptionsCount - _JVM_GetMethodIxLocalsCount - _JVM_GetMethodIxMaxStack - _JVM_GetMethodIxModifiers - _JVM_GetMethodIxNameUTF - _JVM_GetMethodIxSignatureUTF - _JVM_GetMethodParameterAnnotations - _JVM_GetMethodParameters - _JVM_GetMethodTypeAnnotations - _JVM_GetPrimitiveArrayElement - _JVM_GetProtectionDomain - _JVM_GetSockName - _JVM_GetSockOpt - _JVM_GetStackAccessControlContext - _JVM_GetStackTraceDepth - _JVM_GetStackTraceElement - _JVM_GetSystemPackage - _JVM_GetSystemPackages - _JVM_GetThreadStateNames - _JVM_GetThreadStateValues - _JVM_GetVersionInfo - _JVM_Halt - _JVM_HoldsLock - _JVM_IHashCode - _JVM_InitAgentProperties - _JVM_InitProperties - _JVM_InitializeCompiler - _JVM_InitializeSocketLibrary - _JVM_InternString - _JVM_Interrupt - _JVM_InvokeMethod - _JVM_IsArrayClass - _JVM_IsConstructorIx - _JVM_IsInterface - _JVM_IsInterrupted - _JVM_IsNaN - _JVM_IsPrimitiveClass - _JVM_IsSameClassPackage - _JVM_IsSilentCompiler - _JVM_IsSupportedJNIVersion - _JVM_IsThreadAlive - _JVM_IsVMGeneratedMethodIx - _JVM_LatestUserDefinedLoader - _JVM_Listen - _JVM_LoadClass0 - _JVM_LoadLibrary - _JVM_Lseek - _JVM_MaxObjectInspectionAge - _JVM_MaxMemory - _JVM_MonitorNotify - _JVM_MonitorNotifyAll - _JVM_MonitorWait - _JVM_NanoTime - _JVM_NativePath - _JVM_NewArray - _JVM_NewInstanceFromConstructor - _JVM_NewMultiArray - _JVM_OnExit - _JVM_Open - _JVM_RaiseSignal - _JVM_RawMonitorCreate - _JVM_RawMonitorDestroy - _JVM_RawMonitorEnter - _JVM_RawMonitorExit - _JVM_Read - _JVM_Recv - _JVM_RecvFrom - _JVM_RegisterSignal - _JVM_ReleaseUTF - _JVM_ResolveClass - _JVM_ResumeThread - _JVM_Send - _JVM_SendTo - _JVM_SetArrayElement - _JVM_SetClassSigners - _JVM_SetLength - _JVM_SetNativeThreadName - _JVM_SetPrimitiveArrayElement - _JVM_SetSockOpt - _JVM_SetThreadPriority - _JVM_Sleep - _JVM_Socket - _JVM_SocketAvailable - _JVM_SocketClose - _JVM_SocketShutdown - _JVM_StartThread - _JVM_StopThread - _JVM_SuspendThread - _JVM_SupportsCX8 - _JVM_Sync - _JVM_Timeout - _JVM_TotalMemory - _JVM_TraceInstructions - _JVM_TraceMethodCalls - _JVM_UnloadLibrary - _JVM_Write - _JVM_Yield - _JVM_handle_bsd_signal +SUNWprivate_1.1 { + global: + # JNI + JNI_CreateJavaVM; + JNI_GetCreatedJavaVMs; + JNI_GetDefaultJavaVMInitArgs; + + # JVM + JVM_Accept; + JVM_ActiveProcessorCount; + JVM_AllocateNewArray; + JVM_AllocateNewObject; + JVM_ArrayCopy; + JVM_AssertionStatusDirectives; + JVM_Available; + JVM_Bind; + JVM_ClassDepth; + JVM_ClassLoaderDepth; + JVM_Clone; + JVM_Close; + JVM_CX8Field; + JVM_CompileClass; + JVM_CompileClasses; + JVM_CompilerCommand; + JVM_Connect; + JVM_ConstantPoolGetClassAt; + JVM_ConstantPoolGetClassAtIfLoaded; + JVM_ConstantPoolGetDoubleAt; + JVM_ConstantPoolGetFieldAt; + JVM_ConstantPoolGetFieldAtIfLoaded; + JVM_ConstantPoolGetFloatAt; + JVM_ConstantPoolGetIntAt; + JVM_ConstantPoolGetLongAt; + JVM_ConstantPoolGetMethodAt; + JVM_ConstantPoolGetMethodAtIfLoaded; + JVM_ConstantPoolGetMemberRefInfoAt; + JVM_ConstantPoolGetSize; + JVM_ConstantPoolGetStringAt; + JVM_ConstantPoolGetUTF8At; + JVM_CountStackFrames; + JVM_CurrentClassLoader; + JVM_CurrentLoadedClass; + JVM_CurrentThread; + JVM_CurrentTimeMillis; + JVM_DefineClass; + JVM_DefineClassWithSource; + JVM_DefineClassWithSourceCond; + JVM_DesiredAssertionStatus; + JVM_DisableCompiler; + JVM_DoPrivileged; + JVM_DTraceGetVersion; + JVM_DTraceActivate; + JVM_DTraceIsProbeEnabled; + JVM_DTraceIsSupported; + JVM_DTraceDispose; + JVM_DumpAllStacks; + JVM_DumpThreads; + JVM_EnableCompiler; + JVM_Exit; + JVM_FillInStackTrace; + JVM_FindClassFromClass; + JVM_FindClassFromClassLoader; + JVM_FindClassFromBootLoader; + JVM_FindLibraryEntry; + JVM_FindLoadedClass; + JVM_FindPrimitiveClass; + JVM_FindSignal; + JVM_FreeMemory; + JVM_GC; + JVM_GetAllThreads; + JVM_GetArrayElement; + JVM_GetArrayLength; + JVM_GetCPClassNameUTF; + JVM_GetCPFieldClassNameUTF; + JVM_GetCPFieldModifiers; + JVM_GetCPFieldNameUTF; + JVM_GetCPFieldSignatureUTF; + JVM_GetCPMethodClassNameUTF; + JVM_GetCPMethodModifiers; + JVM_GetCPMethodNameUTF; + JVM_GetCPMethodSignatureUTF; + JVM_GetCallerClass; + JVM_GetClassAccessFlags; + JVM_GetClassAnnotations; + JVM_GetClassCPEntriesCount; + JVM_GetClassCPTypes; + JVM_GetClassConstantPool; + JVM_GetClassContext; + JVM_GetClassDeclaredConstructors; + JVM_GetClassDeclaredFields; + JVM_GetClassDeclaredMethods; + JVM_GetClassFieldsCount; + JVM_GetClassInterfaces; + JVM_GetClassLoader; + JVM_GetClassMethodsCount; + JVM_GetClassModifiers; + JVM_GetClassName; + JVM_GetClassNameUTF; + JVM_GetClassSignature; + JVM_GetClassSigners; + JVM_GetClassTypeAnnotations; + JVM_GetComponentType; + JVM_GetDeclaredClasses; + JVM_GetDeclaringClass; + JVM_GetEnclosingMethodInfo; + JVM_GetFieldAnnotations; + JVM_GetFieldIxModifiers; + JVM_GetFieldTypeAnnotations; + JVM_GetHostName; + JVM_GetInheritedAccessControlContext; + JVM_GetInterfaceVersion; + JVM_GetLastErrorString; + JVM_GetManagement; + JVM_GetMethodAnnotations; + JVM_GetMethodDefaultAnnotationValue; + JVM_GetMethodIxArgsSize; + JVM_GetMethodIxByteCode; + JVM_GetMethodIxByteCodeLength; + JVM_GetMethodIxExceptionIndexes; + JVM_GetMethodIxExceptionTableEntry; + JVM_GetMethodIxExceptionTableLength; + JVM_GetMethodIxExceptionsCount; + JVM_GetMethodIxLocalsCount; + JVM_GetMethodIxMaxStack; + JVM_GetMethodIxModifiers; + JVM_GetMethodIxNameUTF; + JVM_GetMethodIxSignatureUTF; + JVM_GetMethodParameterAnnotations; + JVM_GetMethodParameters; + JVM_GetMethodTypeAnnotations; + JVM_GetPrimitiveArrayElement; + JVM_GetProtectionDomain; + JVM_GetSockName; + JVM_GetSockOpt; + JVM_GetStackAccessControlContext; + JVM_GetStackTraceDepth; + JVM_GetStackTraceElement; + JVM_GetSystemPackage; + JVM_GetSystemPackages; + JVM_GetThreadStateNames; + JVM_GetThreadStateValues; + JVM_GetVersionInfo; + JVM_Halt; + JVM_HoldsLock; + JVM_IHashCode; + JVM_InitAgentProperties; + JVM_InitProperties; + JVM_InitializeCompiler; + JVM_InitializeSocketLibrary; + JVM_InternString; + JVM_Interrupt; + JVM_InvokeMethod; + JVM_IsArrayClass; + JVM_IsConstructorIx; + JVM_IsInterface; + JVM_IsInterrupted; + JVM_IsNaN; + JVM_IsPrimitiveClass; + JVM_IsSameClassPackage; + JVM_IsSilentCompiler; + JVM_IsSupportedJNIVersion; + JVM_IsThreadAlive; + JVM_IsVMGeneratedMethodIx; + JVM_LatestUserDefinedLoader; + JVM_Listen; + JVM_LoadClass0; + JVM_LoadLibrary; + JVM_Lseek; + JVM_MaxObjectInspectionAge; + JVM_MaxMemory; + JVM_MonitorNotify; + JVM_MonitorNotifyAll; + JVM_MonitorWait; + JVM_NanoTime; + JVM_NativePath; + JVM_NewArray; + JVM_NewInstanceFromConstructor; + JVM_NewMultiArray; + JVM_OnExit; + JVM_Open; + JVM_RaiseSignal; + JVM_RawMonitorCreate; + JVM_RawMonitorDestroy; + JVM_RawMonitorEnter; + JVM_RawMonitorExit; + JVM_Read; + JVM_Recv; + JVM_RecvFrom; + JVM_RegisterSignal; + JVM_ReleaseUTF; + JVM_ResolveClass; + JVM_ResumeThread; + JVM_Send; + JVM_SendTo; + JVM_SetArrayElement; + JVM_SetClassSigners; + JVM_SetLength; + JVM_SetNativeThreadName; + JVM_SetPrimitiveArrayElement; + JVM_SetSockOpt; + JVM_SetThreadPriority; + JVM_Sleep; + JVM_Socket; + JVM_SocketAvailable; + JVM_SocketClose; + JVM_SocketShutdown; + JVM_StartThread; + JVM_StopThread; + JVM_SuspendThread; + JVM_SupportsCX8; + JVM_Sync; + JVM_Timeout; + JVM_TotalMemory; + JVM_TraceInstructions; + JVM_TraceMethodCalls; + JVM_UnloadLibrary; + JVM_Write; + JVM_Yield; + JVM_handle_linux_signal; # miscellaneous functions - _jio_fprintf - _jio_printf - _jio_snprintf - _jio_vfprintf - _jio_vsnprintf + jio_fprintf; + jio_printf; + jio_snprintf; + jio_vfprintf; + jio_vsnprintf; + fork1; + numa_warn; + numa_error; + + # Needed because there is no JVM interface for this. + sysThreadAvailableStackWithSlack; # This is for Forte Analyzer profiling support. - _AsyncGetCallTrace + AsyncGetCallTrace; - # INSERT VTABLE SYMBOLS HERE + # INSERT VTABLE SYMBOLS HERE + + local: + *; +}; diff --git a/hotspot/make/bsd/makefiles/mapfile-vers-product b/hotspot/make/bsd/makefiles/mapfile-vers-product index d446cc81d84..4641af0af20 100644 --- a/hotspot/make/bsd/makefiles/mapfile-vers-product +++ b/hotspot/make/bsd/makefiles/mapfile-vers-product @@ -19,238 +19,250 @@ # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. +# # -# -# Only used for OSX/Darwin builds # Define public interface. - # _JNI - _JNI_CreateJavaVM - _JNI_GetCreatedJavaVMs - _JNI_GetDefaultJavaVMInitArgs - # _JVM - _JVM_Accept - _JVM_ActiveProcessorCount - _JVM_AllocateNewArray - _JVM_AllocateNewObject - _JVM_ArrayCopy - _JVM_AssertionStatusDirectives - _JVM_Available - _JVM_Bind - _JVM_ClassDepth - _JVM_ClassLoaderDepth - _JVM_Clone - _JVM_Close - _JVM_CX8Field - _JVM_CompileClass - _JVM_CompileClasses - _JVM_CompilerCommand - _JVM_Connect - _JVM_ConstantPoolGetClassAt - _JVM_ConstantPoolGetClassAtIfLoaded - _JVM_ConstantPoolGetDoubleAt - _JVM_ConstantPoolGetFieldAt - _JVM_ConstantPoolGetFieldAtIfLoaded - _JVM_ConstantPoolGetFloatAt - _JVM_ConstantPoolGetIntAt - _JVM_ConstantPoolGetLongAt - _JVM_ConstantPoolGetMethodAt - _JVM_ConstantPoolGetMethodAtIfLoaded - _JVM_ConstantPoolGetMemberRefInfoAt - _JVM_ConstantPoolGetSize - _JVM_ConstantPoolGetStringAt - _JVM_ConstantPoolGetUTF8At - _JVM_CountStackFrames - _JVM_CurrentClassLoader - _JVM_CurrentLoadedClass - _JVM_CurrentThread - _JVM_CurrentTimeMillis - _JVM_DefineClass - _JVM_DefineClassWithSource - _JVM_DefineClassWithSourceCond - _JVM_DesiredAssertionStatus - _JVM_DisableCompiler - _JVM_DoPrivileged - _JVM_DTraceGetVersion - _JVM_DTraceActivate - _JVM_DTraceIsProbeEnabled - _JVM_DTraceIsSupported - _JVM_DTraceDispose - _JVM_DumpAllStacks - _JVM_DumpThreads - _JVM_EnableCompiler - _JVM_Exit - _JVM_FillInStackTrace - _JVM_FindClassFromClass - _JVM_FindClassFromClassLoader - _JVM_FindClassFromBootLoader - _JVM_FindLibraryEntry - _JVM_FindLoadedClass - _JVM_FindPrimitiveClass - _JVM_FindSignal - _JVM_FreeMemory - _JVM_GC - _JVM_GetAllThreads - _JVM_GetArrayElement - _JVM_GetArrayLength - _JVM_GetCPClassNameUTF - _JVM_GetCPFieldClassNameUTF - _JVM_GetCPFieldModifiers - _JVM_GetCPFieldNameUTF - _JVM_GetCPFieldSignatureUTF - _JVM_GetCPMethodClassNameUTF - _JVM_GetCPMethodModifiers - _JVM_GetCPMethodNameUTF - _JVM_GetCPMethodSignatureUTF - _JVM_GetCallerClass - _JVM_GetClassAccessFlags - _JVM_GetClassAnnotations - _JVM_GetClassCPEntriesCount - _JVM_GetClassCPTypes - _JVM_GetClassConstantPool - _JVM_GetClassContext - _JVM_GetClassDeclaredConstructors - _JVM_GetClassDeclaredFields - _JVM_GetClassDeclaredMethods - _JVM_GetClassFieldsCount - _JVM_GetClassInterfaces - _JVM_GetClassLoader - _JVM_GetClassMethodsCount - _JVM_GetClassModifiers - _JVM_GetClassName - _JVM_GetClassNameUTF - _JVM_GetClassSignature - _JVM_GetClassSigners - _JVM_GetClassTypeAnnotations - _JVM_GetComponentType - _JVM_GetDeclaredClasses - _JVM_GetDeclaringClass - _JVM_GetEnclosingMethodInfo - _JVM_GetFieldAnnotations - _JVM_GetFieldIxModifiers - _JVM_GetFieldTypeAnnotations - _JVM_GetHostName - _JVM_GetInheritedAccessControlContext - _JVM_GetInterfaceVersion - _JVM_GetLastErrorString - _JVM_GetManagement - _JVM_GetMethodAnnotations - _JVM_GetMethodDefaultAnnotationValue - _JVM_GetMethodIxArgsSize - _JVM_GetMethodIxByteCode - _JVM_GetMethodIxByteCodeLength - _JVM_GetMethodIxExceptionIndexes - _JVM_GetMethodIxExceptionTableEntry - _JVM_GetMethodIxExceptionTableLength - _JVM_GetMethodIxExceptionsCount - _JVM_GetMethodIxLocalsCount - _JVM_GetMethodIxMaxStack - _JVM_GetMethodIxModifiers - _JVM_GetMethodIxNameUTF - _JVM_GetMethodIxSignatureUTF - _JVM_GetMethodParameterAnnotations - _JVM_GetMethodParameters - _JVM_GetMethodTypeAnnotations - _JVM_GetPrimitiveArrayElement - _JVM_GetProtectionDomain - _JVM_GetSockName - _JVM_GetSockOpt - _JVM_GetStackAccessControlContext - _JVM_GetStackTraceDepth - _JVM_GetStackTraceElement - _JVM_GetSystemPackage - _JVM_GetSystemPackages - _JVM_GetThreadStateNames - _JVM_GetThreadStateValues - _JVM_GetVersionInfo - _JVM_Halt - _JVM_HoldsLock - _JVM_IHashCode - _JVM_InitAgentProperties - _JVM_InitProperties - _JVM_InitializeCompiler - _JVM_InitializeSocketLibrary - _JVM_InternString - _JVM_Interrupt - _JVM_InvokeMethod - _JVM_IsArrayClass - _JVM_IsConstructorIx - _JVM_IsInterface - _JVM_IsInterrupted - _JVM_IsNaN - _JVM_IsPrimitiveClass - _JVM_IsSameClassPackage - _JVM_IsSilentCompiler - _JVM_IsSupportedJNIVersion - _JVM_IsThreadAlive - _JVM_IsVMGeneratedMethodIx - _JVM_LatestUserDefinedLoader - _JVM_Listen - _JVM_LoadClass0 - _JVM_LoadLibrary - _JVM_Lseek - _JVM_MaxObjectInspectionAge - _JVM_MaxMemory - _JVM_MonitorNotify - _JVM_MonitorNotifyAll - _JVM_MonitorWait - _JVM_NanoTime - _JVM_NativePath - _JVM_NewArray - _JVM_NewInstanceFromConstructor - _JVM_NewMultiArray - _JVM_OnExit - _JVM_Open - _JVM_RaiseSignal - _JVM_RawMonitorCreate - _JVM_RawMonitorDestroy - _JVM_RawMonitorEnter - _JVM_RawMonitorExit - _JVM_Read - _JVM_Recv - _JVM_RecvFrom - _JVM_RegisterSignal - _JVM_ReleaseUTF - _JVM_ResolveClass - _JVM_ResumeThread - _JVM_Send - _JVM_SendTo - _JVM_SetArrayElement - _JVM_SetClassSigners - _JVM_SetLength - _JVM_SetNativeThreadName - _JVM_SetPrimitiveArrayElement - _JVM_SetSockOpt - _JVM_SetThreadPriority - _JVM_Sleep - _JVM_Socket - _JVM_SocketAvailable - _JVM_SocketClose - _JVM_SocketShutdown - _JVM_StartThread - _JVM_StopThread - _JVM_SuspendThread - _JVM_SupportsCX8 - _JVM_Sync - _JVM_Timeout - _JVM_TotalMemory - _JVM_TraceInstructions - _JVM_TraceMethodCalls - _JVM_UnloadLibrary - _JVM_Write - _JVM_Yield - _JVM_handle_bsd_signal +SUNWprivate_1.1 { + global: + # JNI + JNI_CreateJavaVM; + JNI_GetCreatedJavaVMs; + JNI_GetDefaultJavaVMInitArgs; + + # JVM + JVM_Accept; + JVM_ActiveProcessorCount; + JVM_AllocateNewArray; + JVM_AllocateNewObject; + JVM_ArrayCopy; + JVM_AssertionStatusDirectives; + JVM_Available; + JVM_Bind; + JVM_ClassDepth; + JVM_ClassLoaderDepth; + JVM_Clone; + JVM_Close; + JVM_CX8Field; + JVM_CompileClass; + JVM_CompileClasses; + JVM_CompilerCommand; + JVM_Connect; + JVM_ConstantPoolGetClassAt; + JVM_ConstantPoolGetClassAtIfLoaded; + JVM_ConstantPoolGetDoubleAt; + JVM_ConstantPoolGetFieldAt; + JVM_ConstantPoolGetFieldAtIfLoaded; + JVM_ConstantPoolGetFloatAt; + JVM_ConstantPoolGetIntAt; + JVM_ConstantPoolGetLongAt; + JVM_ConstantPoolGetMethodAt; + JVM_ConstantPoolGetMethodAtIfLoaded; + JVM_ConstantPoolGetMemberRefInfoAt; + JVM_ConstantPoolGetSize; + JVM_ConstantPoolGetStringAt; + JVM_ConstantPoolGetUTF8At; + JVM_CountStackFrames; + JVM_CurrentClassLoader; + JVM_CurrentLoadedClass; + JVM_CurrentThread; + JVM_CurrentTimeMillis; + JVM_DefineClass; + JVM_DefineClassWithSource; + JVM_DefineClassWithSourceCond; + JVM_DesiredAssertionStatus; + JVM_DisableCompiler; + JVM_DoPrivileged; + JVM_DTraceGetVersion; + JVM_DTraceActivate; + JVM_DTraceIsProbeEnabled; + JVM_DTraceIsSupported; + JVM_DTraceDispose; + JVM_DumpAllStacks; + JVM_DumpThreads; + JVM_EnableCompiler; + JVM_Exit; + JVM_FillInStackTrace; + JVM_FindClassFromClass; + JVM_FindClassFromClassLoader; + JVM_FindClassFromBootLoader; + JVM_FindLibraryEntry; + JVM_FindLoadedClass; + JVM_FindPrimitiveClass; + JVM_FindSignal; + JVM_FreeMemory; + JVM_GC; + JVM_GetAllThreads; + JVM_GetArrayElement; + JVM_GetArrayLength; + JVM_GetCPClassNameUTF; + JVM_GetCPFieldClassNameUTF; + JVM_GetCPFieldModifiers; + JVM_GetCPFieldNameUTF; + JVM_GetCPFieldSignatureUTF; + JVM_GetCPMethodClassNameUTF; + JVM_GetCPMethodModifiers; + JVM_GetCPMethodNameUTF; + JVM_GetCPMethodSignatureUTF; + JVM_GetCallerClass; + JVM_GetClassAccessFlags; + JVM_GetClassAnnotations; + JVM_GetClassCPEntriesCount; + JVM_GetClassCPTypes; + JVM_GetClassConstantPool; + JVM_GetClassContext; + JVM_GetClassDeclaredConstructors; + JVM_GetClassDeclaredFields; + JVM_GetClassDeclaredMethods; + JVM_GetClassFieldsCount; + JVM_GetClassInterfaces; + JVM_GetClassLoader; + JVM_GetClassMethodsCount; + JVM_GetClassModifiers; + JVM_GetClassName; + JVM_GetClassNameUTF; + JVM_GetClassSignature; + JVM_GetClassSigners; + JVM_GetClassTypeAnnotations; + JVM_GetComponentType; + JVM_GetDeclaredClasses; + JVM_GetDeclaringClass; + JVM_GetEnclosingMethodInfo; + JVM_GetFieldAnnotations; + JVM_GetFieldIxModifiers; + JVM_GetFieldTypeAnnotations; + JVM_GetHostName; + JVM_GetInheritedAccessControlContext; + JVM_GetInterfaceVersion; + JVM_GetLastErrorString; + JVM_GetManagement; + JVM_GetMethodAnnotations; + JVM_GetMethodDefaultAnnotationValue; + JVM_GetMethodIxArgsSize; + JVM_GetMethodIxByteCode; + JVM_GetMethodIxByteCodeLength; + JVM_GetMethodIxExceptionIndexes; + JVM_GetMethodIxExceptionTableEntry; + JVM_GetMethodIxExceptionTableLength; + JVM_GetMethodIxExceptionsCount; + JVM_GetMethodIxLocalsCount; + JVM_GetMethodIxMaxStack; + JVM_GetMethodIxModifiers; + JVM_GetMethodIxNameUTF; + JVM_GetMethodIxSignatureUTF; + JVM_GetMethodParameterAnnotations; + JVM_GetMethodParameters; + JVM_GetMethodTypeAnnotations; + JVM_GetPrimitiveArrayElement; + JVM_GetProtectionDomain; + JVM_GetSockName; + JVM_GetSockOpt; + JVM_GetStackAccessControlContext; + JVM_GetStackTraceDepth; + JVM_GetStackTraceElement; + JVM_GetSystemPackage; + JVM_GetSystemPackages; + JVM_GetThreadStateNames; + JVM_GetThreadStateValues; + JVM_GetVersionInfo; + JVM_Halt; + JVM_HoldsLock; + JVM_IHashCode; + JVM_InitAgentProperties; + JVM_InitProperties; + JVM_InitializeCompiler; + JVM_InitializeSocketLibrary; + JVM_InternString; + JVM_Interrupt; + JVM_InvokeMethod; + JVM_IsArrayClass; + JVM_IsConstructorIx; + JVM_IsInterface; + JVM_IsInterrupted; + JVM_IsNaN; + JVM_IsPrimitiveClass; + JVM_IsSameClassPackage; + JVM_IsSilentCompiler; + JVM_IsSupportedJNIVersion; + JVM_IsThreadAlive; + JVM_IsVMGeneratedMethodIx; + JVM_LatestUserDefinedLoader; + JVM_Listen; + JVM_LoadClass0; + JVM_LoadLibrary; + JVM_Lseek; + JVM_MaxObjectInspectionAge; + JVM_MaxMemory; + JVM_MonitorNotify; + JVM_MonitorNotifyAll; + JVM_MonitorWait; + JVM_NanoTime; + JVM_NativePath; + JVM_NewArray; + JVM_NewInstanceFromConstructor; + JVM_NewMultiArray; + JVM_OnExit; + JVM_Open; + JVM_RaiseSignal; + JVM_RawMonitorCreate; + JVM_RawMonitorDestroy; + JVM_RawMonitorEnter; + JVM_RawMonitorExit; + JVM_Read; + JVM_Recv; + JVM_RecvFrom; + JVM_RegisterSignal; + JVM_ReleaseUTF; + JVM_ResolveClass; + JVM_ResumeThread; + JVM_Send; + JVM_SendTo; + JVM_SetArrayElement; + JVM_SetClassSigners; + JVM_SetLength; + JVM_SetNativeThreadName; + JVM_SetPrimitiveArrayElement; + JVM_SetSockOpt; + JVM_SetThreadPriority; + JVM_Sleep; + JVM_Socket; + JVM_SocketAvailable; + JVM_SocketClose; + JVM_SocketShutdown; + JVM_StartThread; + JVM_StopThread; + JVM_SuspendThread; + JVM_SupportsCX8; + JVM_Sync; + JVM_Timeout; + JVM_TotalMemory; + JVM_TraceInstructions; + JVM_TraceMethodCalls; + JVM_UnloadLibrary; + JVM_Write; + JVM_Yield; + JVM_handle_linux_signal; # miscellaneous functions - _jio_fprintf - _jio_printf - _jio_snprintf - _jio_vfprintf - _jio_vsnprintf + jio_fprintf; + jio_printf; + jio_snprintf; + jio_vfprintf; + jio_vsnprintf; + fork1; + numa_warn; + numa_error; + + # Needed because there is no JVM interface for this. + sysThreadAvailableStackWithSlack; # This is for Forte Analyzer profiling support. - _AsyncGetCallTrace + AsyncGetCallTrace; - # INSERT VTABLE SYMBOLS HERE + # INSERT VTABLE SYMBOLS HERE + + local: + *; +}; diff --git a/hotspot/make/bsd/makefiles/optimized.make b/hotspot/make/bsd/makefiles/optimized.make index 6930997923e..c89c3461ea5 100644 --- a/hotspot/make/bsd/makefiles/optimized.make +++ b/hotspot/make/bsd/makefiles/optimized.make @@ -39,5 +39,8 @@ CFLAGS$(HOTSPARC_GENERIC) += $(OPT_CFLAGS/BYFILE) # Linker mapfile MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-debug +ifeq ($(OS_VENDOR), Darwin) +MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-darwin-debug +endif VERSION = optimized diff --git a/hotspot/make/bsd/makefiles/product.make b/hotspot/make/bsd/makefiles/product.make index 55515469311..c67528eec79 100644 --- a/hotspot/make/bsd/makefiles/product.make +++ b/hotspot/make/bsd/makefiles/product.make @@ -39,6 +39,9 @@ CFLAGS$(HOTSPARC_GENERIC) += $(OPT_CFLAGS/BYFILE) # Linker mapfile MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-product +ifeq ($(OS_VENDOR), Darwin) +MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-darwin-product +endif SYSDEFS += -DPRODUCT VERSION = optimized diff --git a/hotspot/make/linux/makefiles/adjust-mflags.sh b/hotspot/make/linux/makefiles/adjust-mflags.sh index 484fa85e8bb..97bc02db7f1 100644 --- a/hotspot/make/linux/makefiles/adjust-mflags.sh +++ b/hotspot/make/linux/makefiles/adjust-mflags.sh @@ -64,7 +64,7 @@ MFLAGS=` echo "$MFLAGS" \ | sed ' s/^-/ -/ - s/ -\([^ ][^ ]*\)j/ -\1 -j/ + s/ -\([^ I][^ I]*\)j/ -\1 -j/ s/ -j[0-9][0-9]*/ -j/ s/ -j\([^ ]\)/ -j -\1/ s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/ diff --git a/hotspot/make/solaris/makefiles/adjust-mflags.sh b/hotspot/make/solaris/makefiles/adjust-mflags.sh index 484fa85e8bb..97bc02db7f1 100644 --- a/hotspot/make/solaris/makefiles/adjust-mflags.sh +++ b/hotspot/make/solaris/makefiles/adjust-mflags.sh @@ -64,7 +64,7 @@ MFLAGS=` echo "$MFLAGS" \ | sed ' s/^-/ -/ - s/ -\([^ ][^ ]*\)j/ -\1 -j/ + s/ -\([^ I][^ I]*\)j/ -\1 -j/ s/ -j[0-9][0-9]*/ -j/ s/ -j\([^ ]\)/ -j -\1/ s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/ diff --git a/hotspot/make/solaris/makefiles/buildtree.make b/hotspot/make/solaris/makefiles/buildtree.make index ca602a81e3c..731e6ca5137 100644 --- a/hotspot/make/solaris/makefiles/buildtree.make +++ b/hotspot/make/solaris/makefiles/buildtree.make @@ -117,7 +117,7 @@ SUBMAKE_DIRS = $(addprefix $(PLATFORM_DIR)/,$(TARGETS)) # For dependencies and recursive makes. BUILDTREE_MAKE = $(GAMMADIR)/make/$(OS_FAMILY)/makefiles/buildtree.make -BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make sa.make +BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make sa.make dtrace.make BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OS_FAMILY) \ ARCH=$(ARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH) VARIANT=$(VARIANT) @@ -349,6 +349,16 @@ sa.make: $(BUILDTREE_MAKE) echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ ) > $@ +dtrace.make: $(BUILDTREE_MAKE) + @echo Creating $@ ... + $(QUIETLY) ( \ + $(BUILDTREE_COMMENT); \ + echo; \ + echo include flags.make; \ + echo; \ + echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ + ) > $@ + FORCE: .PHONY: all FORCE diff --git a/hotspot/make/solaris/makefiles/dtrace.make b/hotspot/make/solaris/makefiles/dtrace.make index 48f9b295b73..3b32385ecad 100644 --- a/hotspot/make/solaris/makefiles/dtrace.make +++ b/hotspot/make/solaris/makefiles/dtrace.make @@ -36,6 +36,8 @@ dtraceCheck: else +DtraceOutDir = $(GENERATED)/dtracefiles + JVM_DB = libjvm_db LIBJVM_DB = libjvm_db.so @@ -326,6 +328,22 @@ $(DTRACE.o): $(DTRACE).d $(JVMOFFS).h $(JVMOFFS)Index.h $(DTraced_Files) $(QUIETLY) if [ -f $(GENOFFS) ]; then touch $(GENOFFS); fi $(QUIETLY) if [ -f $(JVMOFFS.o) ]; then touch $(JVMOFFS.o); fi + +$(DtraceOutDir): + mkdir $(DtraceOutDir) + +$(DtraceOutDir)/hotspot.h: $(DTRACE_SRCDIR)/hotspot.d | $(DtraceOutDir) + $(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/hotspot.d + +$(DtraceOutDir)/hotspot_jni.h: $(DTRACE_SRCDIR)/hotspot_jni.d | $(DtraceOutDir) + $(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/hotspot_jni.d + +$(DtraceOutDir)/hs_private.h: $(DTRACE_SRCDIR)/hs_private.d | $(DtraceOutDir) + $(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/hs_private.d + +dtrace_gen_headers: $(DtraceOutDir)/hotspot.h $(DtraceOutDir)/hotspot_jni.h $(DtraceOutDir)/hs_private.h + + .PHONY: dtraceCheck SYSTEM_DTRACE_H = /usr/include/dtrace.h diff --git a/hotspot/make/solaris/makefiles/top.make b/hotspot/make/solaris/makefiles/top.make index 81e34afdee5..19060bdd501 100644 --- a/hotspot/make/solaris/makefiles/top.make +++ b/hotspot/make/solaris/makefiles/top.make @@ -73,7 +73,7 @@ default: vm_build_preliminaries the_vm @echo All done. # This is an explicit dependency for the sake of parallel makes. -vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) jvmti_stuff trace_stuff sa_stuff +vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) jvmti_stuff trace_stuff sa_stuff dtrace_stuff @# We need a null action here, so implicit rules don't get consulted. $(Cached_plat): $(Plat_File) @@ -95,6 +95,9 @@ trace_stuff: jvmti_stuff $(Cached_plat) $(adjust-mflags) sa_stuff: @$(MAKE) -f sa.make $(MFLAGS-adjusted) +dtrace_stuff: $(Cached_plat) $(adjust-mflags) + @$(MAKE) -f dtrace.make dtrace_gen_headers $(MFLAGS-adjusted) GENERATED=$(GENERATED) + # and the VM: must use other makefile with dependencies included # We have to go to great lengths to get control over the -jN argument diff --git a/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp b/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp index ccbc43e5a92..11547cde98f 100644 --- a/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp +++ b/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp @@ -88,6 +88,7 @@ class Assembler : public AbstractAssembler { orncc_op3 = 0x16, xnorcc_op3 = 0x17, addccc_op3 = 0x18, + aes4_op3 = 0x19, umulcc_op3 = 0x1a, smulcc_op3 = 0x1b, subccc_op3 = 0x1c, @@ -121,6 +122,8 @@ class Assembler : public AbstractAssembler { fpop1_op3 = 0x34, fpop2_op3 = 0x35, impdep1_op3 = 0x36, + aes3_op3 = 0x36, + flog3_op3 = 0x36, impdep2_op3 = 0x37, jmpl_op3 = 0x38, rett_op3 = 0x39, @@ -172,41 +175,56 @@ class Assembler : public AbstractAssembler { enum opfs { // selected opfs - fmovs_opf = 0x01, - fmovd_opf = 0x02, + fmovs_opf = 0x01, + fmovd_opf = 0x02, - fnegs_opf = 0x05, - fnegd_opf = 0x06, + fnegs_opf = 0x05, + fnegd_opf = 0x06, - fadds_opf = 0x41, - faddd_opf = 0x42, - fsubs_opf = 0x45, - fsubd_opf = 0x46, + fadds_opf = 0x41, + faddd_opf = 0x42, + fsubs_opf = 0x45, + fsubd_opf = 0x46, - fmuls_opf = 0x49, - fmuld_opf = 0x4a, - fdivs_opf = 0x4d, - fdivd_opf = 0x4e, + fmuls_opf = 0x49, + fmuld_opf = 0x4a, + fdivs_opf = 0x4d, + fdivd_opf = 0x4e, - fcmps_opf = 0x51, - fcmpd_opf = 0x52, + fcmps_opf = 0x51, + fcmpd_opf = 0x52, - fstox_opf = 0x81, - fdtox_opf = 0x82, - fxtos_opf = 0x84, - fxtod_opf = 0x88, - fitos_opf = 0xc4, - fdtos_opf = 0xc6, - fitod_opf = 0xc8, - fstod_opf = 0xc9, - fstoi_opf = 0xd1, - fdtoi_opf = 0xd2, + fstox_opf = 0x81, + fdtox_opf = 0x82, + fxtos_opf = 0x84, + fxtod_opf = 0x88, + fitos_opf = 0xc4, + fdtos_opf = 0xc6, + fitod_opf = 0xc8, + fstod_opf = 0xc9, + fstoi_opf = 0xd1, + fdtoi_opf = 0xd2, - mdtox_opf = 0x110, - mstouw_opf = 0x111, - mstosw_opf = 0x113, - mxtod_opf = 0x118, - mwtos_opf = 0x119 + mdtox_opf = 0x110, + mstouw_opf = 0x111, + mstosw_opf = 0x113, + mxtod_opf = 0x118, + mwtos_opf = 0x119, + + aes_kexpand0_opf = 0x130, + aes_kexpand2_opf = 0x131 + }; + + enum op5s { + aes_eround01_op5 = 0x00, + aes_eround23_op5 = 0x01, + aes_dround01_op5 = 0x02, + aes_dround23_op5 = 0x03, + aes_eround01_l_op5 = 0x04, + aes_eround23_l_op5 = 0x05, + aes_dround01_l_op5 = 0x06, + aes_dround23_l_op5 = 0x07, + aes_kexpand1_op5 = 0x08 }; enum RCondition { rc_z = 1, rc_lez = 2, rc_lz = 3, rc_nz = 5, rc_gz = 6, rc_gez = 7, rc_last = rc_gez }; @@ -427,6 +445,7 @@ class Assembler : public AbstractAssembler { static int immed( bool i) { return u_field(i ? 1 : 0, 13, 13); } static int opf_low6( int w) { return u_field(w, 10, 5); } static int opf_low5( int w) { return u_field(w, 9, 5); } + static int op5( int x) { return u_field(x, 8, 5); } static int trapcc( CC cc) { return u_field(cc, 12, 11); } static int sx( int i) { return u_field(i, 12, 12); } // shift x=1 means 64-bit static int opf( int x) { return u_field(x, 13, 5); } @@ -451,6 +470,7 @@ class Assembler : public AbstractAssembler { static int fd( FloatRegister r, FloatRegisterImpl::Width fwa) { return u_field(r->encoding(fwa), 29, 25); }; static int fs1(FloatRegister r, FloatRegisterImpl::Width fwa) { return u_field(r->encoding(fwa), 18, 14); }; static int fs2(FloatRegister r, FloatRegisterImpl::Width fwa) { return u_field(r->encoding(fwa), 4, 0); }; + static int fs3(FloatRegister r, FloatRegisterImpl::Width fwa) { return u_field(r->encoding(fwa), 13, 9); }; // some float instructions use this encoding on the op3 field static int alt_op3(int op, FloatRegisterImpl::Width w) { @@ -559,6 +579,12 @@ class Assembler : public AbstractAssembler { return x & ((1 << 10) - 1); } + // AES crypto instructions supported only on certain processors + static void aes_only() { assert( VM_Version::has_aes(), "This instruction only works on SPARC with AES instructions support"); } + + // instruction only in VIS1 + static void vis1_only() { assert( VM_Version::has_vis1(), "This instruction only works on SPARC with VIS1"); } + // instruction only in VIS3 static void vis3_only() { assert( VM_Version::has_vis3(), "This instruction only works on SPARC with VIS3"); } @@ -682,6 +708,24 @@ public: void addccc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(addc_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); } + // 4-operand AES instructions + + void aes_eround01( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_eround01_op5) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_eround23( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_eround23_op5) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_dround01( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_dround01_op5) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_dround23( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_dround23_op5) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_eround01_l( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_eround01_l_op5) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_eround23_l( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_eround23_l_op5) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_dround01_l( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_dround01_l_op5) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_dround23_l( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_dround23_l_op5) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_kexpand1( FloatRegister s1, FloatRegister s2, int imm5a, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | u_field(imm5a, 13, 9) | op5(aes_kexpand1_op5) | fs2(s2, FloatRegisterImpl::D) ); } + + + // 3-operand AES instructions + + void aes_kexpand0( FloatRegister s1, FloatRegister s2, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes3_op3) | fs1(s1, FloatRegisterImpl::D) | opf(aes_kexpand0_opf) | fs2(s2, FloatRegisterImpl::D) ); } + void aes_kexpand2( FloatRegister s1, FloatRegister s2, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes3_op3) | fs1(s1, FloatRegisterImpl::D) | opf(aes_kexpand2_opf) | fs2(s2, FloatRegisterImpl::D) ); } + // pp 136 inline void bpr(RCondition c, bool a, Predict p, Register s1, address d, relocInfo::relocType rt = relocInfo::none); @@ -784,6 +828,10 @@ public: void fmul( FloatRegisterImpl::Width sw, FloatRegisterImpl::Width dw, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, dw) | op3(fpop1_op3) | fs1(s1, sw) | opf(0x60 + sw + dw*4) | fs2(s2, sw)); } void fdiv( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x4c + w) | fs2(s2, w)); } + // FXORs/FXORd instructions + + void fxor( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { vis1_only(); emit_int32( op(arith_op) | fd(d, w) | op3(flog3_op3) | fs1(s1, w) | opf(0x6E - w) | fs2(s2, w)); } + // pp 164 void fsqrt( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x28 + w) | fs2(s, w)); } diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp index 22ab05f7c9f..488a53d9b6e 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @@ -1315,7 +1315,7 @@ void LIR_Assembler::const2reg(LIR_Opr src, LIR_Opr dest, LIR_PatchCode patch_cod } Address LIR_Assembler::as_Address(LIR_Address* addr) { - Register reg = addr->base()->as_register(); + Register reg = addr->base()->as_pointer_register(); LIR_Opr index = addr->index(); if (index->is_illegal()) { return Address(reg, addr->disp()); @@ -3101,7 +3101,145 @@ void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) { } void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { - fatal("Type profiling not implemented on this platform"); + Register obj = op->obj()->as_register(); + Register tmp1 = op->tmp()->as_pointer_register(); + Register tmp2 = G1; + Address mdo_addr = as_Address(op->mdp()->as_address_ptr()); + ciKlass* exact_klass = op->exact_klass(); + intptr_t current_klass = op->current_klass(); + bool not_null = op->not_null(); + bool no_conflict = op->no_conflict(); + + Label update, next, none; + + bool do_null = !not_null; + bool exact_klass_set = exact_klass != NULL && ciTypeEntries::valid_ciklass(current_klass) == exact_klass; + bool do_update = !TypeEntries::is_type_unknown(current_klass) && !exact_klass_set; + + assert(do_null || do_update, "why are we here?"); + assert(!TypeEntries::was_null_seen(current_klass) || do_update, "why are we here?"); + + __ verify_oop(obj); + + if (tmp1 != obj) { + __ mov(obj, tmp1); + } + if (do_null) { + __ br_notnull_short(tmp1, Assembler::pt, update); + if (!TypeEntries::was_null_seen(current_klass)) { + __ ld_ptr(mdo_addr, tmp1); + __ or3(tmp1, TypeEntries::null_seen, tmp1); + __ st_ptr(tmp1, mdo_addr); + } + if (do_update) { + __ ba(next); + __ delayed()->nop(); + } +#ifdef ASSERT + } else { + __ br_notnull_short(tmp1, Assembler::pt, update); + __ stop("unexpect null obj"); +#endif + } + + __ bind(update); + + if (do_update) { +#ifdef ASSERT + if (exact_klass != NULL) { + Label ok; + __ load_klass(tmp1, tmp1); + metadata2reg(exact_klass->constant_encoding(), tmp2); + __ cmp_and_br_short(tmp1, tmp2, Assembler::equal, Assembler::pt, ok); + __ stop("exact klass and actual klass differ"); + __ bind(ok); + } +#endif + + Label do_update; + __ ld_ptr(mdo_addr, tmp2); + + if (!no_conflict) { + if (exact_klass == NULL || TypeEntries::is_type_none(current_klass)) { + if (exact_klass != NULL) { + metadata2reg(exact_klass->constant_encoding(), tmp1); + } else { + __ load_klass(tmp1, tmp1); + } + + __ xor3(tmp1, tmp2, tmp1); + __ btst(TypeEntries::type_klass_mask, tmp1); + // klass seen before, nothing to do. The unknown bit may have been + // set already but no need to check. + __ brx(Assembler::zero, false, Assembler::pt, next); + __ delayed()-> + + btst(TypeEntries::type_unknown, tmp1); + // already unknown. Nothing to do anymore. + __ brx(Assembler::notZero, false, Assembler::pt, next); + + if (TypeEntries::is_type_none(current_klass)) { + __ delayed()->btst(TypeEntries::type_mask, tmp2); + __ brx(Assembler::zero, true, Assembler::pt, do_update); + // first time here. Set profile type. + __ delayed()->or3(tmp2, tmp1, tmp2); + } else { + __ delayed()->nop(); + } + } else { + assert(ciTypeEntries::valid_ciklass(current_klass) != NULL && + ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "conflict only"); + + __ btst(TypeEntries::type_unknown, tmp2); + // already unknown. Nothing to do anymore. + __ brx(Assembler::notZero, false, Assembler::pt, next); + __ delayed()->nop(); + } + + // different than before. Cannot keep accurate profile. + __ or3(tmp2, TypeEntries::type_unknown, tmp2); + } else { + // There's a single possible klass at this profile point + assert(exact_klass != NULL, "should be"); + if (TypeEntries::is_type_none(current_klass)) { + metadata2reg(exact_klass->constant_encoding(), tmp1); + __ xor3(tmp1, tmp2, tmp1); + __ btst(TypeEntries::type_klass_mask, tmp1); + __ brx(Assembler::zero, false, Assembler::pt, next); +#ifdef ASSERT + + { + Label ok; + __ delayed()->btst(TypeEntries::type_mask, tmp2); + __ brx(Assembler::zero, true, Assembler::pt, ok); + __ delayed()->nop(); + + __ stop("unexpected profiling mismatch"); + __ bind(ok); + } + // first time here. Set profile type. + __ or3(tmp2, tmp1, tmp2); +#else + // first time here. Set profile type. + __ delayed()->or3(tmp2, tmp1, tmp2); +#endif + + } else { + assert(ciTypeEntries::valid_ciklass(current_klass) != NULL && + ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent"); + + // already unknown. Nothing to do anymore. + __ btst(TypeEntries::type_unknown, tmp2); + __ brx(Assembler::notZero, false, Assembler::pt, next); + __ delayed()->or3(tmp2, TypeEntries::type_unknown, tmp2); + } + } + + __ bind(do_update); + __ st_ptr(tmp2, mdo_addr); + + __ bind(next); + } } void LIR_Assembler::align_backward_branch_target() { @@ -3321,9 +3459,14 @@ void LIR_Assembler::unpack64(LIR_Opr src, LIR_Opr dst) { void LIR_Assembler::leal(LIR_Opr addr_opr, LIR_Opr dest) { LIR_Address* addr = addr_opr->as_address_ptr(); - assert(addr->index()->is_illegal() && addr->scale() == LIR_Address::times_1 && Assembler::is_simm13(addr->disp()), "can't handle complex addresses yet"); + assert(addr->index()->is_illegal() && addr->scale() == LIR_Address::times_1, "can't handle complex addresses yet"); - __ add(addr->base()->as_pointer_register(), addr->disp(), dest->as_pointer_register()); + if (Assembler::is_simm13(addr->disp())) { + __ add(addr->base()->as_pointer_register(), addr->disp(), dest->as_pointer_register()); + } else { + __ set(addr->disp(), G3_scratch); + __ add(addr->base()->as_pointer_register(), G3_scratch, dest->as_pointer_register()); + } } diff --git a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp index 454b23c920b..c22f20a23d4 100644 --- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp @@ -1892,6 +1892,220 @@ void InterpreterMacroAssembler::profile_switch_case(Register index, } } +void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& mdo_addr, Register tmp) { + Label not_null, do_nothing, do_update; + + assert_different_registers(obj, mdo_addr.base(), tmp); + + verify_oop(obj); + + ld_ptr(mdo_addr, tmp); + + br_notnull_short(obj, pt, not_null); + or3(tmp, TypeEntries::null_seen, tmp); + ba_short(do_update); + + bind(not_null); + load_klass(obj, obj); + + xor3(obj, tmp, obj); + btst(TypeEntries::type_klass_mask, obj); + // klass seen before, nothing to do. The unknown bit may have been + // set already but no need to check. + brx(zero, false, pt, do_nothing); + delayed()-> + + btst(TypeEntries::type_unknown, obj); + // already unknown. Nothing to do anymore. + brx(notZero, false, pt, do_nothing); + delayed()-> + + btst(TypeEntries::type_mask, tmp); + brx(zero, true, pt, do_update); + // first time here. Set profile type. + delayed()->or3(tmp, obj, tmp); + + // different than before. Cannot keep accurate profile. + or3(tmp, TypeEntries::type_unknown, tmp); + + bind(do_update); + // update profile + st_ptr(tmp, mdo_addr); + + bind(do_nothing); +} + +void InterpreterMacroAssembler::profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual) { + if (!ProfileInterpreter) { + return; + } + + assert_different_registers(callee, tmp1, tmp2, ImethodDataPtr); + + if (MethodData::profile_arguments() || MethodData::profile_return()) { + Label profile_continue; + + test_method_data_pointer(profile_continue); + + int off_to_start = is_virtual ? in_bytes(VirtualCallData::virtual_call_data_size()) : in_bytes(CounterData::counter_data_size()); + + ldub(ImethodDataPtr, in_bytes(DataLayout::tag_offset()) - off_to_start, tmp1); + cmp_and_br_short(tmp1, is_virtual ? DataLayout::virtual_call_type_data_tag : DataLayout::call_type_data_tag, notEqual, pn, profile_continue); + + if (MethodData::profile_arguments()) { + Label done; + int off_to_args = in_bytes(TypeEntriesAtCall::args_data_offset()); + add(ImethodDataPtr, off_to_args, ImethodDataPtr); + + for (int i = 0; i < TypeProfileArgsLimit; i++) { + if (i > 0 || MethodData::profile_return()) { + // If return value type is profiled we may have no argument to profile + ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args, tmp1); + sub(tmp1, i*TypeStackSlotEntries::per_arg_count(), tmp1); + cmp_and_br_short(tmp1, TypeStackSlotEntries::per_arg_count(), less, pn, done); + } + ld_ptr(Address(callee, Method::const_offset()), tmp1); + lduh(Address(tmp1, ConstMethod::size_of_parameters_offset()), tmp1); + // stack offset o (zero based) from the start of the argument + // list, for n arguments translates into offset n - o - 1 from + // the end of the argument list. But there's an extra slot at + // the stop of the stack. So the offset is n - o from Lesp. + ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::stack_slot_offset(i))-off_to_args, tmp2); + sub(tmp1, tmp2, tmp1); + + // Can't use MacroAssembler::argument_address() which needs Gargs to be set up + sll(tmp1, Interpreter::logStackElementSize, tmp1); + ld_ptr(Lesp, tmp1, tmp1); + + Address mdo_arg_addr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::argument_type_offset(i))-off_to_args); + profile_obj_type(tmp1, mdo_arg_addr, tmp2); + + int to_add = in_bytes(TypeStackSlotEntries::per_arg_size()); + add(ImethodDataPtr, to_add, ImethodDataPtr); + off_to_args += to_add; + } + + if (MethodData::profile_return()) { + ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args, tmp1); + sub(tmp1, TypeProfileArgsLimit*TypeStackSlotEntries::per_arg_count(), tmp1); + } + + bind(done); + + if (MethodData::profile_return()) { + // We're right after the type profile for the last + // argument. tmp1 is the number of cells left in the + // CallTypeData/VirtualCallTypeData to reach its end. Non null + // if there's a return to profile. + assert(ReturnTypeEntry::static_cell_count() < TypeStackSlotEntries::per_arg_count(), "can't move past ret type"); + sll(tmp1, exact_log2(DataLayout::cell_size), tmp1); + add(ImethodDataPtr, tmp1, ImethodDataPtr); + } + } else { + assert(MethodData::profile_return(), "either profile call args or call ret"); + update_mdp_by_constant(in_bytes(ReturnTypeEntry::size())); + } + + // mdp points right after the end of the + // CallTypeData/VirtualCallTypeData, right after the cells for the + // return value type if there's one. + + bind(profile_continue); + } +} + +void InterpreterMacroAssembler::profile_return_type(Register ret, Register tmp1, Register tmp2) { + assert_different_registers(ret, tmp1, tmp2); + if (ProfileInterpreter && MethodData::profile_return()) { + Label profile_continue, done; + + test_method_data_pointer(profile_continue); + + if (MethodData::profile_return_jsr292_only()) { + // If we don't profile all invoke bytecodes we must make sure + // it's a bytecode we indeed profile. We can't go back to the + // begining of the ProfileData we intend to update to check its + // type because we're right after it and we don't known its + // length. + Label do_profile; + ldub(Lbcp, 0, tmp1); + cmp_and_br_short(tmp1, Bytecodes::_invokedynamic, equal, pn, do_profile); + cmp(tmp1, Bytecodes::_invokehandle); + br(equal, false, pn, do_profile); + delayed()->ldub(Lmethod, Method::intrinsic_id_offset_in_bytes(), tmp1); + cmp_and_br_short(tmp1, vmIntrinsics::_compiledLambdaForm, notEqual, pt, profile_continue); + + bind(do_profile); + } + + Address mdo_ret_addr(ImethodDataPtr, -in_bytes(ReturnTypeEntry::size())); + mov(ret, tmp1); + profile_obj_type(tmp1, mdo_ret_addr, tmp2); + + bind(profile_continue); + } +} + +void InterpreterMacroAssembler::profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4) { + if (ProfileInterpreter && MethodData::profile_parameters()) { + Label profile_continue, done; + + test_method_data_pointer(profile_continue); + + // Load the offset of the area within the MDO used for + // parameters. If it's negative we're not profiling any parameters. + lduw(ImethodDataPtr, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset()), tmp1); + cmp_and_br_short(tmp1, 0, less, pn, profile_continue); + + // Compute a pointer to the area for parameters from the offset + // and move the pointer to the slot for the last + // parameters. Collect profiling from last parameter down. + // mdo start + parameters offset + array length - 1 + + // Pointer to the parameter area in the MDO + Register mdp = tmp1; + add(ImethodDataPtr, tmp1, mdp); + + // offset of the current profile entry to update + Register entry_offset = tmp2; + // entry_offset = array len in number of cells + ld_ptr(mdp, ArrayData::array_len_offset(), entry_offset); + + int off_base = in_bytes(ParametersTypeData::stack_slot_offset(0)); + assert(off_base % DataLayout::cell_size == 0, "should be a number of cells"); + + // entry_offset (number of cells) = array len - size of 1 entry + offset of the stack slot field + sub(entry_offset, TypeStackSlotEntries::per_arg_count() - (off_base / DataLayout::cell_size), entry_offset); + // entry_offset in bytes + sll(entry_offset, exact_log2(DataLayout::cell_size), entry_offset); + + Label loop; + bind(loop); + + // load offset on the stack from the slot for this parameter + ld_ptr(mdp, entry_offset, tmp3); + sll(tmp3,Interpreter::logStackElementSize, tmp3); + neg(tmp3); + // read the parameter from the local area + ld_ptr(Llocals, tmp3, tmp3); + + // make entry_offset now point to the type field for this parameter + int type_base = in_bytes(ParametersTypeData::type_offset(0)); + assert(type_base > off_base, "unexpected"); + add(entry_offset, type_base - off_base, entry_offset); + + // profile the parameter + Address arg_type(mdp, entry_offset); + profile_obj_type(tmp3, arg_type, tmp4); + + // go to next parameter + sub(entry_offset, TypeStackSlotEntries::per_arg_count() * DataLayout::cell_size + (type_base - off_base), entry_offset); + cmp_and_br_short(entry_offset, off_base, greaterEqual, pt, loop); + + bind(profile_continue); + } +} + // add a InterpMonitorElem to stack (see frame_sparc.hpp) void InterpreterMacroAssembler::add_monitor_to_stack( bool stack_is_empty, diff --git a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp index 1a7901526ad..5ba547d2241 100644 --- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp +++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp @@ -323,6 +323,11 @@ class InterpreterMacroAssembler: public MacroAssembler { Register scratch2, Register scratch3); + void profile_obj_type(Register obj, const Address& mdo_addr, Register tmp); + void profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual); + void profile_return_type(Register ret, Register tmp1, Register tmp2); + void profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4); + // Debugging void interp_verify_oop(Register reg, TosState state, const char * file, int line); // only if +VerifyOops && state == atos void verify_oop_or_return_address(Register reg, Register rtmp); // for astore diff --git a/hotspot/src/cpu/sparc/vm/sparc.ad b/hotspot/src/cpu/sparc/vm/sparc.ad index 19283874280..535995135f7 100644 --- a/hotspot/src/cpu/sparc/vm/sparc.ad +++ b/hotspot/src/cpu/sparc/vm/sparc.ad @@ -1848,6 +1848,12 @@ const bool Matcher::misaligned_vectors_ok() { return false; } +// Current (2013) SPARC platforms need to read original key +// to construct decryption expanded key +const bool Matcher::pass_original_key_for_aes() { + return true; +} + // USII supports fxtof through the whole range of number, USIII doesn't const bool Matcher::convL2FSupported(void) { return VM_Version::has_fast_fxtof(); @@ -3355,8 +3361,8 @@ operand immI16() %{ interface(CONST_INTER); %} -// Unsigned (positive) Integer Immediate: 13-bit -operand immU13() %{ +// Unsigned Integer Immediate: 12-bit (non-negative that fits in simm13) +operand immU12() %{ predicate((0 <= n->get_int()) && Assembler::is_simm13(n->get_int())); match(ConI); op_cost(0); @@ -3392,6 +3398,17 @@ operand immI5() %{ interface(CONST_INTER); %} +// Int Immediate non-negative +operand immU31() +%{ + predicate(n->get_int() >= 0); + match(ConI); + + op_cost(0); + format %{ %} + interface(CONST_INTER); +%} + // Integer Immediate: 0-bit operand immI0() %{ predicate(n->get_int() == 0); @@ -5720,7 +5737,6 @@ instruct loadUS2L_immI16(iRegL dst, memory mem, immI16 mask, iRegL tmp) %{ effect(TEMP dst, TEMP tmp); ins_cost(MEMORY_REF_COST + 2*DEFAULT_COST); - size((3+1)*4); // set may use two instructions. format %{ "LDUH $mem,$dst\t! ushort/char & 16-bit mask -> long\n\t" "SET $mask,$tmp\n\t" "AND $dst,$tmp,$dst" %} @@ -5842,13 +5858,13 @@ instruct loadI2L_immI_65535(iRegL dst, indOffset13m7 mem, immI_65535 mask) %{ ins_pipe(iload_mem); %} -// Load Integer with a 13-bit mask into a Long Register -instruct loadI2L_immI13(iRegL dst, memory mem, immI13 mask) %{ +// Load Integer with a 12-bit mask into a Long Register +instruct loadI2L_immU12(iRegL dst, memory mem, immU12 mask) %{ match(Set dst (ConvI2L (AndI (LoadI mem) mask))); ins_cost(MEMORY_REF_COST + DEFAULT_COST); size(2*4); - format %{ "LDUW $mem,$dst\t! int & 13-bit mask -> long\n\t" + format %{ "LDUW $mem,$dst\t! int & 12-bit mask -> long\n\t" "AND $dst,$mask,$dst" %} ins_encode %{ Register Rdst = $dst$$Register; @@ -5858,14 +5874,13 @@ instruct loadI2L_immI13(iRegL dst, memory mem, immI13 mask) %{ ins_pipe(iload_mem); %} -// Load Integer with a 32-bit mask into a Long Register -instruct loadI2L_immI(iRegL dst, memory mem, immI mask, iRegL tmp) %{ +// Load Integer with a 31-bit mask into a Long Register +instruct loadI2L_immU31(iRegL dst, memory mem, immU31 mask, iRegL tmp) %{ match(Set dst (ConvI2L (AndI (LoadI mem) mask))); effect(TEMP dst, TEMP tmp); ins_cost(MEMORY_REF_COST + 2*DEFAULT_COST); - size((3+1)*4); // set may use two instructions. - format %{ "LDUW $mem,$dst\t! int & 32-bit mask -> long\n\t" + format %{ "LDUW $mem,$dst\t! int & 31-bit mask -> long\n\t" "SET $mask,$tmp\n\t" "AND $dst,$tmp,$dst" %} ins_encode %{ @@ -8960,7 +8975,7 @@ instruct testL_reg_con(flagsRegL xcc, iRegL op1, immL13 con, immL0 zero) %{ ins_pipe(ialu_cconly_reg_reg); %} -instruct compU_iReg_imm13(flagsRegU icc, iRegI op1, immU13 op2 ) %{ +instruct compU_iReg_imm13(flagsRegU icc, iRegI op1, immU12 op2 ) %{ match(Set icc (CmpU op1 op2)); size(4); diff --git a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp index b9911828174..25023404db8 100644 --- a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp @@ -3304,6 +3304,775 @@ class StubGenerator: public StubCodeGenerator { } } + address generate_aescrypt_encryptBlock() { + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aesencryptBlock"); + Label L_doLast128bit, L_storeOutput; + address start = __ pc(); + Register from = O0; // source byte array + Register to = O1; // destination byte array + Register key = O2; // expanded key array + const Register keylen = O4; //reg for storing expanded key array length + + // read expanded key length + __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0); + + // load input into F54-F56; F30-F31 used as temp + __ ldf(FloatRegisterImpl::S, from, 0, F30); + __ ldf(FloatRegisterImpl::S, from, 4, F31); + __ fmov(FloatRegisterImpl::D, F30, F54); + __ ldf(FloatRegisterImpl::S, from, 8, F30); + __ ldf(FloatRegisterImpl::S, from, 12, F31); + __ fmov(FloatRegisterImpl::D, F30, F56); + + // load expanded key + for ( int i = 0; i <= 38; i += 2 ) { + __ ldf(FloatRegisterImpl::D, key, i*4, as_FloatRegister(i)); + } + + // perform cipher transformation + __ fxor(FloatRegisterImpl::D, F0, F54, F54); + __ fxor(FloatRegisterImpl::D, F2, F56, F56); + // rounds 1 through 8 + for ( int i = 4; i <= 28; i += 8 ) { + __ aes_eround01(as_FloatRegister(i), F54, F56, F58); + __ aes_eround23(as_FloatRegister(i+2), F54, F56, F60); + __ aes_eround01(as_FloatRegister(i+4), F58, F60, F54); + __ aes_eround23(as_FloatRegister(i+6), F58, F60, F56); + } + __ aes_eround01(F36, F54, F56, F58); //round 9 + __ aes_eround23(F38, F54, F56, F60); + + // 128-bit original key size + __ cmp_and_brx_short(keylen, 44, Assembler::equal, Assembler::pt, L_doLast128bit); + + for ( int i = 40; i <= 50; i += 2 ) { + __ ldf(FloatRegisterImpl::D, key, i*4, as_FloatRegister(i) ); + } + __ aes_eround01(F40, F58, F60, F54); //round 10 + __ aes_eround23(F42, F58, F60, F56); + __ aes_eround01(F44, F54, F56, F58); //round 11 + __ aes_eround23(F46, F54, F56, F60); + + // 192-bit original key size + __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pt, L_storeOutput); + + __ ldf(FloatRegisterImpl::D, key, 208, F52); + __ aes_eround01(F48, F58, F60, F54); //round 12 + __ aes_eround23(F50, F58, F60, F56); + __ ldf(FloatRegisterImpl::D, key, 216, F46); + __ ldf(FloatRegisterImpl::D, key, 224, F48); + __ ldf(FloatRegisterImpl::D, key, 232, F50); + __ aes_eround01(F52, F54, F56, F58); //round 13 + __ aes_eround23(F46, F54, F56, F60); + __ br(Assembler::always, false, Assembler::pt, L_storeOutput); + __ delayed()->nop(); + + __ BIND(L_doLast128bit); + __ ldf(FloatRegisterImpl::D, key, 160, F48); + __ ldf(FloatRegisterImpl::D, key, 168, F50); + + __ BIND(L_storeOutput); + // perform last round of encryption common for all key sizes + __ aes_eround01_l(F48, F58, F60, F54); //last round + __ aes_eround23_l(F50, F58, F60, F56); + + // store output into the destination array, F0-F1 used as temp + __ fmov(FloatRegisterImpl::D, F54, F0); + __ stf(FloatRegisterImpl::S, F0, to, 0); + __ stf(FloatRegisterImpl::S, F1, to, 4); + __ fmov(FloatRegisterImpl::D, F56, F0); + __ stf(FloatRegisterImpl::S, F0, to, 8); + __ retl(); + __ delayed()->stf(FloatRegisterImpl::S, F1, to, 12); + + return start; + } + + address generate_aescrypt_decryptBlock() { + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aesdecryptBlock"); + address start = __ pc(); + Label L_expand192bit, L_expand256bit, L_common_transform; + Register from = O0; // source byte array + Register to = O1; // destination byte array + Register key = O2; // expanded key array + Register original_key = O3; // original key array only required during decryption + const Register keylen = O4; // reg for storing expanded key array length + + // read expanded key array length + __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0); + + // load input into F52-F54; F30,F31 used as temp + __ ldf(FloatRegisterImpl::S, from, 0, F30); + __ ldf(FloatRegisterImpl::S, from, 4, F31); + __ fmov(FloatRegisterImpl::D, F30, F52); + __ ldf(FloatRegisterImpl::S, from, 8, F30); + __ ldf(FloatRegisterImpl::S, from, 12, F31); + __ fmov(FloatRegisterImpl::D, F30, F54); + + // load original key from SunJCE expanded decryption key + for ( int i = 0; i <= 3; i++ ) { + __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i)); + } + + // 256-bit original key size + __ cmp_and_brx_short(keylen, 60, Assembler::equal, Assembler::pn, L_expand256bit); + + // 192-bit original key size + __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pn, L_expand192bit); + + // 128-bit original key size + // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions + for ( int i = 0; i <= 36; i += 4 ) { + __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+2), i/4, as_FloatRegister(i+4)); + __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+4), as_FloatRegister(i+6)); + } + + // perform 128-bit key specific inverse cipher transformation + __ fxor(FloatRegisterImpl::D, F42, F54, F54); + __ fxor(FloatRegisterImpl::D, F40, F52, F52); + __ br(Assembler::always, false, Assembler::pt, L_common_transform); + __ delayed()->nop(); + + __ BIND(L_expand192bit); + + // start loading rest of the 192-bit key + __ ldf(FloatRegisterImpl::S, original_key, 16, F4); + __ ldf(FloatRegisterImpl::S, original_key, 20, F5); + + // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions + for ( int i = 0; i <= 36; i += 6 ) { + __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+4), i/6, as_FloatRegister(i+6)); + __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+6), as_FloatRegister(i+8)); + __ aes_kexpand2(as_FloatRegister(i+4), as_FloatRegister(i+8), as_FloatRegister(i+10)); + } + __ aes_kexpand1(F42, F46, 7, F48); + __ aes_kexpand2(F44, F48, F50); + + // perform 192-bit key specific inverse cipher transformation + __ fxor(FloatRegisterImpl::D, F50, F54, F54); + __ fxor(FloatRegisterImpl::D, F48, F52, F52); + __ aes_dround23(F46, F52, F54, F58); + __ aes_dround01(F44, F52, F54, F56); + __ aes_dround23(F42, F56, F58, F54); + __ aes_dround01(F40, F56, F58, F52); + __ br(Assembler::always, false, Assembler::pt, L_common_transform); + __ delayed()->nop(); + + __ BIND(L_expand256bit); + + // load rest of the 256-bit key + for ( int i = 4; i <= 7; i++ ) { + __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i)); + } + + // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions + for ( int i = 0; i <= 40; i += 8 ) { + __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+6), i/8, as_FloatRegister(i+8)); + __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+8), as_FloatRegister(i+10)); + __ aes_kexpand0(as_FloatRegister(i+4), as_FloatRegister(i+10), as_FloatRegister(i+12)); + __ aes_kexpand2(as_FloatRegister(i+6), as_FloatRegister(i+12), as_FloatRegister(i+14)); + } + __ aes_kexpand1(F48, F54, 6, F56); + __ aes_kexpand2(F50, F56, F58); + + for ( int i = 0; i <= 6; i += 2 ) { + __ fmov(FloatRegisterImpl::D, as_FloatRegister(58-i), as_FloatRegister(i)); + } + + // load input into F52-F54 + __ ldf(FloatRegisterImpl::D, from, 0, F52); + __ ldf(FloatRegisterImpl::D, from, 8, F54); + + // perform 256-bit key specific inverse cipher transformation + __ fxor(FloatRegisterImpl::D, F0, F54, F54); + __ fxor(FloatRegisterImpl::D, F2, F52, F52); + __ aes_dround23(F4, F52, F54, F58); + __ aes_dround01(F6, F52, F54, F56); + __ aes_dround23(F50, F56, F58, F54); + __ aes_dround01(F48, F56, F58, F52); + __ aes_dround23(F46, F52, F54, F58); + __ aes_dround01(F44, F52, F54, F56); + __ aes_dround23(F42, F56, F58, F54); + __ aes_dround01(F40, F56, F58, F52); + + for ( int i = 0; i <= 7; i++ ) { + __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i)); + } + + // perform inverse cipher transformations common for all key sizes + __ BIND(L_common_transform); + for ( int i = 38; i >= 6; i -= 8 ) { + __ aes_dround23(as_FloatRegister(i), F52, F54, F58); + __ aes_dround01(as_FloatRegister(i-2), F52, F54, F56); + if ( i != 6) { + __ aes_dround23(as_FloatRegister(i-4), F56, F58, F54); + __ aes_dround01(as_FloatRegister(i-6), F56, F58, F52); + } else { + __ aes_dround23_l(as_FloatRegister(i-4), F56, F58, F54); + __ aes_dround01_l(as_FloatRegister(i-6), F56, F58, F52); + } + } + + // store output to destination array, F0-F1 used as temp + __ fmov(FloatRegisterImpl::D, F52, F0); + __ stf(FloatRegisterImpl::S, F0, to, 0); + __ stf(FloatRegisterImpl::S, F1, to, 4); + __ fmov(FloatRegisterImpl::D, F54, F0); + __ stf(FloatRegisterImpl::S, F0, to, 8); + __ retl(); + __ delayed()->stf(FloatRegisterImpl::S, F1, to, 12); + + return start; + } + + address generate_cipherBlockChaining_encryptAESCrypt() { + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt"); + Label L_cbcenc128, L_cbcenc192, L_cbcenc256; + address start = __ pc(); + Register from = O0; // source byte array + Register to = O1; // destination byte array + Register key = O2; // expanded key array + Register rvec = O3; // init vector + const Register len_reg = O4; // cipher length + const Register keylen = O5; // reg for storing expanded key array length + + // save cipher len to return in the end + __ mov(len_reg, L1); + + // read expanded key length + __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0); + + // load init vector + __ ldf(FloatRegisterImpl::D, rvec, 0, F60); + __ ldf(FloatRegisterImpl::D, rvec, 8, F62); + __ ldx(key,0,G1); + __ ldx(key,8,G2); + + // start loading expanded key + for ( int i = 0, j = 16; i <= 38; i += 2, j += 8 ) { + __ ldf(FloatRegisterImpl::D, key, j, as_FloatRegister(i)); + } + + // 128-bit original key size + __ cmp_and_brx_short(keylen, 44, Assembler::equal, Assembler::pt, L_cbcenc128); + + for ( int i = 40, j = 176; i <= 46; i += 2, j += 8 ) { + __ ldf(FloatRegisterImpl::D, key, j, as_FloatRegister(i)); + } + + // 192-bit original key size + __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pt, L_cbcenc192); + + for ( int i = 48, j = 208; i <= 54; i += 2, j += 8 ) { + __ ldf(FloatRegisterImpl::D, key, j, as_FloatRegister(i)); + } + + // 256-bit original key size + __ br(Assembler::always, false, Assembler::pt, L_cbcenc256); + __ delayed()->nop(); + + __ align(OptoLoopAlignment); + __ BIND(L_cbcenc128); + __ ldx(from,0,G3); + __ ldx(from,8,G4); + __ xor3(G1,G3,G3); + __ xor3(G2,G4,G4); + __ movxtod(G3,F56); + __ movxtod(G4,F58); + __ fxor(FloatRegisterImpl::D, F60, F56, F60); + __ fxor(FloatRegisterImpl::D, F62, F58, F62); + + // TEN_EROUNDS + for ( int i = 0; i <= 32; i += 8 ) { + __ aes_eround01(as_FloatRegister(i), F60, F62, F56); + __ aes_eround23(as_FloatRegister(i+2), F60, F62, F58); + if (i != 32 ) { + __ aes_eround01(as_FloatRegister(i+4), F56, F58, F60); + __ aes_eround23(as_FloatRegister(i+6), F56, F58, F62); + } else { + __ aes_eround01_l(as_FloatRegister(i+4), F56, F58, F60); + __ aes_eround23_l(as_FloatRegister(i+6), F56, F58, F62); + } + } + + __ stf(FloatRegisterImpl::D, F60, to, 0); + __ stf(FloatRegisterImpl::D, F62, to, 8); + __ add(from, 16, from); + __ add(to, 16, to); + __ subcc(len_reg, 16, len_reg); + __ br(Assembler::notEqual, false, Assembler::pt, L_cbcenc128); + __ delayed()->nop(); + __ stf(FloatRegisterImpl::D, F60, rvec, 0); + __ stf(FloatRegisterImpl::D, F62, rvec, 8); + __ retl(); + __ delayed()->mov(L1, O0); + + __ align(OptoLoopAlignment); + __ BIND(L_cbcenc192); + __ ldx(from,0,G3); + __ ldx(from,8,G4); + __ xor3(G1,G3,G3); + __ xor3(G2,G4,G4); + __ movxtod(G3,F56); + __ movxtod(G4,F58); + __ fxor(FloatRegisterImpl::D, F60, F56, F60); + __ fxor(FloatRegisterImpl::D, F62, F58, F62); + + // TWELEVE_EROUNDS + for ( int i = 0; i <= 40; i += 8 ) { + __ aes_eround01(as_FloatRegister(i), F60, F62, F56); + __ aes_eround23(as_FloatRegister(i+2), F60, F62, F58); + if (i != 40 ) { + __ aes_eround01(as_FloatRegister(i+4), F56, F58, F60); + __ aes_eround23(as_FloatRegister(i+6), F56, F58, F62); + } else { + __ aes_eround01_l(as_FloatRegister(i+4), F56, F58, F60); + __ aes_eround23_l(as_FloatRegister(i+6), F56, F58, F62); + } + } + + __ stf(FloatRegisterImpl::D, F60, to, 0); + __ stf(FloatRegisterImpl::D, F62, to, 8); + __ add(from, 16, from); + __ subcc(len_reg, 16, len_reg); + __ add(to, 16, to); + __ br(Assembler::notEqual, false, Assembler::pt, L_cbcenc192); + __ delayed()->nop(); + __ stf(FloatRegisterImpl::D, F60, rvec, 0); + __ stf(FloatRegisterImpl::D, F62, rvec, 8); + __ retl(); + __ delayed()->mov(L1, O0); + + __ align(OptoLoopAlignment); + __ BIND(L_cbcenc256); + __ ldx(from,0,G3); + __ ldx(from,8,G4); + __ xor3(G1,G3,G3); + __ xor3(G2,G4,G4); + __ movxtod(G3,F56); + __ movxtod(G4,F58); + __ fxor(FloatRegisterImpl::D, F60, F56, F60); + __ fxor(FloatRegisterImpl::D, F62, F58, F62); + + // FOURTEEN_EROUNDS + for ( int i = 0; i <= 48; i += 8 ) { + __ aes_eround01(as_FloatRegister(i), F60, F62, F56); + __ aes_eround23(as_FloatRegister(i+2), F60, F62, F58); + if (i != 48 ) { + __ aes_eround01(as_FloatRegister(i+4), F56, F58, F60); + __ aes_eround23(as_FloatRegister(i+6), F56, F58, F62); + } else { + __ aes_eround01_l(as_FloatRegister(i+4), F56, F58, F60); + __ aes_eround23_l(as_FloatRegister(i+6), F56, F58, F62); + } + } + + __ stf(FloatRegisterImpl::D, F60, to, 0); + __ stf(FloatRegisterImpl::D, F62, to, 8); + __ add(from, 16, from); + __ subcc(len_reg, 16, len_reg); + __ add(to, 16, to); + __ br(Assembler::notEqual, false, Assembler::pt, L_cbcenc256); + __ delayed()->nop(); + __ stf(FloatRegisterImpl::D, F60, rvec, 0); + __ stf(FloatRegisterImpl::D, F62, rvec, 8); + __ retl(); + __ delayed()->mov(L1, O0); + + return start; + } + + address generate_cipherBlockChaining_decryptAESCrypt_Parallel() { + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_decryptAESCrypt"); + Label L_cbcdec_end, L_expand192bit, L_expand256bit, L_dec_first_block_start; + Label L_dec_first_block128, L_dec_first_block192, L_dec_next2_blocks128, L_dec_next2_blocks192, L_dec_next2_blocks256; + address start = __ pc(); + Register from = I0; // source byte array + Register to = I1; // destination byte array + Register key = I2; // expanded key array + Register rvec = I3; // init vector + const Register len_reg = I4; // cipher length + const Register original_key = I5; // original key array only required during decryption + const Register keylen = L6; // reg for storing expanded key array length + + // save cipher len before save_frame, to return in the end + __ mov(O4, L0); + __ save_frame(0); //args are read from I* registers since we save the frame in the beginning + + // load original key from SunJCE expanded decryption key + for ( int i = 0; i <= 3; i++ ) { + __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i)); + } + + // load initial vector + __ ldx(rvec,0,L0); + __ ldx(rvec,8,L1); + + // read expanded key array length + __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0); + + // 256-bit original key size + __ cmp_and_brx_short(keylen, 60, Assembler::equal, Assembler::pn, L_expand256bit); + + // 192-bit original key size + __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pn, L_expand192bit); + + // 128-bit original key size + // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions + for ( int i = 0; i <= 36; i += 4 ) { + __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+2), i/4, as_FloatRegister(i+4)); + __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+4), as_FloatRegister(i+6)); + } + + // load expanded key[last-1] and key[last] elements + __ movdtox(F40,L2); + __ movdtox(F42,L3); + + __ and3(len_reg, 16, L4); + __ br_null(L4, false, Assembler::pt, L_dec_next2_blocks128); + __ delayed()->nop(); + + __ br(Assembler::always, false, Assembler::pt, L_dec_first_block_start); + __ delayed()->nop(); + + __ BIND(L_expand192bit); + // load rest of the 192-bit key + __ ldf(FloatRegisterImpl::S, original_key, 16, F4); + __ ldf(FloatRegisterImpl::S, original_key, 20, F5); + + // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions + for ( int i = 0; i <= 36; i += 6 ) { + __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+4), i/6, as_FloatRegister(i+6)); + __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+6), as_FloatRegister(i+8)); + __ aes_kexpand2(as_FloatRegister(i+4), as_FloatRegister(i+8), as_FloatRegister(i+10)); + } + __ aes_kexpand1(F42, F46, 7, F48); + __ aes_kexpand2(F44, F48, F50); + + // load expanded key[last-1] and key[last] elements + __ movdtox(F48,L2); + __ movdtox(F50,L3); + + __ and3(len_reg, 16, L4); + __ br_null(L4, false, Assembler::pt, L_dec_next2_blocks192); + __ delayed()->nop(); + + __ br(Assembler::always, false, Assembler::pt, L_dec_first_block_start); + __ delayed()->nop(); + + __ BIND(L_expand256bit); + // load rest of the 256-bit key + for ( int i = 4; i <= 7; i++ ) { + __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i)); + } + + // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions + for ( int i = 0; i <= 40; i += 8 ) { + __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+6), i/8, as_FloatRegister(i+8)); + __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+8), as_FloatRegister(i+10)); + __ aes_kexpand0(as_FloatRegister(i+4), as_FloatRegister(i+10), as_FloatRegister(i+12)); + __ aes_kexpand2(as_FloatRegister(i+6), as_FloatRegister(i+12), as_FloatRegister(i+14)); + } + __ aes_kexpand1(F48, F54, 6, F56); + __ aes_kexpand2(F50, F56, F58); + + // load expanded key[last-1] and key[last] elements + __ movdtox(F56,L2); + __ movdtox(F58,L3); + + __ and3(len_reg, 16, L4); + __ br_null(L4, false, Assembler::pt, L_dec_next2_blocks256); + __ delayed()->nop(); + + __ BIND(L_dec_first_block_start); + __ ldx(from,0,L4); + __ ldx(from,8,L5); + __ xor3(L2,L4,G1); + __ movxtod(G1,F60); + __ xor3(L3,L5,G1); + __ movxtod(G1,F62); + + // 128-bit original key size + __ cmp_and_brx_short(keylen, 44, Assembler::equal, Assembler::pn, L_dec_first_block128); + + // 192-bit original key size + __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pn, L_dec_first_block192); + + __ aes_dround23(F54, F60, F62, F58); + __ aes_dround01(F52, F60, F62, F56); + __ aes_dround23(F50, F56, F58, F62); + __ aes_dround01(F48, F56, F58, F60); + + __ BIND(L_dec_first_block192); + __ aes_dround23(F46, F60, F62, F58); + __ aes_dround01(F44, F60, F62, F56); + __ aes_dround23(F42, F56, F58, F62); + __ aes_dround01(F40, F56, F58, F60); + + __ BIND(L_dec_first_block128); + for ( int i = 38; i >= 6; i -= 8 ) { + __ aes_dround23(as_FloatRegister(i), F60, F62, F58); + __ aes_dround01(as_FloatRegister(i-2), F60, F62, F56); + if ( i != 6) { + __ aes_dround23(as_FloatRegister(i-4), F56, F58, F62); + __ aes_dround01(as_FloatRegister(i-6), F56, F58, F60); + } else { + __ aes_dround23_l(as_FloatRegister(i-4), F56, F58, F62); + __ aes_dround01_l(as_FloatRegister(i-6), F56, F58, F60); + } + } + + __ movxtod(L0,F56); + __ movxtod(L1,F58); + __ mov(L4,L0); + __ mov(L5,L1); + __ fxor(FloatRegisterImpl::D, F56, F60, F60); + __ fxor(FloatRegisterImpl::D, F58, F62, F62); + + __ stf(FloatRegisterImpl::D, F60, to, 0); + __ stf(FloatRegisterImpl::D, F62, to, 8); + + __ add(from, 16, from); + __ add(to, 16, to); + __ subcc(len_reg, 16, len_reg); + __ br(Assembler::equal, false, Assembler::pt, L_cbcdec_end); + __ delayed()->nop(); + + // 256-bit original key size + __ cmp_and_brx_short(keylen, 60, Assembler::equal, Assembler::pn, L_dec_next2_blocks256); + + // 192-bit original key size + __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pn, L_dec_next2_blocks192); + + __ align(OptoLoopAlignment); + __ BIND(L_dec_next2_blocks128); + __ nop(); + + // F40:F42 used for first 16-bytes + __ ldx(from,0,G4); + __ ldx(from,8,G5); + __ xor3(L2,G4,G1); + __ movxtod(G1,F40); + __ xor3(L3,G5,G1); + __ movxtod(G1,F42); + + // F60:F62 used for next 16-bytes + __ ldx(from,16,L4); + __ ldx(from,24,L5); + __ xor3(L2,L4,G1); + __ movxtod(G1,F60); + __ xor3(L3,L5,G1); + __ movxtod(G1,F62); + + for ( int i = 38; i >= 6; i -= 8 ) { + __ aes_dround23(as_FloatRegister(i), F40, F42, F44); + __ aes_dround01(as_FloatRegister(i-2), F40, F42, F46); + __ aes_dround23(as_FloatRegister(i), F60, F62, F58); + __ aes_dround01(as_FloatRegister(i-2), F60, F62, F56); + if (i != 6 ) { + __ aes_dround23(as_FloatRegister(i-4), F46, F44, F42); + __ aes_dround01(as_FloatRegister(i-6), F46, F44, F40); + __ aes_dround23(as_FloatRegister(i-4), F56, F58, F62); + __ aes_dround01(as_FloatRegister(i-6), F56, F58, F60); + } else { + __ aes_dround23_l(as_FloatRegister(i-4), F46, F44, F42); + __ aes_dround01_l(as_FloatRegister(i-6), F46, F44, F40); + __ aes_dround23_l(as_FloatRegister(i-4), F56, F58, F62); + __ aes_dround01_l(as_FloatRegister(i-6), F56, F58, F60); + } + } + + __ movxtod(L0,F46); + __ movxtod(L1,F44); + __ fxor(FloatRegisterImpl::D, F46, F40, F40); + __ fxor(FloatRegisterImpl::D, F44, F42, F42); + + __ stf(FloatRegisterImpl::D, F40, to, 0); + __ stf(FloatRegisterImpl::D, F42, to, 8); + + __ movxtod(G4,F56); + __ movxtod(G5,F58); + __ mov(L4,L0); + __ mov(L5,L1); + __ fxor(FloatRegisterImpl::D, F56, F60, F60); + __ fxor(FloatRegisterImpl::D, F58, F62, F62); + + __ stf(FloatRegisterImpl::D, F60, to, 16); + __ stf(FloatRegisterImpl::D, F62, to, 24); + + __ add(from, 32, from); + __ add(to, 32, to); + __ subcc(len_reg, 32, len_reg); + __ br(Assembler::notEqual, false, Assembler::pt, L_dec_next2_blocks128); + __ delayed()->nop(); + __ br(Assembler::always, false, Assembler::pt, L_cbcdec_end); + __ delayed()->nop(); + + __ align(OptoLoopAlignment); + __ BIND(L_dec_next2_blocks192); + __ nop(); + + // F48:F50 used for first 16-bytes + __ ldx(from,0,G4); + __ ldx(from,8,G5); + __ xor3(L2,G4,G1); + __ movxtod(G1,F48); + __ xor3(L3,G5,G1); + __ movxtod(G1,F50); + + // F60:F62 used for next 16-bytes + __ ldx(from,16,L4); + __ ldx(from,24,L5); + __ xor3(L2,L4,G1); + __ movxtod(G1,F60); + __ xor3(L3,L5,G1); + __ movxtod(G1,F62); + + for ( int i = 46; i >= 6; i -= 8 ) { + __ aes_dround23(as_FloatRegister(i), F48, F50, F52); + __ aes_dround01(as_FloatRegister(i-2), F48, F50, F54); + __ aes_dround23(as_FloatRegister(i), F60, F62, F58); + __ aes_dround01(as_FloatRegister(i-2), F60, F62, F56); + if (i != 6 ) { + __ aes_dround23(as_FloatRegister(i-4), F54, F52, F50); + __ aes_dround01(as_FloatRegister(i-6), F54, F52, F48); + __ aes_dround23(as_FloatRegister(i-4), F56, F58, F62); + __ aes_dround01(as_FloatRegister(i-6), F56, F58, F60); + } else { + __ aes_dround23_l(as_FloatRegister(i-4), F54, F52, F50); + __ aes_dround01_l(as_FloatRegister(i-6), F54, F52, F48); + __ aes_dround23_l(as_FloatRegister(i-4), F56, F58, F62); + __ aes_dround01_l(as_FloatRegister(i-6), F56, F58, F60); + } + } + + __ movxtod(L0,F54); + __ movxtod(L1,F52); + __ fxor(FloatRegisterImpl::D, F54, F48, F48); + __ fxor(FloatRegisterImpl::D, F52, F50, F50); + + __ stf(FloatRegisterImpl::D, F48, to, 0); + __ stf(FloatRegisterImpl::D, F50, to, 8); + + __ movxtod(G4,F56); + __ movxtod(G5,F58); + __ mov(L4,L0); + __ mov(L5,L1); + __ fxor(FloatRegisterImpl::D, F56, F60, F60); + __ fxor(FloatRegisterImpl::D, F58, F62, F62); + + __ stf(FloatRegisterImpl::D, F60, to, 16); + __ stf(FloatRegisterImpl::D, F62, to, 24); + + __ add(from, 32, from); + __ add(to, 32, to); + __ subcc(len_reg, 32, len_reg); + __ br(Assembler::notEqual, false, Assembler::pt, L_dec_next2_blocks192); + __ delayed()->nop(); + __ br(Assembler::always, false, Assembler::pt, L_cbcdec_end); + __ delayed()->nop(); + + __ align(OptoLoopAlignment); + __ BIND(L_dec_next2_blocks256); + __ nop(); + + // F0:F2 used for first 16-bytes + __ ldx(from,0,G4); + __ ldx(from,8,G5); + __ xor3(L2,G4,G1); + __ movxtod(G1,F0); + __ xor3(L3,G5,G1); + __ movxtod(G1,F2); + + // F60:F62 used for next 16-bytes + __ ldx(from,16,L4); + __ ldx(from,24,L5); + __ xor3(L2,L4,G1); + __ movxtod(G1,F60); + __ xor3(L3,L5,G1); + __ movxtod(G1,F62); + + __ aes_dround23(F54, F0, F2, F4); + __ aes_dround01(F52, F0, F2, F6); + __ aes_dround23(F54, F60, F62, F58); + __ aes_dround01(F52, F60, F62, F56); + __ aes_dround23(F50, F6, F4, F2); + __ aes_dround01(F48, F6, F4, F0); + __ aes_dround23(F50, F56, F58, F62); + __ aes_dround01(F48, F56, F58, F60); + // save F48:F54 in temp registers + __ movdtox(F54,G2); + __ movdtox(F52,G3); + __ movdtox(F50,G6); + __ movdtox(F48,G1); + for ( int i = 46; i >= 14; i -= 8 ) { + __ aes_dround23(as_FloatRegister(i), F0, F2, F4); + __ aes_dround01(as_FloatRegister(i-2), F0, F2, F6); + __ aes_dround23(as_FloatRegister(i), F60, F62, F58); + __ aes_dround01(as_FloatRegister(i-2), F60, F62, F56); + __ aes_dround23(as_FloatRegister(i-4), F6, F4, F2); + __ aes_dround01(as_FloatRegister(i-6), F6, F4, F0); + __ aes_dround23(as_FloatRegister(i-4), F56, F58, F62); + __ aes_dround01(as_FloatRegister(i-6), F56, F58, F60); + } + // init F48:F54 with F0:F6 values (original key) + __ ldf(FloatRegisterImpl::D, original_key, 0, F48); + __ ldf(FloatRegisterImpl::D, original_key, 8, F50); + __ ldf(FloatRegisterImpl::D, original_key, 16, F52); + __ ldf(FloatRegisterImpl::D, original_key, 24, F54); + __ aes_dround23(F54, F0, F2, F4); + __ aes_dround01(F52, F0, F2, F6); + __ aes_dround23(F54, F60, F62, F58); + __ aes_dround01(F52, F60, F62, F56); + __ aes_dround23_l(F50, F6, F4, F2); + __ aes_dround01_l(F48, F6, F4, F0); + __ aes_dround23_l(F50, F56, F58, F62); + __ aes_dround01_l(F48, F56, F58, F60); + // re-init F48:F54 with their original values + __ movxtod(G2,F54); + __ movxtod(G3,F52); + __ movxtod(G6,F50); + __ movxtod(G1,F48); + + __ movxtod(L0,F6); + __ movxtod(L1,F4); + __ fxor(FloatRegisterImpl::D, F6, F0, F0); + __ fxor(FloatRegisterImpl::D, F4, F2, F2); + + __ stf(FloatRegisterImpl::D, F0, to, 0); + __ stf(FloatRegisterImpl::D, F2, to, 8); + + __ movxtod(G4,F56); + __ movxtod(G5,F58); + __ mov(L4,L0); + __ mov(L5,L1); + __ fxor(FloatRegisterImpl::D, F56, F60, F60); + __ fxor(FloatRegisterImpl::D, F58, F62, F62); + + __ stf(FloatRegisterImpl::D, F60, to, 16); + __ stf(FloatRegisterImpl::D, F62, to, 24); + + __ add(from, 32, from); + __ add(to, 32, to); + __ subcc(len_reg, 32, len_reg); + __ br(Assembler::notEqual, false, Assembler::pt, L_dec_next2_blocks256); + __ delayed()->nop(); + + __ BIND(L_cbcdec_end); + __ stx(L0, rvec, 0); + __ stx(L1, rvec, 8); + __ restore(); + __ mov(L0, O0); + __ retl(); + __ delayed()->nop(); + + return start; + } + void generate_initial() { // Generates all stubs and initializes the entry points @@ -3368,6 +4137,14 @@ class StubGenerator: public StubCodeGenerator { generate_safefetch("SafeFetchN", sizeof(intptr_t), &StubRoutines::_safefetchN_entry, &StubRoutines::_safefetchN_fault_pc, &StubRoutines::_safefetchN_continuation_pc); + + // generate AES intrinsics code + if (UseAESIntrinsics) { + StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); + StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock(); + StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt(); + StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt_Parallel(); + } } diff --git a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp index 40847f8c2df..5fd629a4f1e 100644 --- a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp @@ -156,6 +156,10 @@ address TemplateInterpreterGenerator::generate_StackOverflowError_handler() { address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) { address entry = __ pc(); + if (state == atos) { + __ profile_return_type(O0, G3_scratch, G1_scratch); + } + #if !defined(_LP64) && defined(COMPILER2) // All return values are where we want them, except for Longs. C2 returns // longs in G1 in the 32-bit build whereas the interpreter wants them in O0/O1. @@ -1333,6 +1337,7 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) { __ movbool(true, G3_scratch); __ stbool(G3_scratch, do_not_unlock_if_synchronized); + __ profile_parameters_type(G1_scratch, G3_scratch, G4_scratch, Lscratch); // increment invocation counter and check for overflow // // Note: checking for negative value instead of overflow diff --git a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp index 92098113cca..83e083ec1c5 100644 --- a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp @@ -2942,12 +2942,12 @@ void TemplateTable::prepare_invoke(int byte_no, void TemplateTable::generate_vtable_call(Register Rrecv, Register Rindex, Register Rret) { - Register Rtemp = G4_scratch; Register Rcall = Rindex; assert_different_registers(Rcall, G5_method, Gargs, Rret); // get target Method* & entry point __ lookup_virtual_method(Rrecv, Rindex, G5_method); + __ profile_arguments_type(G5_method, Rcall, Gargs, true); __ call_from_interpreter(Rcall, Gargs, Rret); } @@ -3022,6 +3022,7 @@ void TemplateTable::invokevfinal_helper(Register Rscratch, Register Rret) { __ null_check(O0); __ profile_final_call(O4); + __ profile_arguments_type(G5_method, Rscratch, Gargs, true); // get return address AddressLiteral table(Interpreter::invoke_return_entry_table()); @@ -3051,6 +3052,7 @@ void TemplateTable::invokespecial(int byte_no) { // do the call __ profile_call(O4); + __ profile_arguments_type(G5_method, Rscratch, Gargs, false); __ call_from_interpreter(Rscratch, Gargs, Rret); } @@ -3066,6 +3068,7 @@ void TemplateTable::invokestatic(int byte_no) { // do the call __ profile_call(O4); + __ profile_arguments_type(G5_method, Rscratch, Gargs, false); __ call_from_interpreter(Rscratch, Gargs, Rret); } @@ -3091,6 +3094,7 @@ void TemplateTable::invokeinterface_object_method(Register RKlass, // do the call - the index (f2) contains the Method* assert_different_registers(G5_method, Gargs, Rcall); __ mov(Rindex, G5_method); + __ profile_arguments_type(G5_method, Rcall, Gargs, true); __ call_from_interpreter(Rcall, Gargs, Rret); __ bind(notFinal); @@ -3197,6 +3201,7 @@ void TemplateTable::invokeinterface(int byte_no) { Register Rcall = Rinterface; assert_different_registers(Rcall, G5_method, Gargs, Rret); + __ profile_arguments_type(G5_method, Rcall, Gargs, true); __ call_from_interpreter(Rcall, Gargs, Rret); } @@ -3226,6 +3231,7 @@ void TemplateTable::invokehandle(int byte_no) { // do the call __ verify_oop(G4_mtype); __ profile_final_call(O4); // FIXME: profile the LambdaForm also + __ profile_arguments_type(G5_method, Rscratch, Gargs, true); __ call_from_interpreter(Rscratch, Gargs, Rret); } @@ -3262,6 +3268,7 @@ void TemplateTable::invokedynamic(int byte_no) { // do the call __ verify_oop(G4_callsite); + __ profile_arguments_type(G5_method, Rscratch, Gargs, false); __ call_from_interpreter(Rscratch, Gargs, Rret); } diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp index bae7b3510cd..b75d21f98de 100644 --- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp @@ -234,7 +234,7 @@ void VM_Version::initialize() { assert((OptoLoopAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size"); char buf[512]; - jio_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + jio_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", (has_v9() ? ", v9" : (has_v8() ? ", v8" : "")), (has_hardware_popc() ? ", popc" : ""), (has_vis1() ? ", vis1" : ""), @@ -242,6 +242,7 @@ void VM_Version::initialize() { (has_vis3() ? ", vis3" : ""), (has_blk_init() ? ", blk_init" : ""), (has_cbcond() ? ", cbcond" : ""), + (has_aes() ? ", aes" : ""), (is_ultra3() ? ", ultra3" : ""), (is_sun4v() ? ", sun4v" : ""), (is_niagara_plus() ? ", niagara_plus" : (is_niagara() ? ", niagara" : "")), @@ -265,6 +266,41 @@ void VM_Version::initialize() { if (!has_vis1()) // Drop to 0 if no VIS1 support UseVIS = 0; + // T2 and above should have support for AES instructions + if (has_aes()) { + if (UseVIS > 0) { // AES intrinsics use FXOR instruction which is VIS1 + if (FLAG_IS_DEFAULT(UseAES)) { + FLAG_SET_DEFAULT(UseAES, true); + } + if (FLAG_IS_DEFAULT(UseAESIntrinsics)) { + FLAG_SET_DEFAULT(UseAESIntrinsics, true); + } + // we disable both the AES flags if either of them is disabled on the command line + if (!UseAES || !UseAESIntrinsics) { + FLAG_SET_DEFAULT(UseAES, false); + FLAG_SET_DEFAULT(UseAESIntrinsics, false); + } + } else { + if (UseAES || UseAESIntrinsics) { + warning("SPARC AES intrinsics require VIS1 instruction support. Intrinsics will be disabled."); + if (UseAES) { + FLAG_SET_DEFAULT(UseAES, false); + } + if (UseAESIntrinsics) { + FLAG_SET_DEFAULT(UseAESIntrinsics, false); + } + } + } + } else if (UseAES || UseAESIntrinsics) { + warning("AES instructions are not available on this CPU"); + if (UseAES) { + FLAG_SET_DEFAULT(UseAES, false); + } + if (UseAESIntrinsics) { + FLAG_SET_DEFAULT(UseAESIntrinsics, false); + } + } + if (FLAG_IS_DEFAULT(ContendedPaddingWidth) && (cache_line_size > ContendedPaddingWidth)) ContendedPaddingWidth = cache_line_size; diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp index b8d63f4f862..eafb4856280 100644 --- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp @@ -48,7 +48,9 @@ protected: sparc64_family = 14, M_family = 15, T_family = 16, - T1_model = 17 + T1_model = 17, + sparc5_instructions = 18, + aes_instructions = 19 }; enum Feature_Flag_Set { @@ -73,6 +75,8 @@ protected: M_family_m = 1 << M_family, T_family_m = 1 << T_family, T1_model_m = 1 << T1_model, + sparc5_instructions_m = 1 << sparc5_instructions, + aes_instructions_m = 1 << aes_instructions, generic_v8_m = v8_instructions_m | hardware_mul32_m | hardware_div32_m | hardware_fsmuld_m, generic_v9_m = generic_v8_m | v9_instructions_m, @@ -123,6 +127,8 @@ public: static bool has_vis3() { return (_features & vis3_instructions_m) != 0; } static bool has_blk_init() { return (_features & blk_init_instructions_m) != 0; } static bool has_cbcond() { return (_features & cbcond_instructions_m) != 0; } + static bool has_sparc5_instr() { return (_features & sparc5_instructions_m) != 0; } + static bool has_aes() { return (_features & aes_instructions_m) != 0; } static bool supports_compare_and_exchange() { return has_v9(); } @@ -133,6 +139,7 @@ public: static bool is_M_series() { return is_M_family(_features); } static bool is_T4() { return is_T_family(_features) && has_cbcond(); } + static bool is_T7() { return is_T_family(_features) && has_sparc5_instr(); } // Fujitsu SPARC64 static bool is_sparc64() { return (_features & sparc64_family_m) != 0; } @@ -152,7 +159,7 @@ public: static const char* cpu_features() { return _features_str; } static intx prefetch_data_size() { - return is_T4() ? 32 : 64; // default prefetch block size on sparc + return is_T4() && !is_T7() ? 32 : 64; // default prefetch block size on sparc } // Prefetch diff --git a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp index af13192330b..bf9c9347380 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @@ -38,6 +38,7 @@ #include "nativeInst_x86.hpp" #include "oops/objArrayKlass.hpp" #include "runtime/sharedRuntime.hpp" +#include "vmreg_x86.inline.hpp" // These masks are used to provide 128-bit aligned bitmasks to the XMM @@ -1006,6 +1007,9 @@ void LIR_Assembler::reg2mem(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch if (UseCompressedOops && !wide) { __ movptr(compressed_src, src->as_register()); __ encode_heap_oop(compressed_src); + if (patch_code != lir_patch_none) { + info->oop_map()->set_narrowoop(compressed_src->as_VMReg()); + } } #endif } diff --git a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp index 4a30d597b3e..b4e8223e1f5 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp @@ -941,6 +941,8 @@ void LIRGenerator::do_update_CRC32(Intrinsic* x) { case vmIntrinsics::_updateCRC32: { LIRItem crc(x->argument_at(0), this); LIRItem val(x->argument_at(1), this); + // val is destroyed by update_crc32 + val.set_destroys_register(); crc.load_item(); val.load_item(); __ update_crc32(crc.result(), val.result(), result); diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp index f47c0b1bb0c..799be13037f 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp @@ -127,7 +127,7 @@ void InterpreterMacroAssembler::profile_arguments_type(Register mdp, Register ca if (MethodData::profile_return()) { // We're right after the type profile for the last - // argument. tmp is the number of cell left in the + // argument. tmp is the number of cells left in the // CallTypeData/VirtualCallTypeData to reach its end. Non null // if there's a return to profile. assert(ReturnTypeEntry::static_cell_count() < TypeStackSlotEntries::per_arg_count(), "can't move past ret type"); @@ -198,7 +198,7 @@ void InterpreterMacroAssembler::profile_parameters_type(Register mdp, Register t // parameters. Collect profiling from last parameter down. // mdo start + parameters offset + array length - 1 addptr(mdp, tmp1); - movptr(tmp1, Address(mdp, in_bytes(ArrayData::array_len_offset()))); + movptr(tmp1, Address(mdp, ArrayData::array_len_offset())); decrement(tmp1, TypeStackSlotEntries::per_arg_count()); Label loop; diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp index 12fccf9ddd3..1622fe5ffc5 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp @@ -2403,6 +2403,9 @@ class StubGenerator: public StubCodeGenerator { // c_rarg3 - r vector byte array address // c_rarg4 - input length // + // Output: + // rax - input length + // address generate_cipherBlockChaining_encryptAESCrypt() { assert(UseAES, "need AES instructions and misaligned SSE support"); __ align(CodeEntryAlignment); @@ -2483,7 +2486,7 @@ class StubGenerator: public StubCodeGenerator { __ movdqu(Address(rvec, 0), xmm_result); // final value of r stored in rvec of CipherBlockChaining object handleSOERegisters(false /*restoring*/); - __ movl(rax, 0); // return 0 (why?) + __ movptr(rax, len_param); // return length __ leave(); // required for proper stackwalking of RuntimeStub frame __ ret(0); @@ -2557,6 +2560,9 @@ class StubGenerator: public StubCodeGenerator { // c_rarg3 - r vector byte array address // c_rarg4 - input length // + // Output: + // rax - input length + // address generate_cipherBlockChaining_decryptAESCrypt() { assert(UseAES, "need AES instructions and misaligned SSE support"); @@ -2650,7 +2656,7 @@ class StubGenerator: public StubCodeGenerator { __ movptr(rvec , rvec_param); // restore this since used in loop __ movdqu(Address(rvec, 0), xmm_temp); // final value of r stored in rvec of CipherBlockChaining object handleSOERegisters(false /*restoring*/); - __ movl(rax, 0); // return 0 (why?) + __ movptr(rax, len_param); // return length __ leave(); // required for proper stackwalking of RuntimeStub frame __ ret(0); diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp index a16611280fb..0adb0d31e72 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp @@ -3217,6 +3217,9 @@ class StubGenerator: public StubCodeGenerator { // c_rarg3 - r vector byte array address // c_rarg4 - input length // + // Output: + // rax - input length + // address generate_cipherBlockChaining_encryptAESCrypt() { assert(UseAES, "need AES instructions and misaligned SSE support"); __ align(CodeEntryAlignment); @@ -3232,7 +3235,7 @@ class StubGenerator: public StubCodeGenerator { #ifndef _WIN64 const Register len_reg = c_rarg4; // src len (must be multiple of blocksize 16) #else - const Address len_mem(rsp, 6 * wordSize); // length is on stack on Win64 + const Address len_mem(rbp, 6 * wordSize); // length is on stack on Win64 const Register len_reg = r10; // pick the first volatile windows register #endif const Register pos = rax; @@ -3259,6 +3262,8 @@ class StubGenerator: public StubCodeGenerator { for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { __ movdqu(xmm_save(i), as_XMMRegister(i)); } +#else + __ push(len_reg); // Save #endif const XMMRegister xmm_key_shuf_mask = xmm_temp; // used temporarily to swap key bytes up front @@ -3301,8 +3306,10 @@ class StubGenerator: public StubCodeGenerator { for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { __ movdqu(as_XMMRegister(i), xmm_save(i)); } + __ movl(rax, len_mem); +#else + __ pop(rax); // return length #endif - __ movl(rax, 0); // return 0 (why?) __ leave(); // required for proper stackwalking of RuntimeStub frame __ ret(0); @@ -3409,6 +3416,9 @@ class StubGenerator: public StubCodeGenerator { // c_rarg3 - r vector byte array address // c_rarg4 - input length // + // Output: + // rax - input length + // address generate_cipherBlockChaining_decryptAESCrypt_Parallel() { assert(UseAES, "need AES instructions and misaligned SSE support"); @@ -3427,7 +3437,7 @@ class StubGenerator: public StubCodeGenerator { #ifndef _WIN64 const Register len_reg = c_rarg4; // src len (must be multiple of blocksize 16) #else - const Address len_mem(rsp, 6 * wordSize); // length is on stack on Win64 + const Address len_mem(rbp, 6 * wordSize); // length is on stack on Win64 const Register len_reg = r10; // pick the first volatile windows register #endif const Register pos = rax; @@ -3448,7 +3458,10 @@ class StubGenerator: public StubCodeGenerator { for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { __ movdqu(xmm_save(i), as_XMMRegister(i)); } +#else + __ push(len_reg); // Save #endif + // the java expanded key ordering is rotated one position from what we want // so we start from 0x10 here and hit 0x00 last const XMMRegister xmm_key_shuf_mask = xmm1; // used temporarily to swap key bytes up front @@ -3554,8 +3567,10 @@ class StubGenerator: public StubCodeGenerator { for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { __ movdqu(as_XMMRegister(i), xmm_save(i)); } + __ movl(rax, len_mem); +#else + __ pop(rax); // return length #endif - __ movl(rax, 0); // return 0 (why?) __ leave(); // required for proper stackwalking of RuntimeStub frame __ ret(0); diff --git a/hotspot/src/cpu/x86/vm/x86.ad b/hotspot/src/cpu/x86/vm/x86.ad index c49d0e6c31c..b0077a5f58c 100644 --- a/hotspot/src/cpu/x86/vm/x86.ad +++ b/hotspot/src/cpu/x86/vm/x86.ad @@ -581,6 +581,12 @@ const bool Matcher::misaligned_vectors_ok() { return !AlignVector; // can be changed by flag } +// x86 AES instructions are compatible with SunJCE expanded +// keys, hence we do not need to pass the original key to stubs +const bool Matcher::pass_original_key_for_aes() { + return false; +} + // Helper methods for MachSpillCopyNode::implementation(). static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, int src_hi, int dst_hi, uint ireg, outputStream* st) { diff --git a/hotspot/src/cpu/x86/vm/x86_32.ad b/hotspot/src/cpu/x86/vm/x86_32.ad index 2aa9e5f5793..90c1d899ff1 100644 --- a/hotspot/src/cpu/x86/vm/x86_32.ad +++ b/hotspot/src/cpu/x86/vm/x86_32.ad @@ -3889,6 +3889,17 @@ operand immI16() %{ interface(CONST_INTER); %} +// Int Immediate non-negative +operand immU31() +%{ + predicate(n->get_int() >= 0); + match(ConI); + + op_cost(0); + format %{ %} + interface(CONST_INTER); +%} + // Constant for long shifts operand immI_32() %{ predicate( n->get_int() == 32 ); @@ -6119,12 +6130,12 @@ instruct loadI2L_immI_65535(eRegL dst, memory mem, immI_65535 mask, eFlagsReg cr ins_pipe(ialu_reg_mem); %} -// Load Integer with 32-bit mask into Long Register -instruct loadI2L_immI(eRegL dst, memory mem, immI mask, eFlagsReg cr) %{ +// Load Integer with 31-bit mask into Long Register +instruct loadI2L_immU31(eRegL dst, memory mem, immU31 mask, eFlagsReg cr) %{ match(Set dst (ConvI2L (AndI (LoadI mem) mask))); effect(KILL cr); - format %{ "MOV $dst.lo,$mem\t# int & 32-bit mask -> long\n\t" + format %{ "MOV $dst.lo,$mem\t# int & 31-bit mask -> long\n\t" "XOR $dst.hi,$dst.hi\n\t" "AND $dst.lo,$mask" %} ins_encode %{ diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad index 182a7012ac8..9fe92953ace 100644 --- a/hotspot/src/cpu/x86/vm/x86_64.ad +++ b/hotspot/src/cpu/x86/vm/x86_64.ad @@ -3086,6 +3086,17 @@ operand immI16() interface(CONST_INTER); %} +// Int Immediate non-negative +operand immU31() +%{ + predicate(n->get_int() >= 0); + match(ConI); + + op_cost(0); + format %{ %} + interface(CONST_INTER); +%} + // Constant for long shifts operand immI_32() %{ @@ -5042,12 +5053,12 @@ instruct loadI2L_immI_65535(rRegL dst, memory mem, immI_65535 mask) %{ ins_pipe(ialu_reg_mem); %} -// Load Integer with a 32-bit mask into Long Register -instruct loadI2L_immI(rRegL dst, memory mem, immI mask, rFlagsReg cr) %{ +// Load Integer with a 31-bit mask into Long Register +instruct loadI2L_immU31(rRegL dst, memory mem, immU31 mask, rFlagsReg cr) %{ match(Set dst (ConvI2L (AndI (LoadI mem) mask))); effect(KILL cr); - format %{ "movl $dst, $mem\t# int & 32-bit mask -> long\n\t" + format %{ "movl $dst, $mem\t# int & 31-bit mask -> long\n\t" "andl $dst, $mask" %} ins_encode %{ Register Rdst = $dst$$Register; diff --git a/hotspot/src/os/bsd/dtrace/hotspot.d b/hotspot/src/os/bsd/dtrace/hotspot.d index 996e1d782e5..b3679eaba62 100644 --- a/hotspot/src/os/bsd/dtrace/hotspot.d +++ b/hotspot/src/os/bsd/dtrace/hotspot.d @@ -56,7 +56,7 @@ provider hotspot { probe thread__park__end(uintptr_t); probe thread__unpark(uintptr_t); probe method__compile__begin( - const char*, uintptr_t, const char*, uintptr_t, const char*, uintptr_t, const char*, uintptr_t); + char*, uintptr_t, char*, uintptr_t, char*, uintptr_t, char*, uintptr_t); probe method__compile__end( char*, uintptr_t, char*, uintptr_t, char*, uintptr_t, char*, uintptr_t, uintptr_t); diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp index 1bea78444a8..456daba559c 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.cpp +++ b/hotspot/src/os/bsd/vm/os_bsd.cpp @@ -1557,6 +1557,17 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) } #endif /* !__APPLE__ */ +void* os::get_default_process_handle() { +#ifdef __APPLE__ + // MacOS X needs to use RTLD_FIRST instead of RTLD_LAZY + // to avoid finding unexpected symbols on second (or later) + // loads of a library. + return (void*)::dlopen(NULL, RTLD_FIRST); +#else + return (void*)::dlopen(NULL, RTLD_LAZY); +#endif +} + // XXX: Do we need a lock around this as per Linux? void* os::dll_lookup(void* handle, const char* name) { return dlsym(handle, name); @@ -2625,9 +2636,21 @@ int os::sleep(Thread* thread, jlong millis, bool interruptible) { } } -int os::naked_sleep() { - // %% make the sleep time an integer flag. for now use 1 millisec. - return os::sleep(Thread::current(), 1, false); +void os::naked_short_sleep(jlong ms) { + struct timespec req; + + assert(ms < 1000, "Un-interruptable sleep, short time use only"); + req.tv_sec = 0; + if (ms > 0) { + req.tv_nsec = (ms % 1000) * 1000000; + } + else { + req.tv_nsec = 1; + } + + nanosleep(&req, NULL); + + return; } // Sleep forever; naked call to OS-specific sleep; use with CAUTION diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index 1bb32901540..d0751f005ad 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -2104,6 +2104,9 @@ void* os::dll_lookup(void* handle, const char* name) { return res; } +void* os::get_default_process_handle() { + return (void*)::dlopen(NULL, RTLD_LAZY); +} static bool _print_ascii_file(const char* filename, outputStream* st) { int fd = ::open(filename, O_RDONLY); @@ -3868,9 +3871,33 @@ int os::sleep(Thread* thread, jlong millis, bool interruptible) { } } -int os::naked_sleep() { - // %% make the sleep time an integer flag. for now use 1 millisec. - return os::sleep(Thread::current(), 1, false); +// +// Short sleep, direct OS call. +// +// Note: certain versions of Linux CFS scheduler (since 2.6.23) do not guarantee +// sched_yield(2) will actually give up the CPU: +// +// * Alone on this pariticular CPU, keeps running. +// * Before the introduction of "skip_buddy" with "compat_yield" disabled +// (pre 2.6.39). +// +// So calling this with 0 is an alternative. +// +void os::naked_short_sleep(jlong ms) { + struct timespec req; + + assert(ms < 1000, "Un-interruptable sleep, short time use only"); + req.tv_sec = 0; + if (ms > 0) { + req.tv_nsec = (ms % 1000) * 1000000; + } + else { + req.tv_nsec = 1; + } + + nanosleep(&req, NULL); + + return; } // Sleep forever; naked call to OS-specific sleep; use with CAUTION diff --git a/hotspot/src/os/posix/vm/os_posix.cpp b/hotspot/src/os/posix/vm/os_posix.cpp index 6aae96e9b89..63333172893 100644 --- a/hotspot/src/os/posix/vm/os_posix.cpp +++ b/hotspot/src/os/posix/vm/os_posix.cpp @@ -262,10 +262,6 @@ FILE* os::open(int fd, const char* mode) { return ::fdopen(fd, mode); } -void* os::get_default_process_handle() { - return (void*)::dlopen(NULL, RTLD_LAZY); -} - // Builds a platform dependent Agent_OnLoad_ function name // which is used to find statically linked in agents. // Parameters: diff --git a/hotspot/src/os/solaris/dtrace/hotspot.d b/hotspot/src/os/solaris/dtrace/hotspot.d index 1f7d51b8cec..b3679eaba62 100644 --- a/hotspot/src/os/solaris/dtrace/hotspot.d +++ b/hotspot/src/os/solaris/dtrace/hotspot.d @@ -25,7 +25,7 @@ provider hotspot { probe class__loaded(char*, uintptr_t, void*, uintptr_t); probe class__unloaded(char*, uintptr_t, void*, uintptr_t); - probe class__initialization__required(char*, uintptr_t, void*, intptr_t,int); + probe class__initialization__required(char*, uintptr_t, void*, intptr_t); probe class__initialization__recursive(char*, uintptr_t, void*, intptr_t,int); probe class__initialization__concurrent(char*, uintptr_t, void*, intptr_t,int); probe class__initialization__erroneous(char*, uintptr_t, void*, intptr_t, int); diff --git a/hotspot/src/os/solaris/dtrace/hotspot_jni.d b/hotspot/src/os/solaris/dtrace/hotspot_jni.d index 837415f0e18..cca1c517650 100644 --- a/hotspot/src/os/solaris/dtrace/hotspot_jni.d +++ b/hotspot/src/os/solaris/dtrace/hotspot_jni.d @@ -211,7 +211,7 @@ provider hotspot_jni { probe CallVoidMethodV__return(); probe CreateJavaVM__entry(void**, void**, void*); probe CreateJavaVM__return(uint32_t); - probe DefineClass__entry(void*, const char*, void*, char, uintptr_t); + probe DefineClass__entry(void*, const char*, void*, char*, uintptr_t); probe DefineClass__return(void*); probe DeleteGlobalRef__entry(void*, void*); probe DeleteGlobalRef__return(); diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp index 8e5984ffa3d..533bbb76650 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.cpp +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp @@ -2146,6 +2146,10 @@ void* os::dll_lookup(void* handle, const char* name) { return dlsym(handle, name); } +void* os::get_default_process_handle() { + return (void*)::dlopen(NULL, RTLD_LAZY); +} + int os::stat(const char *path, struct stat *sbuf) { char pathbuf[MAX_PATH]; if (strlen(path) > MAX_PATH - 1) { @@ -3536,9 +3540,14 @@ int os::sleep(Thread* thread, jlong millis, bool interruptible) { return os_sleep(millis, interruptible); } -int os::naked_sleep() { - // %% make the sleep time an integer flag. for now use 1 millisec. - return os_sleep(1, false); +void os::naked_short_sleep(jlong ms) { + assert(ms < 1000, "Un-interruptable sleep, short time use only"); + + // usleep is deprecated and removed from POSIX, in favour of nanosleep, but + // Solaris requires -lrt for this. + usleep((ms * 1000)); + + return; } // Sleep forever; naked call to OS-specific sleep; use with CAUTION diff --git a/hotspot/src/os/windows/vm/os_windows.cpp b/hotspot/src/os/windows/vm/os_windows.cpp index 7daee35632e..5cf47426595 100644 --- a/hotspot/src/os/windows/vm/os_windows.cpp +++ b/hotspot/src/os/windows/vm/os_windows.cpp @@ -166,12 +166,10 @@ void os::run_periodic_checks() { return; } -#ifndef _WIN64 // previous UnhandledExceptionFilter, if there is one static LPTOP_LEVEL_EXCEPTION_FILTER prev_uef_handler = NULL; LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo); -#endif void os::init_system_properties_values() { /* sysclasspath, java_home, dll_dir */ { @@ -2240,11 +2238,11 @@ LONG Handle_IDiv_Exception(struct _EXCEPTION_POINTERS* exceptionInfo) { return EXCEPTION_CONTINUE_EXECUTION; } -#ifndef _WIN64 //----------------------------------------------------------------------------- LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo) { - // handle exception caused by native method modifying control word PCONTEXT ctx = exceptionInfo->ContextRecord; +#ifndef _WIN64 + // handle exception caused by native method modifying control word DWORD exception_code = exceptionInfo->ExceptionRecord->ExceptionCode; switch (exception_code) { @@ -2270,17 +2268,11 @@ LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo) { // UnhandledExceptionFilter. return (prev_uef_handler)(exceptionInfo); } - - return EXCEPTION_CONTINUE_SEARCH; -} -#else //_WIN64 +#else // !_WIN64 /* On Windows, the mxcsr control bits are non-volatile across calls See also CR 6192333 - If EXCEPTION_FLT_* happened after some native method modified - mxcsr - it is not a jvm fault. - However should we decide to restore of mxcsr after a faulty - native method we can uncomment following code + */ jint MxCsr = INITIAL_MXCSR; // we can't use StubRoutines::addr_mxcsr_std() // because in Win64 mxcsr is not saved there @@ -2288,10 +2280,10 @@ LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo) { ctx->MxCsr = MxCsr; return EXCEPTION_CONTINUE_EXECUTION; } +#endif // !_WIN64 -*/ -#endif //_WIN64 - + return EXCEPTION_CONTINUE_SEARCH; +} // Fatal error reporting is single threaded so we can make this a // static and preallocated. If it's more than MAX_PATH silently ignore @@ -2640,7 +2632,6 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { } // switch } -#ifndef _WIN64 if (((thread->thread_state() == _thread_in_Java) || (thread->thread_state() == _thread_in_native)) && exception_code != EXCEPTION_UNCAUGHT_CXX_EXCEPTION) @@ -2648,7 +2639,6 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { LONG result=Handle_FLT_Exception(exceptionInfo); if (result==EXCEPTION_CONTINUE_EXECUTION) return result; } -#endif //_WIN64 } if (exception_code != EXCEPTION_BREAKPOINT) { @@ -3496,6 +3486,16 @@ int os::sleep(Thread* thread, jlong ms, bool interruptable) { return result; } +// +// Short sleep, direct OS call. +// +// ms = 0, means allow others (if any) to run. +// +void os::naked_short_sleep(jlong ms) { + assert(ms < 1000, "Un-interruptable sleep, short time use only"); + Sleep(ms); +} + // Sleep forever; naked call to OS-specific sleep; use with CAUTION void os::infinite_sleep() { while (true) { // sleep forever ... diff --git a/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp b/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp index 195982529ef..a7fa497c871 100644 --- a/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp +++ b/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp @@ -49,6 +49,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" +#include "services/memTracker.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" @@ -906,6 +907,9 @@ void os::workaround_expand_exec_shield_cs_limit() { if ( (codebuf == NULL) || (!os::commit_memory(codebuf, page_size, true)) ) { return; // No matter, we tried, best effort. } + + MemTracker::record_virtual_memory_type((address)codebuf, mtInternal); + if (PrintMiscellaneous && (Verbose || WizardMode)) { tty->print_cr("[CS limit NX emulation work-around, exec code at: %p]", codebuf); } diff --git a/hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp b/hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp index e46e2150095..b6639c90b14 100644 --- a/hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp +++ b/hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp @@ -75,13 +75,19 @@ int VM_Version::platform_features(int features) { do_sysinfo(SI_ARCHITECTURE_64, "sparcv9", &features, generic_v9_m); // Extract valid instruction set extensions. - uint_t av; - uint_t avn = os::Solaris::getisax(&av, 1); - assert(avn == 1, "should only return one av"); + uint_t avs[2]; + uint_t avn = os::Solaris::getisax(avs, 2); + assert(avn <= 2, "should return two or less av's"); + uint_t av = avs[0]; #ifndef PRODUCT - if (PrintMiscellaneous && Verbose) - tty->print_cr("getisax(2) returned: " PTR32_FORMAT, av); + if (PrintMiscellaneous && Verbose) { + tty->print("getisax(2) returned: " PTR32_FORMAT, av); + if (avn > 1) { + tty->print(", " PTR32_FORMAT, avs[1]); + } + tty->cr(); + } #endif if (av & AV_SPARC_MUL32) features |= hardware_mul32_m; @@ -91,6 +97,13 @@ int VM_Version::platform_features(int features) { if (av & AV_SPARC_POPC) features |= hardware_popc_m; if (av & AV_SPARC_VIS) features |= vis1_instructions_m; if (av & AV_SPARC_VIS2) features |= vis2_instructions_m; + if (avn > 1) { + uint_t av2 = avs[1]; +#ifndef AV2_SPARC_SPARC5 +#define AV2_SPARC_SPARC5 0x00000008 /* The 29 new fp and sub instructions */ +#endif + if (av2 & AV2_SPARC_SPARC5) features |= sparc5_instructions_m; + } // Next values are not defined before Solaris 10 // but Solaris 8 is used for jdk6 update builds. @@ -119,6 +132,11 @@ int VM_Version::platform_features(int features) { #endif if (av & AV_SPARC_CBCOND) features |= cbcond_instructions_m; +#ifndef AV_SPARC_AES +#define AV_SPARC_AES 0x00020000 /* aes instrs supported */ +#endif + if (av & AV_SPARC_AES) features |= aes_instructions_m; + } else { // getisax(2) failed, use the old legacy code. #ifndef PRODUCT diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp index 8eb0189881c..5ed04765618 100644 --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp @@ -3288,7 +3288,10 @@ void LIRGenerator::do_ProfileReturnType(ProfileReturnType* x) { ciSignature* signature_at_call = NULL; x->method()->get_method_at_bci(bci, ignored_will_link, &signature_at_call); - ciKlass* exact = profile_type(md, 0, md->byte_offset_of_slot(data, ret->type_offset()), + // The offset within the MDO of the entry to update may be too large + // to be used in load/store instructions on some platforms. So have + // profile_type() compute the address of the profile in a register. + ciKlass* exact = profile_type(md, md->byte_offset_of_slot(data, ret->type_offset()), 0, ret->type(), x->ret(), mdp, !x->needs_null_check(), signature_at_call->return_type()->as_klass(), diff --git a/hotspot/src/share/vm/ci/ciField.cpp b/hotspot/src/share/vm/ci/ciField.cpp index b08ec3616fa..cd04c9ff135 100644 --- a/hotspot/src/share/vm/ci/ciField.cpp +++ b/hotspot/src/share/vm/ci/ciField.cpp @@ -201,16 +201,10 @@ void ciField::initialize_from(fieldDescriptor* fd) { return; } - // This field just may be constant. The only cases where it will - // not be constant are: - // - // 1. The field holds a non-perm-space oop. The field is, strictly - // speaking, constant but we cannot embed non-perm-space oops into - // generated code. For the time being we need to consider the - // field to be not constant. - // 2. The field is a *special* static&final field whose value - // may change. The three examples are java.lang.System.in, - // java.lang.System.out, and java.lang.System.err. + // This field just may be constant. The only case where it will + // not be constant is when the field is a *special* static&final field + // whose value may change. The three examples are java.lang.System.in, + // java.lang.System.out, and java.lang.System.err. KlassHandle k = _holder->get_Klass(); assert( SystemDictionary::System_klass() != NULL, "Check once per vm"); diff --git a/hotspot/src/share/vm/ci/ciField.hpp b/hotspot/src/share/vm/ci/ciField.hpp index 75263e3f217..cdd5cf40c55 100644 --- a/hotspot/src/share/vm/ci/ciField.hpp +++ b/hotspot/src/share/vm/ci/ciField.hpp @@ -130,9 +130,7 @@ public: // 1. The field is both static and final // 2. The canonical holder of the field has undergone // static initialization. - // 3. If the field is an object or array, then the oop - // in question is allocated in perm space. - // 4. The field is not one of the special static/final + // 3. The field is not one of the special static/final // non-constant fields. These are java.lang.System.in // and java.lang.System.out. Abomination. // diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp index db41756d1b9..f45bb750269 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.cpp +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -4098,8 +4098,12 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, tty->print("[Loaded %s from %s]\n", this_klass->external_name(), cfs->source()); } else if (class_loader.is_null()) { - if (THREAD->is_Java_thread()) { - Klass* caller = ((JavaThread*)THREAD)->security_get_caller_class(1); + Klass* caller = + THREAD->is_Java_thread() + ? ((JavaThread*)THREAD)->security_get_caller_class(1) + : NULL; + // caller can be NULL, for example, during a JVMTI VM_Init hook + if (caller != NULL) { tty->print("[Loaded %s by instance of %s]\n", this_klass->external_name(), InstanceKlass::cast(caller)->external_name()); @@ -4500,8 +4504,8 @@ void ClassFileParser::check_final_method_override(instanceKlassHandle this_klass break; // didn't find any match; get out } - if (super_m->is_final() && - // matching method in super is final + if (super_m->is_final() && !super_m->is_static() && + // matching method in super is final, and not static (Reflection::verify_field_access(this_klass(), super_m->method_holder(), super_m->method_holder(), diff --git a/hotspot/src/share/vm/classfile/defaultMethods.cpp b/hotspot/src/share/vm/classfile/defaultMethods.cpp index 0ebeecc624b..72020ba78a8 100644 --- a/hotspot/src/share/vm/classfile/defaultMethods.cpp +++ b/hotspot/src/share/vm/classfile/defaultMethods.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -390,6 +390,20 @@ class MethodFamily : public ResourceObj { Symbol* get_exception_message() { return _exception_message; } Symbol* get_exception_name() { return _exception_name; } + // Return true if the specified klass has a static method that matches + // the name and signature of the target method. + bool has_matching_static(InstanceKlass* root) { + if (_members.length() > 0) { + Pair entry = _members.at(0); + Method* impl = root->find_method(entry.first->name(), + entry.first->signature()); + if ((impl != NULL) && impl->is_static()) { + return true; + } + } + return false; + } + // Either sets the target or the exception error message void determine_target(InstanceKlass* root, TRAPS) { if (has_target() || throws_exception()) { @@ -416,19 +430,26 @@ class MethodFamily : public ResourceObj { } if (num_defaults == 0) { - if (qualified_methods.length() == 0) { - _exception_message = generate_no_defaults_message(CHECK); - } else { - assert(root != NULL, "Null root class"); - _exception_message = generate_method_message(root->name(), qualified_methods.at(0), CHECK); + // If the root klass has a static method with matching name and signature + // then do not generate an overpass method because it will hide the + // static method during resolution. + if (!has_matching_static(root)) { + if (qualified_methods.length() == 0) { + _exception_message = generate_no_defaults_message(CHECK); + } else { + assert(root != NULL, "Null root class"); + _exception_message = generate_method_message(root->name(), qualified_methods.at(0), CHECK); + } + _exception_name = vmSymbols::java_lang_AbstractMethodError(); } - _exception_name = vmSymbols::java_lang_AbstractMethodError(); + // If only one qualified method is default, select that } else if (num_defaults == 1) { _selected_target = qualified_methods.at(default_index); - } else if (num_defaults > 1) { - _exception_message = generate_conflicts_message(&qualified_methods,CHECK); - _exception_name = vmSymbols::java_lang_IncompatibleClassChangeError(); + + } else if (num_defaults > 1 && !has_matching_static(root)) { + _exception_message = generate_conflicts_message(&qualified_methods,CHECK); + _exception_name = vmSymbols::java_lang_IncompatibleClassChangeError(); if (TraceDefaultMethods) { _exception_message->print_value_on(tty); tty->print_cr(""); diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index d9cd2c809df..d20673b1a19 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -38,6 +38,9 @@ // -------------------------------------------------------------------------- +// the number of buckets a thread claims +const int ClaimChunkSize = 32; + SymbolTable* SymbolTable::_the_table = NULL; // Static arena for symbols that are not deallocated Arena* SymbolTable::_arena = NULL; @@ -83,16 +86,12 @@ void SymbolTable::symbols_do(SymbolClosure *cl) { } } -int SymbolTable::symbols_removed = 0; -int SymbolTable::symbols_counted = 0; +int SymbolTable::_symbols_removed = 0; +int SymbolTable::_symbols_counted = 0; +volatile int SymbolTable::_parallel_claimed_idx = 0; -// Remove unreferenced symbols from the symbol table -// This is done late during GC. -void SymbolTable::unlink() { - int removed = 0; - int total = 0; - size_t memory_total = 0; - for (int i = 0; i < the_table()->table_size(); ++i) { +void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int* removed, size_t* memory_total) { + for (int i = start_idx; i < end_idx; ++i) { HashtableEntry** p = the_table()->bucket_addr(i); HashtableEntry* entry = the_table()->bucket(i); while (entry != NULL) { @@ -104,14 +103,14 @@ void SymbolTable::unlink() { break; } Symbol* s = entry->literal(); - memory_total += s->size(); - total++; + (*memory_total) += s->size(); + (*processed)++; assert(s != NULL, "just checking"); // If reference count is zero, remove. if (s->refcount() == 0) { assert(!entry->is_shared(), "shared entries should be kept live"); delete s; - removed++; + (*removed)++; *p = entry->next(); the_table()->free_entry(entry); } else { @@ -121,12 +120,45 @@ void SymbolTable::unlink() { entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } - symbols_removed += removed; - symbols_counted += total; +} + +// Remove unreferenced symbols from the symbol table +// This is done late during GC. +void SymbolTable::unlink(int* processed, int* removed) { + size_t memory_total = 0; + buckets_unlink(0, the_table()->table_size(), processed, removed, &memory_total); + _symbols_removed += *removed; + _symbols_counted += *processed; // Exclude printing for normal PrintGCDetails because people parse // this output. if (PrintGCDetails && Verbose && WizardMode) { - gclog_or_tty->print(" [Symbols=%d size=" SIZE_FORMAT "K] ", total, + gclog_or_tty->print(" [Symbols=%d size=" SIZE_FORMAT "K] ", *processed, + (memory_total*HeapWordSize)/1024); + } +} + +void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) { + const int limit = the_table()->table_size(); + + size_t memory_total = 0; + + for (;;) { + // Grab next set of buckets to scan + int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize; + if (start_idx >= limit) { + // End of table + break; + } + + int end_idx = MIN2(limit, start_idx + ClaimChunkSize); + buckets_unlink(start_idx, end_idx, processed, removed, &memory_total); + } + Atomic::add(*processed, &_symbols_counted); + Atomic::add(*removed, &_symbols_removed); + // Exclude printing for normal PrintGCDetails because people parse + // this output. + if (PrintGCDetails && Verbose && WizardMode) { + gclog_or_tty->print(" [Symbols: scanned=%d removed=%d size=" SIZE_FORMAT "K] ", *processed, *removed, (memory_total*HeapWordSize)/1024); } } @@ -494,11 +526,11 @@ void SymbolTable::print_histogram() { tty->print_cr("Total number of symbols %5d", count); tty->print_cr("Total size in memory %5dK", (memory_total*HeapWordSize)/1024); - tty->print_cr("Total counted %5d", symbols_counted); - tty->print_cr("Total removed %5d", symbols_removed); - if (symbols_counted > 0) { + tty->print_cr("Total counted %5d", _symbols_counted); + tty->print_cr("Total removed %5d", _symbols_removed); + if (_symbols_counted > 0) { tty->print_cr("Percent removed %3.2f", - ((float)symbols_removed/(float)symbols_counted)* 100); + ((float)_symbols_removed/(float)_symbols_counted)* 100); } tty->print_cr("Reference counts %5d", Symbol::_total_count); tty->print_cr("Symbol arena size %5d used %5d", @@ -739,39 +771,38 @@ oop StringTable::intern(const char* utf8_string, TRAPS) { return result; } -void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { +void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) { + buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), processed, removed); +} + +void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) { // Readers of the table are unlocked, so we should only be removing // entries at a safepoint. assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); - for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); - while (entry != NULL) { - assert(!entry->is_shared(), "CDS not used for the StringTable"); + const int limit = the_table()->table_size(); - if (is_alive->do_object_b(entry->literal())) { - if (f != NULL) { - f->do_oop((oop*)entry->literal_addr()); - } - p = entry->next_addr(); - } else { - *p = entry->next(); - the_table()->free_entry(entry); - } - entry = *p; + for (;;) { + // Grab next set of buckets to scan + int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize; + if (start_idx >= limit) { + // End of table + break; } + + int end_idx = MIN2(limit, start_idx + ClaimChunkSize); + buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, processed, removed); } } -void StringTable::buckets_do(OopClosure* f, int start_idx, int end_idx) { +void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) { const int limit = the_table()->table_size(); assert(0 <= start_idx && start_idx <= limit, - err_msg("start_idx (" INT32_FORMAT ") oob?", start_idx)); + err_msg("start_idx (" INT32_FORMAT ") is out of bounds", start_idx)); assert(0 <= end_idx && end_idx <= limit, - err_msg("end_idx (" INT32_FORMAT ") oob?", end_idx)); + err_msg("end_idx (" INT32_FORMAT ") is out of bounds", end_idx)); assert(start_idx <= end_idx, - err_msg("Ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT, + err_msg("Index ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT, start_idx, end_idx)); for (int i = start_idx; i < end_idx; i += 1) { @@ -786,12 +817,44 @@ void StringTable::buckets_do(OopClosure* f, int start_idx, int end_idx) { } } +void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed) { + const int limit = the_table()->table_size(); + + assert(0 <= start_idx && start_idx <= limit, + err_msg("start_idx (" INT32_FORMAT ") is out of bounds", start_idx)); + assert(0 <= end_idx && end_idx <= limit, + err_msg("end_idx (" INT32_FORMAT ") is out of bounds", end_idx)); + assert(start_idx <= end_idx, + err_msg("Index ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT, + start_idx, end_idx)); + + for (int i = start_idx; i < end_idx; ++i) { + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); + while (entry != NULL) { + assert(!entry->is_shared(), "CDS not used for the StringTable"); + + if (is_alive->do_object_b(entry->literal())) { + if (f != NULL) { + f->do_oop((oop*)entry->literal_addr()); + } + p = entry->next_addr(); + } else { + *p = entry->next(); + the_table()->free_entry(entry); + (*removed)++; + } + (*processed)++; + entry = *p; + } + } +} + void StringTable::oops_do(OopClosure* f) { - buckets_do(f, 0, the_table()->table_size()); + buckets_oops_do(f, 0, the_table()->table_size()); } void StringTable::possibly_parallel_oops_do(OopClosure* f) { - const int ClaimChunkSize = 32; const int limit = the_table()->table_size(); for (;;) { @@ -803,7 +866,7 @@ void StringTable::possibly_parallel_oops_do(OopClosure* f) { } int end_idx = MIN2(limit, start_idx + ClaimChunkSize); - buckets_do(f, start_idx, end_idx); + buckets_oops_do(f, start_idx, end_idx); } } diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp index 50cde69d8b0..b0a2fcb38b8 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.hpp +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp @@ -86,8 +86,8 @@ private: static bool _needs_rehashing; // For statistics - static int symbols_removed; - static int symbols_counted; + static int _symbols_removed; + static int _symbols_counted; Symbol* allocate_symbol(const u1* name, int len, bool c_heap, TRAPS); // Assumes no characters larger than 0x7F @@ -121,6 +121,11 @@ private: static Arena* arena() { return _arena; } // called for statistics static void initialize_symbols(int arena_alloc_size = 0); + + static volatile int _parallel_claimed_idx; + + // Release any dead symbols + static void buckets_unlink(int start_idx, int end_idx, int* processed, int* removed, size_t* memory_total); public: enum { symbol_alloc_batch_size = 8, @@ -177,7 +182,14 @@ public: unsigned int* hashValues, TRAPS); // Release any dead symbols - static void unlink(); + static void unlink() { + int processed = 0; + int removed = 0; + unlink(&processed, &removed); + } + static void unlink(int* processed, int* removed); + // Release any dead symbols, possibly parallel version + static void possibly_parallel_unlink(int* processed, int* removed); // iterate over symbols static void symbols_do(SymbolClosure *cl); @@ -235,6 +247,9 @@ public: // Rehash the symbol table if it gets out of balance static void rehash_table(); static bool needs_rehashing() { return _needs_rehashing; } + // Parallel chunked scanning + static void clear_parallel_claimed_index() { _parallel_claimed_idx = 0; } + static int parallel_claimed_index() { return _parallel_claimed_idx; } }; class StringTable : public Hashtable { @@ -258,7 +273,10 @@ private: // Apply the give oop closure to the entries to the buckets // in the range [start_idx, end_idx). - static void buckets_do(OopClosure* f, int start_idx, int end_idx); + static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx); + // Unlink or apply the give oop closure to the entries to the buckets + // in the range [start_idx, end_idx). + static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed); StringTable() : Hashtable((int)StringTableSize, sizeof (HashtableEntry)) {} @@ -280,15 +298,28 @@ public: // GC support // Delete pointers to otherwise-unreachable objects. - static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f); - static void unlink(BoolObjectClosure* cl) { - unlink_or_oops_do(cl, NULL); + static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f) { + int processed = 0; + int removed = 0; + unlink_or_oops_do(cl, f, &processed, &removed); + } + static void unlink(BoolObjectClosure* cl) { + int processed = 0; + int removed = 0; + unlink_or_oops_do(cl, NULL, &processed, &removed); + } + static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f, int* processed, int* removed); + static void unlink(BoolObjectClosure* cl, int* processed, int* removed) { + unlink_or_oops_do(cl, NULL, processed, removed); } - // Serially invoke "f->do_oop" on the locations of all oops in the table. static void oops_do(OopClosure* f); - // Possibly parallel version of the above + // Possibly parallel versions of the above + static void possibly_parallel_unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f, int* processed, int* removed); + static void possibly_parallel_unlink(BoolObjectClosure* cl, int* processed, int* removed) { + possibly_parallel_unlink_or_oops_do(cl, NULL, processed, removed); + } static void possibly_parallel_oops_do(OopClosure* f); // Hashing algorithm, used as the hash value used by the @@ -349,5 +380,6 @@ public: // Parallel chunked scanning static void clear_parallel_claimed_index() { _parallel_claimed_idx = 0; } + static int parallel_claimed_index() { return _parallel_claimed_idx; } }; #endif // SHARE_VM_CLASSFILE_SYMBOLTABLE_HPP diff --git a/hotspot/src/share/vm/classfile/vmSymbols.hpp b/hotspot/src/share/vm/classfile/vmSymbols.hpp index 58485959f66..ed3c0dbcb0c 100644 --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp @@ -787,7 +787,7 @@ do_intrinsic(_cipherBlockChaining_decryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, decrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \ do_name( encrypt_name, "encrypt") \ do_name( decrypt_name, "decrypt") \ - do_signature(byteArray_int_int_byteArray_int_signature, "([BII[BI)V") \ + do_signature(byteArray_int_int_byteArray_int_signature, "([BII[BI)I") \ \ /* support for java.util.zip */ \ do_class(java_util_zip_CRC32, "java/util/zip/CRC32") \ diff --git a/hotspot/src/share/vm/code/codeCache.cpp b/hotspot/src/share/vm/code/codeCache.cpp index fcdab3d5af4..5e9b343cd2b 100644 --- a/hotspot/src/share/vm/code/codeCache.cpp +++ b/hotspot/src/share/vm/code/codeCache.cpp @@ -596,20 +596,13 @@ void CodeCache::clear_inline_caches() { } #ifndef PRODUCT -// used to keep track of how much time is spent in mark_for_deoptimization +// Keeps track of time spent for checking dependencies static elapsedTimer dependentCheckTime; -static int dependentCheckCount = 0; -#endif // PRODUCT +#endif int CodeCache::mark_for_deoptimization(DepChange& changes) { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); - -#ifndef PRODUCT - dependentCheckTime.start(); - dependentCheckCount++; -#endif // PRODUCT - int number_of_marked_CodeBlobs = 0; // search the hierarchy looking for nmethods which are affected by the loading of this class @@ -617,32 +610,23 @@ int CodeCache::mark_for_deoptimization(DepChange& changes) { // then search the interfaces this class implements looking for nmethods // which might be dependent of the fact that an interface only had one // implementor. - - { No_Safepoint_Verifier nsv; - for (DepChange::ContextStream str(changes, nsv); str.next(); ) { - Klass* d = str.klass(); - number_of_marked_CodeBlobs += InstanceKlass::cast(d)->mark_dependent_nmethods(changes); - } - } - - if (VerifyDependencies) { - // Turn off dependency tracing while actually testing deps. - NOT_PRODUCT( FlagSetting fs(TraceDependencies, false) ); - FOR_ALL_ALIVE_NMETHODS(nm) { - if (!nm->is_marked_for_deoptimization() && - nm->check_all_dependencies()) { - ResourceMark rm; - tty->print_cr("Should have been marked for deoptimization:"); - changes.print(); - nm->print(); - nm->print_dependencies(); - } - } + // nmethod::check_all_dependencies works only correctly, if no safepoint + // can happen + No_Safepoint_Verifier nsv; + for (DepChange::ContextStream str(changes, nsv); str.next(); ) { + Klass* d = str.klass(); + number_of_marked_CodeBlobs += InstanceKlass::cast(d)->mark_dependent_nmethods(changes); } #ifndef PRODUCT - dependentCheckTime.stop(); -#endif // PRODUCT + if (VerifyDependencies) { + // Object pointers are used as unique identifiers for dependency arguments. This + // is only possible if no safepoint, i.e., GC occurs during the verification code. + dependentCheckTime.start(); + nmethod::check_all_dependencies(changes); + dependentCheckTime.stop(); + } +#endif return number_of_marked_CodeBlobs; } @@ -899,9 +883,7 @@ void CodeCache::print() { } tty->print_cr("CodeCache:"); - - tty->print_cr("nmethod dependency checking time %f", dependentCheckTime.seconds(), - dependentCheckTime.seconds() / dependentCheckCount); + tty->print_cr("nmethod dependency checking time %fs", dependentCheckTime.seconds()); if (!live.is_empty()) { live.print("live"); diff --git a/hotspot/src/share/vm/code/dependencies.cpp b/hotspot/src/share/vm/code/dependencies.cpp index b4a3aee7f54..5363aed99c5 100644 --- a/hotspot/src/share/vm/code/dependencies.cpp +++ b/hotspot/src/share/vm/code/dependencies.cpp @@ -678,6 +678,17 @@ Metadata* Dependencies::DepStream::argument(int i) { return result; } +/** + * Returns a unique identifier for each dependency argument. + */ +uintptr_t Dependencies::DepStream::get_identifier(int i) { + if (has_oop_argument()) { + return (uintptr_t)(oopDesc*)argument_oop(i); + } else { + return (uintptr_t)argument(i); + } +} + oop Dependencies::DepStream::argument_oop(int i) { oop result = recorded_oop_at(argument_index(i)); assert(result == NULL || result->is_oop(), "must be"); @@ -713,6 +724,57 @@ Klass* Dependencies::DepStream::context_type() { return NULL; } +// ----------------- DependencySignature -------------------------------------- +bool DependencySignature::equals(const DependencySignature& sig) const { + if (type() != sig.type()) { + return false; + } + + if (args_count() != sig.args_count()) { + return false; + } + + for (int i = 0; i < sig.args_count(); i++) { + if (arg(i) != sig.arg(i)) { + return false; + } + } + return true; +} + + +// ----------------- DependencySignatureBuffer -------------------------------------- +DependencySignatureBuffer::DependencySignatureBuffer() { + _signatures = NEW_RESOURCE_ARRAY(GrowableArray*, Dependencies::TYPE_LIMIT); + memset(_signatures, 0, sizeof(DependencySignature*) * Dependencies::TYPE_LIMIT); +} + +/* Check if arguments are identical. Two dependency signatures are considered + * identical, if the type as well as all argument identifiers are identical. + * If the dependency has not already been checked, the dependency signature is + * added to the checked dependencies of the same type. The function returns + * false, which causes the dependency to be checked in the caller. + */ +bool DependencySignatureBuffer::add_if_missing(const DependencySignature& sig) { + const int index = sig.type(); + GrowableArray* buffer = _signatures[index]; + if (buffer == NULL) { + buffer = new GrowableArray(); + _signatures[index] = buffer; + } + + // Check if we have already checked the dependency + for (int i = 0; i < buffer->length(); i++) { + DependencySignature* checked_signature = buffer->at(i); + if (checked_signature->equals(sig)) { + return true; + } + } + buffer->append((DependencySignature*)&sig); + return false; +} + + /// Checking dependencies: // This hierarchy walker inspects subtypes of a given type, @@ -1159,11 +1221,9 @@ bool Dependencies::is_concrete_method(Method* m) { // We could also return false if m does not yet appear to be // executed, if the VM version supports this distinction also. + // Default methods are considered "concrete" as well. return !m->is_abstract() && - !InstanceKlass::cast(m->method_holder())->is_interface(); - // TODO: investigate whether default methods should be - // considered as "concrete" in this situation. For now they - // are not. + !m->is_overpass(); // error functions aren't concrete } diff --git a/hotspot/src/share/vm/code/dependencies.hpp b/hotspot/src/share/vm/code/dependencies.hpp index a91e1f1306c..5b5d467b238 100644 --- a/hotspot/src/share/vm/code/dependencies.hpp +++ b/hotspot/src/share/vm/code/dependencies.hpp @@ -480,6 +480,9 @@ class Dependencies: public ResourceObj { bool next(); DepType type() { return _type; } + bool has_oop_argument() { return type() == call_site_target_value; } + uintptr_t get_identifier(int i); + int argument_count() { return dep_args(type()); } int argument_index(int i) { assert(0 <= i && i < argument_count(), "oob"); return _xi[i]; } @@ -523,6 +526,38 @@ class Dependencies: public ResourceObj { }; +class DependencySignature : public ResourceObj { + private: + int _args_count; + uintptr_t _argument_hash[Dependencies::max_arg_count]; + Dependencies::DepType _type; + + + public: + DependencySignature(Dependencies::DepStream& dep) { + _args_count = dep.argument_count(); + _type = dep.type(); + for (int i = 0; i < _args_count; i++) { + _argument_hash[i] = dep.get_identifier(i); + } + } + + bool equals(const DependencySignature& sig) const; + + int args_count() const { return _args_count; } + uintptr_t arg(int idx) const { return _argument_hash[idx]; } + Dependencies::DepType type() const { return _type; } +}; + +class DependencySignatureBuffer : public StackObj { + private: + GrowableArray** _signatures; + + public: + DependencySignatureBuffer(); + bool add_if_missing(const DependencySignature& sig); +}; + // Every particular DepChange is a sub-class of this class. class DepChange : public StackObj { public: diff --git a/hotspot/src/share/vm/code/nmethod.cpp b/hotspot/src/share/vm/code/nmethod.cpp index b9dd9903440..50ee61adfab 100644 --- a/hotspot/src/share/vm/code/nmethod.cpp +++ b/hotspot/src/share/vm/code/nmethod.cpp @@ -2161,16 +2161,41 @@ PcDesc* nmethod::find_pc_desc_internal(address pc, bool approximate) { } -bool nmethod::check_all_dependencies() { - bool found_check = false; - // wholesale check of all dependencies - for (Dependencies::DepStream deps(this); deps.next(); ) { - if (deps.check_dependency() != NULL) { - found_check = true; - NOT_DEBUG(break); +void nmethod::check_all_dependencies(DepChange& changes) { + // Checked dependencies are allocated into this ResourceMark + ResourceMark rm; + + // Turn off dependency tracing while actually testing dependencies. + NOT_PRODUCT( FlagSetting fs(TraceDependencies, false) ); + + // 'dep_signature_buffers' caches already checked dependencies. + DependencySignatureBuffer dep_signature_buffers; + + // Iterate over live nmethods and check dependencies of all nmethods that are not + // marked for deoptimization. A particular dependency is only checked once. + for(nmethod* nm = CodeCache::alive_nmethod(CodeCache::first()); nm != NULL; nm = CodeCache::alive_nmethod(CodeCache::next(nm))) { + if (!nm->is_marked_for_deoptimization()) { + for (Dependencies::DepStream deps(nm); deps.next(); ) { + // Construct abstraction of a dependency. + const DependencySignature* current_sig = new DependencySignature(deps); + // Determine if 'deps' is already checked. If it is not checked, + // 'add_if_missing()' adds the dependency signature and returns + // false. + if (!dep_signature_buffers.add_if_missing(*current_sig)) { + if (deps.check_dependency() != NULL) { + // Dependency checking failed. Print out information about the failed + // dependency and finally fail with an assert. We can fail here, since + // dependency checking is never done in a product build. + ResourceMark rm; + changes.print(); + nm->print(); + nm->print_dependencies(); + assert(false, "Should have been marked for deoptimization"); + } + } + } } } - return found_check; // tell caller if we found anything } bool nmethod::check_dependency_on(DepChange& changes) { diff --git a/hotspot/src/share/vm/code/nmethod.hpp b/hotspot/src/share/vm/code/nmethod.hpp index 4e1afcc046b..294160cdd3b 100644 --- a/hotspot/src/share/vm/code/nmethod.hpp +++ b/hotspot/src/share/vm/code/nmethod.hpp @@ -679,7 +679,7 @@ public: // tells if any of this method's dependencies have been invalidated // (this is expensive!) - bool check_all_dependencies(); + static void check_all_dependencies(DepChange& changes); // tells if this compiled method is dependent on the given changes, // and the changes have invalidated it diff --git a/hotspot/src/share/vm/compiler/compileBroker.cpp b/hotspot/src/share/vm/compiler/compileBroker.cpp index a6c9117e946..57eee0b91e3 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.cpp +++ b/hotspot/src/share/vm/compiler/compileBroker.cpp @@ -98,7 +98,7 @@ HS_DTRACE_PROBE_DECL9(hotspot, method__compile__end, Symbol* name = (method)->name(); \ Symbol* signature = (method)->signature(); \ HOTSPOT_METHOD_COMPILE_BEGIN( \ - comp_name, strlen(comp_name), \ + (char *) comp_name, strlen(comp_name), \ (char *) klass_name->bytes(), klass_name->utf8_length(), \ (char *) name->bytes(), name->utf8_length(), \ (char *) signature->bytes(), signature->utf8_length()); \ @@ -110,7 +110,7 @@ HS_DTRACE_PROBE_DECL9(hotspot, method__compile__end, Symbol* name = (method)->name(); \ Symbol* signature = (method)->signature(); \ HOTSPOT_METHOD_COMPILE_END( \ - comp_name, strlen(comp_name), \ + (char *) comp_name, strlen(comp_name), \ (char *) klass_name->bytes(), klass_name->utf8_length(), \ (char *) name->bytes(), name->utf8_length(), \ (char *) signature->bytes(), signature->utf8_length(), (success)); \ diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.cpp index d60fe806892..999b1f8ca53 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.cpp @@ -466,7 +466,7 @@ void CMSAdaptiveSizePolicy::checkpoint_roots_initial_end( void CMSAdaptiveSizePolicy::checkpoint_roots_final_begin() { _STW_timer.stop(); _latest_cms_initial_mark_end_to_remark_start_secs = _STW_timer.seconds(); - // Start accumumlating time for the remark in the STW timer. + // Start accumulating time for the remark in the STW timer. _STW_timer.reset(); _STW_timer.start(); } @@ -537,8 +537,8 @@ void CMSAdaptiveSizePolicy::msc_collection_end(GCCause::Cause gc_cause) { avg_msc_pause()->sample(msc_pause_in_seconds); double mutator_time_in_seconds = 0.0; if (_latest_cms_collection_end_to_collection_start_secs == 0.0) { - // This assertion may fail because of time stamp gradularity. - // Comment it out and investiage it at a later time. The large + // This assertion may fail because of time stamp granularity. + // Comment it out and investigate it at a later time. The large // time stamp granularity occurs on some older linux systems. #ifndef CLOCK_GRANULARITY_TOO_LARGE assert((_latest_cms_concurrent_marking_time_secs == 0.0) && @@ -836,7 +836,7 @@ double CMSAdaptiveSizePolicy::cms_gc_cost() const { void CMSAdaptiveSizePolicy::ms_collection_marking_begin() { _STW_timer.stop(); - // Start accumumlating time for the marking in the STW timer. + // Start accumulating time for the marking in the STW timer. _STW_timer.reset(); _STW_timer.start(); } @@ -1227,7 +1227,7 @@ uint CMSAdaptiveSizePolicy::compute_survivor_space_size_and_threshold( // We use the tenuring threshold to equalize the cost of major // and minor collections. // ThresholdTolerance is used to indicate how sensitive the - // tenuring threshold is to differences in cost betweent the + // tenuring threshold is to differences in cost between the // collection types. // Get the times of interest. This involves a little work, so diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp index 00a4f8fd781..1bf4ca34cf1 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp @@ -356,7 +356,7 @@ class CMSAdaptiveSizePolicy : public AdaptiveSizePolicy { void concurrent_sweeping_begin(); void concurrent_sweeping_end(); // Similar to the above (e.g., concurrent_marking_end()) and - // is used for both the precleaning an abortable precleaing + // is used for both the precleaning an abortable precleaning // phases. void concurrent_precleaning_begin(); void concurrent_precleaning_end(); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp index 3fe7d136f23..b6e91c1b349 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp @@ -88,8 +88,7 @@ class CMSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters { // of the tenured generation. PerfVariable* _avg_msc_pause_counter; // Average for the time between the most recent end of a - // MSC collection and the beginning of the next - // MSC collection. + // MSC collection and the beginning of the next MSC collection. PerfVariable* _avg_msc_interval_counter; // Average for the GC cost of a MSC collection based on // _avg_msc_pause_counter and _avg_msc_interval_counter. @@ -99,8 +98,7 @@ class CMSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters { // of the tenured generation. PerfVariable* _avg_ms_pause_counter; // Average for the time between the most recent end of a - // MS collection and the beginning of the next - // MS collection. + // MS collection and the beginning of the next MS collection. PerfVariable* _avg_ms_interval_counter; // Average for the GC cost of a MS collection based on // _avg_ms_pause_counter and _avg_ms_interval_counter. @@ -108,9 +106,9 @@ class CMSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters { // Average of the bytes promoted per minor collection. PerfVariable* _promoted_avg_counter; - // Average of the deviation of the promoted average + // Average of the deviation of the promoted average. PerfVariable* _promoted_avg_dev_counter; - // Padded average of the bytes promoted per minor colleciton + // Padded average of the bytes promoted per minor collection. PerfVariable* _promoted_padded_avg_counter; // See description of the _change_young_gen_for_maj_pauses diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp index b910dd6e367..6c911328a77 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp @@ -258,10 +258,10 @@ class MarkRefsIntoAndScanClosure: public CMSOopsInGenClosure { bool take_from_overflow_list(); }; -// Tn this, the parallel avatar of MarkRefsIntoAndScanClosure, the revisit +// In this, the parallel avatar of MarkRefsIntoAndScanClosure, the revisit // stack and the bitMap are shared, so access needs to be suitably -// sycnhronized. An OopTaskQueue structure, supporting efficient -// workstealing, replaces a CMSMarkStack for storing grey objects. +// synchronized. An OopTaskQueue structure, supporting efficient +// work stealing, replaces a CMSMarkStack for storing grey objects. class Par_MarkRefsIntoAndScanClosure: public CMSOopsInGenClosure { private: MemRegion _span; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp index b87efd7bc2a..58a2d871317 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp @@ -407,8 +407,8 @@ size_t CompactibleFreeListSpace::max_alloc_in_words() const { res = MAX2(res, MIN2(_smallLinearAllocBlock._word_size, (size_t) SmallForLinearAlloc - 1)); // XXX the following could potentially be pretty slow; - // should one, pesimally for the rare cases when res - // caclulated above is less than IndexSetSize, + // should one, pessimistically for the rare cases when res + // calculated above is less than IndexSetSize, // just return res calculated above? My reasoning was that // those cases will be so rare that the extra time spent doesn't // really matter.... @@ -759,7 +759,7 @@ CompactibleFreeListSpace::new_dcto_cl(ExtendedOopClosure* cl, // Note on locking for the space iteration functions: // since the collector's iteration activities are concurrent with // allocation activities by mutators, absent a suitable mutual exclusion -// mechanism the iterators may go awry. For instace a block being iterated +// mechanism the iterators may go awry. For instance a block being iterated // may suddenly be allocated or divided up and part of it allocated and // so on. @@ -2090,7 +2090,7 @@ CompactibleFreeListSpace::refillLinearAllocBlock(LinearAllocBlock* blk) { // Support for concurrent collection policy decisions. bool CompactibleFreeListSpace::should_concurrent_collect() const { - // In the future we might want to add in frgamentation stats -- + // In the future we might want to add in fragmentation stats -- // including erosion of the "mountain" into this decision as well. return !adaptive_freelists() && linearAllocationWouldFail(); } @@ -2099,7 +2099,7 @@ bool CompactibleFreeListSpace::should_concurrent_collect() const { void CompactibleFreeListSpace::prepare_for_compaction(CompactPoint* cp) { SCAN_AND_FORWARD(cp,end,block_is_obj,block_size); - // prepare_for_compaction() uses the space between live objects + // Prepare_for_compaction() uses the space between live objects // so that later phase can skip dead space quickly. So verification // of the free lists doesn't work after. } @@ -2122,7 +2122,7 @@ void CompactibleFreeListSpace::compact() { SCAN_AND_COMPACT(obj_size); } -// fragmentation_metric = 1 - [sum of (fbs**2) / (sum of fbs)**2] +// Fragmentation metric = 1 - [sum of (fbs**2) / (sum of fbs)**2] // where fbs is free block sizes double CompactibleFreeListSpace::flsFrag() const { size_t itabFree = totalSizeInIndexedFreeLists(); @@ -2651,7 +2651,7 @@ void CFLS_LAB::get_from_global_pool(size_t word_sz, AdaptiveFreeList* // changes on-the-fly during a scavenge and avoid such a phase-change // pothole. The following code is a heuristic attempt to do that. // It is protected by a product flag until we have gained - // enough experience with this heuristic and fine-tuned its behaviour. + // enough experience with this heuristic and fine-tuned its behavior. // WARNING: This might increase fragmentation if we overreact to // small spikes, so some kind of historical smoothing based on // previous experience with the greater reactivity might be useful. diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp index e625d3a18e6..59ea6c30fb8 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp @@ -58,7 +58,7 @@ class LinearAllocBlock VALUE_OBJ_CLASS_SPEC { HeapWord* _ptr; size_t _word_size; size_t _refillSize; - size_t _allocation_size_limit; // largest size that will be allocated + size_t _allocation_size_limit; // Largest size that will be allocated void print_on(outputStream* st) const; }; @@ -116,14 +116,14 @@ class CompactibleFreeListSpace: public CompactibleSpace { PromotionInfo _promoInfo; - // helps to impose a global total order on freelistLock ranks; + // Helps to impose a global total order on freelistLock ranks; // assumes that CFLSpace's are allocated in global total order static int _lockRank; - // a lock protecting the free lists and free blocks; + // A lock protecting the free lists and free blocks; // mutable because of ubiquity of locking even for otherwise const methods mutable Mutex _freelistLock; - // locking verifier convenience function + // Locking verifier convenience function void assert_locked() const PRODUCT_RETURN; void assert_locked(const Mutex* lock) const PRODUCT_RETURN; @@ -131,12 +131,13 @@ class CompactibleFreeListSpace: public CompactibleSpace { LinearAllocBlock _smallLinearAllocBlock; FreeBlockDictionary::DictionaryChoice _dictionaryChoice; - AFLBinaryTreeDictionary* _dictionary; // ptr to dictionary for large size blocks + AFLBinaryTreeDictionary* _dictionary; // Pointer to dictionary for large size blocks + // Indexed array for small size blocks AdaptiveFreeList _indexedFreeList[IndexSetSize]; - // indexed array for small size blocks - // allocation stategy - bool _fitStrategy; // Use best fit strategy. + + // Allocation strategy + bool _fitStrategy; // Use best fit strategy bool _adaptive_freelists; // Use adaptive freelists // This is an address close to the largest free chunk in the heap. @@ -157,7 +158,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // Extra stuff to manage promotion parallelism. - // a lock protecting the dictionary during par promotion allocation. + // A lock protecting the dictionary during par promotion allocation. mutable Mutex _parDictionaryAllocLock; Mutex* parDictionaryAllocLock() const { return &_parDictionaryAllocLock; } @@ -275,26 +276,26 @@ class CompactibleFreeListSpace: public CompactibleSpace { } protected: - // reset the indexed free list to its initial empty condition. + // Reset the indexed free list to its initial empty condition. void resetIndexedFreeListArray(); - // reset to an initial state with a single free block described + // Reset to an initial state with a single free block described // by the MemRegion parameter. void reset(MemRegion mr); // Return the total number of words in the indexed free lists. size_t totalSizeInIndexedFreeLists() const; public: - // Constructor... + // Constructor CompactibleFreeListSpace(BlockOffsetSharedArray* bs, MemRegion mr, bool use_adaptive_freelists, FreeBlockDictionary::DictionaryChoice); - // accessors + // Accessors bool bestFitFirst() { return _fitStrategy == FreeBlockBestFitFirst; } FreeBlockDictionary* dictionary() const { return _dictionary; } HeapWord* nearLargestChunk() const { return _nearLargestChunk; } void set_nearLargestChunk(HeapWord* v) { _nearLargestChunk = v; } - // Set CMS global values + // Set CMS global values. static void set_cms_values(); // Return the free chunk at the end of the space. If no such @@ -305,7 +306,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { void set_collector(CMSCollector* collector) { _collector = collector; } - // Support for parallelization of rescan and marking + // Support for parallelization of rescan and marking. const size_t rescan_task_size() const { return _rescan_task_size; } const size_t marking_task_size() const { return _marking_task_size; } SequentialSubTasksDone* conc_par_seq_tasks() {return &_conc_par_seq_tasks; } @@ -346,7 +347,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // Resizing support void set_end(HeapWord* value); // override - // mutual exclusion support + // Mutual exclusion support Mutex* freelistLock() const { return &_freelistLock; } // Iteration support @@ -370,7 +371,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // If the iteration encounters an unparseable portion of the region, // terminate the iteration and return the address of the start of the // subregion that isn't done. Return of "NULL" indicates that the - // interation completed. + // iteration completed. virtual HeapWord* object_iterate_careful_m(MemRegion mr, ObjectClosureCareful* cl); @@ -393,11 +394,11 @@ class CompactibleFreeListSpace: public CompactibleSpace { size_t block_size_nopar(const HeapWord* p) const; bool block_is_obj_nopar(const HeapWord* p) const; - // iteration support for promotion + // Iteration support for promotion void save_marks(); bool no_allocs_since_save_marks(); - // iteration support for sweeping + // Iteration support for sweeping void save_sweep_limit() { _sweep_limit = BlockOffsetArrayUseUnallocatedBlock ? unallocated_block() : end(); @@ -457,7 +458,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { FreeChunk* allocateScratch(size_t size); - // returns true if either the small or large linear allocation buffer is empty. + // Returns true if either the small or large linear allocation buffer is empty. bool linearAllocationWouldFail() const; // Adjust the chunk for the minimum size. This version is called in @@ -477,18 +478,18 @@ class CompactibleFreeListSpace: public CompactibleSpace { void addChunkAndRepairOffsetTable(HeapWord* chunk, size_t size, bool coalesced); - // Support for decisions regarding concurrent collection policy + // Support for decisions regarding concurrent collection policy. bool should_concurrent_collect() const; - // Support for compaction + // Support for compaction. void prepare_for_compaction(CompactPoint* cp); void adjust_pointers(); void compact(); - // reset the space to reflect the fact that a compaction of the + // Reset the space to reflect the fact that a compaction of the // space has been done. virtual void reset_after_compaction(); - // Debugging support + // Debugging support. void print() const; void print_on(outputStream* st) const; void prepare_for_verify(); @@ -500,7 +501,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // i.e. either the binary tree dictionary, the indexed free lists // or the linear allocation block. bool verify_chunk_in_free_list(FreeChunk* fc) const; - // Verify that the given chunk is the linear allocation block + // Verify that the given chunk is the linear allocation block. bool verify_chunk_is_linear_alloc_block(FreeChunk* fc) const; // Do some basic checks on the the free lists. void check_free_list_consistency() const PRODUCT_RETURN; @@ -516,7 +517,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { size_t sumIndexedFreeListArrayReturnedBytes(); // Return the total number of chunks in the indexed free lists. size_t totalCountInIndexedFreeLists() const; - // Return the total numberof chunks in the space. + // Return the total number of chunks in the space. size_t totalCount(); ) diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index 0c6397a6e02..c6f608f5da6 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -117,10 +117,10 @@ GCCause::Cause CMSCollector::_full_gc_cause = GCCause::_no_gc; // hide the naked CGC_lock manipulation in the baton-passing code // further below. That's something we should try to do. Also, the proof // of correctness of this 2-level locking scheme is far from obvious, -// and potentially quite slippery. We have an uneasy supsicion, for instance, +// and potentially quite slippery. We have an uneasy suspicion, for instance, // that there may be a theoretical possibility of delay/starvation in the // low-level lock/wait/notify scheme used for the baton-passing because of -// potential intereference with the priority scheme embodied in the +// potential interference with the priority scheme embodied in the // CMS-token-passing protocol. See related comments at a CGC_lock->wait() // invocation further below and marked with "XXX 20011219YSR". // Indeed, as we note elsewhere, this may become yet more slippery @@ -259,7 +259,7 @@ ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration( // Ideally, in the calculation below, we'd compute the dilatation // factor as: MinChunkSize/(promoting_gen's min object size) // Since we do not have such a general query interface for the - // promoting generation, we'll instead just use the mimimum + // promoting generation, we'll instead just use the minimum // object size (which today is a header's worth of space); // note that all arithmetic is in units of HeapWords. assert(MinChunkSize >= CollectedHeap::min_fill_size(), "just checking"); @@ -274,7 +274,7 @@ ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration( // // Let "f" be MinHeapFreeRatio in // -// _intiating_occupancy = 100-f + +// _initiating_occupancy = 100-f + // f * (CMSTriggerRatio/100) // where CMSTriggerRatio is the argument "tr" below. // @@ -2671,7 +2671,7 @@ bool CMSCollector::waitForForegroundGC() { // that it's responsible for collecting, while itself doing any // work common to all generations it's responsible for. A similar // comment applies to the gc_epilogue()'s. -// The role of the varaible _between_prologue_and_epilogue is to +// The role of the variable _between_prologue_and_epilogue is to // enforce the invocation protocol. void CMSCollector::gc_prologue(bool full) { // Call gc_prologue_work() for the CMSGen @@ -2878,10 +2878,10 @@ bool CMSCollector::have_cms_token() { // Check reachability of the given heap address in CMS generation, // treating all other generations as roots. bool CMSCollector::is_cms_reachable(HeapWord* addr) { - // We could "guarantee" below, rather than assert, but i'll + // We could "guarantee" below, rather than assert, but I'll // leave these as "asserts" so that an adventurous debugger // could try this in the product build provided some subset of - // the conditions were met, provided they were intersted in the + // the conditions were met, provided they were interested in the // results and knew that the computation below wouldn't interfere // with other concurrent computations mutating the structures // being read or written. @@ -2982,7 +2982,7 @@ bool CMSCollector::verify_after_remark(bool silent) { // This is as intended, because by this time // GC must already have cleared any refs that need to be cleared, // and traced those that need to be marked; moreover, - // the marking done here is not going to intefere in any + // the marking done here is not going to interfere in any // way with the marking information used by GC. NoRefDiscovery no_discovery(ref_processor()); @@ -3000,7 +3000,7 @@ bool CMSCollector::verify_after_remark(bool silent) { if (CMSRemarkVerifyVariant == 1) { // In this first variant of verification, we complete - // all marking, then check if the new marks-verctor is + // all marking, then check if the new marks-vector is // a subset of the CMS marks-vector. verify_after_remark_work_1(); } else if (CMSRemarkVerifyVariant == 2) { @@ -3033,7 +3033,6 @@ void CMSCollector::verify_after_remark_work_1() { gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens are roots true, // activate StrongRootsScope - false, // not scavenging SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, true, // walk code active on stacks @@ -3101,7 +3100,6 @@ void CMSCollector::verify_after_remark_work_2() { gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens are roots true, // activate StrongRootsScope - false, // not scavenging SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, true, // walk code active on stacks @@ -3303,7 +3301,7 @@ bool ConcurrentMarkSweepGeneration::is_too_full() const { void CMSCollector::setup_cms_unloading_and_verification_state() { const bool should_verify = VerifyBeforeGC || VerifyAfterGC || VerifyDuringGC || VerifyBeforeExit; - const int rso = SharedHeap::SO_Strings | SharedHeap::SO_CodeCache; + const int rso = SharedHeap::SO_Strings | SharedHeap::SO_AllCodeCache; // We set the proper root for this CMS cycle here. if (should_unload_classes()) { // Should unload classes this cycle @@ -3401,7 +3399,7 @@ HeapWord* ConcurrentMarkSweepGeneration::expand_and_par_lab_allocate(CMSParGCThr CMSExpansionCause::_allocate_par_lab); // Now go around the loop and try alloc again; // A competing par_promote might beat us to the expansion space, - // so we may go around the loop again if promotion fails agaion. + // so we may go around the loop again if promotion fails again. if (GCExpandToAllocateDelayMillis > 0) { os::sleep(Thread::current(), GCExpandToAllocateDelayMillis, false); } @@ -3738,10 +3736,9 @@ void CMSCollector::checkpointRootsInitialWork(bool asynch) { gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens are roots true, // activate StrongRootsScope - false, // not scavenging SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, - true, // walk all of code cache if (so & SO_CodeCache) + true, // walk all of code cache if (so & SO_AllCodeCache) NULL, &klass_closure); } @@ -4373,7 +4370,7 @@ void CMSConcMarkingTask::coordinator_yield() { // should really use wait/notify, which is the recommended // way of doing this type of interaction. Additionally, we should // consolidate the eight methods that do the yield operation and they - // are almost identical into one for better maintenability and + // are almost identical into one for better maintainability and // readability. See 6445193. // // Tony 2006.06.29 @@ -4541,7 +4538,7 @@ void CMSCollector::abortable_preclean() { // If Eden's current occupancy is below this threshold, // immediately schedule the remark; else preclean // past the next scavenge in an effort to - // schedule the pause as described avove. By choosing + // schedule the pause as described above. By choosing // CMSScheduleRemarkEdenSizeThreshold >= max eden size // we will never do an actual abortable preclean cycle. if (get_eden_used() > CMSScheduleRemarkEdenSizeThreshold) { @@ -5238,14 +5235,13 @@ void CMSParInitialMarkTask::work(uint worker_id) { gch->gen_process_strong_roots(_collector->_cmsGen->level(), false, // yg was scanned above false, // this is parallel code - false, // not scavenging SharedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()), &par_mri_cl, - true, // walk all of code cache if (so & SO_CodeCache) + true, // walk all of code cache if (so & SO_AllCodeCache) NULL, &klass_closure); assert(_collector->should_unload_classes() - || (_collector->CMSCollector::roots_scanning_options() & SharedHeap::SO_CodeCache), + || (_collector->CMSCollector::roots_scanning_options() & SharedHeap::SO_AllCodeCache), "if we didn't scan the code cache, we have to be ready to drop nmethods with expired weak oops"); _timer.stop(); if (PrintCMSStatistics != 0) { @@ -5375,14 +5371,13 @@ void CMSParRemarkTask::work(uint worker_id) { gch->gen_process_strong_roots(_collector->_cmsGen->level(), false, // yg was scanned above false, // this is parallel code - false, // not scavenging SharedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()), &par_mrias_cl, - true, // walk all of code cache if (so & SO_CodeCache) + true, // walk all of code cache if (so & SO_AllCodeCache) NULL, NULL); // The dirty klasses will be handled below assert(_collector->should_unload_classes() - || (_collector->CMSCollector::roots_scanning_options() & SharedHeap::SO_CodeCache), + || (_collector->CMSCollector::roots_scanning_options() & SharedHeap::SO_AllCodeCache), "if we didn't scan the code cache, we have to be ready to drop nmethods with expired weak oops"); _timer.stop(); if (PrintCMSStatistics != 0) { @@ -5537,8 +5532,8 @@ CMSParRemarkTask::do_dirty_card_rescan_tasks( // CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! // CAUTION: This closure has state that persists across calls to // the work method dirty_range_iterate_clear() in that it has - // imbedded in it a (subtype of) UpwardsObjectClosure. The - // use of that state in the imbedded UpwardsObjectClosure instance + // embedded in it a (subtype of) UpwardsObjectClosure. The + // use of that state in the embedded UpwardsObjectClosure instance // assumes that the cards are always iterated (even if in parallel // by several threads) in monotonically increasing order per each // thread. This is true of the implementation below which picks @@ -5553,7 +5548,7 @@ CMSParRemarkTask::do_dirty_card_rescan_tasks( // sure that the changes there do not run counter to the // assumptions made here and necessary for correctness and // efficiency. Note also that this code might yield inefficient - // behaviour in the case of very large objects that span one or + // behavior in the case of very large objects that span one or // more work chunks. Such objects would potentially be scanned // several times redundantly. Work on 4756801 should try and // address that performance anomaly if at all possible. XXX @@ -5579,7 +5574,7 @@ CMSParRemarkTask::do_dirty_card_rescan_tasks( while (!pst->is_task_claimed(/* reference */ nth_task)) { // Having claimed the nth_task, compute corresponding mem-region, - // which is a-fortiori aligned correctly (i.e. at a MUT bopundary). + // which is a-fortiori aligned correctly (i.e. at a MUT boundary). // The alignment restriction ensures that we do not need any // synchronization with other gang-workers while setting or // clearing bits in thus chunk of the MUT. @@ -5966,7 +5961,6 @@ void CMSCollector::do_remark_non_parallel() { gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens as roots false, // use the local StrongRootsScope - false, // not scavenging SharedHeap::ScanningOption(roots_scanning_options()), &mrias_cl, true, // walk code active on stacks @@ -5974,7 +5968,7 @@ void CMSCollector::do_remark_non_parallel() { NULL); // The dirty klasses will be handled below assert(should_unload_classes() - || (roots_scanning_options() & SharedHeap::SO_CodeCache), + || (roots_scanning_options() & SharedHeap::SO_AllCodeCache), "if we didn't scan the code cache, we have to be ready to drop nmethods with expired weak oops"); } @@ -6371,7 +6365,7 @@ void CMSCollector::sweep(bool asynch) { _inter_sweep_timer.reset(); _inter_sweep_timer.start(); - // We need to use a monotonically non-deccreasing time in ms + // We need to use a monotonically non-decreasing time in ms // or we will see time-warp warnings and os::javaTimeMillis() // does not guarantee monotonicity. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; @@ -6732,7 +6726,7 @@ bool CMSBitMap::allocate(MemRegion mr) { warning("CMS bit map allocation failure"); return false; } - // For now we'll just commit all of the bit map up fromt. + // For now we'll just commit all of the bit map up front. // Later on we'll try to be more parsimonious with swap. if (!_virtual_space.initialize(brs, brs.size())) { warning("CMS bit map backing store failure"); @@ -6839,8 +6833,8 @@ bool CMSMarkStack::allocate(size_t size) { // XXX FIX ME !!! In the MT case we come in here holding a // leaf lock. For printing we need to take a further lock -// which has lower rank. We need to recallibrate the two -// lock-ranks involved in order to be able to rpint the +// which has lower rank. We need to recalibrate the two +// lock-ranks involved in order to be able to print the // messages below. (Or defer the printing to the caller. // For now we take the expedient path of just disabling the // messages for the problematic case.) @@ -7180,7 +7174,7 @@ size_t ScanMarkedObjectsAgainCarefullyClosure::do_object_careful_m( } #endif // ASSERT } else { - // an unitialized object + // An uninitialized object. assert(_bitMap->isMarked(addr+1), "missing Printezis mark?"); HeapWord* nextOneAddr = _bitMap->getNextMarkedWordAddress(addr + 2); size = pointer_delta(nextOneAddr + 1, addr); @@ -7188,7 +7182,7 @@ size_t ScanMarkedObjectsAgainCarefullyClosure::do_object_careful_m( "alignment problem"); // Note that pre-cleaning needn't redirty the card. OopDesc::set_klass() // will dirty the card when the klass pointer is installed in the - // object (signalling the completion of initialization). + // object (signaling the completion of initialization). } } else { // Either a not yet marked object or an uninitialized object @@ -7999,7 +7993,7 @@ void PushAndMarkClosure::do_oop(oop obj) { // we need to dirty all of the cards that the object spans, // since the rescan of object arrays will be limited to the // dirty cards. - // Note that no one can be intefering with us in this action + // Note that no one can be interfering with us in this action // of dirtying the mod union table, so no locking or atomics // are required. if (obj->is_objArray()) { @@ -9025,7 +9019,7 @@ void CMSParDrainMarkingStackClosure::trim_queue(uint max) { // It's OK to call this multi-threaded; the worst thing // that can happen is that we'll get a bunch of closely -// spaced simulated oveflows, but that's OK, in fact +// spaced simulated overflows, but that's OK, in fact // probably good as it would exercise the overflow code // under contention. bool CMSCollector::simulate_overflow() { @@ -9145,7 +9139,7 @@ bool CMSCollector::par_take_from_overflow_list(size_t num, (void) Atomic::cmpxchg_ptr(NULL, &_overflow_list, BUSY); } } else { - // Chop off the suffix and rerturn it to the global list. + // Chop off the suffix and return it to the global list. assert(cur->mark() != BUSY, "Error"); oop suffix_head = cur->mark(); // suffix will be put back on global list cur->set_mark(NULL); // break off suffix diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp index 2c87671dfe2..e98e8b6ce28 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @@ -171,19 +171,19 @@ class CMSBitMap VALUE_OBJ_CLASS_SPEC { // Ideally this should be GrowableArray<> just like MSC's marking stack(s). class CMSMarkStack: public CHeapObj { // - friend class CMSCollector; // to get at expasion stats further below + friend class CMSCollector; // To get at expansion stats further below. // - VirtualSpace _virtual_space; // space for the stack - oop* _base; // bottom of stack - size_t _index; // one more than last occupied index - size_t _capacity; // max #elements - Mutex _par_lock; // an advisory lock used in case of parallel access - NOT_PRODUCT(size_t _max_depth;) // max depth plumbed during run + VirtualSpace _virtual_space; // Space for the stack + oop* _base; // Bottom of stack + size_t _index; // One more than last occupied index + size_t _capacity; // Max #elements + Mutex _par_lock; // An advisory lock used in case of parallel access + NOT_PRODUCT(size_t _max_depth;) // Max depth plumbed during run protected: - size_t _hit_limit; // we hit max stack size limit - size_t _failed_double; // we failed expansion before hitting limit + size_t _hit_limit; // We hit max stack size limit + size_t _failed_double; // We failed expansion before hitting limit public: CMSMarkStack(): @@ -238,7 +238,7 @@ class CMSMarkStack: public CHeapObj { _index = 0; } - // Expand the stack, typically in response to an overflow condition + // Expand the stack, typically in response to an overflow condition. void expand(); // Compute the least valued stack element. @@ -250,7 +250,7 @@ class CMSMarkStack: public CHeapObj { return least; } - // Exposed here to allow stack expansion in || case + // Exposed here to allow stack expansion in || case. Mutex* par_lock() { return &_par_lock; } }; @@ -557,7 +557,7 @@ class CMSCollector: public CHeapObj { // Manipulated with CAS in the parallel/multi-threaded case. oop _overflow_list; // The following array-pair keeps track of mark words - // displaced for accomodating overflow list above. + // displaced for accommodating overflow list above. // This code will likely be revisited under RFE#4922830. Stack _preserved_oop_stack; Stack _preserved_mark_stack; @@ -599,7 +599,7 @@ class CMSCollector: public CHeapObj { void verify_after_remark_work_1(); void verify_after_remark_work_2(); - // true if any verification flag is on. + // True if any verification flag is on. bool _verifying; bool verifying() const { return _verifying; } void set_verifying(bool v) { _verifying = v; } @@ -611,9 +611,9 @@ class CMSCollector: public CHeapObj { void set_did_compact(bool v); // XXX Move these to CMSStats ??? FIX ME !!! - elapsedTimer _inter_sweep_timer; // time between sweeps - elapsedTimer _intra_sweep_timer; // time _in_ sweeps - // padded decaying average estimates of the above + elapsedTimer _inter_sweep_timer; // Time between sweeps + elapsedTimer _intra_sweep_timer; // Time _in_ sweeps + // Padded decaying average estimates of the above AdaptivePaddedAverage _inter_sweep_estimate; AdaptivePaddedAverage _intra_sweep_estimate; @@ -632,16 +632,16 @@ class CMSCollector: public CHeapObj { void report_heap_summary(GCWhen::Type when); protected: - ConcurrentMarkSweepGeneration* _cmsGen; // old gen (CMS) - MemRegion _span; // span covering above two - CardTableRS* _ct; // card table + ConcurrentMarkSweepGeneration* _cmsGen; // Old gen (CMS) + MemRegion _span; // Span covering above two + CardTableRS* _ct; // Card table // CMS marking support structures CMSBitMap _markBitMap; CMSBitMap _modUnionTable; CMSMarkStack _markStack; - HeapWord* _restart_addr; // in support of marking stack overflow + HeapWord* _restart_addr; // In support of marking stack overflow void lower_restart_addr(HeapWord* low); // Counters in support of marking stack / work queue overflow handling: @@ -656,12 +656,12 @@ class CMSCollector: public CHeapObj { size_t _par_kac_ovflw; NOT_PRODUCT(ssize_t _num_par_pushes;) - // ("Weak") Reference processing support + // ("Weak") Reference processing support. ReferenceProcessor* _ref_processor; CMSIsAliveClosure _is_alive_closure; - // keep this textually after _markBitMap and _span; c'tor dependency + // Keep this textually after _markBitMap and _span; c'tor dependency. - ConcurrentMarkSweepThread* _cmsThread; // the thread doing the work + ConcurrentMarkSweepThread* _cmsThread; // The thread doing the work ModUnionClosure _modUnionClosure; ModUnionClosurePar _modUnionClosurePar; @@ -697,7 +697,7 @@ class CMSCollector: public CHeapObj { // State related to prologue/epilogue invocation for my generations bool _between_prologue_and_epilogue; - // Signalling/State related to coordination between fore- and backgroud GC + // Signaling/State related to coordination between fore- and background GC // Note: When the baton has been passed from background GC to foreground GC, // _foregroundGCIsActive is true and _foregroundGCShouldWait is false. static bool _foregroundGCIsActive; // true iff foreground collector is active or @@ -712,13 +712,13 @@ class CMSCollector: public CHeapObj { int _numYields; size_t _numDirtyCards; size_t _sweep_count; - // number of full gc's since the last concurrent gc. + // Number of full gc's since the last concurrent gc. uint _full_gcs_since_conc_gc; - // occupancy used for bootstrapping stats + // Occupancy used for bootstrapping stats double _bootstrap_occupancy; - // timer + // Timer elapsedTimer _timer; // Timing, allocation and promotion statistics, used for scheduling. @@ -770,7 +770,7 @@ class CMSCollector: public CHeapObj { int no_of_gc_threads); void push_on_overflow_list(oop p); void par_push_on_overflow_list(oop p); - // the following is, obviously, not, in general, "MT-stable" + // The following is, obviously, not, in general, "MT-stable" bool overflow_list_is_empty() const; void preserve_mark_if_necessary(oop p); @@ -778,24 +778,24 @@ class CMSCollector: public CHeapObj { void preserve_mark_work(oop p, markOop m); void restore_preserved_marks_if_any(); NOT_PRODUCT(bool no_preserved_marks() const;) - // in support of testing overflow code + // In support of testing overflow code NOT_PRODUCT(int _overflow_counter;) - NOT_PRODUCT(bool simulate_overflow();) // sequential + NOT_PRODUCT(bool simulate_overflow();) // Sequential NOT_PRODUCT(bool par_simulate_overflow();) // MT version // CMS work methods - void checkpointRootsInitialWork(bool asynch); // initial checkpoint work + void checkpointRootsInitialWork(bool asynch); // Initial checkpoint work - // a return value of false indicates failure due to stack overflow - bool markFromRootsWork(bool asynch); // concurrent marking work + // A return value of false indicates failure due to stack overflow + bool markFromRootsWork(bool asynch); // Concurrent marking work public: // FIX ME!!! only for testing - bool do_marking_st(bool asynch); // single-threaded marking - bool do_marking_mt(bool asynch); // multi-threaded marking + bool do_marking_st(bool asynch); // Single-threaded marking + bool do_marking_mt(bool asynch); // Multi-threaded marking private: - // concurrent precleaning work + // Concurrent precleaning work size_t preclean_mod_union_table(ConcurrentMarkSweepGeneration* gen, ScanMarkedObjectsAgainCarefullyClosure* cl); size_t preclean_card_table(ConcurrentMarkSweepGeneration* gen, @@ -811,26 +811,26 @@ class CMSCollector: public CHeapObj { // Resets (i.e. clears) the per-thread plab sample vectors void reset_survivor_plab_arrays(); - // final (second) checkpoint work + // Final (second) checkpoint work void checkpointRootsFinalWork(bool asynch, bool clear_all_soft_refs, bool init_mark_was_synchronous); - // work routine for parallel version of remark + // Work routine for parallel version of remark void do_remark_parallel(); - // work routine for non-parallel version of remark + // Work routine for non-parallel version of remark void do_remark_non_parallel(); - // reference processing work routine (during second checkpoint) + // Reference processing work routine (during second checkpoint) void refProcessingWork(bool asynch, bool clear_all_soft_refs); - // concurrent sweeping work + // Concurrent sweeping work void sweepWork(ConcurrentMarkSweepGeneration* gen, bool asynch); - // (concurrent) resetting of support data structures + // (Concurrent) resetting of support data structures void reset(bool asynch); // Clear _expansion_cause fields of constituent generations void clear_expansion_cause(); - // An auxilliary method used to record the ends of + // An auxiliary method used to record the ends of // used regions of each generation to limit the extent of sweep void save_sweep_limits(); @@ -854,7 +854,7 @@ class CMSCollector: public CHeapObj { bool is_external_interruption(); void report_concurrent_mode_interruption(); - // If the backgrould GC is active, acquire control from the background + // If the background GC is active, acquire control from the background // GC and do the collection. void acquire_control_and_collect(bool full, bool clear_all_soft_refs); @@ -893,7 +893,7 @@ class CMSCollector: public CHeapObj { ConcurrentMarkSweepGeneration* cmsGen() { return _cmsGen; } - // locking checks + // Locking checks NOT_PRODUCT(static bool have_cms_token();) // XXXPERM bool should_collect(bool full, size_t size, bool tlab); @@ -958,7 +958,7 @@ class CMSCollector: public CHeapObj { CMSBitMap* markBitMap() { return &_markBitMap; } void directAllocated(HeapWord* start, size_t size); - // main CMS steps and related support + // Main CMS steps and related support void checkpointRootsInitial(bool asynch); bool markFromRoots(bool asynch); // a return value of false indicates failure // due to stack overflow @@ -977,7 +977,7 @@ class CMSCollector: public CHeapObj { // Performance Counter Support CollectorCounters* counters() { return _gc_counters; } - // timer stuff + // Timer stuff void startTimer() { assert(!_timer.is_active(), "Error"); _timer.start(); } void stopTimer() { assert( _timer.is_active(), "Error"); _timer.stop(); } void resetTimer() { assert(!_timer.is_active(), "Error"); _timer.reset(); } @@ -1014,18 +1014,18 @@ class CMSCollector: public CHeapObj { static void print_on_error(outputStream* st); - // debugging + // Debugging void verify(); bool verify_after_remark(bool silent = VerifySilently); void verify_ok_to_terminate() const PRODUCT_RETURN; void verify_work_stacks_empty() const PRODUCT_RETURN; void verify_overflow_empty() const PRODUCT_RETURN; - // convenience methods in support of debugging + // Convenience methods in support of debugging static const size_t skip_header_HeapWords() PRODUCT_RETURN0; HeapWord* block_start(const void* p) const PRODUCT_RETURN0; - // accessors + // Accessors CMSMarkStack* verification_mark_stack() { return &_markStack; } CMSBitMap* verification_mark_bm() { return &_verification_mark_bm; } @@ -1109,7 +1109,7 @@ class ConcurrentMarkSweepGeneration: public CardGeneration { CollectionTypes _debug_collection_type; - // True if a compactiing collection was done. + // True if a compacting collection was done. bool _did_compact; bool did_compact() { return _did_compact; } @@ -1203,7 +1203,7 @@ class ConcurrentMarkSweepGeneration: public CardGeneration { // Support for compaction CompactibleSpace* first_compaction_space() const; - // Adjust quantites in the generation affected by + // Adjust quantities in the generation affected by // the compaction. void reset_after_compaction(); @@ -1301,7 +1301,7 @@ class ConcurrentMarkSweepGeneration: public CardGeneration { void setNearLargestChunk(); bool isNearLargestChunk(HeapWord* addr); - // Get the chunk at the end of the space. Delagates to + // Get the chunk at the end of the space. Delegates to // the space. FreeChunk* find_chunk_at_end(); @@ -1422,7 +1422,6 @@ class MarkFromRootsClosure: public BitMapClosure { // marking from the roots following the first checkpoint. // XXX This should really be a subclass of The serial version // above, but i have not had the time to refactor things cleanly. -// That willbe done for Dolphin. class Par_MarkFromRootsClosure: public BitMapClosure { CMSCollector* _collector; MemRegion _whole_span; @@ -1780,7 +1779,7 @@ class SweepClosure: public BlkClosureCareful { void do_already_free_chunk(FreeChunk *fc); // Work method called when processing an already free or a // freshly garbage chunk to do a lookahead and possibly a - // premptive flush if crossing over _limit. + // preemptive flush if crossing over _limit. void lookahead_and_flush(FreeChunk* fc, size_t chunkSize); // Process a garbage chunk during sweeping. size_t do_garbage_chunk(FreeChunk *fc); @@ -1879,7 +1878,7 @@ class CMSParDrainMarkingStackClosure: public VoidClosure { }; // Allow yielding or short-circuiting of reference list -// prelceaning work. +// precleaning work. class CMSPrecleanRefsYieldClosure: public YieldClosure { CMSCollector* _collector; void do_yield_work(); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp index 313edcd69e4..46c518e4b64 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp @@ -197,13 +197,13 @@ inline HeapWord* CMSBitMap::getNextMarkedWordAddress( } -// Return the HeapWord address corrsponding to the next "0" bit +// Return the HeapWord address corresponding to the next "0" bit // (inclusive). inline HeapWord* CMSBitMap::getNextUnmarkedWordAddress(HeapWord* addr) const { return getNextUnmarkedWordAddress(addr, endWord()); } -// Return the HeapWord address corrsponding to the next "0" bit +// Return the HeapWord address corresponding to the next "0" bit // (inclusive). inline HeapWord* CMSBitMap::getNextUnmarkedWordAddress( HeapWord* start_addr, HeapWord* end_addr) const { diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp index cbb59df0e77..6de07f235bb 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp @@ -164,7 +164,7 @@ class ConcurrentMarkSweepThread: public ConcurrentGCThread { // _pending_yields that holds the sum (of both sync and async requests), and // a second counter _pending_decrements that only holds the async requests, // for greater efficiency, since in a typical CMS run, there are many more - // pontential (i.e. static) yield points than there are actual + // potential (i.e. static) yield points than there are actual // (i.e. dynamic) yields because of requests, which are few and far between. // // Note that, while "_pending_yields >= _pending_decrements" is an invariant, diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp index 062974edbb7..40626ee2f66 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp @@ -279,7 +279,7 @@ void PromotionInfo::print_statistics(uint worker_id) const { // When _spoolTail is NULL, then the set of slots with displaced headers // is all those starting at the slot <_spoolHead, _firstIndex> and // going up to the last slot of last block in the linked list. -// In this lartter case, _splice_point points to the tail block of +// In this latter case, _splice_point points to the tail block of // this linked list of blocks holding displaced headers. void PromotionInfo::verify() const { // Verify the following: diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp index 24ca71c035b..0860369e706 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp @@ -141,8 +141,7 @@ void VM_CMS_Initial_Mark::doit() { #ifndef USDT2 HS_DTRACE_PROBE(hs_private, cms__initmark__begin); #else /* USDT2 */ - HS_PRIVATE_CMS_INITMARK_BEGIN( - ); + HS_PRIVATE_CMS_INITMARK_BEGIN(); #endif /* USDT2 */ _collector->_gc_timer_cm->register_gc_pause_start("Initial Mark"); @@ -162,8 +161,7 @@ void VM_CMS_Initial_Mark::doit() { #ifndef USDT2 HS_DTRACE_PROBE(hs_private, cms__initmark__end); #else /* USDT2 */ - HS_PRIVATE_CMS_INITMARK_END( - ); + HS_PRIVATE_CMS_INITMARK_END(); #endif /* USDT2 */ } @@ -178,8 +176,7 @@ void VM_CMS_Final_Remark::doit() { #ifndef USDT2 HS_DTRACE_PROBE(hs_private, cms__remark__begin); #else /* USDT2 */ - HS_PRIVATE_CMS_REMARK_BEGIN( - ); + HS_PRIVATE_CMS_REMARK_BEGIN(); #endif /* USDT2 */ _collector->_gc_timer_cm->register_gc_pause_start("Final Mark"); @@ -200,8 +197,7 @@ void VM_CMS_Final_Remark::doit() { #ifndef USDT2 HS_DTRACE_PROBE(hs_private, cms__remark__end); #else /* USDT2 */ - HS_PRIVATE_CMS_REMARK_END( - ); + HS_PRIVATE_CMS_REMARK_END(); #endif /* USDT2 */ } diff --git a/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp b/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp index 1ceca1734c5..9d8d8704d33 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp @@ -39,7 +39,7 @@ // up, the wrapped closure is applied to all elements, keeping track of // this elapsed time of this process, and leaving the array empty. // The caller must be sure to call "done" to process any unprocessed -// buffered entriess. +// buffered entries. class Generation; class HeapRegion; @@ -98,116 +98,4 @@ public: _closure_app_seconds(0.0) { } }; -class BufferingOopsInGenClosure: public OopsInGenClosure { - BufferingOopClosure _boc; - OopsInGenClosure* _oc; - protected: - template inline void do_oop_work(T* p) { - assert(generation()->is_in_reserved((void*)p), "Must be in!"); - _boc.do_oop(p); - } - public: - BufferingOopsInGenClosure(OopsInGenClosure *oc) : - _boc(oc), _oc(oc) {} - - virtual void do_oop(narrowOop* p) { do_oop_work(p); } - virtual void do_oop(oop* p) { do_oop_work(p); } - - void done() { - _boc.done(); - } - - double closure_app_seconds () { - return _boc.closure_app_seconds(); - } - - void set_generation(Generation* gen) { - OopsInGenClosure::set_generation(gen); - _oc->set_generation(gen); - } - - void reset_generation() { - // Make sure we finish the current work with the current generation. - _boc.done(); - OopsInGenClosure::reset_generation(); - _oc->reset_generation(); - } - -}; - - -class BufferingOopsInHeapRegionClosure: public OopsInHeapRegionClosure { -private: - enum PrivateConstants { - BufferLength = 1024 - }; - - StarTask _buffer[BufferLength]; - StarTask* _buffer_top; - StarTask* _buffer_curr; - - HeapRegion* _hr_buffer[BufferLength]; - HeapRegion** _hr_curr; - - OopsInHeapRegionClosure* _oc; - double _closure_app_seconds; - - void process_buffer () { - - assert((_hr_curr - _hr_buffer) == (_buffer_curr - _buffer), - "the two lengths should be the same"); - - double start = os::elapsedTime(); - HeapRegion** hr_curr = _hr_buffer; - HeapRegion* hr_prev = NULL; - for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) { - HeapRegion* region = *hr_curr; - if (region != hr_prev) { - _oc->set_region(region); - hr_prev = region; - } - if (curr->is_narrow()) { - assert(UseCompressedOops, "Error"); - _oc->do_oop((narrowOop*)(*curr)); - } else { - _oc->do_oop((oop*)(*curr)); - } - ++hr_curr; - } - _buffer_curr = _buffer; - _hr_curr = _hr_buffer; - _closure_app_seconds += (os::elapsedTime() - start); - } - -public: - virtual void do_oop(narrowOop* p) { do_oop_work(p); } - virtual void do_oop( oop* p) { do_oop_work(p); } - - template void do_oop_work(T* p) { - if (_buffer_curr == _buffer_top) { - assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr"); - process_buffer(); - } - StarTask new_ref(p); - *_buffer_curr = new_ref; - ++_buffer_curr; - *_hr_curr = _from; - ++_hr_curr; - } - void done () { - if (_buffer_curr > _buffer) { - assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr"); - process_buffer(); - } - } - double closure_app_seconds () { - return _closure_app_seconds; - } - BufferingOopsInHeapRegionClosure (OopsInHeapRegionClosure *oc) : - _oc(oc), - _buffer_curr(_buffer), _buffer_top(_buffer + BufferLength), - _hr_curr(_hr_buffer), - _closure_app_seconds(0.0) { } -}; - #endif // SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp index 2a6acd4a7ee..1934159f9bb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp @@ -33,7 +33,7 @@ ConcurrentG1Refine::ConcurrentG1Refine(G1CollectedHeap* g1h) : _threads(NULL), _n_threads(0), _hot_card_cache(g1h) { - // Ergomonically select initial concurrent refinement parameters + // Ergonomically select initial concurrent refinement parameters if (FLAG_IS_DEFAULT(G1ConcRefinementGreenZone)) { FLAG_SET_DEFAULT(G1ConcRefinementGreenZone, MAX2(ParallelGCThreads, 1)); } diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp index ee9a1b67aae..72ce48ec580 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp @@ -44,8 +44,8 @@ ConcurrentG1RefineThread(ConcurrentG1Refine* cg1r, ConcurrentG1RefineThread *nex _vtime_accum(0.0) { - // Each thread has its own monitor. The i-th thread is responsible for signalling - // to thread i+1 if the number of buffers in the queue exceeds a threashold for this + // Each thread has its own monitor. The i-th thread is responsible for signaling + // to thread i+1 if the number of buffers in the queue exceeds a threshold for this // thread. Monitors are also used to wake up the threads during termination. // The 0th worker in notified by mutator threads and has a special monitor. // The last worker is used for young gen rset size sampling. diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index 4e458312666..c874f56d3c2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -909,7 +909,7 @@ void ConcurrentMark::checkpointRootsInitialPre() { } #endif - // Initialise marking structures. This has to be done in a STW phase. + // Initialize marking structures. This has to be done in a STW phase. reset(); // For each region note start of marking. @@ -923,8 +923,8 @@ void ConcurrentMark::checkpointRootsInitialPost() { // If we force an overflow during remark, the remark operation will // actually abort and we'll restart concurrent marking. If we always - // force an oveflow during remark we'll never actually complete the - // marking phase. So, we initilize this here, at the start of the + // force an overflow during remark we'll never actually complete the + // marking phase. So, we initialize this here, at the start of the // cycle, so that at the remaining overflow number will decrease at // every remark and we'll eventually not need to cause one. force_overflow_stw()->init(); @@ -959,7 +959,7 @@ void ConcurrentMark::checkpointRootsInitialPost() { * * Note, however, that this code is also used during remark and in * this case we should not attempt to leave / enter the STS, otherwise - * we'll either hit an asseert (debug / fastdebug) or deadlock + * we'll either hit an assert (debug / fastdebug) or deadlock * (product). So we should only leave / enter the STS if we are * operating concurrently. * @@ -1001,7 +1001,7 @@ void ConcurrentMark::enter_first_sync_barrier(uint worker_id) { // task 0 is responsible for clearing the global data structures // We should be here because of an overflow. During STW we should // not clear the overflow flag since we rely on it being true when - // we exit this method to abort the pause and restart concurent + // we exit this method to abort the pause and restart concurrent // marking. reset_marking_state(true /* clear_overflow */); force_overflow()->update(); @@ -1251,7 +1251,7 @@ void ConcurrentMark::markFromRoots() { CMConcurrentMarkingTask markingTask(this, cmThread()); if (use_parallel_marking_threads()) { _parallel_workers->set_active_workers((int)active_workers); - // Don't set _n_par_threads because it affects MT in proceess_strong_roots() + // Don't set _n_par_threads because it affects MT in process_strong_roots() // and the decisions on that MT processing is made elsewhere. assert(_parallel_workers->active_workers() > 0, "Should have been set"); _parallel_workers->run_task(&markingTask); @@ -1484,7 +1484,7 @@ public: } // Set the marked bytes for the current region so that - // it can be queried by a calling verificiation routine + // it can be queried by a calling verification routine _region_marked_bytes = marked_bytes; return false; @@ -1619,7 +1619,6 @@ public: } }; - class G1ParVerifyFinalCountTask: public AbstractGangTask { protected: G1CollectedHeap* _g1h; @@ -2307,7 +2306,7 @@ class G1CMDrainMarkingStackClosure: public VoidClosure { // oop closure (an instance of G1CMKeepAliveAndDrainClosure above). // // CMTask::do_marking_step() is called in a loop, which we'll exit - // if there's nothing more to do (i.e. we'completely drained the + // if there's nothing more to do (i.e. we've completely drained the // entries that were pushed as a a result of applying the 'keep alive' // closure to the entries on the discovered ref lists) or we overflow // the global marking stack. @@ -2470,7 +2469,7 @@ void ConcurrentMark::weakRefsWork(bool clear_all_soft_refs) { // reference processing is not multi-threaded and is thus // performed by the current thread instead of a gang worker). // - // The gang tasks involved in parallel reference procssing create + // The gang tasks involved in parallel reference processing create // their own instances of these closures, which do their own // synchronization among themselves. G1CMKeepAliveAndDrainClosure g1_keep_alive(this, task(0), true /* is_serial */); @@ -2529,10 +2528,9 @@ void ConcurrentMark::weakRefsWork(bool clear_all_soft_refs) { assert(!rp->discovery_enabled(), "Post condition"); } - // Now clean up stale oops in StringTable - StringTable::unlink(&g1_is_alive); - // Clean up unreferenced symbols in symbol table. - SymbolTable::unlink(); + g1h->unlink_string_and_symbol_table(&g1_is_alive, + /* process_strings */ false, // currently strings are always roots + /* process_symbols */ true); } void ConcurrentMark::swapMarkBitMaps() { @@ -2548,7 +2546,7 @@ private: public: void work(uint worker_id) { // Since all available tasks are actually started, we should - // only proceed if we're supposed to be actived. + // only proceed if we're supposed to be active. if (worker_id < _cm->active_tasks()) { CMTask* task = _cm->task(worker_id); task->record_start_time(); @@ -3068,7 +3066,7 @@ class AggregateCountDataHRClosure: public HeapRegionClosure { // 'start' should be in the heap. assert(_g1h->is_in_g1_reserved(start) && _ct_bs->is_card_aligned(start), "sanity"); - // 'end' *may* be just beyone the end of the heap (if hr is the last region) + // 'end' *may* be just beyond the end of the heap (if hr is the last region) assert(!_g1h->is_in_g1_reserved(end) || _ct_bs->is_card_aligned(end), "sanity"); BitMap::idx_t start_idx = _cm->card_bitmap_index_for(start); @@ -4416,7 +4414,7 @@ void CMTask::do_marking_step(double time_target_ms, // overflow was raised. This means we have to restart the // marking phase and start iterating over regions. However, in // order to do this we have to make sure that all tasks stop - // what they are doing and re-initialise in a safe manner. We + // what they are doing and re-initialize in a safe manner. We // will achieve this with the use of two barrier sync points. if (_cm->verbose_low()) { @@ -4430,7 +4428,7 @@ void CMTask::do_marking_step(double time_target_ms, // When we exit this sync barrier we know that all tasks have // stopped doing marking work. So, it's now safe to - // re-initialise our data structures. At the end of this method, + // re-initialize our data structures. At the end of this method, // task 0 will clear the global data structures. } diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index a01024fcb9f..383bb4a6be2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -378,19 +378,19 @@ class ConcurrentMark: public CHeapObj { friend class G1CMDrainMarkingStackClosure; protected: - ConcurrentMarkThread* _cmThread; // the thread doing the work - G1CollectedHeap* _g1h; // the heap. - uint _parallel_marking_threads; // the number of marking - // threads we're use - uint _max_parallel_marking_threads; // max number of marking - // threads we'll ever use - double _sleep_factor; // how much we have to sleep, with + ConcurrentMarkThread* _cmThread; // The thread doing the work + G1CollectedHeap* _g1h; // The heap + uint _parallel_marking_threads; // The number of marking + // threads we're using + uint _max_parallel_marking_threads; // Max number of marking + // threads we'll ever use + double _sleep_factor; // How much we have to sleep, with // respect to the work we just did, to // meet the marking overhead goal - double _marking_task_overhead; // marking target overhead for + double _marking_task_overhead; // Marking target overhead for // a single task - // same as the two above, but for the cleanup task + // Same as the two above, but for the cleanup task double _cleanup_sleep_factor; double _cleanup_task_overhead; @@ -399,8 +399,8 @@ protected: // Concurrent marking support structures CMBitMap _markBitMap1; CMBitMap _markBitMap2; - CMBitMapRO* _prevMarkBitMap; // completed mark bitmap - CMBitMap* _nextMarkBitMap; // under-construction mark bitmap + CMBitMapRO* _prevMarkBitMap; // Completed mark bitmap + CMBitMap* _nextMarkBitMap; // Under-construction mark bitmap BitMap _region_bm; BitMap _card_bm; @@ -409,43 +409,43 @@ protected: HeapWord* _heap_start; HeapWord* _heap_end; - // Root region tracking and claiming. + // Root region tracking and claiming CMRootRegions _root_regions; // For gray objects - CMMarkStack _markStack; // Grey objects behind global finger. - HeapWord* volatile _finger; // the global finger, region aligned, + CMMarkStack _markStack; // Grey objects behind global finger + HeapWord* volatile _finger; // The global finger, region aligned, // always points to the end of the // last claimed region - // marking tasks - uint _max_worker_id;// maximum worker id - uint _active_tasks; // task num currently active - CMTask** _tasks; // task queue array (max_worker_id len) - CMTaskQueueSet* _task_queues; // task queue set - ParallelTaskTerminator _terminator; // for termination + // Marking tasks + uint _max_worker_id;// Maximum worker id + uint _active_tasks; // Task num currently active + CMTask** _tasks; // Task queue array (max_worker_id len) + CMTaskQueueSet* _task_queues; // Task queue set + ParallelTaskTerminator _terminator; // For termination - // Two sync barriers that are used to synchronise tasks when an + // Two sync barriers that are used to synchronize tasks when an // overflow occurs. The algorithm is the following. All tasks enter // the first one to ensure that they have all stopped manipulating - // the global data structures. After they exit it, they re-initialise - // their data structures and task 0 re-initialises the global data + // the global data structures. After they exit it, they re-initialize + // their data structures and task 0 re-initializes the global data // structures. Then, they enter the second sync barrier. This // ensure, that no task starts doing work before all data - // structures (local and global) have been re-initialised. When they + // structures (local and global) have been re-initialized. When they // exit it, they are free to start working again. WorkGangBarrierSync _first_overflow_barrier_sync; WorkGangBarrierSync _second_overflow_barrier_sync; - // this is set by any task, when an overflow on the global data - // structures is detected. + // This is set by any task, when an overflow on the global data + // structures is detected volatile bool _has_overflown; - // true: marking is concurrent, false: we're in remark + // True: marking is concurrent, false: we're in remark volatile bool _concurrent; - // set at the end of a Full GC so that marking aborts + // Set at the end of a Full GC so that marking aborts volatile bool _has_aborted; - // used when remark aborts due to an overflow to indicate that + // Used when remark aborts due to an overflow to indicate that // another concurrent marking phase should start volatile bool _restart_for_overflow; @@ -455,10 +455,10 @@ protected: // time of remark. volatile bool _concurrent_marking_in_progress; - // verbose level + // Verbose level CMVerboseLevel _verbose_level; - // All of these times are in ms. + // All of these times are in ms NumberSeq _init_times; NumberSeq _remark_times; NumberSeq _remark_mark_times; @@ -467,7 +467,7 @@ protected: double _total_counting_time; double _total_rs_scrub_time; - double* _accum_task_vtime; // accumulated task vtime + double* _accum_task_vtime; // Accumulated task vtime FlexibleWorkGang* _parallel_workers; @@ -487,7 +487,7 @@ protected: void reset_marking_state(bool clear_overflow = true); // We do this after we're done with marking so that the marking data - // structures are initialised to a sensible and predictable state. + // structures are initialized to a sensible and predictable state. void set_non_marking_state(); // Called to indicate how many threads are currently active. @@ -497,14 +497,14 @@ protected: // mark or remark) and how many threads are currently active. void set_concurrency_and_phase(uint active_tasks, bool concurrent); - // prints all gathered CM-related statistics + // Prints all gathered CM-related statistics void print_stats(); bool cleanup_list_is_empty() { return _cleanup_list.is_empty(); } - // accessor methods + // Accessor methods uint parallel_marking_threads() const { return _parallel_marking_threads; } uint max_parallel_marking_threads() const { return _max_parallel_marking_threads;} double sleep_factor() { return _sleep_factor; } @@ -542,7 +542,7 @@ protected: // frequently. HeapRegion* claim_region(uint worker_id); - // It determines whether we've run out of regions to scan. + // It determines whether we've run out of regions to scan bool out_of_regions() { return _finger == _heap_end; } // Returns the task with the given id @@ -816,7 +816,7 @@ public: inline bool do_yield_check(uint worker_i = 0); inline bool should_yield(); - // Called to abort the marking cycle after a Full GC takes palce. + // Called to abort the marking cycle after a Full GC takes place. void abort(); bool has_aborted() { return _has_aborted; } @@ -933,11 +933,11 @@ public: // Similar to the above routine but there are times when we cannot // safely calculate the size of obj due to races and we, therefore, - // pass the size in as a parameter. It is the caller's reponsibility + // pass the size in as a parameter. It is the caller's responsibility // to ensure that the size passed in for obj is valid. inline bool par_mark_and_count(oop obj, size_t word_size, uint worker_id); - // Unconditionally mark the given object, and unconditinally count + // Unconditionally mark the given object, and unconditionally count // the object in the counting structures for worker id 0. // Should *not* be called from parallel code. inline bool mark_and_count(oop obj, HeapRegion* hr); diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp index ea45f2d6466..e4ca5ecee5e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp @@ -105,7 +105,7 @@ inline void ConcurrentMark::count_region(MemRegion mr, HeapRegion* hr, // will then correspond to a (non-existent) card that is also // just beyond the heap. if (g1h->is_in_g1_reserved(end) && !ct_bs->is_card_aligned(end)) { - // end of region is not card aligned - incremement to cover + // end of region is not card aligned - increment to cover // all the cards spanned by the region. end_idx += 1; } @@ -222,7 +222,7 @@ inline bool ConcurrentMark::par_mark_and_count(oop obj, return false; } -// Unconditionally mark the given object, and unconditinally count +// Unconditionally mark the given object, and unconditionally count // the object in the counting structures for worker id 0. // Should *not* be called from parallel code. inline bool ConcurrentMark::mark_and_count(oop obj, HeapRegion* hr) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.inline.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.inline.hpp index c096de3837a..05efc6ebc3d 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.inline.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.inline.hpp @@ -70,7 +70,7 @@ inline HeapWord* G1AllocRegion::attempt_allocation(size_t word_size, inline HeapWord* G1AllocRegion::attempt_allocation_locked(size_t word_size, bool bot_updates) { - // First we have to tedo the allocation, assuming we're holding the + // First we have to redo the allocation, assuming we're holding the // appropriate lock, in case another thread changed the region while // we were waiting to get the lock. HeapWord* result = attempt_allocation(word_size, bot_updates); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp index f80c70b4e36..6b19f708556 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp @@ -79,7 +79,7 @@ protected: assert((uintptr_t)end % mapping_granularity_in_bytes == 0, err_msg("end mapping area address must be a multiple of mapping granularity %zd, is "PTR_FORMAT, mapping_granularity_in_bytes, end)); - size_t num_target_elems = (end - bottom) / (mapping_granularity_in_bytes / HeapWordSize); + size_t num_target_elems = pointer_delta(end, bottom, mapping_granularity_in_bytes); idx_t bias = (uintptr_t)bottom / mapping_granularity_in_bytes; address base = create_new_base_array(num_target_elems, target_elem_size_in_bytes); initialize_base(base, num_target_elems, bias, target_elem_size_in_bytes, log2_intptr(mapping_granularity_in_bytes)); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp index c35681f959c..d1188fe3c37 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp @@ -448,7 +448,7 @@ HeapWord* G1BlockOffsetArray::block_start_careful(const void* addr) const { // Otherwise, find the block start using the table, but taking // care (cf block_start_unsafe() above) not to parse any objects/blocks - // on the cards themsleves. + // on the cards themselves. size_t index = _array->index_for(addr); assert(_array->address_for_index(index) == addr, "arg should be start of card"); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp index 59041d34ae2..ccb7c3f10b3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp @@ -169,7 +169,7 @@ void G1CardCounts::clear_region(HeapRegion* hr) { // We use the last address in hr as hr could be the // last region in the heap. In which case trying to find - // the card for hr->end() will be an OOB accesss to the + // the card for hr->end() will be an OOB access to the // card table. HeapWord* last = hr->end() - 1; assert(_g1h->g1_committed().contains(last), diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 775f6465d66..ba1fab4ffcd 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -50,8 +50,8 @@ #include "gc_implementation/shared/gcTraceTime.hpp" #include "gc_implementation/shared/isGCActiveMark.hpp" #include "memory/gcLocker.inline.hpp" -#include "memory/genOopClosures.inline.hpp" #include "memory/generationSpec.hpp" +#include "memory/iterator.hpp" #include "memory/referenceProcessor.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.pcgc.inline.hpp" @@ -1575,8 +1575,6 @@ void G1CollectedHeap::do_full_collection(bool clear_all_soft_refs) { void G1CollectedHeap:: resize_if_necessary_after_full_collection(size_t word_size) { - assert(MinHeapFreeRatio <= MaxHeapFreeRatio, "sanity check"); - // Include the current allocation, if any, and bytes that will be // pre-allocated to support collections, as "used". const size_t used_after_gc = used(); @@ -2996,7 +2994,17 @@ bool G1CollectedHeap::supports_tlab_allocation() const { } size_t G1CollectedHeap::tlab_capacity(Thread* ignored) const { - return HeapRegion::GrainBytes; + return (_g1_policy->young_list_target_length() - young_list()->survivor_length()) * HeapRegion::GrainBytes; +} + +size_t G1CollectedHeap::tlab_used(Thread* ignored) const { + return young_list()->eden_used_bytes(); +} + +// For G1 TLABs should not contain humongous objects, so the maximum TLAB size +// must be smaller than the humongous object limit. +size_t G1CollectedHeap::max_tlab_size() const { + return align_size_down(_humongous_object_threshold_in_words - 1, MinObjAlignment); } size_t G1CollectedHeap::unsafe_max_tlab_alloc(Thread* ignored) const { @@ -3008,11 +3016,11 @@ size_t G1CollectedHeap::unsafe_max_tlab_alloc(Thread* ignored) const { // humongous objects. HeapRegion* hr = _mutator_alloc_region.get(); - size_t max_tlab_size = _humongous_object_threshold_in_words * wordSize; + size_t max_tlab = max_tlab_size() * wordSize; if (hr == NULL) { - return max_tlab_size; + return max_tlab; } else { - return MIN2(MAX2(hr->free(), (size_t) MinTLABSize), max_tlab_size); + return MIN2(MAX2(hr->free(), (size_t) MinTLABSize), max_tlab); } } @@ -3077,11 +3085,7 @@ const char* G1CollectedHeap::top_at_mark_start_str(VerifyOption vo) { return NULL; // keep some compilers happy } -// TODO: VerifyRootsClosure extends OopsInGenClosure so that we can -// pass it as the perm_blk to SharedHeap::process_strong_roots. -// When process_strong_roots stop calling perm_blk->younger_refs_iterate -// we can change this closure to extend the simpler OopClosure. -class VerifyRootsClosure: public OopsInGenClosure { +class VerifyRootsClosure: public OopClosure { private: G1CollectedHeap* _g1h; VerifyOption _vo; @@ -3117,7 +3121,7 @@ public: void do_oop(narrowOop* p) { do_oop_nv(p); } }; -class G1VerifyCodeRootOopClosure: public OopsInGenClosure { +class G1VerifyCodeRootOopClosure: public OopClosure { G1CollectedHeap* _g1h; OopClosure* _root_cl; nmethod* _nm; @@ -3396,14 +3400,12 @@ void G1CollectedHeap::verify(bool silent, VerifyOption vo) { // We apply the relevant closures to all the oops in the // system dictionary, the string table and the code cache. - const int so = SO_AllClasses | SO_Strings | SO_CodeCache; + const int so = SO_AllClasses | SO_Strings | SO_AllCodeCache; // Need cleared claim bits for the strong roots processing ClassLoaderDataGraph::clear_claimed_marks(); process_strong_roots(true, // activate StrongRootsScope - false, // we set "is scavenging" to false, - // so we don't reset the dirty cards. ScanningOption(so), // roots scanning options &rootsCl, &blobsCl, @@ -3655,6 +3657,7 @@ void G1CollectedHeap::gc_prologue(bool full /* Ignored */) { // always_do_update_barrier = false; assert(InlineCacheBuffer::is_empty(), "should have cleaned up ICBuffer"); // Fill TLAB's and such + accumulate_statistics_all_tlabs(); ensure_parsability(true); if (G1SummarizeRSetStats && (G1SummarizeRSetStatsPeriod > 0) && @@ -3679,6 +3682,8 @@ void G1CollectedHeap::gc_epilogue(bool full /* Ignored */) { "derived pointer present")); // always_do_update_barrier = true; + resize_all_tlabs(); + // We have just completed a GC. Update the soft reference // policy with the new heap occupancy Universe::update_heap_info_at_gc(); @@ -4651,8 +4656,8 @@ G1ParClosureSuper::G1ParClosureSuper(G1CollectedHeap* g1, _during_initial_mark(_g1->g1_policy()->during_initial_mark_pause()), _mark_in_progress(_g1->mark_in_progress()) { } -template -void G1ParCopyClosure::mark_object(oop obj) { +template +void G1ParCopyClosure::mark_object(oop obj) { #ifdef ASSERT HeapRegion* hr = _g1->heap_region_containing(obj); assert(hr != NULL, "sanity"); @@ -4663,8 +4668,8 @@ void G1ParCopyClosure::mark_object(oop _cm->grayRoot(obj, (size_t) obj->size(), _worker_id); } -template -void G1ParCopyClosure +template +void G1ParCopyClosure ::mark_forwarded_object(oop from_obj, oop to_obj) { #ifdef ASSERT assert(from_obj->is_forwarded(), "from obj should be forwarded"); @@ -4687,8 +4692,8 @@ void G1ParCopyClosure _cm->grayRoot(to_obj, (size_t) from_obj->size(), _worker_id); } -template -oop G1ParCopyClosure +template +oop G1ParCopyClosure ::copy_to_survivor_space(oop old) { size_t word_sz = old->size(); HeapRegion* from_region = _g1->heap_region_containing_raw(old); @@ -4784,13 +4789,11 @@ void G1ParCopyHelper::do_klass_barrier(T* p, oop new_obj) { } } -template +template template -void G1ParCopyClosure +void G1ParCopyClosure ::do_oop_work(T* p) { oop obj = oopDesc::load_decode_heap_oop(p); - assert(barrier != G1BarrierRS || obj != NULL, - "Precondition: G1BarrierRS implies obj is non-NULL"); assert(_worker_id == _par_scan_state->queue_num(), "sanity"); @@ -4810,10 +4813,7 @@ void G1ParCopyClosure mark_forwarded_object(obj, forwardee); } - // When scanning the RS, we only care about objs in CS. - if (barrier == G1BarrierRS) { - _par_scan_state->update_rs(_from, p, _worker_id); - } else if (barrier == G1BarrierKlass) { + if (barrier == G1BarrierKlass) { do_klass_barrier(p, forwardee); } } else { @@ -4828,14 +4828,10 @@ void G1ParCopyClosure if (barrier == G1BarrierEvac && obj != NULL) { _par_scan_state->update_rs(_from, p, _worker_id); } - - if (do_gen_barrier && obj != NULL) { - par_do_barrier(p); - } } -template void G1ParCopyClosure::do_oop_work(oop* p); -template void G1ParCopyClosure::do_oop_work(narrowOop* p); +template void G1ParCopyClosure::do_oop_work(oop* p); +template void G1ParCopyClosure::do_oop_work(narrowOop* p); template void G1ParScanPartialArrayClosure::do_oop_nv(T* p) { assert(has_partial_array_mask(p), "invariant"); @@ -5119,13 +5115,13 @@ g1_process_strong_roots(bool is_scavenging, BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots); - assert(so & SO_CodeCache || scan_rs != NULL, "must scan code roots somehow"); + assert(so & SO_AllCodeCache || scan_rs != NULL, "must scan code roots somehow"); // Walk the code cache/strong code roots w/o buffering, because StarTask // cannot handle unaligned oop locations. CodeBlobToOopClosure eager_scan_code_roots(scan_non_heap_roots, true /* do_marking */); process_strong_roots(false, // no scoping; this is parallel code - is_scavenging, so, + so, &buf_scan_non_heap_roots, &eager_scan_code_roots, scan_klasses @@ -5173,7 +5169,7 @@ g1_process_strong_roots(bool is_scavenging, // the collection set. // Note all threads participate in this set of root tasks. double mark_strong_code_roots_ms = 0.0; - if (g1_policy()->during_initial_mark_pause() && !(so & SO_CodeCache)) { + if (g1_policy()->during_initial_mark_pause() && !(so & SO_AllCodeCache)) { double mark_strong_roots_start = os::elapsedTime(); mark_strong_code_roots(worker_i); mark_strong_code_roots_ms = (os::elapsedTime() - mark_strong_roots_start) * 1000.0; @@ -5193,6 +5189,99 @@ G1CollectedHeap::g1_process_weak_roots(OopClosure* root_closure) { SharedHeap::process_weak_roots(root_closure, &roots_in_blobs); } +class G1StringSymbolTableUnlinkTask : public AbstractGangTask { +private: + BoolObjectClosure* _is_alive; + int _initial_string_table_size; + int _initial_symbol_table_size; + + bool _process_strings; + int _strings_processed; + int _strings_removed; + + bool _process_symbols; + int _symbols_processed; + int _symbols_removed; +public: + G1StringSymbolTableUnlinkTask(BoolObjectClosure* is_alive, bool process_strings, bool process_symbols) : + AbstractGangTask("Par String/Symbol table unlink"), _is_alive(is_alive), + _process_strings(process_strings), _strings_processed(0), _strings_removed(0), + _process_symbols(process_symbols), _symbols_processed(0), _symbols_removed(0) { + + _initial_string_table_size = StringTable::the_table()->table_size(); + _initial_symbol_table_size = SymbolTable::the_table()->table_size(); + if (process_strings) { + StringTable::clear_parallel_claimed_index(); + } + if (process_symbols) { + SymbolTable::clear_parallel_claimed_index(); + } + } + + ~G1StringSymbolTableUnlinkTask() { + guarantee(!_process_strings || StringTable::parallel_claimed_index() >= _initial_string_table_size, + err_msg("claim value "INT32_FORMAT" after unlink less than initial string table size "INT32_FORMAT, + StringTable::parallel_claimed_index(), _initial_string_table_size)); + guarantee(!_process_strings || SymbolTable::parallel_claimed_index() >= _initial_symbol_table_size, + err_msg("claim value "INT32_FORMAT" after unlink less than initial symbol table size "INT32_FORMAT, + SymbolTable::parallel_claimed_index(), _initial_symbol_table_size)); + } + + void work(uint worker_id) { + if (G1CollectedHeap::use_parallel_gc_threads()) { + int strings_processed = 0; + int strings_removed = 0; + int symbols_processed = 0; + int symbols_removed = 0; + if (_process_strings) { + StringTable::possibly_parallel_unlink(_is_alive, &strings_processed, &strings_removed); + Atomic::add(strings_processed, &_strings_processed); + Atomic::add(strings_removed, &_strings_removed); + } + if (_process_symbols) { + SymbolTable::possibly_parallel_unlink(&symbols_processed, &symbols_removed); + Atomic::add(symbols_processed, &_symbols_processed); + Atomic::add(symbols_removed, &_symbols_removed); + } + } else { + if (_process_strings) { + StringTable::unlink(_is_alive, &_strings_processed, &_strings_removed); + } + if (_process_symbols) { + SymbolTable::unlink(&_symbols_processed, &_symbols_removed); + } + } + } + + size_t strings_processed() const { return (size_t)_strings_processed; } + size_t strings_removed() const { return (size_t)_strings_removed; } + + size_t symbols_processed() const { return (size_t)_symbols_processed; } + size_t symbols_removed() const { return (size_t)_symbols_removed; } +}; + +void G1CollectedHeap::unlink_string_and_symbol_table(BoolObjectClosure* is_alive, + bool process_strings, bool process_symbols) { + uint n_workers = (G1CollectedHeap::use_parallel_gc_threads() ? + _g1h->workers()->active_workers() : 1); + + G1StringSymbolTableUnlinkTask g1_unlink_task(is_alive, process_strings, process_symbols); + if (G1CollectedHeap::use_parallel_gc_threads()) { + set_par_threads(n_workers); + workers()->run_task(&g1_unlink_task); + set_par_threads(0); + } else { + g1_unlink_task.work(0); + } + if (G1TraceStringSymbolTableScrubbing) { + gclog_or_tty->print_cr("Cleaned string and symbol table, " + "strings: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed, " + "symbols: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed", + g1_unlink_task.strings_processed(), g1_unlink_task.strings_removed(), + g1_unlink_task.symbols_processed(), g1_unlink_task.symbols_removed()); + } +} + // Weak Reference Processing support // An always "is_alive" closure that is used to preserve referents. diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp index 072013efb64..07bbe275788 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @@ -209,7 +209,7 @@ class G1CollectedHeap : public SharedHeap { friend class OldGCAllocRegion; // Closures used in implementation. - template + template friend class G1ParCopyClosure; friend class G1IsAliveClosure; friend class G1EvacuateFollowersClosure; @@ -1373,7 +1373,7 @@ public: // Divide the heap region sequence into "chunks" of some size (the number // of regions divided by the number of parallel threads times some // overpartition factor, currently 4). Assumes that this will be called - // in parallel by ParallelGCThreads worker threads with discinct worker + // in parallel by ParallelGCThreads worker threads with distinct worker // ids in the range [0..max(ParallelGCThreads-1, 1)], that all parallel // calls will use the same "claim_value", and that that claim value is // different from the claim_value of any heap region before the start of @@ -1470,9 +1470,11 @@ public: // Section on thread-local allocation buffers (TLABs) // See CollectedHeap for semantics. - virtual bool supports_tlab_allocation() const; - virtual size_t tlab_capacity(Thread* thr) const; - virtual size_t unsafe_max_tlab_alloc(Thread* thr) const; + bool supports_tlab_allocation() const; + size_t tlab_capacity(Thread* ignored) const; + size_t tlab_used(Thread* ignored) const; + size_t max_tlab_size() const; + size_t unsafe_max_tlab_alloc(Thread* ignored) const; // Can a compiler initialize a new object without store barriers? // This permission only extends from the creation of a new object @@ -1518,7 +1520,7 @@ public: // Returns "true" iff the given word_size is "very large". static bool isHumongous(size_t word_size) { // Note this has to be strictly greater-than as the TLABs - // are capped at the humongous thresold and we want to + // are capped at the humongous threshold and we want to // ensure that we don't try to allocate a TLAB as // humongous and that we don't allocate a humongous // object in a TLAB. @@ -1557,7 +1559,7 @@ public: void set_region_short_lived_locked(HeapRegion* hr); // add appropriate methods for any other surv rate groups - YoungList* young_list() { return _young_list; } + YoungList* young_list() const { return _young_list; } // debugging bool check_young_list_well_formed() { @@ -1648,26 +1650,30 @@ public: // Optimized nmethod scanning support routines - // Register the given nmethod with the G1 heap + // Register the given nmethod with the G1 heap. virtual void register_nmethod(nmethod* nm); - // Unregister the given nmethod from the G1 heap + // Unregister the given nmethod from the G1 heap. virtual void unregister_nmethod(nmethod* nm); // Migrate the nmethods in the code root lists of the regions // in the collection set to regions in to-space. In the event // of an evacuation failure, nmethods that reference objects - // that were not successfullly evacuated are not migrated. + // that were not successfully evacuated are not migrated. void migrate_strong_code_roots(); // During an initial mark pause, mark all the code roots that // point into regions *not* in the collection set. void mark_strong_code_roots(uint worker_id); - // Rebuild the stong code root lists for each region - // after a full GC + // Rebuild the strong code root lists for each region + // after a full GC. void rebuild_strong_code_roots(); + // Delete entries for dead interned string and clean up unreferenced symbols + // in symbol table, possibly in parallel. + void unlink_string_and_symbol_table(BoolObjectClosure* is_alive, bool unlink_strings = true, bool unlink_symbols = true); + // Verification // The following is just to alert the verification code diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index b4f9a0b0007..109b40debed 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -318,7 +318,7 @@ G1CollectorPolicy::G1CollectorPolicy() : void G1CollectorPolicy::initialize_alignments() { _space_alignment = HeapRegion::GrainBytes; - size_t card_table_alignment = GenRemSet::max_alignment_constraint(GenRemSet::CardTable); + size_t card_table_alignment = GenRemSet::max_alignment_constraint(); size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size(); _heap_alignment = MAX3(card_table_alignment, _space_alignment, page_size); } @@ -1075,7 +1075,7 @@ void G1CollectorPolicy::record_collection_pause_end(double pause_time_ms, Evacua } _short_lived_surv_rate_group->start_adding_regions(); - // do that for any other surv rate groupsx + // Do that for any other surv rate groups if (update_stats) { double cost_per_card_ms = 0.0; @@ -1741,7 +1741,7 @@ void G1CollectorPolicy::add_to_incremental_cset_info(HeapRegion* hr, size_t rs_l _inc_cset_predicted_elapsed_time_ms += region_elapsed_time_ms; _inc_cset_bytes_used_before += used_bytes; - // Cache the values we have added to the aggregated informtion + // Cache the values we have added to the aggregated information // in the heap region in case we have to remove this region from // the incremental collection set, or it is updated by the // rset sampling code diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp index 438bec82c51..f2905097190 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @@ -116,7 +116,7 @@ class TraceGen1TimeData : public CHeapObj { // If only -XX:NewRatio is set we should use the specified ratio of the heap // as both min and max. This will be interpreted as "fixed" just like the // NewSize==MaxNewSize case above. But we will update the min and max -// everytime the heap size changes. +// every time the heap size changes. // // NewSize and MaxNewSize override NewRatio. So, NewRatio is ignored if it is // combined with either NewSize or MaxNewSize. (A warning message is printed.) @@ -523,9 +523,9 @@ private: // synchronize updates to this field. size_t _inc_cset_recorded_rs_lengths; - // A concurrent refinement thread periodcially samples the young + // A concurrent refinement thread periodically samples the young // region RSets and needs to update _inc_cset_recorded_rs_lengths as - // the RSets grow. Instead of having to syncronize updates to that + // the RSets grow. Instead of having to synchronize updates to that // field we accumulate them in this field and add it to // _inc_cset_recorded_rs_lengths_diffs at the start of a GC. ssize_t _inc_cset_recorded_rs_lengths_diffs; @@ -604,7 +604,7 @@ private: // Calculate and return the maximum young list target length that // can fit into the pause time goal. The parameters are: rs_lengths // represent the prediction of how large the young RSet lengths will - // be, base_min_length is the alreay existing number of regions in + // be, base_min_length is the already existing number of regions in // the young list, min_length and max_length are the desired min and // max young list length according to the user's inputs. uint calculate_young_list_target_length(size_t rs_lengths, @@ -820,6 +820,8 @@ public: // do that for any other surv rate groups } + size_t young_list_target_length() const { return _young_list_target_length; } + bool is_young_list_full() { uint young_list_length = _g1->young_list()->length(); uint young_list_target_length = _young_list_target_length; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp index b8ca02c4d5e..956b23e0450 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp @@ -103,7 +103,7 @@ private: // The data structure implemented is a circular queue. // Head "points" to the most recent addition, tail to the oldest one. // The array is of fixed size and I don't think we'll need more than - // two or three entries with the current behaviour of G1 pauses. + // two or three entries with the current behavior of G1 pauses. // If the array is full, an easy fix is to look for the pauses with // the shortest gap between them and consolidate them. // For now, we have taken the expedient alternative of forgetting diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp index 87650103d60..2cc0f46a2cc 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp @@ -131,7 +131,6 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, ClassLoaderDataGraph::clear_claimed_marks(); sh->process_strong_roots(true, // activate StrongRootsScope - false, // not scavenging. SharedHeap::SO_SystemClasses, &GenMarkSweep::follow_root_closure, &GenMarkSweep::follow_code_root_closure, @@ -163,11 +162,8 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, // Prune dead klasses from subklass/sibling/implementor lists. Klass::clean_weak_klass_links(&GenMarkSweep::is_alive); - // Delete entries for dead interned strings. - StringTable::unlink(&GenMarkSweep::is_alive); - - // Clean up unreferenced symbols in symbol table. - SymbolTable::unlink(); + // Delete entries for dead interned string and clean up unreferenced symbols in symbol table. + G1CollectedHeap::heap()->unlink_string_and_symbol_table(&GenMarkSweep::is_alive); if (VerifyDuringGC) { HandleMark hm; // handle scope @@ -180,7 +176,7 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, // any hash values from the mark word. These hash values are // used when verifying the dictionaries and so removing them // from the mark word can make verification of the dictionaries - // fail. At the end of the GC, the orginal mark word values + // fail. At the end of the GC, the original mark word values // (including hash values) are restored to the appropriate // objects. if (!VerifySilently) { @@ -311,7 +307,6 @@ void G1MarkSweep::mark_sweep_phase3() { ClassLoaderDataGraph::clear_claimed_marks(); sh->process_strong_roots(true, // activate StrongRootsScope - false, // not scavenging. SharedHeap::SO_AllClasses, &GenMarkSweep::adjust_pointer_closure, NULL, // do not touch code cache here diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp index 8bbe4ff94ca..1c4f29d88c3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp @@ -112,7 +112,7 @@ G1MonitoringSupport::G1MonitoringSupport(G1CollectedHeap* g1h) : // take_sample() only returns "used". When sampling was used, there // were some anomolous values emitted which may have been the consequence // of not updating all values simultaneously (i.e., see the calculation done - // in eden_space_used(), is it possbile that the values used to + // in eden_space_used(), is it possible that the values used to // calculate either eden_used or survivor_used are being updated by // the collector when the sample is being done?). const bool sampled = false; @@ -135,7 +135,7 @@ G1MonitoringSupport::G1MonitoringSupport(G1CollectedHeap* g1h) : // Young collection set // name "generation.0". This is logically the young generation. - // The "0, 3" are paremeters for the n-th genertaion (=0) with 3 spaces. + // The "0, 3" are parameters for the n-th generation (=0) with 3 spaces. // See _old_collection_counters for additional counters _young_collection_counters = new G1YoungGenerationCounters(this, "young"); @@ -254,7 +254,7 @@ void G1MonitoringSupport::update_sizes() { eden_counters()->update_capacity(pad_capacity(eden_space_committed())); eden_counters()->update_used(eden_space_used()); // only the to survivor space (s1) is active, so we don't need to - // update the counteres for the from survivor space (s0) + // update the counters for the from survivor space (s0) to_counters()->update_capacity(pad_capacity(survivor_space_committed())); to_counters()->update_used(survivor_space_used()); old_space_counters()->update_capacity(pad_capacity(old_space_committed())); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp index 03b7300ae51..d354c746cb0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp @@ -108,7 +108,7 @@ class G1CollectedHeap; // is that all the above sizes need to be recalculated when the old // gen changes capacity (after a GC or after a humongous allocation) // but only the eden occupancy changes when a new eden region is -// allocated. So, in the latter case we have minimal recalcuation to +// allocated. So, in the latter case we have minimal recalculation to // do which is important as we want to keep the eden region allocation // path as low-overhead as possible. diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp index b616cb9eb4c..414b82f95bc 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp @@ -38,7 +38,7 @@ class ReferenceProcessor; // A class that scans oops in a given heap region (much as OopsInGenClosure // scans oops in a generation.) -class OopsInHeapRegionClosure: public OopsInGenClosure { +class OopsInHeapRegionClosure: public ExtendedOopClosure { protected: HeapRegion* _from; public: @@ -131,7 +131,7 @@ class G1ParCopyHelper : public G1ParClosureSuper { template void do_klass_barrier(T* p, oop new_obj); }; -template +template class G1ParCopyClosure : public G1ParCopyHelper { G1ParScanClosure _scanner; template void do_oop_work(T* p); @@ -166,22 +166,16 @@ public: virtual void do_oop(narrowOop* p) { do_oop_nv(p); } }; -typedef G1ParCopyClosure G1ParScanExtRootClosure; -typedef G1ParCopyClosure G1ParScanMetadataClosure; +typedef G1ParCopyClosure G1ParScanExtRootClosure; +typedef G1ParCopyClosure G1ParScanMetadataClosure; -typedef G1ParCopyClosure G1ParScanAndMarkExtRootClosure; -typedef G1ParCopyClosure G1ParScanAndMarkClosure; -typedef G1ParCopyClosure G1ParScanAndMarkMetadataClosure; - -// The following closure types are no longer used but are retained -// for historical reasons: -// typedef G1ParCopyClosure G1ParScanHeapRSClosure; -// typedef G1ParCopyClosure G1ParScanAndMarkHeapRSClosure; +typedef G1ParCopyClosure G1ParScanAndMarkExtRootClosure; +typedef G1ParCopyClosure G1ParScanAndMarkMetadataClosure; // The following closure type is defined in g1_specialized_oop_closures.hpp: // -// typedef G1ParCopyClosure G1ParScanHeapEvacClosure; +// typedef G1ParCopyClosure G1ParScanHeapEvacClosure; // We use a separate closure to handle references during evacuation // failure processing. @@ -189,7 +183,7 @@ typedef G1ParCopyClosure G1ParScanAndMarkMetadataCl // (since that closure no longer assumes that the references it // handles point into the collection set). -typedef G1ParCopyClosure G1ParScanHeapEvacFailureClosure; +typedef G1ParCopyClosure G1ParScanHeapEvacFailureClosure; class FilterIntoCSClosure: public ExtendedOopClosure { G1CollectedHeap* _g1; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp index e26d2a6951d..ab1bd83eab4 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp @@ -177,7 +177,7 @@ inline void G1UpdateRSOrPushRefOopClosure::do_oop_nv(T* p) { // The _record_refs_into_cset flag is true during the RSet // updating part of an evacuation pause. It is false at all // other times: - // * rebuilding the rembered sets after a full GC + // * rebuilding the remembered sets after a full GC // * during concurrent refinement. // * updating the remembered sets of regions in the collection // set in the event of an evacuation failure (when deferred diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp index a11be17ef53..44437fcdb7a 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp @@ -195,7 +195,7 @@ public: HeapRegionRemSetIterator iter(hrrs); size_t card_index; - // We claim cards in block so as to recude the contention. The block size is determined by + // We claim cards in block so as to reduce the contention. The block size is determined by // the G1RSetScanBlockSize parameter. size_t jump_to_card = hrrs->iter_claimed_next(_block_size); for (size_t current_card = 0; iter.has_next(card_index); current_card++) { @@ -587,7 +587,7 @@ bool G1RemSet::refine_card(jbyte* card_ptr, int worker_i, // While we are processing RSet buffers during the collection, we // actually don't want to scan any cards on the collection set, - // since we don't want to update remebered sets with entries that + // since we don't want to update remembered sets with entries that // point into the collection set, given that live objects from the // collection set are about to move and such entries will be stale // very soon. This change also deals with a reliability issue which diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp index c7d8049fea0..f82fda912c9 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp @@ -71,6 +71,9 @@ diagnostic(bool, G1TraceConcRefinement, false, \ "Trace G1 concurrent refinement") \ \ + experimental(bool, G1TraceStringSymbolTableScrubbing, false, \ + "Trace information string and symbol table scrubbing.") \ + \ product(double, G1ConcMarkStepDurationMillis, 10.0, \ "Target duration of individual concurrent marking steps " \ "in milliseconds.") \ diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp index e16561ccce3..e10a658a543 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp @@ -33,18 +33,17 @@ // Forward declarations. enum G1Barrier { G1BarrierNone, - G1BarrierRS, G1BarrierEvac, G1BarrierKlass }; -template +template class G1ParCopyClosure; class G1ParScanClosure; class G1ParPushHeapRSClosure; -typedef G1ParCopyClosure G1ParScanHeapEvacClosure; +typedef G1ParCopyClosure G1ParScanHeapEvacClosure; class FilterIntoCSClosure; class FilterOutOfRegionClosure; diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp index 47a7a7a088f..587ad1e1812 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp @@ -1027,7 +1027,7 @@ void HeapRegion::verify(VerifyOption vo, } } - // Loook up end - 1 + // Look up end - 1 HeapWord* addr_4 = the_end - 1; HeapWord* b_start_4 = _offsets.block_start_const(addr_4); if (b_start_4 != p) { @@ -1111,7 +1111,7 @@ void G1OffsetTableContigSpace::set_saved_mark() { // will be false, and it will pick up top() as the high water mark // of region. If it does so after _gc_time_stamp = ..., then it // will pick up the right saved_mark_word() as the high water mark - // of the region. Either way, the behaviour will be correct. + // of the region. Either way, the behavior will be correct. ContiguousSpace::set_saved_mark(); OrderAccess::storestore(); _gc_time_stamp = curr_gc_time_stamp; diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp index f58c4f94711..4f14926f34f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp @@ -97,7 +97,7 @@ class HeapRegionSeq: public CHeapObj { HeapWord* heap_end() const {return _regions.end_address_mapped(); } public: - // Empty contructor, we'll initialize it with the initialize() method. + // Empty constructor, we'll initialize it with the initialize() method. HeapRegionSeq() : _regions(), _committed_length(0), _next_search_index(0), _allocated_length(0) { } void initialize(HeapWord* bottom, HeapWord* end); diff --git a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp index aa8718e9952..c8aeb086766 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp @@ -71,7 +71,7 @@ void PtrQueue::locking_enqueue_completed_buffer(void** buf) { assert(_lock->owned_by_self(), "Required."); // We have to unlock _lock (which may be Shared_DirtyCardQ_lock) before - // we acquire DirtyCardQ_CBL_mon inside enqeue_complete_buffer as they + // we acquire DirtyCardQ_CBL_mon inside enqueue_complete_buffer as they // have the same rank and we may get the "possible deadlock" message _lock->unlock(); @@ -151,7 +151,7 @@ void PtrQueue::handle_zero_index() { // The current PtrQ may be the shared dirty card queue and // may be being manipulated by more than one worker thread - // during a pause. Since the enqueuing of the completed + // during a pause. Since the enqueueing of the completed // buffer unlocks the Shared_DirtyCardQ_lock more than one // worker thread can 'race' on reading the shared queue attributes // (_buf and _index) and multiple threads can call into this @@ -170,7 +170,7 @@ void PtrQueue::handle_zero_index() { locking_enqueue_completed_buffer(buf); // enqueue completed buffer - // While the current thread was enqueuing the buffer another thread + // While the current thread was enqueueing the buffer another thread // may have a allocated a new buffer and inserted it into this pointer // queue. If that happens then we just return so that the current // thread doesn't overwrite the buffer allocated by the other thread diff --git a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp index ac215841144..ec6581431b3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp @@ -219,58 +219,52 @@ void SATBMarkQueueSet::handle_zero_index_for_thread(JavaThread* t) { } #ifdef ASSERT -void SATBMarkQueueSet::dump_active_values(JavaThread* first, - bool expected_active) { - gclog_or_tty->print_cr("SATB queue active values for Java Threads"); - gclog_or_tty->print_cr(" SATB queue set: active is %s", - (is_active()) ? "TRUE" : "FALSE"); - gclog_or_tty->print_cr(" expected_active is %s", - (expected_active) ? "TRUE" : "FALSE"); - for (JavaThread* t = first; t; t = t->next()) { - bool active = t->satb_mark_queue().is_active(); - gclog_or_tty->print_cr(" thread %s, active is %s", - t->name(), (active) ? "TRUE" : "FALSE"); +void SATBMarkQueueSet::dump_active_states(bool expected_active) { + gclog_or_tty->print_cr("Expected SATB active state: %s", + expected_active ? "ACTIVE" : "INACTIVE"); + gclog_or_tty->print_cr("Actual SATB active states:"); + gclog_or_tty->print_cr(" Queue set: %s", is_active() ? "ACTIVE" : "INACTIVE"); + for (JavaThread* t = Threads::first(); t; t = t->next()) { + gclog_or_tty->print_cr(" Thread \"%s\" queue: %s", t->name(), + t->satb_mark_queue().is_active() ? "ACTIVE" : "INACTIVE"); + } + gclog_or_tty->print_cr(" Shared queue: %s", + shared_satb_queue()->is_active() ? "ACTIVE" : "INACTIVE"); +} + +void SATBMarkQueueSet::verify_active_states(bool expected_active) { + // Verify queue set state + if (is_active() != expected_active) { + dump_active_states(expected_active); + guarantee(false, "SATB queue set has an unexpected active state"); + } + + // Verify thread queue states + for (JavaThread* t = Threads::first(); t; t = t->next()) { + if (t->satb_mark_queue().is_active() != expected_active) { + dump_active_states(expected_active); + guarantee(false, "Thread SATB queue has an unexpected active state"); + } + } + + // Verify shared queue state + if (shared_satb_queue()->is_active() != expected_active) { + dump_active_states(expected_active); + guarantee(false, "Shared SATB queue has an unexpected active state"); } } #endif // ASSERT -void SATBMarkQueueSet::set_active_all_threads(bool b, - bool expected_active) { +void SATBMarkQueueSet::set_active_all_threads(bool active, bool expected_active) { assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint."); - JavaThread* first = Threads::first(); - #ifdef ASSERT - if (_all_active != expected_active) { - dump_active_values(first, expected_active); - - // I leave this here as a guarantee, instead of an assert, so - // that it will still be compiled in if we choose to uncomment - // the #ifdef ASSERT in a product build. The whole block is - // within an #ifdef ASSERT so the guarantee will not be compiled - // in a product build anyway. - guarantee(false, - "SATB queue set has an unexpected active value"); - } + verify_active_states(expected_active); #endif // ASSERT - _all_active = b; - - for (JavaThread* t = first; t; t = t->next()) { -#ifdef ASSERT - bool active = t->satb_mark_queue().is_active(); - if (active != expected_active) { - dump_active_values(first, expected_active); - - // I leave this here as a guarantee, instead of an assert, so - // that it will still be compiled in if we choose to uncomment - // the #ifdef ASSERT in a product build. The whole block is - // within an #ifdef ASSERT so the guarantee will not be compiled - // in a product build anyway. - guarantee(false, - "thread has an unexpected active value in its SATB queue"); - } -#endif // ASSERT - t->satb_mark_queue().set_active(b); + _all_active = active; + for (JavaThread* t = Threads::first(); t; t = t->next()) { + t->satb_mark_queue().set_active(active); } + shared_satb_queue()->set_active(active); } void SATBMarkQueueSet::filter_thread_buffers() { diff --git a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp index adce5ff687e..8cad181c804 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp @@ -87,7 +87,8 @@ class SATBMarkQueueSet: public PtrQueueSet { bool apply_closure_to_completed_buffer_work(bool par, int worker); #ifdef ASSERT - void dump_active_values(JavaThread* first, bool expected_active); + void dump_active_states(bool expected_active); + void verify_active_states(bool expected_active); #endif // ASSERT public: @@ -99,11 +100,11 @@ public: static void handle_zero_index_for_thread(JavaThread* t); - // Apply "set_active(b)" to all Java threads' SATB queues. It should be + // Apply "set_active(active)" to all SATB queues in the set. It should be // called only with the world stopped. The method will assert that the // SATB queues of all threads it visits, as well as the SATB queue // set itself, has an active value same as expected_active. - void set_active_all_threads(bool b, bool expected_active); + void set_active_all_threads(bool active, bool expected_active); // Filter all the currently-active SATB buffers. void filter_thread_buffers(); diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp index 86d5db16298..ccd51c92ec1 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp @@ -144,7 +144,7 @@ public: // Attempts to ensure that the given card_index in the given region is in // the sparse table. If successful (because the card was already - // present, or because it was successfullly added) returns "true". + // present, or because it was successfully added) returns "true". // Otherwise, returns "false" to indicate that the addition would // overflow the entry for the region. The caller must transfer these // entries to a larger-capacity representation. @@ -201,8 +201,7 @@ public: bool has_next(size_t& card_index); }; -// Concurrent accesss to a SparsePRT must be serialized by some external -// mutex. +// Concurrent access to a SparsePRT must be serialized by some external mutex. class SparsePRTIter; class SparsePRTCleanupTask; @@ -248,7 +247,7 @@ public: // Attempts to ensure that the given card_index in the given region is in // the sparse table. If successful (because the card was already - // present, or because it was successfullly added) returns "true". + // present, or because it was successfully added) returns "true". // Otherwise, returns "false" to indicate that the addition would // overflow the entry for the region. The caller must transfer these // entries to a larger-capacity representation. diff --git a/hotspot/src/share/vm/gc_implementation/parNew/asParNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/asParNewGeneration.cpp index 2925b9d439d..6d0e1a2243c 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/asParNewGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/asParNewGeneration.cpp @@ -154,7 +154,7 @@ bool ASParNewGeneration::resize_generation(size_t eden_size, // There used to be this guarantee there. // guarantee ((eden_size + 2*survivor_size) <= _max_gen_size, "incorrect input arguments"); // Code below forces this requirement. In addition the desired eden - // size and disired survivor sizes are desired goals and may + // size and desired survivor sizes are desired goals and may // exceed the total generation size. assert(min_gen_size() <= orig_size && orig_size <= max_gen_size(), diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp index dd975440033..64bf6f03458 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp @@ -213,7 +213,7 @@ process_chunk_boundaries(Space* sp, && sp->block_is_obj(first_block) // first block is an object && !(oop(first_block)->is_objArray() // first block is not an array (arrays are precisely dirtied) || oop(first_block)->is_typeArray())) { - // Find our least non-clean card, so that a left neighbour + // Find our least non-clean card, so that a left neighbor // does not scan an object straddling the mutual boundary // too far to the right, and attempt to scan a portion of // that object twice. @@ -247,14 +247,14 @@ process_chunk_boundaries(Space* sp, } NOISY(else { tty->print_cr(" LNC: Found no dirty card in current chunk; leaving LNC entry NULL"); // In the future, we could have this thread look for a non-NULL value to copy from its - // right neighbour (up to the end of the first object). + // right neighbor (up to the end of the first object). if (last_card_of_cur_chunk < last_card_of_first_obj) { tty->print_cr(" LNC: BEWARE!!! first obj straddles past right end of chunk:\n" " might be efficient to get value from right neighbour?"); } }) } else { - // In this case we can help our neighbour by just asking them + // In this case we can help our neighbor by just asking them // to stop at our first card (even though it may not be dirty). NOISY(tty->print_cr(" LNC: first block is not a non-array object; setting LNC to first card of current chunk");) assert(lowest_non_clean[cur_chunk_index] == NULL, "Write once : value should be stable hereafter"); diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp index 5ecb60c323a..d97cc0dceb0 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp @@ -612,14 +612,13 @@ void ParNewGenTask::work(uint worker_id) { KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(), gch->rem_set()->klass_rem_set()); - int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_CodeCache; + int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_ScavengeCodeCache; par_scan_state.start_strong_roots(); gch->gen_process_strong_roots(_gen->level(), true, // Process younger gens, if any, // as strong roots. false, // no scope; this is parallel code - true, // is scavenging SharedHeap::ScanningOption(so), &par_scan_state.to_space_root_closure(), true, // walk *all* scavengable nmethods @@ -1071,7 +1070,7 @@ void ParNewGeneration::collect(bool full, size_policy->avg_survived()->sample(from()->used()); } - // We need to use a monotonically non-deccreasing time in ms + // We need to use a monotonically non-decreasing time in ms // or we will see time-warp warnings and os::javaTimeMillis() // does not guarantee monotonicity. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; @@ -1403,7 +1402,7 @@ oop ParNewGeneration::copy_to_survivor_space_with_undo( #ifndef PRODUCT // It's OK to call this multi-threaded; the worst thing // that can happen is that we'll get a bunch of closely -// spaced simulated oveflows, but that's OK, in fact +// spaced simulated overflows, but that's OK, in fact // probably good as it would exercise the overflow code // under contention. bool ParNewGeneration::should_simulate_overflow() { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp index ee9ce8b89d4..c3e1231353b 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp @@ -118,8 +118,8 @@ size_t AdjoiningGenerations::reserved_byte_size() { // Make checks on the current sizes of the generations and -// the contraints on the sizes of the generations. Push -// up the boundary within the contraints. A partial +// the constraints on the sizes of the generations. Push +// up the boundary within the constraints. A partial // push can occur. void AdjoiningGenerations::request_old_gen_expansion(size_t expand_in_bytes) { assert(UseAdaptiveSizePolicy && UseAdaptiveGCBoundary, "runtime check"); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp index e80877e2606..238802070d5 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp @@ -69,7 +69,7 @@ class AdjoiningGenerations : public CHeapObj { // the available space and attempt to move the boundary if more space // is needed. The growth is not guaranteed to occur. void adjust_boundary_for_old_gen_needs(size_t desired_change_in_bytes); - // Similary for a growth of the young generation. + // Similarly for a growth of the young generation. void adjust_boundary_for_young_gen_needs(size_t eden_size, size_t survivor_size); // Return the total byte size of the reserved space diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp index 82ea39b525a..b49ccb05c1e 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp @@ -65,7 +65,7 @@ class CheckForUnmarkedOops : public OopClosure { } }; -// Checks all objects for the existance of some type of mark, +// Checks all objects for the existence of some type of mark, // precise or imprecise, dirty or newgen. class CheckForUnmarkedObjects : public ObjectClosure { private: @@ -84,7 +84,7 @@ class CheckForUnmarkedObjects : public ObjectClosure { } // Card marks are not precise. The current system can leave us with - // a mismash of precise marks and beginning of object marks. This means + // a mismatch of precise marks and beginning of object marks. This means // we test for missing precise marks first. If any are found, we don't // fail unless the object head is also unmarked. virtual void do_object(oop obj) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp index 08c75e14677..331c4e70f99 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp @@ -202,12 +202,12 @@ void GCTaskQueue::enqueue(GCTaskQueue* list) { list->print("list:"); } if (list->is_empty()) { - // Enqueuing the empty list: nothing to do. + // Enqueueing the empty list: nothing to do. return; } uint list_length = list->length(); if (is_empty()) { - // Enqueuing to empty list: just acquire elements. + // Enqueueing to empty list: just acquire elements. set_insert_end(list->insert_end()); set_remove_end(list->remove_end()); set_length(list_length); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp index 76b0ec92dd8..01e3c9363de 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp @@ -303,7 +303,7 @@ protected: // load balancing (i.e., over partitioning). The last task to be // executed by a GC thread in a job is a work stealing task. A // GC thread that gets a work stealing task continues to execute -// that task until the job is done. In the static number of GC theads +// that task until the job is done. In the static number of GC threads // case, tasks are added to a queue (FIFO). The work stealing tasks are // the last to be added. Once the tasks are added, the GC threads grab // a task and go. A single thread can do all the non-work stealing tasks diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp index 8dfcf1889e7..753c3e3d4f0 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp @@ -139,11 +139,6 @@ bool ObjectStartArray::object_starts_in_range(HeapWord* start_addr, return true; } } - // No object starts in this slice; verify this using - // more traditional methods: Note that no object can - // start before the start_addr. - assert(end_addr == start_addr || - object_start(end_addr - 1) <= start_addr, - "Oops an object does start in this slice?"); + return false; } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp index 6a46f9fd13f..da0e569e869 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp @@ -488,6 +488,10 @@ size_t ParallelScavengeHeap::tlab_capacity(Thread* thr) const { return young_gen()->eden_space()->tlab_capacity(thr); } +size_t ParallelScavengeHeap::tlab_used(Thread* thr) const { + return young_gen()->eden_space()->tlab_used(thr); +} + size_t ParallelScavengeHeap::unsafe_max_tlab_alloc(Thread* thr) const { return young_gen()->eden_space()->unsafe_max_tlab_alloc(thr); } @@ -673,7 +677,7 @@ ParallelScavengeHeap* ParallelScavengeHeap::heap() { // Before delegating the resize to the young generation, // the reserved space for the young and old generations -// may be changed to accomodate the desired resize. +// may be changed to accommodate the desired resize. void ParallelScavengeHeap::resize_young_gen(size_t eden_size, size_t survivor_size) { if (UseAdaptiveGCBoundary) { @@ -690,7 +694,7 @@ void ParallelScavengeHeap::resize_young_gen(size_t eden_size, // Before delegating the resize to the old generation, // the reserved space for the young and old generations -// may be changed to accomodate the desired resize. +// may be changed to accommodate the desired resize. void ParallelScavengeHeap::resize_old_gen(size_t desired_free_space) { if (UseAdaptiveGCBoundary) { if (size_policy()->bytes_absorbed_from_eden() != 0) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp index d4c2a1e72e7..5173ff94ece 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp @@ -187,6 +187,7 @@ class ParallelScavengeHeap : public CollectedHeap { bool supports_tlab_allocation() const { return true; } size_t tlab_capacity(Thread* thr) const; + size_t tlab_used(Thread* thr) const; size_t unsafe_max_tlab_alloc(Thread* thr) const; // Can a compiler initialize a new object without store barriers? diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp index f530945e350..40e7fb9d3db 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp @@ -45,7 +45,7 @@ // the do_it() method of a ThreadRootsMarkingTask is executed, it // starts marking from the thread's roots. // -// The enqueuing of the MarkFromRootsTask and ThreadRootsMarkingTask +// The enqueueing of the MarkFromRootsTask and ThreadRootsMarkingTask // do little more than create the task and put it on a queue. The // queue is a GCTaskQueue and threads steal tasks from this GCTaskQueue. // diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp index a2f2fa722bf..5b3dd89e7b3 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" #include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" #include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp" #include "gc_implementation/parallelScavenge/psScavenge.hpp" @@ -76,6 +77,38 @@ PSAdaptiveSizePolicy::PSAdaptiveSizePolicy(size_t init_eden_size, _old_gen_policy_is_ready = false; } +size_t PSAdaptiveSizePolicy::calculate_free_based_on_live(size_t live, uintx ratio_as_percentage) { + // We want to calculate how much free memory there can be based on the + // amount of live data currently in the old gen. Using the formula: + // ratio * (free + live) = free + // Some equation solving later we get: + // free = (live * ratio) / (1 - ratio) + + const double ratio = ratio_as_percentage / 100.0; + const double ratio_inverse = 1.0 - ratio; + const double tmp = live * ratio; + size_t free = (size_t)(tmp / ratio_inverse); + + return free; +} + +size_t PSAdaptiveSizePolicy::calculated_old_free_size_in_bytes() const { + size_t free_size = (size_t)(_promo_size + avg_promoted()->padded_average()); + size_t live = ParallelScavengeHeap::heap()->old_gen()->used_in_bytes(); + + if (MinHeapFreeRatio != 0) { + size_t min_free = calculate_free_based_on_live(live, MinHeapFreeRatio); + free_size = MAX2(free_size, min_free); + } + + if (MaxHeapFreeRatio != 100) { + size_t max_free = calculate_free_based_on_live(live, MaxHeapFreeRatio); + free_size = MIN2(max_free, free_size); + } + + return free_size; +} + void PSAdaptiveSizePolicy::major_collection_begin() { // Update the interval time _major_timer.stop(); @@ -482,7 +515,7 @@ void PSAdaptiveSizePolicy::compute_old_gen_free_space( // adjust down the total heap size. Adjust down the larger of the // generations. - // Add some checks for a threshhold for a change. For example, + // Add some checks for a threshold for a change. For example, // a change less than the necessary alignment is probably not worth // attempting. @@ -1161,7 +1194,7 @@ uint PSAdaptiveSizePolicy::compute_survivor_space_size_and_threshold( // We use the tenuring threshold to equalize the cost of major // and minor collections. // ThresholdTolerance is used to indicate how sensitive the - // tenuring threshold is to differences in cost betweent the + // tenuring threshold is to differences in cost between the // collection types. // Get the times of interest. This involves a little work, so @@ -1292,3 +1325,18 @@ bool PSAdaptiveSizePolicy::print_adaptive_size_policy_on(outputStream* st) st, PSScavenge::tenuring_threshold()); } + +#ifndef PRODUCT + +void TestOldFreeSpaceCalculation_test() { + assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 20) == 25, "Calculation of free memory failed"); + assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 50) == 100, "Calculation of free memory failed"); + assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 60) == 150, "Calculation of free memory failed"); + assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 75) == 300, "Calculation of free memory failed"); + assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 20) == 100, "Calculation of free memory failed"); + assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 50) == 400, "Calculation of free memory failed"); + assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 60) == 600, "Calculation of free memory failed"); + assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 75) == 1200, "Calculation of free memory failed"); +} + +#endif /* !PRODUCT */ diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp index 3389911876f..24f0ed473b9 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp @@ -37,7 +37,7 @@ // // It also computes an optimal tenuring threshold between the young // and old generations, so as to equalize the cost of collections -// of those generations, as well as optimial survivor space sizes +// of those generations, as well as optimal survivor space sizes // for the young generation. // // While this class is specifically intended for a generational system @@ -113,7 +113,7 @@ class PSAdaptiveSizePolicy : public AdaptiveSizePolicy { // Changing the generation sizing depends on the data that is // gathered about the effects of changes on the pause times and // throughput. These variable count the number of data points - // gathered. The policy may use these counters as a threshhold + // gathered. The policy may use these counters as a threshold // for reliable data. julong _young_gen_change_for_major_pause_count; @@ -240,7 +240,6 @@ class PSAdaptiveSizePolicy : public AdaptiveSizePolicy { void major_collection_begin(); void major_collection_end(size_t amount_live, GCCause::Cause gc_cause); - // void tenured_allocation(size_t size) { _avg_pretenured->sample(size); } @@ -248,9 +247,9 @@ class PSAdaptiveSizePolicy : public AdaptiveSizePolicy { // Accessors // NEEDS_CLEANUP should use sizes.hpp - size_t calculated_old_free_size_in_bytes() const { - return (size_t)(_promo_size + avg_promoted()->padded_average()); - } + static size_t calculate_free_based_on_live(size_t live, uintx ratio_as_percentage); + + size_t calculated_old_free_size_in_bytes() const; size_t average_old_live_in_bytes() const { return (size_t) avg_old_live()->average(); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp index 1db22443178..4c8bd4a7fd7 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp @@ -195,7 +195,7 @@ class PSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters { // Update all the counters that can be updated from the size policy. // This should be called after all policy changes have been made - // and reflected internall in the size policy. + // and reflected internally in the size policy. void update_counters_from_policy(); // Update counters that can be updated from fields internal to the diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp index 65f9ece3b51..39d88816718 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp @@ -661,7 +661,7 @@ void PSMarkSweep::mark_sweep_phase4() { } jlong PSMarkSweep::millis_since_last_gc() { - // We need a monotonically non-deccreasing time in ms but + // We need a monotonically non-decreasing time in ms but // os::javaTimeMillis() does not guarantee monotonicity. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; jlong ret_val = now - _time_of_last_gc; @@ -674,7 +674,7 @@ jlong PSMarkSweep::millis_since_last_gc() { } void PSMarkSweep::reset_millis_since_last_gc() { - // We need a monotonically non-deccreasing time in ms but + // We need a monotonically non-decreasing time in ms but // os::javaTimeMillis() does not guarantee monotonicity. _time_of_last_gc = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp index 5e970eed4c4..8ffdb0fbb37 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp @@ -280,7 +280,7 @@ bool PSOldGen::expand_by(size_t bytes) { "Should be true before post_resize()"); MemRegion mangle_region(object_space()->end(), virtual_space_high); // Note that the object space has not yet been updated to - // coincede with the new underlying virtual space. + // coincide with the new underlying virtual space. SpaceMangler::mangle_region(mangle_region); } post_resize(); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp index 90fa0d5632d..0dbd4732f72 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp @@ -187,7 +187,7 @@ class PSOldGen : public CHeapObj { void space_invariants() PRODUCT_RETURN; - // Performace Counter support + // Performance Counter support void update_counters(); // Printing support diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp index 8b4f0bd46f1..f2e83ca21df 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @@ -2176,7 +2176,7 @@ bool PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { heap->resize_all_tlabs(); - // Resize the metaspace capactiy after a collection + // Resize the metaspace capacity after a collection MetaspaceGC::compute_new_size(); if (TraceGen1Time) accumulated_time()->stop(); @@ -3285,7 +3285,7 @@ PSParallelCompact::move_and_update(ParCompactionManager* cm, SpaceId space_id) { } jlong PSParallelCompact::millis_since_last_gc() { - // We need a monotonically non-deccreasing time in ms but + // We need a monotonically non-decreasing time in ms but // os::javaTimeMillis() does not guarantee monotonicity. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; jlong ret_val = now - _time_of_last_gc; @@ -3298,7 +3298,7 @@ jlong PSParallelCompact::millis_since_last_gc() { } void PSParallelCompact::reset_millis_since_last_gc() { - // We need a monotonically non-deccreasing time in ms but + // We need a monotonically non-decreasing time in ms but // os::javaTimeMillis() does not guarantee monotonicity. _time_of_last_gc = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp index 0f1b77b92f2..9d37b133b05 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp @@ -877,7 +877,7 @@ inline void ParMarkBitMapClosure::decrement_words_remaining(size_t words) { // The summary phase calculates the total live data to the left of each region // XXX. Based on that total and the bottom of the space, it can calculate the // starting location of the live data in XXX. The summary phase calculates for -// each region XXX quantites such as +// each region XXX quantities such as // // - the amount of live data at the beginning of a region from an object // entering the region. diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp index e0427ef18e9..e87529c734d 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp @@ -78,7 +78,7 @@ class PSPromotionLAB : public CHeapObj { // Returns a subregion containing all objects in this space. MemRegion used_region() { return MemRegion(bottom(), top()); } - // Boolean querries. + // Boolean queries. bool is_empty() const { return used() == 0; } bool not_empty() const { return used() > 0; } bool contains(const void* p) const { return _bottom <= p && p < _end; } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp index 8f47d582fd6..a708d8ebb72 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp @@ -529,8 +529,19 @@ bool PSScavenge::invoke_no_policy() { counters->update_survivor_overflowed(_survivor_overflow); } + size_t max_young_size = young_gen->max_size(); + + // Deciding a free ratio in the young generation is tricky, so if + // MinHeapFreeRatio or MaxHeapFreeRatio are in use (implicating + // that the old generation size may have been limited because of them) we + // should then limit our young generation size using NewRatio to have it + // follow the old generation size. + if (MinHeapFreeRatio != 0 || MaxHeapFreeRatio != 100) { + max_young_size = MIN2(old_gen->capacity_in_bytes() / NewRatio, young_gen->max_size()); + } + size_t survivor_limit = - size_policy->max_survivor_size(young_gen->max_size()); + size_policy->max_survivor_size(max_young_size); _tenuring_threshold = size_policy->compute_survivor_space_size_and_threshold( _survivor_overflow, @@ -553,12 +564,11 @@ bool PSScavenge::invoke_no_policy() { // Do call at minor collections? // Don't check if the size_policy is ready at this // level. Let the size_policy check that internally. - if (UseAdaptiveSizePolicy && - UseAdaptiveGenerationSizePolicyAtMinorCollection && + if (UseAdaptiveGenerationSizePolicyAtMinorCollection && ((gc_cause != GCCause::_java_lang_system_gc) || UseAdaptiveSizePolicyWithSystemGC)) { - // Calculate optimial free space amounts + // Calculate optimal free space amounts assert(young_gen->max_size() > young_gen->from_space()->capacity_in_bytes() + young_gen->to_space()->capacity_in_bytes(), @@ -568,7 +578,7 @@ bool PSScavenge::invoke_no_policy() { size_t eden_live = young_gen->eden_space()->used_in_bytes(); size_t cur_eden = young_gen->eden_space()->capacity_in_bytes(); size_t max_old_gen_size = old_gen->max_gen_size(); - size_t max_eden_size = young_gen->max_size() - + size_t max_eden_size = max_young_size - young_gen->from_space()->capacity_in_bytes() - young_gen->to_space()->capacity_in_bytes(); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp index 02e36ac291d..a8530f0a6a7 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp @@ -35,7 +35,7 @@ class PSVirtualSpace : public CHeapObj { friend class VMStructs; protected: - // The space is committed/uncommited in chunks of size _alignment. The + // The space is committed/uncommitted in chunks of size _alignment. The // ReservedSpace passed to initialize() must be aligned to this value. const size_t _alignment; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp index 74ac4477c96..1ea30b4027f 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp @@ -136,7 +136,7 @@ void PSYoungGen::initialize_work() { // generation - the less space committed, the smaller the survivor // space, possibly as small as an alignment. However, we are interested // in the case where the young generation is 100% committed, as this - // is the point where eden reachs its maximum size. At this point, + // is the point where eden reaches its maximum size. At this point, // the size of a survivor space is max_survivor_size. max_eden_size = size - 2 * max_survivor_size; } @@ -288,7 +288,7 @@ bool PSYoungGen::resize_generation(size_t eden_size, size_t survivor_size) { // There used to be this guarantee there. // guarantee ((eden_size + 2*survivor_size) <= _max_gen_size, "incorrect input arguments"); // Code below forces this requirement. In addition the desired eden - // size and disired survivor sizes are desired goals and may + // size and desired survivor sizes are desired goals and may // exceed the total generation size. assert(min_gen_size() <= orig_size && orig_size <= max_size(), "just checking"); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp index 6bc8ef73753..e3da6bdf2b8 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp @@ -127,7 +127,7 @@ class PSYoungGen : public CHeapObj { void adjust_pointers(); void compact(); - // Called during/after gc + // Called during/after GC void swap_spaces(); // Resize generation using suggested free space size and survivor size @@ -146,14 +146,14 @@ class PSYoungGen : public CHeapObj { size_t free_in_words() const; // The max this generation can grow to - size_t max_size() const { return _reserved.byte_size(); } + size_t max_size() const { return _reserved.byte_size(); } // The max this generation can grow to if the boundary between // the generations are allowed to move. size_t gen_size_limit() const { return _max_gen_size; } bool is_maximal_no_gc() const { - return true; // never expands except at a GC + return true; // Never expands except at a GC } // Allocation diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp index 3e7c716d481..ada9cbb3490 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp @@ -121,7 +121,7 @@ int AdaptiveSizePolicy::calc_default_active_workers(uintx total_workers, // Choose a number of GC threads based on the current size // of the heap. This may be complicated because the size of - // the heap depends on factors such as the thoughput goal. + // the heap depends on factors such as the throughput goal. // Still a large heap should be collected by more GC threads. active_workers_by_heap_size = MAX2((size_t) 2U, Universe::heap()->capacity() / HeapSizePerGCThread); @@ -445,7 +445,7 @@ void AdaptiveSizePolicy::check_gc_overhead_limit( // into account (i.e., don't trigger if the amount of free // space has suddenly jumped up). If the current is much // higher than the average, use the average since it represents - // the longer term behavor. + // the longer term behavior. const size_t live_in_eden = MIN2(eden_live, (size_t) avg_eden_live()->average()); const size_t free_in_eden = max_eden_size > live_in_eden ? diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp index 2fca75fce54..f2f4b53c7f5 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp @@ -74,7 +74,7 @@ class AdaptiveSizePolicy : public CHeapObj { }; // Goal for the fraction of the total time during which application - // threads run. + // threads run const double _throughput_goal; // Last calculated sizes, in bytes, and aligned @@ -83,21 +83,21 @@ class AdaptiveSizePolicy : public CHeapObj { size_t _survivor_size; // calculated survivor size in bytes - // This is a hint for the heap: we've detected that gc times + // This is a hint for the heap: we've detected that GC times // are taking longer than GCTimeLimit allows. bool _gc_overhead_limit_exceeded; // Use for diagnostics only. If UseGCOverheadLimit is false, // this variable is still set. bool _print_gc_overhead_limit_would_be_exceeded; // Count of consecutive GC that have exceeded the - // GC time limit criterion. + // GC time limit criterion uint _gc_overhead_limit_count; // This flag signals that GCTimeLimit is being exceeded - // but may not have done so for the required number of consequetive - // collections. + // but may not have done so for the required number of consecutive + // collections // Minor collection timers used to determine both - // pause and interval times for collections. + // pause and interval times for collections static elapsedTimer _minor_timer; // Major collection timers, used to determine both @@ -120,7 +120,7 @@ class AdaptiveSizePolicy : public CHeapObj { // Statistics for survivor space calculation for young generation AdaptivePaddedAverage* _avg_survived; - // Objects that have been directly allocated in the old generation. + // Objects that have been directly allocated in the old generation AdaptivePaddedNoZeroDevAverage* _avg_pretenured; // Variable for estimating the major and minor pause times. @@ -142,33 +142,33 @@ class AdaptiveSizePolicy : public CHeapObj { // for making ergonomic decisions. double _latest_minor_mutator_interval_seconds; - // Allowed difference between major and minor gc times, used - // for computing tenuring_threshold. + // Allowed difference between major and minor GC times, used + // for computing tenuring_threshold const double _threshold_tolerance_percent; - const double _gc_pause_goal_sec; // goal for maximum gc pause + const double _gc_pause_goal_sec; // Goal for maximum GC pause // Flag indicating that the adaptive policy is ready to use bool _young_gen_policy_is_ready; - // decrease/increase the young generation for minor pause time + // Decrease/increase the young generation for minor pause time int _change_young_gen_for_min_pauses; - // decrease/increase the old generation for major pause time + // Decrease/increase the old generation for major pause time int _change_old_gen_for_maj_pauses; - // change old geneneration for throughput + // change old generation for throughput int _change_old_gen_for_throughput; // change young generation for throughput int _change_young_gen_for_throughput; // Flag indicating that the policy would - // increase the tenuring threshold because of the total major gc cost - // is greater than the total minor gc cost + // increase the tenuring threshold because of the total major GC cost + // is greater than the total minor GC cost bool _increment_tenuring_threshold_for_gc_cost; - // decrease the tenuring threshold because of the the total minor gc - // cost is greater than the total major gc cost + // decrease the tenuring threshold because of the the total minor GC + // cost is greater than the total major GC cost bool _decrement_tenuring_threshold_for_gc_cost; // decrease due to survivor size limit bool _decrement_tenuring_threshold_for_survivor_limit; @@ -182,7 +182,7 @@ class AdaptiveSizePolicy : public CHeapObj { // Changing the generation sizing depends on the data that is // gathered about the effects of changes on the pause times and // throughput. These variable count the number of data points - // gathered. The policy may use these counters as a threshhold + // gathered. The policy may use these counters as a threshold // for reliable data. julong _young_gen_change_for_minor_throughput; julong _old_gen_change_for_major_throughput; @@ -225,7 +225,7 @@ class AdaptiveSizePolicy : public CHeapObj { // larger than 1.0 if just the sum of the minor cost the // the major cost is used. Worse than that is the // fact that the minor cost and the major cost each - // tend toward 1.0 in the extreme of high gc costs. + // tend toward 1.0 in the extreme of high GC costs. // Limit the value of gc_cost to 1.0 so that the mutator // cost stays non-negative. virtual double gc_cost() const { @@ -238,23 +238,23 @@ class AdaptiveSizePolicy : public CHeapObj { virtual double time_since_major_gc() const; // Average interval between major collections to be used - // in calculating the decaying major gc cost. An overestimate + // in calculating the decaying major GC cost. An overestimate // of this time would be a conservative estimate because // this time is used to decide if the major GC cost // should be decayed (i.e., if the time since the last - // major gc is long compared to the time returned here, + // major GC is long compared to the time returned here, // then the major GC cost will be decayed). See the // implementations for the specifics. virtual double major_gc_interval_average_for_decay() const { return _avg_major_interval->average(); } - // Return the cost of the GC where the major gc cost + // Return the cost of the GC where the major GC cost // has been decayed based on the time since the last // major collection. double decaying_gc_cost() const; - // Decay the major gc cost. Use this only for decisions on + // Decay the major GC cost. Use this only for decisions on // whether to adjust, not to determine by how much to adjust. // This approximation is crude and may not be good enough for the // latter. diff --git a/hotspot/src/share/vm/gc_implementation/shared/allocationStats.hpp b/hotspot/src/share/vm/gc_implementation/shared/allocationStats.hpp index 0fb6d7fa23e..87ced750d35 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/allocationStats.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/allocationStats.hpp @@ -49,11 +49,11 @@ class AllocationStats VALUE_OBJ_CLASS_SPEC { // estimates. AdaptivePaddedAverage _demand_rate_estimate; - ssize_t _desired; // Demand stimate computed as described above + ssize_t _desired; // Demand estimate computed as described above ssize_t _coal_desired; // desired +/- small-percent for tuning coalescing - ssize_t _surplus; // count - (desired +/- small-percent), - // used to tune splitting in best fit + ssize_t _surplus; // count - (desired +/- small-percent), + // used to tune splitting in best fit ssize_t _bfr_surp; // surplus at start of current sweep ssize_t _prev_sweep; // count from end of previous sweep ssize_t _before_sweep; // count from before current sweep diff --git a/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp b/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp index 7b755cb0427..0aba69e2a64 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp @@ -54,7 +54,7 @@ void ConcurrentGCThread::safepoint_desynchronize() { void ConcurrentGCThread::create_and_start() { if (os::create_thread(this, os::cgc_thread)) { // XXX: need to set this to low priority - // unless "agressive mode" set; priority + // unless "aggressive mode" set; priority // should be just less than that of VMThread. os::set_priority(this, NearMaxPriority); if (!_should_terminate && !DisableStartThread) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp index 62492359527..fc1662e8b65 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp @@ -159,7 +159,7 @@ double LinearLeastSquareFit::y(double x) { // that no calculation of the slope has yet been done. Returning true // for a slope equal to 0 reflects the intuitive expectation of the // dependence on the slope. Don't use the complement of these functions -// since that untuitive expectation is not built into the complement. +// since that intuitive expectation is not built into the complement. bool LinearLeastSquareFit::decrement_will_decrease() { return (_slope >= 0.00); } diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp index ad3075c9023..0e32e2a970f 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp @@ -210,7 +210,7 @@ class LinearLeastSquareFit : public CHeapObj { double y(double x); double slope() { return _slope; } // Methods to decide if a change in the dependent variable will - // achive a desired goal. Note that these methods are not + // achieve a desired goal. Note that these methods are not // complementary and both are needed. bool decrement_will_decrease(); bool increment_will_decrease(); diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp index ba7d00d68ba..f27cf5155d0 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp @@ -72,7 +72,7 @@ void MutableNUMASpace::check_mangled_unused_area_complete() { #endif // NOT_PRODUCT // There may be unallocated holes in the middle chunks -// that should be filled with dead objects to ensure parseability. +// that should be filled with dead objects to ensure parsability. void MutableNUMASpace::ensure_parsability() { for (int i = 0; i < lgrp_spaces()->length(); i++) { LGRPSpace *ls = lgrp_spaces()->at(i); @@ -173,6 +173,26 @@ size_t MutableNUMASpace::tlab_capacity(Thread *thr) const { return lgrp_spaces()->at(i)->space()->capacity_in_bytes(); } +size_t MutableNUMASpace::tlab_used(Thread *thr) const { + // Please see the comments for tlab_capacity(). + guarantee(thr != NULL, "No thread"); + int lgrp_id = thr->lgrp_id(); + if (lgrp_id == -1) { + if (lgrp_spaces()->length() > 0) { + return (used_in_bytes()) / lgrp_spaces()->length(); + } else { + assert(false, "There should be at least one locality group"); + return 0; + } + } + int i = lgrp_spaces()->find(&lgrp_id, LGRPSpace::equals); + if (i == -1) { + return 0; + } + return lgrp_spaces()->at(i)->space()->used_in_bytes(); +} + + size_t MutableNUMASpace::unsafe_max_tlab_alloc(Thread *thr) const { // Please see the comments for tlab_capacity(). guarantee(thr != NULL, "No thread"); @@ -880,8 +900,8 @@ void MutableNUMASpace::print_on(outputStream* st) const { } void MutableNUMASpace::verify() { - // This can be called after setting an arbitary value to the space's top, - // so an object can cross the chunk boundary. We ensure the parsablity + // This can be called after setting an arbitrary value to the space's top, + // so an object can cross the chunk boundary. We ensure the parsability // of the space and just walk the objects in linear fashion. ensure_parsability(); MutableSpace::verify(); diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp index c79f2465ac1..fcc68a99029 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp @@ -217,6 +217,7 @@ class MutableNUMASpace : public MutableSpace { using MutableSpace::capacity_in_words; virtual size_t capacity_in_words(Thread* thr) const; virtual size_t tlab_capacity(Thread* thr) const; + virtual size_t tlab_used(Thread* thr) const; virtual size_t unsafe_max_tlab_alloc(Thread* thr) const; // Allocation (return NULL if full) diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp index ea2ddec4f02..09e3f316fca 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp @@ -31,7 +31,7 @@ // A MutableSpace is a subtype of ImmutableSpace that supports the // concept of allocation. This includes the concepts that a space may -// be only partially full, and the querry methods that go with such +// be only partially full, and the query methods that go with such // an assumption. MutableSpace is also responsible for minimizing the // page allocation time by having the memory pretouched (with // AlwaysPretouch) and for optimizing page placement on NUMA systems @@ -111,7 +111,7 @@ class MutableSpace: public ImmutableSpace { virtual void mangle_region(MemRegion mr) PRODUCT_RETURN; - // Boolean querries. + // Boolean queries. bool is_empty() const { return used_in_words() == 0; } bool not_empty() const { return used_in_words() > 0; } bool contains(const void* p) const { return _bottom <= p && p < _end; } @@ -124,6 +124,7 @@ class MutableSpace: public ImmutableSpace { virtual size_t used_in_words() const { return pointer_delta(top(), bottom()); } virtual size_t free_in_words() const { return pointer_delta(end(), top()); } virtual size_t tlab_capacity(Thread* thr) const { return capacity_in_bytes(); } + virtual size_t tlab_used(Thread* thr) const { return used_in_bytes(); } virtual size_t unsafe_max_tlab_alloc(Thread* thr) const { return free_in_bytes(); } // Allocation (return NULL if full) diff --git a/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp b/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp index 87f74484ab8..acea112174f 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp @@ -89,6 +89,10 @@ void ParGCAllocBuffer::flush_stats(PLABStats* stats) { // scavenge; it clears the sensor accumulators. void PLABStats::adjust_desired_plab_sz(uint no_of_gc_workers) { assert(ResizePLAB, "Not set"); + + assert(is_object_aligned(max_size()) && min_size() <= max_size(), + "PLAB clipping computation may be incorrect"); + if (_allocated == 0) { assert(_unused == 0, err_msg("Inconsistency in PLAB stats: " @@ -152,7 +156,7 @@ ParGCAllocBufferWithBOT::ParGCAllocBufferWithBOT(size_t word_sz, // The buffer comes with its own BOT, with a shared (obviously) underlying // BlockOffsetSharedArray. We manipulate this BOT in the normal way -// as we would for any contiguous space. However, on accasion we +// as we would for any contiguous space. However, on occasion we // need to do some buffer surgery at the extremities before we // start using the body of the buffer for allocations. Such surgery // (as explained elsewhere) is to prevent allocation on a card that diff --git a/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp b/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp index 80a4a223cbd..f1c0fbf64fe 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp @@ -92,7 +92,7 @@ public: } // The total (word) size of the buffer, including both allocated and - // unallocted space. + // unallocated space. size_t word_sz() { return _word_sz; } // Should only be done if we are about to reset with a new buffer of the @@ -181,16 +181,7 @@ class PLABStats VALUE_OBJ_CLASS_SPEC { _used(0), _desired_plab_sz(desired_plab_sz_), _filter(wt) - { - size_t min_sz = min_size(); - size_t max_sz = max_size(); - size_t aligned_min_sz = align_object_size(min_sz); - size_t aligned_max_sz = align_object_size(max_sz); - assert(min_sz <= aligned_min_sz && max_sz >= aligned_max_sz && - min_sz <= max_sz, - "PLAB clipping computation in adjust_desired_plab_sz()" - " may be incorrect"); - } + { } static const size_t min_size() { return ParGCAllocBuffer::min_size(); diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp b/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp index 8d500ae50bf..43bb04911a6 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp @@ -75,7 +75,7 @@ class SpaceMangler: public CHeapObj { // High water mark for allocations. Typically, the space above // this point have been mangle previously and don't need to be - // touched again. Space belows this point has been allocated + // touched again. Space below this point has been allocated // and remangling is needed between the current top and this // high water mark. HeapWord* _top_for_allocations; diff --git a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp index 6f535034346..ca3c0f48310 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp @@ -56,6 +56,7 @@ void VM_GC_Operation::notify_gc_begin(bool full) { #else /* USDT2 */ HOTSPOT_GC_BEGIN( full); + HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); #endif /* USDT2 */ } @@ -64,8 +65,8 @@ void VM_GC_Operation::notify_gc_end() { HS_DTRACE_PROBE(hotspot, gc__end); HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); #else /* USDT2 */ - HOTSPOT_GC_END( -); + HOTSPOT_GC_END(); + HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); #endif /* USDT2 */ } @@ -82,7 +83,7 @@ void VM_GC_Operation::release_and_notify_pending_list_lock() { // Allocations may fail in several threads at about the same time, // resulting in multiple gc requests. We only want to do one of them. -// In case a GC locker is active and the need for a GC is already signalled, +// In case a GC locker is active and the need for a GC is already signaled, // we want to skip this GC attempt altogether, without doing a futile // safepoint operation. bool VM_GC_Operation::skip_operation() const { diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp b/hotspot/src/share/vm/gc_interface/collectedHeap.cpp index 742e3b73be8..4efb5651b03 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.cpp @@ -320,6 +320,21 @@ void CollectedHeap::flush_deferred_store_barrier(JavaThread* thread) { assert(thread->deferred_card_mark().is_empty(), "invariant"); } +size_t CollectedHeap::max_tlab_size() const { + // TLABs can't be bigger than we can fill with a int[Integer.MAX_VALUE]. + // This restriction could be removed by enabling filling with multiple arrays. + // If we compute that the reasonable way as + // header_size + ((sizeof(jint) * max_jint) / HeapWordSize) + // we'll overflow on the multiply, so we do the divide first. + // We actually lose a little by dividing first, + // but that just makes the TLAB somewhat smaller than the biggest array, + // which is fine, since we'll be able to fill that. + size_t max_int_size = typeArrayOopDesc::header_size(T_INT) + + sizeof(jint) * + ((juint) max_jint / (size_t) HeapWordSize); + return align_size_down(max_int_size, MinObjAlignment); +} + // Helper for ReduceInitialCardMarks. For performance, // compiled code may elide card-marks for initializing stores // to a newly allocated object along the fast-path. We diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp index 1563b9ef743..adcf6dd07f4 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp @@ -394,14 +394,16 @@ class CollectedHeap : public CHeapObj { // the following methods: // Returns "true" iff the heap supports thread-local allocation buffers. // The default is "no". - virtual bool supports_tlab_allocation() const { - return false; - } + virtual bool supports_tlab_allocation() const = 0; + // The amount of space available for thread-local allocation buffers. - virtual size_t tlab_capacity(Thread *thr) const { - guarantee(false, "thread-local allocation buffers not supported"); - return 0; - } + virtual size_t tlab_capacity(Thread *thr) const = 0; + + // The amount of used space for thread-local allocation buffers for the given thread. + virtual size_t tlab_used(Thread *thr) const = 0; + + virtual size_t max_tlab_size() const; + // An estimate of the maximum allocation that could be performed // for thread-local allocation buffers without triggering any // collection or expansion activity. diff --git a/hotspot/src/share/vm/gc_interface/gcCause.hpp b/hotspot/src/share/vm/gc_interface/gcCause.hpp index 809bab4c46d..1df82dba700 100644 --- a/hotspot/src/share/vm/gc_interface/gcCause.hpp +++ b/hotspot/src/share/vm/gc_interface/gcCause.hpp @@ -31,7 +31,7 @@ // This class exposes implementation details of the various // collector(s), and we need to be very careful with it. If // use of this class grows, we should split it into public -// and implemenation-private "causes". +// and implementation-private "causes". // class GCCause : public AllStatic { diff --git a/hotspot/src/share/vm/interpreter/linkResolver.cpp b/hotspot/src/share/vm/interpreter/linkResolver.cpp index b63e03bdcf6..52c88bd3a66 100644 --- a/hotspot/src/share/vm/interpreter/linkResolver.cpp +++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -649,16 +649,6 @@ void LinkResolver::resolve_interface_method(methodHandle& resolved_method, } } - if (nostatics && resolved_method->is_static()) { - ResourceMark rm(THREAD); - char buf[200]; - jio_snprintf(buf, sizeof(buf), "Expected instance not static method %s", Method::name_and_sig_as_C_string(resolved_klass(), - resolved_method->name(), - resolved_method->signature())); - THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); - } - - if (check_access) { // JDK8 adds non-public interface methods, and accessability check requirement assert(current_klass.not_null() , "current_klass should not be null"); @@ -702,6 +692,15 @@ void LinkResolver::resolve_interface_method(methodHandle& resolved_method, } } + if (nostatics && resolved_method->is_static()) { + ResourceMark rm(THREAD); + char buf[200]; + jio_snprintf(buf, sizeof(buf), "Expected instance not static method %s", + Method::name_and_sig_as_C_string(resolved_klass(), + resolved_method->name(), resolved_method->signature())); + THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); + } + if (TraceItables && Verbose) { ResourceMark rm(THREAD); tty->print("invokeinterface resolved method: caller-class:%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ", diff --git a/hotspot/src/share/vm/memory/allocation.hpp b/hotspot/src/share/vm/memory/allocation.hpp index 590b74f5ddf..aeed2fab75c 100644 --- a/hotspot/src/share/vm/memory/allocation.hpp +++ b/hotspot/src/share/vm/memory/allocation.hpp @@ -576,8 +576,8 @@ class ResourceObj ALLOCATION_SUPER_CLASS_SPEC { bool allocated_on_res_area() const { return get_allocation_type() == RESOURCE_AREA; } bool allocated_on_C_heap() const { return get_allocation_type() == C_HEAP; } bool allocated_on_arena() const { return get_allocation_type() == ARENA; } - ResourceObj(); // default construtor - ResourceObj(const ResourceObj& r); // default copy construtor + ResourceObj(); // default constructor + ResourceObj(const ResourceObj& r); // default copy constructor ResourceObj& operator=(const ResourceObj& r); // default copy assignment ~ResourceObj(); #endif // ASSERT diff --git a/hotspot/src/share/vm/memory/barrierSet.hpp b/hotspot/src/share/vm/memory/barrierSet.hpp index 4fa307d3d09..825f82446c1 100644 --- a/hotspot/src/share/vm/memory/barrierSet.hpp +++ b/hotspot/src/share/vm/memory/barrierSet.hpp @@ -124,7 +124,7 @@ public: virtual bool has_read_region_opt() = 0; virtual bool has_write_region_opt() = 0; - // These operations should assert false unless the correponding operation + // These operations should assert false unless the corresponding operation // above returns true. Otherwise, they should perform an appropriate // barrier for an array whose elements are all in the given memory region. virtual void read_ref_array(MemRegion mr) = 0; @@ -165,7 +165,7 @@ public: // normally reserve space for such tables, and commit parts of the table // "covering" parts of the heap that are committed. The constructor is // passed the maximum number of independently committable subregions to - // be covered, and the "resize_covoered_region" function allows the + // be covered, and the "resize_covered_region" function allows the // sub-parts of the heap to inform the barrier set of changes of their // sizes. BarrierSet(int max_covered_regions) : diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp index 30b0382992c..9f2dcebfc14 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp @@ -56,7 +56,7 @@ TreeChunk* TreeChunk::as_TreeChunk(Chu template class FreeList_t> void TreeChunk::verify_tree_chunk_list() const { TreeChunk* nextTC = (TreeChunk*)next(); - if (prev() != NULL) { // interior list node shouldn'r have tree fields + if (prev() != NULL) { // interior list node shouldn't have tree fields guarantee(embedded_list()->parent() == NULL && embedded_list()->left() == NULL && embedded_list()->right() == NULL, "should be clear"); } @@ -247,7 +247,7 @@ TreeList* TreeList::remove_chunk_repla prevFC->link_after(nextTC); } - // Below this point the embeded TreeList being used for the + // Below this point the embedded TreeList being used for the // tree node may have changed. Don't use "this" // TreeList*. // chunk should still be a free chunk (bit set in _prev) @@ -703,7 +703,7 @@ TreeList* BinaryTreeDictionary::remove // The only use of this method would not pass the root of the // tree (as indicated by the assertion above that the tree list // has a parent) but the specification does not explicitly exclude the - // passing of the root so accomodate it. + // passing of the root so accommodate it. set_root(NULL); } debug_only( diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp index 23d7fe0ae24..1867ed2ae22 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp @@ -322,7 +322,7 @@ class BinaryTreeDictionary: public FreeBlockDictionary { void set_tree_hints(void); // Reset statistics for all the lists in the tree. void clear_tree_census(void); - // Print the statistcis for all the lists in the tree. Also may + // Print the statistics for all the lists in the tree. Also may // print out summaries. void print_dict_census(void) const; void print_free_lists(outputStream* st) const; diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.cpp b/hotspot/src/share/vm/memory/blockOffsetTable.cpp index c0b35cdde0f..7a54e147790 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.cpp +++ b/hotspot/src/share/vm/memory/blockOffsetTable.cpp @@ -590,7 +590,7 @@ HeapWord* BlockOffsetArrayNonContigSpace::block_start_careful( // Otherwise, find the block start using the table, but taking // care (cf block_start_unsafe() above) not to parse any objects/blocks - // on the cards themsleves. + // on the cards themselves. size_t index = _array->index_for(addr); assert(_array->address_for_index(index) == addr, "arg should be start of card"); diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.hpp b/hotspot/src/share/vm/memory/blockOffsetTable.hpp index d434536c5e4..2730bee618c 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.hpp +++ b/hotspot/src/share/vm/memory/blockOffsetTable.hpp @@ -424,7 +424,7 @@ class BlockOffsetArrayNonContigSpace: public BlockOffsetArray { BlockOffsetArray(array, mr, false), _unallocated_block(_bottom) { } - // accessor + // Accessor HeapWord* unallocated_block() const { assert(BlockOffsetArrayUseUnallocatedBlock, "_unallocated_block is not being maintained"); diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp index 5e9d843ff52..2f23b3a7617 100644 --- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp +++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp @@ -98,7 +98,7 @@ CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap, "card marking array"); } - // The assember store_check code will do an unsigned shift of the oop, + // The assembler store_check code will do an unsigned shift of the oop, // then add it to byte_map_base, i.e. // // _byte_map = byte_map_base + (uintptr_t(low_bound) >> card_shift) @@ -243,7 +243,7 @@ void CardTableModRefBS::resize_covered_region(MemRegion new_region) { if (new_region.word_size() != old_region.word_size()) { // Commit new or uncommit old pages, if necessary. MemRegion cur_committed = _committed[ind]; - // Extend the end of this _commited region + // Extend the end of this _committed region // to cover the end of any lower _committed regions. // This forms overlapping regions, but never interior regions. HeapWord* const max_prev_end = largest_prev_committed_end(ind); @@ -448,7 +448,7 @@ void CardTableModRefBS::non_clean_card_iterate_possibly_parallel(Space* sp, // off parallelism is used, then active_workers can be used in // place of n_par_threads. // This is an example of a path where n_par_threads is - // set to 0 to turn off parallism. + // set to 0 to turn off parallelism. // [7] CardTableModRefBS::non_clean_card_iterate() // [8] CardTableRS::younger_refs_in_space_iterate() // [9] Generation::younger_refs_in_space_iterate() diff --git a/hotspot/src/share/vm/memory/cardTableRS.cpp b/hotspot/src/share/vm/memory/cardTableRS.cpp index ddd65d42083..d79b4b92ec8 100644 --- a/hotspot/src/share/vm/memory/cardTableRS.cpp +++ b/hotspot/src/share/vm/memory/cardTableRS.cpp @@ -590,7 +590,7 @@ void CardTableRS::verify_space(Space* s, HeapWord* gen_boundary) { // Then, the case analysis above reveals that, in the worst case, // any such stale card will be scanned unnecessarily at most twice. // - // It is nonethelss advisable to try and get rid of some of this + // It is nonetheless advisable to try and get rid of some of this // redundant work in a subsequent (low priority) re-design of // the card-scanning code, if only to simplify the underlying // state machine analysis/proof. ysr 1/28/2002. XXX diff --git a/hotspot/src/share/vm/memory/cardTableRS.hpp b/hotspot/src/share/vm/memory/cardTableRS.hpp index 25884feac8b..873b3f62f94 100644 --- a/hotspot/src/share/vm/memory/cardTableRS.hpp +++ b/hotspot/src/share/vm/memory/cardTableRS.hpp @@ -105,8 +105,6 @@ public: ~CardTableRS(); // *** GenRemSet functions. - GenRemSet::Name rs_kind() { return GenRemSet::CardTable; } - CardTableRS* as_CardTableRS() { return this; } CardTableModRefBS* ct_bs() { return _ct_bs; } diff --git a/hotspot/src/share/vm/memory/collectorPolicy.cpp b/hotspot/src/share/vm/memory/collectorPolicy.cpp index 204011b689e..17a88c08a86 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.cpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.cpp @@ -45,7 +45,7 @@ #include "gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp" #endif // INCLUDE_ALL_GCS -// CollectorPolicy methods. +// CollectorPolicy methods CollectorPolicy::CollectorPolicy() : _space_alignment(0), @@ -178,17 +178,14 @@ size_t CollectorPolicy::compute_heap_alignment() { // byte entry and the os page size is 4096, the maximum heap size should // be 512*4096 = 2MB aligned. - // There is only the GenRemSet in Hotspot and only the GenRemSet::CardTable - // is supported. - // Requirements of any new remembered set implementations must be added here. - size_t alignment = GenRemSet::max_alignment_constraint(GenRemSet::CardTable); + size_t alignment = GenRemSet::max_alignment_constraint(); // Parallel GC does its own alignment of the generations to avoid requiring a // large page (256M on some platforms) for the permanent generation. The // other collectors should also be updated to do their own alignment and then // this use of lcm() should be removed. if (UseLargePages && !UseParallelGC) { - // in presence of large pages we have to make sure that our + // In presence of large pages we have to make sure that our // alignment is large page aware alignment = lcm(os::large_page_size(), alignment); } @@ -196,7 +193,7 @@ size_t CollectorPolicy::compute_heap_alignment() { return alignment; } -// GenCollectorPolicy methods. +// GenCollectorPolicy methods GenCollectorPolicy::GenCollectorPolicy() : _min_gen0_size(0), @@ -378,10 +375,10 @@ void TwoGenerationCollectorPolicy::initialize_flags() { _initial_heap_byte_size = InitialHeapSize; } - // adjust max heap size if necessary + // Adjust NewSize and OldSize or MaxHeapSize to match each other if (NewSize + OldSize > MaxHeapSize) { if (_max_heap_size_cmdline) { - // somebody set a maximum heap size with the intention that we should not + // Somebody has set a maximum heap size with the intention that we should not // exceed it. Adjust New/OldSize as necessary. uintx calculated_size = NewSize + OldSize; double shrink_factor = (double) MaxHeapSize / calculated_size; @@ -442,9 +439,8 @@ void GenCollectorPolicy::initialize_size_info() { // minimum gen0 sizes. if (_max_heap_byte_size == _min_heap_byte_size) { - // The maximum and minimum heap sizes are the same so - // the generations minimum and initial must be the - // same as its maximum. + // The maximum and minimum heap sizes are the same so the generations + // minimum and initial must be the same as its maximum. _min_gen0_size = max_new_size; _initial_gen0_size = max_new_size; _max_gen0_size = max_new_size; @@ -466,8 +462,7 @@ void GenCollectorPolicy::initialize_size_info() { // For the case where NewSize is the default, use NewRatio // to size the minimum and initial generation sizes. // Use the default NewSize as the floor for these values. If - // NewRatio is overly large, the resulting sizes can be too - // small. + // NewRatio is overly large, the resulting sizes can be too small. _min_gen0_size = MAX2(scale_by_NewRatio_aligned(_min_heap_byte_size), NewSize); desired_new_size = MAX2(scale_by_NewRatio_aligned(_initial_heap_byte_size), NewSize); @@ -486,8 +481,7 @@ void GenCollectorPolicy::initialize_size_info() { _max_gen0_size = bound_minus_alignment(_max_gen0_size, _max_heap_byte_size); // At this point all three sizes have been checked against the - // maximum sizes but have not been checked for consistency - // among the three. + // maximum sizes but have not been checked for consistency among the three. // Final check min <= initial <= max _min_gen0_size = MIN2(_min_gen0_size, _max_gen0_size); @@ -495,7 +489,7 @@ void GenCollectorPolicy::initialize_size_info() { _min_gen0_size = MIN2(_min_gen0_size, _initial_gen0_size); } - // Write back to flags if necessary + // Write back to flags if necessary. if (NewSize != _initial_gen0_size) { FLAG_SET_ERGO(uintx, NewSize, _initial_gen0_size); } @@ -541,7 +535,7 @@ bool TwoGenerationCollectorPolicy::adjust_gen0_sizes(size_t* gen0_size_ptr, } // Minimum sizes of the generations may be different than -// the initial sizes. An inconsistently is permitted here +// the initial sizes. An inconsistency is permitted here // in the total size that can be specified explicitly by // command line specification of OldSize and NewSize and // also a command line specification of -Xms. Issue a warning @@ -553,12 +547,12 @@ void TwoGenerationCollectorPolicy::initialize_size_info() { // At this point the minimum, initial and maximum sizes // of the overall heap and of gen0 have been determined. // The maximum gen1 size can be determined from the maximum gen0 - // and maximum heap size since no explicit flags exits + // and maximum heap size since no explicit flags exist // for setting the gen1 maximum. _max_gen1_size = MAX2(_max_heap_byte_size - _max_gen0_size, _gen_alignment); // If no explicit command line flag has been set for the - // gen1 size, use what is left for gen1. + // gen1 size, use what is left for gen1 if (!FLAG_IS_CMDLINE(OldSize)) { // The user has not specified any value but the ergonomics // may have chosen a value (which may or may not be consistent @@ -570,14 +564,14 @@ void TwoGenerationCollectorPolicy::initialize_size_info() { // _max_gen1_size has already been made consistent above FLAG_SET_ERGO(uintx, OldSize, _initial_gen1_size); } else { - // It's been explicitly set on the command line. Use the + // OldSize has been explicitly set on the command line. Use the // OldSize and then determine the consequences. _min_gen1_size = MIN2(OldSize, _min_heap_byte_size - _min_gen0_size); _initial_gen1_size = OldSize; // If the user has explicitly set an OldSize that is inconsistent // with other command line flags, issue a warning. - // The generation minimums and the overall heap mimimum should + // The generation minimums and the overall heap minimum should // be within one generation alignment. if ((_min_gen1_size + _min_gen0_size + _gen_alignment) < _min_heap_byte_size) { warning("Inconsistency between minimum heap size and minimum " @@ -599,7 +593,7 @@ void TwoGenerationCollectorPolicy::initialize_size_info() { _min_gen0_size, _initial_gen0_size, _max_gen0_size); } } - // Initial size + // The same as above for the old gen initial size. if (adjust_gen0_sizes(&_initial_gen0_size, &_initial_gen1_size, _initial_heap_byte_size)) { if (PrintGCDetails && Verbose) { @@ -609,10 +603,10 @@ void TwoGenerationCollectorPolicy::initialize_size_info() { } } } - // Enforce the maximum gen1 size. + _min_gen1_size = MIN2(_min_gen1_size, _max_gen1_size); - // Check that min gen1 <= initial gen1 <= max gen1 + // Make sure that min gen1 <= initial gen1 <= max gen1. _initial_gen1_size = MAX2(_initial_gen1_size, _min_gen1_size); _initial_gen1_size = MIN2(_initial_gen1_size, _max_gen1_size); @@ -653,10 +647,9 @@ HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, HeapWord* result = NULL; - // Loop until the allocation is satisified, - // or unsatisfied after GC. + // Loop until the allocation is satisfied, or unsatisfied after GC. for (int try_count = 1, gclocker_stalled_count = 0; /* return or throw */; try_count += 1) { - HandleMark hm; // discard any handles allocated in each iteration + HandleMark hm; // Discard any handles allocated in each iteration. // First allocation attempt is lock-free. Generation *gen0 = gch->get_gen(0); @@ -669,7 +662,7 @@ HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, return result; } } - unsigned int gc_count_before; // read inside the Heap_lock locked region + unsigned int gc_count_before; // Read inside the Heap_lock locked region. { MutexLocker ml(Heap_lock); if (PrintGC && Verbose) { @@ -688,19 +681,19 @@ HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, if (GC_locker::is_active_and_needs_gc()) { if (is_tlab) { - return NULL; // Caller will retry allocating individual object + return NULL; // Caller will retry allocating individual object. } if (!gch->is_maximal_no_gc()) { - // Try and expand heap to satisfy request + // Try and expand heap to satisfy request. result = expand_heap_and_allocate(size, is_tlab); - // result could be null if we are out of space + // Result could be null if we are out of space. if (result != NULL) { return result; } } if (gclocker_stalled_count > GCLockerRetryAllocationCount) { - return NULL; // we didn't get to do a GC and we didn't get any memory + return NULL; // We didn't get to do a GC and we didn't get any memory. } // If this thread is not in a jni critical section, we stall @@ -735,7 +728,7 @@ HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, result = op.result(); if (op.gc_locked()) { assert(result == NULL, "must be NULL if gc_locked() is true"); - continue; // retry and/or stall as necessary + continue; // Retry and/or stall as necessary. } // Allocation has failed and a collection @@ -796,7 +789,7 @@ HeapWord* GenCollectorPolicy::satisfy_failed_allocation(size_t size, if (!gch->is_maximal_no_gc()) { result = expand_heap_and_allocate(size, is_tlab); } - return result; // could be null if we are out of space + return result; // Could be null if we are out of space. } else if (!gch->incremental_collection_will_fail(false /* don't consult_young */)) { // Do an incremental collection. gch->do_collection(false /* full */, @@ -918,10 +911,8 @@ MetaWord* CollectorPolicy::satisfy_failed_metadata_allocation( GCCause::_metadata_GC_threshold); VMThread::execute(&op); - // If GC was locked out, try again. Check - // before checking success because the prologue - // could have succeeded and the GC still have - // been locked out. + // If GC was locked out, try again. Check before checking success because the + // prologue could have succeeded and the GC still have been locked out. if (op.gc_locked()) { continue; } @@ -982,7 +973,7 @@ void MarkSweepPolicy::initialize_generations() { } void MarkSweepPolicy::initialize_gc_policy_counters() { - // initialize the policy counters - 2 collectors, 3 generations + // Initialize the policy counters - 2 collectors, 3 generations. if (UseParNewGC) { _gc_policy_counters = new GCPolicyCounters("ParNew:MSC", 2, 3); } else { diff --git a/hotspot/src/share/vm/memory/collectorPolicy.hpp b/hotspot/src/share/vm/memory/collectorPolicy.hpp index b72030113c4..815f1555726 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.hpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.hpp @@ -76,10 +76,10 @@ class CollectorPolicy : public CHeapObj { size_t _heap_alignment; // Needed to keep information if MaxHeapSize was set on the command line - // when the flag value is aligned etc by ergonomics + // when the flag value is aligned etc by ergonomics. bool _max_heap_size_cmdline; - // The sizing of the heap are controlled by a sizing policy. + // The sizing of the heap is controlled by a sizing policy. AdaptiveSizePolicy* _size_policy; // Set to true when policy wants soft refs cleared. @@ -102,7 +102,7 @@ class CollectorPolicy : public CHeapObj { initialize_size_info(); } - // Return maximum heap alignment that may be imposed by the policy + // Return maximum heap alignment that may be imposed by the policy. static size_t compute_heap_alignment(); size_t space_alignment() { return _space_alignment; } @@ -180,7 +180,7 @@ class CollectorPolicy : public CHeapObj { size_t size, Metaspace::MetadataType mdtype); - // Performace Counter support + // Performance Counter support GCPolicyCounters* counters() { return _gc_policy_counters; } // Create the jstat counters for the GC policy. By default, policy's @@ -231,9 +231,8 @@ class GenCollectorPolicy : public CollectorPolicy { GenerationSpec **_generations; - // Return true if an allocation should be attempted in the older - // generation if it fails in the younger generation. Return - // false, otherwise. + // Return true if an allocation should be attempted in the older generation + // if it fails in the younger generation. Return false, otherwise. virtual bool should_try_older_generation_allocation(size_t word_size) const; void initialize_flags(); @@ -245,7 +244,7 @@ class GenCollectorPolicy : public CollectorPolicy { // Try to allocate space by expanding the heap. virtual HeapWord* expand_heap_and_allocate(size_t size, bool is_tlab); - // Compute max heap alignment + // Compute max heap alignment. size_t compute_max_alignment(); // Scale the base_size by NewRatio according to @@ -253,7 +252,7 @@ class GenCollectorPolicy : public CollectorPolicy { // and align by min_alignment() size_t scale_by_NewRatio_aligned(size_t base_size); - // Bound the value by the given maximum minus the min_alignment + // Bound the value by the given maximum minus the min_alignment. size_t bound_minus_alignment(size_t desired_size, size_t maximum_size); public: diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/memory/defNewGeneration.cpp index 51c672e4e7c..1e3cb9aaa3c 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.cpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp @@ -61,7 +61,6 @@ bool DefNewGeneration::IsAliveClosure::do_object_b(oop p) { DefNewGeneration::KeepAliveClosure:: KeepAliveClosure(ScanWeakRefClosure* cl) : _cl(cl) { GenRemSet* rs = GenCollectedHeap::heap()->rem_set(); - assert(rs->rs_kind() == GenRemSet::CardTable, "Wrong rem set kind."); _rs = (CardTableRS*)rs; } @@ -619,13 +618,12 @@ void DefNewGeneration::collect(bool full, assert(gch->no_allocs_since_save_marks(0), "save marks have not been newly set."); - int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_CodeCache; + int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_ScavengeCodeCache; gch->gen_process_strong_roots(_level, true, // Process younger gens, if any, // as strong roots. true, // activate StrongRootsScope - true, // is scavenging SharedHeap::ScanningOption(so), &fsc_with_no_gc_barrier, true, // walk *all* scavengable nmethods @@ -1086,6 +1084,10 @@ size_t DefNewGeneration::tlab_capacity() const { return eden()->capacity(); } +size_t DefNewGeneration::tlab_used() const { + return eden()->used(); +} + size_t DefNewGeneration::unsafe_max_tlab_alloc() const { return unsafe_max_alloc_nogc(); } diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/memory/defNewGeneration.hpp index 0623d446ad3..a5c0eb30951 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.hpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.hpp @@ -239,6 +239,7 @@ protected: // Thread-local allocation buffers bool supports_tlab_allocation() const { return true; } size_t tlab_capacity() const; + size_t tlab_used() const; size_t unsafe_max_tlab_alloc() const; // Grow the generation by the specified number of bytes. diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/memory/genCollectedHeap.cpp index 49c5965a89b..5e0572e4ba7 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp @@ -126,7 +126,7 @@ jint GenCollectedHeap::initialize() { (HeapWord*)(heap_rs.base() + heap_rs.size())); // It is important to do this in a way such that concurrent readers can't - // temporarily think somethings in the heap. (Seen this happen in asserts.) + // temporarily think something is in the heap. (Seen this happen in asserts.) _reserved.set_word_size(0); _reserved.set_start((HeapWord*)heap_rs.base()); size_t actual_heap_size = heap_rs.size(); @@ -592,7 +592,6 @@ void GenCollectedHeap:: gen_process_strong_roots(int level, bool younger_gens_as_roots, bool activate_scope, - bool is_scavenging, SharedHeap::ScanningOption so, OopsInGenClosure* not_older_gens, bool do_code_roots, @@ -601,12 +600,12 @@ gen_process_strong_roots(int level, // General strong roots. if (!do_code_roots) { - SharedHeap::process_strong_roots(activate_scope, is_scavenging, so, + SharedHeap::process_strong_roots(activate_scope, so, not_older_gens, NULL, klass_closure); } else { bool do_code_marking = (activate_scope || nmethod::oops_do_marking_is_active()); CodeBlobToOopClosure code_roots(not_older_gens, /*do_marking=*/ do_code_marking); - SharedHeap::process_strong_roots(activate_scope, is_scavenging, so, + SharedHeap::process_strong_roots(activate_scope, so, not_older_gens, &code_roots, klass_closure); } @@ -933,6 +932,16 @@ size_t GenCollectedHeap::tlab_capacity(Thread* thr) const { return result; } +size_t GenCollectedHeap::tlab_used(Thread* thr) const { + size_t result = 0; + for (int i = 0; i < _n_gens; i += 1) { + if (_gens[i]->supports_tlab_allocation()) { + result += _gens[i]->tlab_used(); + } + } + return result; +} + size_t GenCollectedHeap::unsafe_max_tlab_alloc(Thread* thr) const { size_t result = 0; for (int i = 0; i < _n_gens; i += 1) { @@ -1263,7 +1272,7 @@ class GenTimeOfLastGCClosure: public GenCollectedHeap::GenClosure { }; jlong GenCollectedHeap::millis_since_last_gc() { - // We need a monotonically non-deccreasing time in ms but + // We need a monotonically non-decreasing time in ms but // os::javaTimeMillis() does not guarantee monotonicity. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; GenTimeOfLastGCClosure tolgc_cl(now); diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.hpp b/hotspot/src/share/vm/memory/genCollectedHeap.hpp index b80fd718bd8..7bea23d68e4 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp @@ -248,6 +248,7 @@ public: // Section on TLAB's. virtual bool supports_tlab_allocation() const; virtual size_t tlab_capacity(Thread* thr) const; + virtual size_t tlab_used(Thread* thr) const; virtual size_t unsafe_max_tlab_alloc(Thread* thr) const; virtual HeapWord* allocate_new_tlab(size_t size); @@ -315,7 +316,7 @@ public: } // Update the gc statistics for each generation. - // "level" is the level of the lastest collection + // "level" is the level of the latest collection. void update_gc_stats(int current_level, bool full) { for (int i = 0; i < _n_gens; i++) { _gens[i]->update_gc_stats(current_level, full); @@ -411,7 +412,6 @@ public: // The remaining arguments are in an order // consistent with SharedHeap::process_strong_roots: bool activate_scope, - bool is_scavenging, SharedHeap::ScanningOption so, OopsInGenClosure* not_older_gens, bool do_code_roots, diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/memory/genMarkSweep.cpp index fdeba2adaf9..2ae8b3dc6e2 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp +++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp @@ -148,8 +148,8 @@ void GenMarkSweep::invoke_at_safepoint(int level, ReferenceProcessor* rp, bool c Universe::update_heap_info_at_gc(); // Update time of last gc for all generations we collected - // (which curently is all the generations in the heap). - // We need to use a monotonically non-deccreasing time in ms + // (which currently is all the generations in the heap). + // We need to use a monotonically non-decreasing time in ms // or we will see time-warp warnings and os::javaTimeMillis() // does not guarantee monotonicity. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; @@ -210,7 +210,6 @@ void GenMarkSweep::mark_sweep_phase1(int level, gch->gen_process_strong_roots(level, false, // Younger gens are not roots. true, // activate StrongRootsScope - false, // not scavenging SharedHeap::SO_SystemClasses, &follow_root_closure, true, // walk code active on stacks @@ -296,7 +295,6 @@ void GenMarkSweep::mark_sweep_phase3(int level) { gch->gen_process_strong_roots(level, false, // Younger gens are not roots. true, // activate StrongRootsScope - false, // not scavenging SharedHeap::SO_AllClasses, &adjust_pointer_closure, false, // do not walk code diff --git a/hotspot/src/share/vm/memory/genOopClosures.inline.hpp b/hotspot/src/share/vm/memory/genOopClosures.inline.hpp index b7a1ac99bef..30c77dba0ea 100644 --- a/hotspot/src/share/vm/memory/genOopClosures.inline.hpp +++ b/hotspot/src/share/vm/memory/genOopClosures.inline.hpp @@ -45,7 +45,6 @@ inline void OopsInGenClosure::set_generation(Generation* gen) { // Barrier set for the heap, must be set after heap is initialized if (_rs == NULL) { GenRemSet* rs = SharedHeap::heap()->rem_set(); - assert(rs->rs_kind() == GenRemSet::CardTable, "Wrong rem set kind"); _rs = (CardTableRS*)rs; } } diff --git a/hotspot/src/share/vm/memory/genRemSet.cpp b/hotspot/src/share/vm/memory/genRemSet.cpp index bb3149f5a85..c21a1634e5b 100644 --- a/hotspot/src/share/vm/memory/genRemSet.cpp +++ b/hotspot/src/share/vm/memory/genRemSet.cpp @@ -31,8 +31,7 @@ // enumerate ref fields that have been modified (since the last // enumeration.) -uintx GenRemSet::max_alignment_constraint(Name nm) { - assert(nm == GenRemSet::CardTable, "Unrecognized GenRemSet type."); +uintx GenRemSet::max_alignment_constraint() { return CardTableRS::ct_max_alignment_constraint(); } diff --git a/hotspot/src/share/vm/memory/genRemSet.hpp b/hotspot/src/share/vm/memory/genRemSet.hpp index a275320c8da..d0a79a3371e 100644 --- a/hotspot/src/share/vm/memory/genRemSet.hpp +++ b/hotspot/src/share/vm/memory/genRemSet.hpp @@ -27,7 +27,7 @@ #include "oops/oop.hpp" -// A GenRemSet provides ways of iterating over pointers accross generations. +// A GenRemSet provides ways of iterating over pointers across generations. // (This is especially useful for older-to-younger.) class Generation; @@ -53,19 +53,12 @@ class GenRemSet: public CHeapObj { KlassRemSet _klass_rem_set; public: - enum Name { - CardTable, - Other - }; - GenRemSet(BarrierSet * bs) : _bs(bs) {} GenRemSet() : _bs(NULL) {} - virtual Name rs_kind() = 0; - // These are for dynamic downcasts. Unfortunately that it names the // possible subtypes (but not that they are subtypes!) Return NULL if - // the cast is invalide. + // the cast is invalid. virtual CardTableRS* as_CardTableRS() { return NULL; } // Return the barrier set associated with "this." @@ -106,10 +99,9 @@ public: // within the heap, this function tells whether they are met. virtual bool is_aligned(HeapWord* addr) = 0; - // If the RS (or BS) imposes an aligment constraint on maximum heap size. - // (This must be static, and dispatch on "nm", because it is called - // before an RS is created.) - static uintx max_alignment_constraint(Name nm); + // Returns any alignment constraint that the remembered set imposes upon the + // heap. + static uintx max_alignment_constraint(); virtual void verify() = 0; diff --git a/hotspot/src/share/vm/memory/generation.hpp b/hotspot/src/share/vm/memory/generation.hpp index e3bceb4446c..e7cbd2c1226 100644 --- a/hotspot/src/share/vm/memory/generation.hpp +++ b/hotspot/src/share/vm/memory/generation.hpp @@ -289,7 +289,7 @@ class Generation: public CHeapObj { // These functions return the addresses of the fields that define the // boundaries of the contiguous allocation area. (These fields should be - // physicall near to one another.) + // physically near to one another.) virtual HeapWord** top_addr() const { return NULL; } virtual HeapWord** end_addr() const { return NULL; } @@ -299,6 +299,10 @@ class Generation: public CHeapObj { guarantee(false, "Generation doesn't support thread local allocation buffers"); return 0; } + virtual size_t tlab_used() const { + guarantee(false, "Generation doesn't support thread local allocation buffers"); + return 0; + } virtual size_t unsafe_max_tlab_alloc() const { guarantee(false, "Generation doesn't support thread local allocation buffers"); return 0; @@ -485,7 +489,7 @@ class Generation: public CHeapObj { // General signature... virtual void oop_since_save_marks_iterate_v(OopsInGenClosure* cl) = 0; // ...and specializations for de-virtualization. (The general - // implemention of the _nv versions call the virtual version. + // implementation of the _nv versions call the virtual version. // Note that the _nv suffix is not really semantically necessary, // but it avoids some not-so-useful warnings on Solaris.) #define Generation_SINCE_SAVE_MARKS_DECL(OopClosureType, nv_suffix) \ diff --git a/hotspot/src/share/vm/memory/heap.cpp b/hotspot/src/share/vm/memory/heap.cpp index f00709684b4..a241af2eee9 100644 --- a/hotspot/src/share/vm/memory/heap.cpp +++ b/hotspot/src/share/vm/memory/heap.cpp @@ -183,7 +183,7 @@ void* CodeHeap::allocate(size_t instance_size, bool is_critical) { size_t number_of_segments = size_to_segments(instance_size + sizeof(HeapBlock)); assert(segments_to_size(number_of_segments) >= sizeof(FreeBlock), "not enough room for FreeList"); - // First check if we can satify request from freelist + // First check if we can satisfy request from freelist debug_only(verify()); HeapBlock* block = search_freelist(number_of_segments, is_critical); debug_only(if (VerifyCodeCacheOften) verify()); @@ -372,7 +372,7 @@ void CodeHeap::add_to_freelist(HeapBlock *a) { } // Scan for right place to put into list. List - // is sorted by increasing addresseses + // is sorted by increasing addresses FreeBlock* prev = NULL; FreeBlock* cur = _freelist; while(cur != NULL && cur < b) { diff --git a/hotspot/src/share/vm/memory/heap.hpp b/hotspot/src/share/vm/memory/heap.hpp index 29e76d7dc62..e271d1be2fc 100644 --- a/hotspot/src/share/vm/memory/heap.hpp +++ b/hotspot/src/share/vm/memory/heap.hpp @@ -127,8 +127,8 @@ class CodeHeap : public CHeapObj { // Heap extents bool reserve(size_t reserved_size, size_t committed_size, size_t segment_size); void release(); // releases all allocated memory - bool expand_by(size_t size); // expands commited memory by size - void shrink_by(size_t size); // shrinks commited memory by size + bool expand_by(size_t size); // expands committed memory by size + void shrink_by(size_t size); // shrinks committed memory by size void clear(); // clears all heap contents // Memory allocation diff --git a/hotspot/src/share/vm/memory/heapInspection.hpp b/hotspot/src/share/vm/memory/heapInspection.hpp index 25e438981d3..8cdd4ccdf65 100644 --- a/hotspot/src/share/vm/memory/heapInspection.hpp +++ b/hotspot/src/share/vm/memory/heapInspection.hpp @@ -347,7 +347,7 @@ class KlassInfoHisto : public StackObj { #endif // INCLUDE_SERVICES -// These declarations are needed since teh declaration of KlassInfoTable and +// These declarations are needed since the declaration of KlassInfoTable and // KlassInfoClosure are guarded by #if INLCUDE_SERVICES class KlassInfoTable; class KlassInfoClosure; diff --git a/hotspot/src/share/vm/memory/metaspace.cpp b/hotspot/src/share/vm/memory/metaspace.cpp index 5a7e4ec2fb1..73da1c74ef8 100644 --- a/hotspot/src/share/vm/memory/metaspace.cpp +++ b/hotspot/src/share/vm/memory/metaspace.cpp @@ -1455,9 +1455,10 @@ void MetaspaceGC::compute_new_size() { // No expansion, now see if we want to shrink // We would never want to shrink more than this + assert(capacity_until_GC >= minimum_desired_capacity, + err_msg(SIZE_FORMAT " >= " SIZE_FORMAT, + capacity_until_GC, minimum_desired_capacity)); size_t max_shrink_bytes = capacity_until_GC - minimum_desired_capacity; - assert(max_shrink_bytes >= 0, err_msg("max_shrink_bytes " SIZE_FORMAT, - max_shrink_bytes)); // Should shrinking be considered? if (MaxMetaspaceFreeRatio < 100) { @@ -2398,7 +2399,7 @@ bool SpaceManager::contains(const void *ptr) { void SpaceManager::verify() { // If there are blocks in the dictionary, then - // verfication of chunks does not work since + // verification of chunks does not work since // being in the dictionary alters a chunk. if (block_freelists()->total_size() == 0) { for (ChunkIndex i = ZeroIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { @@ -2867,7 +2868,7 @@ void Metaspace::set_narrow_klass_base_and_shift(address metaspace_base, address uint64_t klass_encoding_max = UnscaledClassSpaceMax << LogKlassAlignmentInBytes; // If compressed class space fits in lower 32G, we don't need a base. if (higher_address <= (address)klass_encoding_max) { - lower_base = 0; // effectively lower base is zero. + lower_base = 0; // Effectively lower base is zero. } } diff --git a/hotspot/src/share/vm/memory/metaspaceShared.cpp b/hotspot/src/share/vm/memory/metaspaceShared.cpp index ef51c926662..8421b12d7f1 100644 --- a/hotspot/src/share/vm/memory/metaspaceShared.cpp +++ b/hotspot/src/share/vm/memory/metaspaceShared.cpp @@ -487,7 +487,7 @@ void VM_PopulateDumpSharedSpace::doit() { NOT_PRODUCT(SystemDictionary::verify();) // Copy the the symbol table, and the system dictionary to the shared - // space in usable form. Copy the hastable + // space in usable form. Copy the hashtable // buckets first [read-write], then copy the linked lists of entries // [read-only]. @@ -953,7 +953,7 @@ void MetaspaceShared::initialize_shared_spaces() { // The following data in the shared misc data region are the linked // list elements (HashtableEntry objects) for the symbol table, string - // table, and shared dictionary. The heap objects refered to by the + // table, and shared dictionary. The heap objects referred to by the // symbol table, string table, and shared dictionary are permanent and // unmovable. Since new entries added to the string and symbol tables // are always added at the beginning of the linked lists, THESE LINKED diff --git a/hotspot/src/share/vm/memory/modRefBarrierSet.hpp b/hotspot/src/share/vm/memory/modRefBarrierSet.hpp index 6c272b7b18b..501c294ec3a 100644 --- a/hotspot/src/share/vm/memory/modRefBarrierSet.hpp +++ b/hotspot/src/share/vm/memory/modRefBarrierSet.hpp @@ -72,7 +72,7 @@ public: bool has_read_region_opt() { return false; } - // These operations should assert false unless the correponding operation + // These operations should assert false unless the corresponding operation // above returns true. void read_ref_array(MemRegion mr) { assert(false, "can't call"); diff --git a/hotspot/src/share/vm/memory/referenceProcessor.cpp b/hotspot/src/share/vm/memory/referenceProcessor.cpp index f5e7fadae72..f6a48ee99b9 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.cpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp @@ -45,7 +45,7 @@ void referenceProcessor_init() { } void ReferenceProcessor::init_statics() { - // We need a monotonically non-deccreasing time in ms but + // We need a monotonically non-decreasing time in ms but // os::javaTimeMillis() does not guarantee monotonicity. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; @@ -100,7 +100,6 @@ ReferenceProcessor::ReferenceProcessor(MemRegion span, _enqueuing_is_done(false), _is_alive_non_header(is_alive_non_header), _discovered_list_needs_barrier(discovered_list_needs_barrier), - _bs(NULL), _processing_is_mt(mt_processing), _next_id(0) { @@ -126,10 +125,6 @@ ReferenceProcessor::ReferenceProcessor(MemRegion span, _discovered_refs[i].set_length(0); } - // If we do barriers, cache a copy of the barrier set. - if (discovered_list_needs_barrier) { - _bs = Universe::heap()->barrier_set(); - } setup_policy(false /* default soft ref policy */); } @@ -157,7 +152,7 @@ void ReferenceProcessor::update_soft_ref_master_clock() { // Update (advance) the soft ref master clock field. This must be done // after processing the soft ref list. - // We need a monotonically non-deccreasing time in ms but + // We need a monotonically non-decreasing time in ms but // os::javaTimeMillis() does not guarantee monotonicity. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; jlong soft_ref_clock = java_lang_ref_SoftReference::clock(); @@ -173,7 +168,7 @@ void ReferenceProcessor::update_soft_ref_master_clock() { // javaTimeNanos(), which is guaranteed to be monotonically // non-decreasing provided the underlying platform provides such // a time source (and it is bug free). - // In product mode, however, protect ourselves from non-monotonicty. + // In product mode, however, protect ourselves from non-monotonicity. if (now > _soft_ref_timestamp_clock) { _soft_ref_timestamp_clock = now; java_lang_ref_SoftReference::set_clock(now); @@ -317,13 +312,9 @@ bool enqueue_discovered_ref_helper(ReferenceProcessor* ref, // Enqueue references that are not made active again, and // clear the decks for the next collection (cycle). ref->enqueue_discovered_reflists((HeapWord*)pending_list_addr, task_executor); - // Do the oop-check on pending_list_addr missed in - // enqueue_discovered_reflist. We should probably - // do a raw oop_check so that future such idempotent - // oop_stores relying on the oop-check side-effect - // may be elided automatically and safely without - // affecting correctness. - oop_store(pending_list_addr, oopDesc::load_decode_heap_oop(pending_list_addr)); + // Do the post-barrier on pending_list_addr missed in + // enqueue_discovered_reflist. + oopDesc::bs()->write_ref_field(pending_list_addr, oopDesc::load_decode_heap_oop(pending_list_addr)); // Stop treating discovered references specially. ref->disable_discovery(); @@ -358,7 +349,7 @@ void ReferenceProcessor::enqueue_discovered_reflist(DiscoveredList& refs_list, oop obj = NULL; oop next_d = refs_list.head(); - if (pending_list_uses_discovered_field()) { // New behaviour + if (pending_list_uses_discovered_field()) { // New behavior // Walk down the list, self-looping the next field // so that the References are not considered active. while (obj != next_d) { @@ -372,18 +363,20 @@ void ReferenceProcessor::enqueue_discovered_reflist(DiscoveredList& refs_list, assert(java_lang_ref_Reference::next(obj) == NULL, "Reference not active; should not be discovered"); // Self-loop next, so as to make Ref not active. - java_lang_ref_Reference::set_next(obj, obj); + // Post-barrier not needed when looping to self. + java_lang_ref_Reference::set_next_raw(obj, obj); if (next_d == obj) { // obj is last - // Swap refs_list into pendling_list_addr and + // Swap refs_list into pending_list_addr and // set obj's discovered to what we read from pending_list_addr. oop old = oopDesc::atomic_exchange_oop(refs_list.head(), pending_list_addr); - // Need oop_check on pending_list_addr above; - // see special oop-check code at the end of + // Need post-barrier on pending_list_addr above; + // see special post-barrier code at the end of // enqueue_discovered_reflists() further below. - java_lang_ref_Reference::set_discovered(obj, old); // old may be NULL + java_lang_ref_Reference::set_discovered_raw(obj, old); // old may be NULL + oopDesc::bs()->write_ref_field(java_lang_ref_Reference::discovered_addr(obj), old); } } - } else { // Old behaviour + } else { // Old behavior // Walk down the list, copying the discovered field into // the next field and clearing the discovered field. while (obj != next_d) { @@ -397,7 +390,7 @@ void ReferenceProcessor::enqueue_discovered_reflist(DiscoveredList& refs_list, assert(java_lang_ref_Reference::next(obj) == NULL, "The reference should not be enqueued"); if (next_d == obj) { // obj is last - // Swap refs_list into pendling_list_addr and + // Swap refs_list into pending_list_addr and // set obj's next to what we read from pending_list_addr. oop old = oopDesc::atomic_exchange_oop(refs_list.head(), pending_list_addr); // Need oop_check on pending_list_addr above; @@ -516,13 +509,11 @@ void DiscoveredListIterator::make_active() { // the reference object and will fail // CT verification. if (UseG1GC) { - BarrierSet* bs = oopDesc::bs(); HeapWord* next_addr = java_lang_ref_Reference::next_addr(_ref); - if (UseCompressedOops) { - bs->write_ref_field_pre((narrowOop*)next_addr, NULL); + oopDesc::bs()->write_ref_field_pre((narrowOop*)next_addr, NULL); } else { - bs->write_ref_field_pre((oop*)next_addr, NULL); + oopDesc::bs()->write_ref_field_pre((oop*)next_addr, NULL); } java_lang_ref_Reference::set_next_raw(_ref, NULL); } else { @@ -790,10 +781,9 @@ private: }; void ReferenceProcessor::set_discovered(oop ref, oop value) { + java_lang_ref_Reference::set_discovered_raw(ref, value); if (_discovered_list_needs_barrier) { - java_lang_ref_Reference::set_discovered(ref, value); - } else { - java_lang_ref_Reference::set_discovered_raw(ref, value); + oopDesc::bs()->write_ref_field(ref, value); } } @@ -1085,7 +1075,7 @@ ReferenceProcessor::add_to_discovered_list_mt(DiscoveredList& refs_list, // so this will expand to nothing. As a result, we have manually // elided this out for G1, but left in the test for some future // collector that might have need for a pre-barrier here, e.g.:- - // _bs->write_ref_field_pre((oop* or narrowOop*)discovered_addr, next_discovered); + // oopDesc::bs()->write_ref_field_pre((oop* or narrowOop*)discovered_addr, next_discovered); assert(!_discovered_list_needs_barrier || UseG1GC, "Need to check non-G1 collector: " "may need a pre-write-barrier for CAS from NULL below"); @@ -1098,7 +1088,7 @@ ReferenceProcessor::add_to_discovered_list_mt(DiscoveredList& refs_list, refs_list.set_head(obj); refs_list.inc_length(1); if (_discovered_list_needs_barrier) { - _bs->write_ref_field((void*)discovered_addr, next_discovered); + oopDesc::bs()->write_ref_field((void*)discovered_addr, next_discovered); } if (TraceReferenceGC) { @@ -1260,13 +1250,13 @@ bool ReferenceProcessor::discover_reference(oop obj, ReferenceType rt) { // As in the case further above, since we are over-writing a NULL // pre-value, we can safely elide the pre-barrier here for the case of G1. - // e.g.:- _bs->write_ref_field_pre((oop* or narrowOop*)discovered_addr, next_discovered); + // e.g.:- oopDesc::bs()->write_ref_field_pre((oop* or narrowOop*)discovered_addr, next_discovered); assert(discovered == NULL, "control point invariant"); assert(!_discovered_list_needs_barrier || UseG1GC, "For non-G1 collector, may need a pre-write-barrier for CAS from NULL below"); oop_store_raw(discovered_addr, next_discovered); if (_discovered_list_needs_barrier) { - _bs->write_ref_field((void*)discovered_addr, next_discovered); + oopDesc::bs()->write_ref_field((void*)discovered_addr, next_discovered); } list->set_head(obj); list->inc_length(1); @@ -1351,7 +1341,7 @@ void ReferenceProcessor::preclean_discovered_references( // whose referents are still alive, whose referents are NULL or which // are not active (have a non-NULL next field). NOTE: When we are // thus precleaning the ref lists (which happens single-threaded today), -// we do not disable refs discovery to honour the correct semantics of +// we do not disable refs discovery to honor the correct semantics of // java.lang.Reference. As a result, we need to be careful below // that ref removal steps interleave safely with ref discovery steps // (in this thread). diff --git a/hotspot/src/share/vm/memory/referenceProcessor.hpp b/hotspot/src/share/vm/memory/referenceProcessor.hpp index 252cc6d6240..63b3556bfdd 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.hpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp @@ -235,7 +235,6 @@ class ReferenceProcessor : public CHeapObj { // discovery.) bool _discovered_list_needs_barrier; - BarrierSet* _bs; // Cached copy of BarrierSet. bool _enqueuing_is_done; // true if all weak references enqueued bool _processing_is_mt; // true during phases when // reference processing is MT. @@ -420,25 +419,6 @@ class ReferenceProcessor : public CHeapObj { void update_soft_ref_master_clock(); public: - // constructor - ReferenceProcessor(): - _span((HeapWord*)NULL, (HeapWord*)NULL), - _discovered_refs(NULL), - _discoveredSoftRefs(NULL), _discoveredWeakRefs(NULL), - _discoveredFinalRefs(NULL), _discoveredPhantomRefs(NULL), - _discovering_refs(false), - _discovery_is_atomic(true), - _enqueuing_is_done(false), - _discovery_is_mt(false), - _discovered_list_needs_barrier(false), - _bs(NULL), - _is_alive_non_header(NULL), - _num_q(0), - _max_num_q(0), - _processing_is_mt(false), - _next_id(0) - { } - // Default parameters give you a vanilla reference processor. ReferenceProcessor(MemRegion span, bool mt_processing = false, uint mt_processing_degree = 1, @@ -494,7 +474,7 @@ class ReferenceProcessor : public CHeapObj { bool processing_is_mt() const { return _processing_is_mt; } void set_mt_processing(bool mt) { _processing_is_mt = mt; } - // whether all enqueuing of weak references is complete + // whether all enqueueing of weak references is complete bool enqueuing_is_done() { return _enqueuing_is_done; } void set_enqueuing_is_done(bool v) { _enqueuing_is_done = v; } diff --git a/hotspot/src/share/vm/memory/resourceArea.hpp b/hotspot/src/share/vm/memory/resourceArea.hpp index 1357081fd67..e1cafe7f048 100644 --- a/hotspot/src/share/vm/memory/resourceArea.hpp +++ b/hotspot/src/share/vm/memory/resourceArea.hpp @@ -196,7 +196,7 @@ protected: // leveraging existing data structures if we simply create a way to manage this one // special need for a ResourceMark. If ResourceMark simply inherited from CHeapObj // then existing ResourceMarks would work fine since no one use new to allocate them -// and they would be stack allocated. This leaves open the possibilty of accidental +// and they would be stack allocated. This leaves open the possibility of accidental // misuse so we simple duplicate the ResourceMark functionality here. class DeoptResourceMark: public CHeapObj { diff --git a/hotspot/src/share/vm/memory/sharedHeap.cpp b/hotspot/src/share/vm/memory/sharedHeap.cpp index 47ebc180c8e..2dbf43ef156 100644 --- a/hotspot/src/share/vm/memory/sharedHeap.cpp +++ b/hotspot/src/share/vm/memory/sharedHeap.cpp @@ -137,7 +137,6 @@ SharedHeap::StrongRootsScope::~StrongRootsScope() { } void SharedHeap::process_strong_roots(bool activate_scope, - bool is_scavenging, ScanningOption so, OopClosure* roots, CodeBlobClosure* code_roots, @@ -157,9 +156,11 @@ void SharedHeap::process_strong_roots(bool activate_scope, if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) JNIHandles::oops_do(roots); - // All threads execute this; the individual threads are task groups. CLDToOopClosure roots_from_clds(roots); - CLDToOopClosure* roots_from_clds_p = (is_scavenging ? NULL : &roots_from_clds); + // If we limit class scanning to SO_SystemClasses we need to apply a CLD closure to + // CLDs which are strongly reachable from the thread stacks. + CLDToOopClosure* roots_from_clds_p = ((so & SO_SystemClasses) ? &roots_from_clds : NULL); + // All threads execute this; the individual threads are task groups. if (CollectedHeap::use_parallel_gc_threads()) { Threads::possibly_parallel_oops_do(roots, roots_from_clds_p, code_roots); } else { @@ -187,9 +188,9 @@ void SharedHeap::process_strong_roots(bool activate_scope, if (!_process_strong_tasks->is_task_claimed(SH_PS_ClassLoaderDataGraph_oops_do)) { if (so & SO_AllClasses) { - ClassLoaderDataGraph::oops_do(roots, klass_closure, !is_scavenging); + ClassLoaderDataGraph::oops_do(roots, klass_closure, /* must_claim */ false); } else if (so & SO_SystemClasses) { - ClassLoaderDataGraph::always_strong_oops_do(roots, klass_closure, !is_scavenging); + ClassLoaderDataGraph::always_strong_oops_do(roots, klass_closure, /* must_claim */ true); } } @@ -204,17 +205,18 @@ void SharedHeap::process_strong_roots(bool activate_scope, } if (!_process_strong_tasks->is_task_claimed(SH_PS_CodeCache_oops_do)) { - if (so & SO_CodeCache) { + if (so & SO_ScavengeCodeCache) { assert(code_roots != NULL, "must supply closure for code cache"); - if (is_scavenging) { - // We only visit parts of the CodeCache when scavenging. - CodeCache::scavenge_root_nmethods_do(code_roots); - } else { - // CMSCollector uses this to do intermediate-strength collections. - // We scan the entire code cache, since CodeCache::do_unloading is not called. - CodeCache::blobs_do(code_roots); - } + // We only visit parts of the CodeCache when scavenging. + CodeCache::scavenge_root_nmethods_do(code_roots); + } + if (so & SO_AllCodeCache) { + assert(code_roots != NULL, "must supply closure for code cache"); + + // CMSCollector uses this to do intermediate-strength collections. + // We scan the entire code cache, since CodeCache::do_unloading is not called. + CodeCache::blobs_do(code_roots); } // Verify that the code cache contents are not subject to // movement by a scavenging collection. diff --git a/hotspot/src/share/vm/memory/sharedHeap.hpp b/hotspot/src/share/vm/memory/sharedHeap.hpp index f5d9e05f0cf..398e593cc10 100644 --- a/hotspot/src/share/vm/memory/sharedHeap.hpp +++ b/hotspot/src/share/vm/memory/sharedHeap.hpp @@ -92,7 +92,7 @@ class KlassClosure; // 0 is a "special" value in set_n_threads() which translates to // setting _n_threads to 1. // -// Some code uses _n_terminiation to decide if work should be done in +// Some code uses _n_termination to decide if work should be done in // parallel. The notorious possibly_parallel_oops_do() in threads.cpp // is an example of such code. Look for variable "is_par" for other // examples. @@ -221,7 +221,8 @@ public: SO_AllClasses = 0x1, SO_SystemClasses = 0x2, SO_Strings = 0x4, - SO_CodeCache = 0x8 + SO_AllCodeCache = 0x8, + SO_ScavengeCodeCache = 0x10 }; FlexibleWorkGang* workers() const { return _workers; } @@ -232,9 +233,9 @@ public: // "SO_AllClasses" applies the closure to all entries in the SystemDictionary; // "SO_SystemClasses" to all the "system" classes and loaders; // "SO_Strings" applies the closure to all entries in StringTable; - // "SO_CodeCache" applies the closure to all elements of the CodeCache. + // "SO_AllCodeCache" applies the closure to all elements of the CodeCache. + // "SO_ScavengeCodeCache" applies the closure to elements on the scavenge root list in the CodeCache. void process_strong_roots(bool activate_scope, - bool is_scavenging, ScanningOption so, OopClosure* roots, CodeBlobClosure* code_roots, diff --git a/hotspot/src/share/vm/memory/space.cpp b/hotspot/src/share/vm/memory/space.cpp index 8f844df81f1..7858a668293 100644 --- a/hotspot/src/share/vm/memory/space.cpp +++ b/hotspot/src/share/vm/memory/space.cpp @@ -112,7 +112,7 @@ void DirtyCardToOopClosure::do_MemRegion(MemRegion mr) { // cards are processed. For instance, CMS must remember mutator updates // (i.e. dirty cards) so as to re-scan mutated objects. // Such work can be piggy-backed here on dirty card scanning, so as to make - // it slightly more efficient than doing a complete non-detructive pre-scan + // it slightly more efficient than doing a complete non-destructive pre-scan // of the card table. MemRegionClosure* pCl = _sp->preconsumptionDirtyCardClosure(); if (pCl != NULL) { @@ -324,8 +324,8 @@ void OffsetTableContigSpace::set_bottom(HeapWord* new_bottom) { } void OffsetTableContigSpace::set_end(HeapWord* new_end) { - // Space should not advertize an increase in size - // until after the underlying offest table has been enlarged. + // Space should not advertise an increase in size + // until after the underlying offset table has been enlarged. _offsets.resize(pointer_delta(new_end, bottom())); Space::set_end(new_end); } @@ -729,7 +729,7 @@ void ContiguousSpace::object_iterate(ObjectClosure* blk) { object_iterate_from(bm, blk); } -// For a continguous space object_iterate() and safe_object_iterate() +// For a ContiguousSpace object_iterate() and safe_object_iterate() // are the same. void ContiguousSpace::safe_object_iterate(ObjectClosure* blk) { object_iterate(blk); diff --git a/hotspot/src/share/vm/memory/space.hpp b/hotspot/src/share/vm/memory/space.hpp index 04efc7da593..1adb1d33344 100644 --- a/hotspot/src/share/vm/memory/space.hpp +++ b/hotspot/src/share/vm/memory/space.hpp @@ -56,7 +56,7 @@ // Here's the Space hierarchy: // -// - Space -- an asbtract base class describing a heap area +// - Space -- an abstract base class describing a heap area // - CompactibleSpace -- a space supporting compaction // - CompactibleFreeListSpace -- (used for CMS generation) // - ContiguousSpace -- a compactible space in which all free space @@ -159,7 +159,7 @@ class Space: public CHeapObj { // (that is, if the space is contiguous), then this region must contain only // such objects: the memregion will be from the bottom of the region to the // saved mark. Otherwise, the "obj_allocated_since_save_marks" method of - // the space must distiguish between objects in the region allocated before + // the space must distinguish between objects in the region allocated before // and after the call to save marks. virtual MemRegion used_region_at_save_marks() const { return MemRegion(bottom(), saved_mark_word()); @@ -190,7 +190,7 @@ class Space: public CHeapObj { // Returns true iff the given the space contains the // given address as part of an allocated object. For - // ceratin kinds of spaces, this might be a potentially + // certain kinds of spaces, this might be a potentially // expensive operation. To prevent performance problems // on account of its inadvertent use in product jvm's, // we restrict its use to assertion checks only. @@ -244,13 +244,13 @@ class Space: public CHeapObj { // Return an address indicating the extent of the iteration in the // event that the iteration had to return because of finding an // uninitialized object in the space, or if the closure "cl" - // signalled early termination. + // signaled early termination. virtual HeapWord* object_iterate_careful(ObjectClosureCareful* cl); virtual HeapWord* object_iterate_careful_m(MemRegion mr, ObjectClosureCareful* cl); // Create and return a new dirty card to oop closure. Can be - // overriden to return the appropriate type of closure + // overridden to return the appropriate type of closure // depending on the type of space in which the closure will // operate. ResourceArea allocated. virtual DirtyCardToOopClosure* new_dcto_cl(ExtendedOopClosure* cl, @@ -474,13 +474,13 @@ public: // be one, since compaction must succeed -- we go to the first space of // the previous generation if necessary, updating "cp"), reset compact_top // and then forward. In either case, returns the new value of "compact_top". - // If the forwarding crosses "cp->threshold", invokes the "cross_threhold" + // If the forwarding crosses "cp->threshold", invokes the "cross_threshold" // function of the then-current compaction space, and updates "cp->threshold // accordingly". virtual HeapWord* forward(oop q, size_t size, CompactPoint* cp, HeapWord* compact_top); - // Return a size with adjusments as required of the space. + // Return a size with adjustments as required of the space. virtual size_t adjust_object_size_v(size_t size) const { return size; } protected: @@ -500,7 +500,7 @@ protected: // Requires "allowed_deadspace_words > 0", that "q" is the start of a // free block of the given "word_len", and that "q", were it an object, - // would not move if forwared. If the size allows, fill the free + // would not move if forwarded. If the size allows, fill the free // block with an object, to prevent excessive compaction. Returns "true" // iff the free region was made deadspace, and modifies // "allowed_deadspace_words" to reflect the number of available deadspace diff --git a/hotspot/src/share/vm/memory/tenuredGeneration.cpp b/hotspot/src/share/vm/memory/tenuredGeneration.cpp index a18d6813e2f..bc3f19cf849 100644 --- a/hotspot/src/share/vm/memory/tenuredGeneration.cpp +++ b/hotspot/src/share/vm/memory/tenuredGeneration.cpp @@ -135,7 +135,7 @@ bool TenuredGeneration::should_collect(bool full, free()); } } - // If we had to expand to accomodate promotions from younger generations + // If we had to expand to accommodate promotions from younger generations if (!result && _capacity_at_prologue < capacity()) { result = true; if (PrintGC && Verbose) { diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp index 9006398ebe2..715e6214c9b 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp +++ b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp @@ -34,6 +34,7 @@ // Thread-Local Edens support // static member initialization +size_t ThreadLocalAllocBuffer::_max_size = 0; unsigned ThreadLocalAllocBuffer::_target_refills = 0; GlobalTLABStats* ThreadLocalAllocBuffer::_global_stats = NULL; @@ -45,7 +46,7 @@ void ThreadLocalAllocBuffer::clear_before_allocation() { void ThreadLocalAllocBuffer::accumulate_statistics_before_gc() { global_stats()->initialize(); - for(JavaThread *thread = Threads::first(); thread; thread = thread->next()) { + for (JavaThread *thread = Threads::first(); thread != NULL; thread = thread->next()) { thread->tlab().accumulate_statistics(); thread->tlab().initialize_statistics(); } @@ -60,28 +61,32 @@ void ThreadLocalAllocBuffer::accumulate_statistics_before_gc() { } void ThreadLocalAllocBuffer::accumulate_statistics() { - size_t capacity = Universe::heap()->tlab_capacity(myThread()) / HeapWordSize; - size_t unused = Universe::heap()->unsafe_max_tlab_alloc(myThread()) / HeapWordSize; - size_t used = capacity - unused; - - // Update allocation history if a reasonable amount of eden was allocated. - bool update_allocation_history = used > 0.5 * capacity; + Thread* thread = myThread(); + size_t capacity = Universe::heap()->tlab_capacity(thread); + size_t used = Universe::heap()->tlab_used(thread); _gc_waste += (unsigned)remaining(); + size_t total_allocated = thread->allocated_bytes(); + size_t allocated_since_last_gc = total_allocated - _allocated_before_last_gc; + _allocated_before_last_gc = total_allocated; if (PrintTLAB && (_number_of_refills > 0 || Verbose)) { print_stats("gc"); } if (_number_of_refills > 0) { + // Update allocation history if a reasonable amount of eden was allocated. + bool update_allocation_history = used > 0.5 * capacity; if (update_allocation_history) { // Average the fraction of eden allocated in a tlab by this // thread for use in the next resize operation. // _gc_waste is not subtracted because it's included in // "used". - size_t allocation = _number_of_refills * desired_size(); - double alloc_frac = allocation / (double) used; + // The result can be larger than 1.0 due to direct to old allocations. + // These allocations should ideally not be counted but since it is not possible + // to filter them out here we just cap the fraction to be at most 1.0. + double alloc_frac = MIN2(1.0, (double) allocated_since_last_gc / used); _allocation_fraction.sample(alloc_frac); } global_stats()->update_allocating_threads(); @@ -126,33 +131,32 @@ void ThreadLocalAllocBuffer::make_parsable(bool retire) { } void ThreadLocalAllocBuffer::resize_all_tlabs() { - for(JavaThread *thread = Threads::first(); thread; thread = thread->next()) { - thread->tlab().resize(); + if (ResizeTLAB) { + for (JavaThread *thread = Threads::first(); thread != NULL; thread = thread->next()) { + thread->tlab().resize(); + } } } void ThreadLocalAllocBuffer::resize() { + // Compute the next tlab size using expected allocation amount + assert(ResizeTLAB, "Should not call this otherwise"); + size_t alloc = (size_t)(_allocation_fraction.average() * + (Universe::heap()->tlab_capacity(myThread()) / HeapWordSize)); + size_t new_size = alloc / _target_refills; - if (ResizeTLAB) { - // Compute the next tlab size using expected allocation amount - size_t alloc = (size_t)(_allocation_fraction.average() * - (Universe::heap()->tlab_capacity(myThread()) / HeapWordSize)); - size_t new_size = alloc / _target_refills; + new_size = MIN2(MAX2(new_size, min_size()), max_size()); - new_size = MIN2(MAX2(new_size, min_size()), max_size()); + size_t aligned_new_size = align_object_size(new_size); - size_t aligned_new_size = align_object_size(new_size); - - if (PrintTLAB && Verbose) { - gclog_or_tty->print("TLAB new size: thread: " INTPTR_FORMAT " [id: %2d]" - " refills %d alloc: %8.6f desired_size: " SIZE_FORMAT " -> " SIZE_FORMAT "\n", - myThread(), myThread()->osthread()->thread_id(), - _target_refills, _allocation_fraction.average(), desired_size(), aligned_new_size); - } - set_desired_size(aligned_new_size); - - set_refill_waste_limit(initial_refill_waste_limit()); + if (PrintTLAB && Verbose) { + gclog_or_tty->print("TLAB new size: thread: " INTPTR_FORMAT " [id: %2d]" + " refills %d alloc: %8.6f desired_size: " SIZE_FORMAT " -> " SIZE_FORMAT "\n", + myThread(), myThread()->osthread()->thread_id(), + _target_refills, _allocation_fraction.average(), desired_size(), aligned_new_size); } + set_desired_size(aligned_new_size); + set_refill_waste_limit(initial_refill_waste_limit()); } void ThreadLocalAllocBuffer::initialize_statistics() { @@ -248,31 +252,13 @@ size_t ThreadLocalAllocBuffer::initial_desired_size() { return init_sz; } -const size_t ThreadLocalAllocBuffer::max_size() { - - // TLABs can't be bigger than we can fill with a int[Integer.MAX_VALUE]. - // This restriction could be removed by enabling filling with multiple arrays. - // If we compute that the reasonable way as - // header_size + ((sizeof(jint) * max_jint) / HeapWordSize) - // we'll overflow on the multiply, so we do the divide first. - // We actually lose a little by dividing first, - // but that just makes the TLAB somewhat smaller than the biggest array, - // which is fine, since we'll be able to fill that. - - size_t unaligned_max_size = typeArrayOopDesc::header_size(T_INT) + - sizeof(jint) * - ((juint) max_jint / (size_t) HeapWordSize); - return align_size_down(unaligned_max_size, MinObjAlignment); -} - void ThreadLocalAllocBuffer::print_stats(const char* tag) { Thread* thrd = myThread(); size_t waste = _gc_waste + _slow_refill_waste + _fast_refill_waste; size_t alloc = _number_of_refills * _desired_size; double waste_percent = alloc == 0 ? 0.0 : 100.0 * waste / alloc; - size_t tlab_used = Universe::heap()->tlab_capacity(thrd) - - Universe::heap()->unsafe_max_tlab_alloc(thrd); + size_t tlab_used = Universe::heap()->tlab_used(thrd); gclog_or_tty->print("TLAB: %s thread: " INTPTR_FORMAT " [id: %2d]" " desired_size: " SIZE_FORMAT "KB" " slow allocs: %d refill waste: " SIZE_FORMAT "B" diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp index f8acf536ee3..e0dc61a73f6 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp +++ b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp @@ -45,7 +45,9 @@ private: HeapWord* _end; // allocation end (excluding alignment_reserve) size_t _desired_size; // desired size (including alignment_reserve) size_t _refill_waste_limit; // hold onto tlab if free() is larger than this + size_t _allocated_before_last_gc; // total bytes allocated up until the last gc + static size_t _max_size; // maximum size of any TLAB static unsigned _target_refills; // expected number of refills between GCs unsigned _number_of_refills; @@ -99,12 +101,13 @@ private: static GlobalTLABStats* global_stats() { return _global_stats; } public: - ThreadLocalAllocBuffer() : _allocation_fraction(TLABAllocationWeight) { + ThreadLocalAllocBuffer() : _allocation_fraction(TLABAllocationWeight), _allocated_before_last_gc(0) { // do nothing. tlabs must be inited by initialize() calls } static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize); } - static const size_t max_size(); + static const size_t max_size() { assert(_max_size != 0, "max_size not set up"); return _max_size; } + static void set_max_size(size_t max_size) { _max_size = max_size; } HeapWord* start() const { return _start; } HeapWord* end() const { return _end; } diff --git a/hotspot/src/share/vm/memory/universe.cpp b/hotspot/src/share/vm/memory/universe.cpp index d022ae17913..eecf3a93847 100644 --- a/hotspot/src/share/vm/memory/universe.cpp +++ b/hotspot/src/share/vm/memory/universe.cpp @@ -816,6 +816,8 @@ jint Universe::initialize_heap() { Universe::_collectedHeap = new GenCollectedHeap(gc_policy); } + ThreadLocalAllocBuffer::set_max_size(Universe::heap()->max_tlab_size()); + jint status = Universe::heap()->initialize(); if (status != JNI_OK) { return status; @@ -1136,7 +1138,7 @@ bool universe_post_init() { SystemDictionary::ProtectionDomain_klass(), m);; } - // The folowing is initializing converter functions for serialization in + // The following is initializing converter functions for serialization in // JVM.cpp. If we clean up the StrictMath code above we may want to find // a better solution for this as well. initialize_converter_functions(); @@ -1178,7 +1180,7 @@ void Universe::flush_dependents_on(instanceKlassHandle dependee) { if (CodeCache::number_of_nmethods_with_dependencies() == 0) return; // CodeCache can only be updated by a thread_in_VM and they will all be - // stopped dring the safepoint so CodeCache will be safe to update without + // stopped during the safepoint so CodeCache will be safe to update without // holding the CodeCache_lock. KlassDepChange changes(dependee); @@ -1199,7 +1201,7 @@ void Universe::flush_dependents_on(Handle call_site, Handle method_handle) { if (CodeCache::number_of_nmethods_with_dependencies() == 0) return; // CodeCache can only be updated by a thread_in_VM and they will all be - // stopped dring the safepoint so CodeCache will be safe to update without + // stopped during the safepoint so CodeCache will be safe to update without // holding the CodeCache_lock. CallSiteDepChange changes(call_site(), method_handle()); @@ -1230,7 +1232,7 @@ void Universe::flush_evol_dependents_on(instanceKlassHandle ev_k_h) { if (CodeCache::number_of_nmethods_with_dependencies() == 0) return; // CodeCache can only be updated by a thread_in_VM and they will all be - // stopped dring the safepoint so CodeCache will be safe to update without + // stopped during the safepoint so CodeCache will be safe to update without // holding the CodeCache_lock. // Compute the dependent nmethods diff --git a/hotspot/src/share/vm/oops/constantPool.cpp b/hotspot/src/share/vm/oops/constantPool.cpp index 16b53a69929..223fbc16935 100644 --- a/hotspot/src/share/vm/oops/constantPool.cpp +++ b/hotspot/src/share/vm/oops/constantPool.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -1874,7 +1874,6 @@ void ConstantPool::preload_and_initialize_all_classes(ConstantPool* obj, TRAPS) // Printing void ConstantPool::print_on(outputStream* st) const { - EXCEPTION_MARK; assert(is_constantPool(), "must be constantPool"); st->print_cr(internal_name()); if (flags() != 0) { diff --git a/hotspot/src/share/vm/oops/method.hpp b/hotspot/src/share/vm/oops/method.hpp index 63705b3cc26..458c394295b 100644 --- a/hotspot/src/share/vm/oops/method.hpp +++ b/hotspot/src/share/vm/oops/method.hpp @@ -38,13 +38,11 @@ #include "utilities/accessFlags.hpp" #include "utilities/growableArray.hpp" -// A Method* represents a Java method. +// A Method represents a Java method. // // Memory layout (each line represents a word). Note that most applications load thousands of methods, // so keeping the size of this structure small has a big impact on footprint. // -// We put all oops and method_size first for better gc cache locality. -// // The actual bytecodes are inlined after the end of the Method struct. // // There are bits in the access_flags telling whether inlined tables are present. @@ -64,17 +62,17 @@ // | header | // | klass | // |------------------------------------------------------| -// | ConstMethod* (oop) | +// | ConstMethod* (metadata) | // |------------------------------------------------------| -// | methodData (oop) | -// | methodCounters | +// | MethodData* (metadata) | +// | MethodCounters | // |------------------------------------------------------| // | access_flags | // | vtable_index | // |------------------------------------------------------| // | result_index (C++ interpreter only) | // |------------------------------------------------------| -// | method_size | intrinsic_id| flags | +// | method_size | intrinsic_id | flags | // |------------------------------------------------------| // | code (pointer) | // | i2i (pointer) | diff --git a/hotspot/src/share/vm/opto/cfgnode.cpp b/hotspot/src/share/vm/opto/cfgnode.cpp index 36347fb9202..36818b75b13 100644 --- a/hotspot/src/share/vm/opto/cfgnode.cpp +++ b/hotspot/src/share/vm/opto/cfgnode.cpp @@ -1018,7 +1018,7 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const { !jtkp->klass_is_exact() && // Keep exact interface klass (6894807) ttkp->is_loaded() && !ttkp->klass()->is_interface() ) { assert(ft == ttkp->cast_to_ptr_type(jtkp->ptr()) || - ft->isa_narrowoop() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), ""); + ft->isa_narrowklass() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), ""); jt = ft; } } diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index df6c29f5766..564aa7c1fa9 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -304,6 +304,7 @@ class LibraryCallKit : public GraphKit { bool inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id); Node* inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting); Node* get_key_start_from_aescrypt_object(Node* aescrypt_object); + Node* get_original_key_start_from_aescrypt_object(Node* aescrypt_object); bool inline_encodeISOArray(); bool inline_updateCRC32(); bool inline_updateBytesCRC32(); @@ -5936,10 +5937,22 @@ bool LibraryCallKit::inline_aescrypt_Block(vmIntrinsics::ID id) { Node* k_start = get_key_start_from_aescrypt_object(aescrypt_object); if (k_start == NULL) return false; - // Call the stub. - make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::aescrypt_block_Type(), - stubAddr, stubName, TypePtr::BOTTOM, - src_start, dest_start, k_start); + if (Matcher::pass_original_key_for_aes()) { + // on SPARC we need to pass the original key since key expansion needs to happen in intrinsics due to + // compatibility issues between Java key expansion and SPARC crypto instructions + Node* original_k_start = get_original_key_start_from_aescrypt_object(aescrypt_object); + if (original_k_start == NULL) return false; + + // Call the stub. + make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::aescrypt_block_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start, original_k_start); + } else { + // Call the stub. + make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::aescrypt_block_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start); + } return true; } @@ -6017,14 +6030,29 @@ bool LibraryCallKit::inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id) { if (objRvec == NULL) return false; Node* r_start = array_element_address(objRvec, intcon(0), T_BYTE); - // Call the stub, passing src_start, dest_start, k_start, r_start and src_len - make_runtime_call(RC_LEAF|RC_NO_FP, - OptoRuntime::cipherBlockChaining_aescrypt_Type(), - stubAddr, stubName, TypePtr::BOTTOM, - src_start, dest_start, k_start, r_start, len); + Node* cbcCrypt; + if (Matcher::pass_original_key_for_aes()) { + // on SPARC we need to pass the original key since key expansion needs to happen in intrinsics due to + // compatibility issues between Java key expansion and SPARC crypto instructions + Node* original_k_start = get_original_key_start_from_aescrypt_object(aescrypt_object); + if (original_k_start == NULL) return false; - // return is void so no result needs to be pushed + // Call the stub, passing src_start, dest_start, k_start, r_start, src_len and original_k_start + cbcCrypt = make_runtime_call(RC_LEAF|RC_NO_FP, + OptoRuntime::cipherBlockChaining_aescrypt_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start, r_start, len, original_k_start); + } else { + // Call the stub, passing src_start, dest_start, k_start, r_start and src_len + cbcCrypt = make_runtime_call(RC_LEAF|RC_NO_FP, + OptoRuntime::cipherBlockChaining_aescrypt_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start, r_start, len); + } + // return cipher length (int) + Node* retvalue = _gvn.transform(new (C) ProjNode(cbcCrypt, TypeFunc::Parms)); + set_result(retvalue); return true; } @@ -6039,6 +6067,17 @@ Node * LibraryCallKit::get_key_start_from_aescrypt_object(Node *aescrypt_object) return k_start; } +//------------------------------get_original_key_start_from_aescrypt_object----------------------- +Node * LibraryCallKit::get_original_key_start_from_aescrypt_object(Node *aescrypt_object) { + Node* objAESCryptKey = load_field_from_object(aescrypt_object, "lastKey", "[B", /*is_exact*/ false); + assert (objAESCryptKey != NULL, "wrong version of com.sun.crypto.provider.AESCrypt"); + if (objAESCryptKey == NULL) return (Node *) NULL; + + // now have the array, need to get the start address of the lastKey array + Node* original_k_start = array_element_address(objAESCryptKey, intcon(0), T_BYTE); + return original_k_start; +} + //----------------------------inline_cipherBlockChaining_AESCrypt_predicate---------------------------- // Return node representing slow path of predicate check. // the pseudo code we want to emulate with this predicate is: diff --git a/hotspot/src/share/vm/opto/matcher.hpp b/hotspot/src/share/vm/opto/matcher.hpp index f840d0c6edc..c2997170919 100644 --- a/hotspot/src/share/vm/opto/matcher.hpp +++ b/hotspot/src/share/vm/opto/matcher.hpp @@ -286,6 +286,9 @@ public: // CPU supports misaligned vectors store/load. static const bool misaligned_vectors_ok(); + // Should original key array reference be passed to AES stubs + static const bool pass_original_key_for_aes(); + // Used to determine a "low complexity" 64-bit constant. (Zero is simple.) // The standard of comparison is one (StoreL ConL) vs. two (StoreI ConI). // Depends on the details of 64-bit constant generation on the CPU. diff --git a/hotspot/src/share/vm/opto/runtime.cpp b/hotspot/src/share/vm/opto/runtime.cpp index 6e09cb7dff9..da74b499a33 100644 --- a/hotspot/src/share/vm/opto/runtime.cpp +++ b/hotspot/src/share/vm/opto/runtime.cpp @@ -568,8 +568,7 @@ const TypeFunc *OptoRuntime::g1_wb_post_Type() { const TypeFunc *OptoRuntime::uncommon_trap_Type() { // create input type (domain) const Type **fields = TypeTuple::fields(1); - // Symbol* name of class to be loaded - fields[TypeFunc::Parms+0] = TypeInt::INT; + fields[TypeFunc::Parms+0] = TypeInt::INT; // trap_reason (deopt reason and action) const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1, fields); // create result type (range) @@ -814,12 +813,18 @@ const TypeFunc* OptoRuntime::array_fill_Type() { const TypeFunc* OptoRuntime::aescrypt_block_Type() { // create input type (domain) int num_args = 3; + if (Matcher::pass_original_key_for_aes()) { + num_args = 4; + } int argcnt = num_args; const Type** fields = TypeTuple::fields(argcnt); int argp = TypeFunc::Parms; fields[argp++] = TypePtr::NOTNULL; // src fields[argp++] = TypePtr::NOTNULL; // dest fields[argp++] = TypePtr::NOTNULL; // k array + if (Matcher::pass_original_key_for_aes()) { + fields[argp++] = TypePtr::NOTNULL; // original k array + } assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); @@ -856,6 +861,9 @@ const TypeFunc* OptoRuntime::updateBytesCRC32_Type() { const TypeFunc* OptoRuntime::cipherBlockChaining_aescrypt_Type() { // create input type (domain) int num_args = 5; + if (Matcher::pass_original_key_for_aes()) { + num_args = 6; + } int argcnt = num_args; const Type** fields = TypeTuple::fields(argcnt); int argp = TypeFunc::Parms; @@ -864,13 +872,16 @@ const TypeFunc* OptoRuntime::cipherBlockChaining_aescrypt_Type() { fields[argp++] = TypePtr::NOTNULL; // k array fields[argp++] = TypePtr::NOTNULL; // r array fields[argp++] = TypeInt::INT; // src len + if (Matcher::pass_original_key_for_aes()) { + fields[argp++] = TypePtr::NOTNULL; // original k array + } assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); - // no result type needed + // returning cipher len (int) fields = TypeTuple::fields(1); - fields[TypeFunc::Parms+0] = NULL; // void - const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields); + fields[TypeFunc::Parms+0] = TypeInt::INT; + const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields); return TypeFunc::make(domain, range); } diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp index 449ed679847..a4201f1e84b 100644 --- a/hotspot/src/share/vm/prims/jni.cpp +++ b/hotspot/src/share/vm/prims/jni.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -433,8 +433,7 @@ JNI_ENTRY(jclass, jni_FindClass(JNIEnv *env, const char *name)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, FindClass__entry, env, name); #else /* USDT2 */ - HOTSPOT_JNI_FINDCLASS_ENTRY( - env, (char *)name); + HOTSPOT_JNI_FINDCLASS_ENTRY(env, (char *)name); #endif /* USDT2 */ jclass result = NULL; @@ -511,8 +510,7 @@ JNI_ENTRY(jmethodID, jni_FromReflectedMethod(JNIEnv *env, jobject method)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, FromReflectedMethod__entry, env, method); #else /* USDT2 */ - HOTSPOT_JNI_FROMREFLECTEDMETHOD_ENTRY( - env, method); + HOTSPOT_JNI_FROMREFLECTEDMETHOD_ENTRY(env, method); #endif /* USDT2 */ jmethodID ret = NULL; DT_RETURN_MARK(FromReflectedMethod, jmethodID, (const jmethodID&)ret); @@ -552,8 +550,7 @@ JNI_ENTRY(jfieldID, jni_FromReflectedField(JNIEnv *env, jobject field)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, FromReflectedField__entry, env, field); #else /* USDT2 */ - HOTSPOT_JNI_FROMREFLECTEDFIELD_ENTRY( - env, field); + HOTSPOT_JNI_FROMREFLECTEDFIELD_ENTRY(env, field); #endif /* USDT2 */ jfieldID ret = NULL; DT_RETURN_MARK(FromReflectedField, jfieldID, (const jfieldID&)ret); @@ -601,8 +598,7 @@ JNI_ENTRY(jobject, jni_ToReflectedMethod(JNIEnv *env, jclass cls, jmethodID meth #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, ToReflectedMethod__entry, env, cls, method_id, isStatic); #else /* USDT2 */ - HOTSPOT_JNI_TOREFLECTEDMETHOD_ENTRY( - env, cls, (uintptr_t) method_id, isStatic); + HOTSPOT_JNI_TOREFLECTEDMETHOD_ENTRY(env, cls, (uintptr_t) method_id, isStatic); #endif /* USDT2 */ jobject ret = NULL; DT_RETURN_MARK(ToReflectedMethod, jobject, (const jobject&)ret); @@ -631,8 +627,7 @@ JNI_ENTRY(jclass, jni_GetSuperclass(JNIEnv *env, jclass sub)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetSuperclass__entry, env, sub); #else /* USDT2 */ - HOTSPOT_JNI_GETSUPERCLASS_ENTRY( - env, sub); + HOTSPOT_JNI_GETSUPERCLASS_ENTRY(env, sub); #endif /* USDT2 */ jclass obj = NULL; DT_RETURN_MARK(GetSuperclass, jclass, (const jclass&)obj); @@ -665,8 +660,7 @@ JNI_QUICK_ENTRY(jboolean, jni_IsAssignableFrom(JNIEnv *env, jclass sub, jclass s #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, IsAssignableFrom__entry, env, sub, super); #else /* USDT2 */ - HOTSPOT_JNI_ISASSIGNABLEFROM_ENTRY( - env, sub, super); + HOTSPOT_JNI_ISASSIGNABLEFROM_ENTRY(env, sub, super); #endif /* USDT2 */ oop sub_mirror = JNIHandles::resolve_non_null(sub); oop super_mirror = JNIHandles::resolve_non_null(super); @@ -676,8 +670,7 @@ JNI_QUICK_ENTRY(jboolean, jni_IsAssignableFrom(JNIEnv *env, jclass sub, jclass s #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, IsAssignableFrom__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN( - ret); + HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret); #endif /* USDT2 */ return ret; } @@ -689,8 +682,7 @@ JNI_QUICK_ENTRY(jboolean, jni_IsAssignableFrom(JNIEnv *env, jclass sub, jclass s #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, IsAssignableFrom__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN( - ret); + HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -707,8 +699,7 @@ JNI_ENTRY(jint, jni_Throw(JNIEnv *env, jthrowable obj)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, Throw__entry, env, obj); #else /* USDT2 */ - HOTSPOT_JNI_THROW_ENTRY( - env, obj); + HOTSPOT_JNI_THROW_ENTRY(env, obj); #endif /* USDT2 */ jint ret = JNI_OK; DT_RETURN_MARK(Throw, jint, (const jint&)ret); @@ -729,8 +720,7 @@ JNI_ENTRY(jint, jni_ThrowNew(JNIEnv *env, jclass clazz, const char *message)) #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, ThrowNew__entry, env, clazz, message); #else /* USDT2 */ - HOTSPOT_JNI_THROWNEW_ENTRY( - env, clazz, (char *) message); + HOTSPOT_JNI_THROWNEW_ENTRY(env, clazz, (char *) message); #endif /* USDT2 */ jint ret = JNI_OK; DT_RETURN_MARK(ThrowNew, jint, (const jint&)ret); @@ -763,8 +753,7 @@ JNI_ENTRY_NO_PRESERVE(jthrowable, jni_ExceptionOccurred(JNIEnv *env)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, ExceptionOccurred__entry, env); #else /* USDT2 */ - HOTSPOT_JNI_EXCEPTIONOCCURRED_ENTRY( - env); + HOTSPOT_JNI_EXCEPTIONOCCURRED_ENTRY(env); #endif /* USDT2 */ jni_check_async_exceptions(thread); oop exception = thread->pending_exception(); @@ -772,8 +761,7 @@ JNI_ENTRY_NO_PRESERVE(jthrowable, jni_ExceptionOccurred(JNIEnv *env)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, ExceptionOccurred__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_EXCEPTIONOCCURRED_RETURN( - ret); + HOTSPOT_JNI_EXCEPTIONOCCURRED_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -784,8 +772,7 @@ JNI_ENTRY_NO_PRESERVE(void, jni_ExceptionDescribe(JNIEnv *env)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, ExceptionDescribe__entry, env); #else /* USDT2 */ - HOTSPOT_JNI_EXCEPTIONDESCRIBE_ENTRY( - env); + HOTSPOT_JNI_EXCEPTIONDESCRIBE_ENTRY(env); #endif /* USDT2 */ if (thread->has_pending_exception()) { Handle ex(thread, thread->pending_exception()); @@ -825,8 +812,7 @@ JNI_ENTRY_NO_PRESERVE(void, jni_ExceptionDescribe(JNIEnv *env)) #ifndef USDT2 DTRACE_PROBE(hotspot_jni, ExceptionDescribe__return); #else /* USDT2 */ - HOTSPOT_JNI_EXCEPTIONDESCRIBE_RETURN( - ); + HOTSPOT_JNI_EXCEPTIONDESCRIBE_RETURN(); #endif /* USDT2 */ JNI_END @@ -836,8 +822,7 @@ JNI_QUICK_ENTRY(void, jni_ExceptionClear(JNIEnv *env)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, ExceptionClear__entry, env); #else /* USDT2 */ - HOTSPOT_JNI_EXCEPTIONCLEAR_ENTRY( - env); + HOTSPOT_JNI_EXCEPTIONCLEAR_ENTRY(env); #endif /* USDT2 */ // The jni code might be using this API to clear java thrown exception. @@ -850,8 +835,7 @@ JNI_QUICK_ENTRY(void, jni_ExceptionClear(JNIEnv *env)) #ifndef USDT2 DTRACE_PROBE(hotspot_jni, ExceptionClear__return); #else /* USDT2 */ - HOTSPOT_JNI_EXCEPTIONCLEAR_RETURN( - ); + HOTSPOT_JNI_EXCEPTIONCLEAR_RETURN(); #endif /* USDT2 */ JNI_END @@ -861,8 +845,7 @@ JNI_ENTRY(void, jni_FatalError(JNIEnv *env, const char *msg)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, FatalError__entry, env, msg); #else /* USDT2 */ - HOTSPOT_JNI_FATALERROR_ENTRY( - env, (char *) msg); + HOTSPOT_JNI_FATALERROR_ENTRY(env, (char *) msg); #endif /* USDT2 */ tty->print_cr("FATAL ERROR in native method: %s", msg); thread->print_stack(); @@ -875,16 +858,14 @@ JNI_ENTRY(jint, jni_PushLocalFrame(JNIEnv *env, jint capacity)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, PushLocalFrame__entry, env, capacity); #else /* USDT2 */ - HOTSPOT_JNI_PUSHLOCALFRAME_ENTRY( - env, capacity); + HOTSPOT_JNI_PUSHLOCALFRAME_ENTRY(env, capacity); #endif /* USDT2 */ //%note jni_11 if (capacity < 0 || capacity > MAX_REASONABLE_LOCAL_CAPACITY) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, PushLocalFrame__return, JNI_ERR); #else /* USDT2 */ - HOTSPOT_JNI_PUSHLOCALFRAME_RETURN( - (uint32_t)JNI_ERR); + HOTSPOT_JNI_PUSHLOCALFRAME_RETURN((uint32_t)JNI_ERR); #endif /* USDT2 */ return JNI_ERR; } @@ -897,8 +878,7 @@ JNI_ENTRY(jint, jni_PushLocalFrame(JNIEnv *env, jint capacity)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, PushLocalFrame__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_PUSHLOCALFRAME_RETURN( - ret); + HOTSPOT_JNI_PUSHLOCALFRAME_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -909,8 +889,7 @@ JNI_ENTRY(jobject, jni_PopLocalFrame(JNIEnv *env, jobject result)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, PopLocalFrame__entry, env, result); #else /* USDT2 */ - HOTSPOT_JNI_POPLOCALFRAME_ENTRY( - env, result); + HOTSPOT_JNI_POPLOCALFRAME_ENTRY(env, result); #endif /* USDT2 */ //%note jni_11 Handle result_handle(thread, JNIHandles::resolve(result)); @@ -929,8 +908,7 @@ JNI_ENTRY(jobject, jni_PopLocalFrame(JNIEnv *env, jobject result)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, PopLocalFrame__return, result); #else /* USDT2 */ - HOTSPOT_JNI_POPLOCALFRAME_RETURN( - result); + HOTSPOT_JNI_POPLOCALFRAME_RETURN(result); #endif /* USDT2 */ return result; JNI_END @@ -941,16 +919,14 @@ JNI_ENTRY(jobject, jni_NewGlobalRef(JNIEnv *env, jobject ref)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, NewGlobalRef__entry, env, ref); #else /* USDT2 */ - HOTSPOT_JNI_NEWGLOBALREF_ENTRY( - env, ref); + HOTSPOT_JNI_NEWGLOBALREF_ENTRY(env, ref); #endif /* USDT2 */ Handle ref_handle(thread, JNIHandles::resolve(ref)); jobject ret = JNIHandles::make_global(ref_handle); #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, NewGlobalRef__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_NEWGLOBALREF_RETURN( - ret); + HOTSPOT_JNI_NEWGLOBALREF_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -961,15 +937,13 @@ JNI_ENTRY_NO_PRESERVE(void, jni_DeleteGlobalRef(JNIEnv *env, jobject ref)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, DeleteGlobalRef__entry, env, ref); #else /* USDT2 */ - HOTSPOT_JNI_DELETEGLOBALREF_ENTRY( - env, ref); + HOTSPOT_JNI_DELETEGLOBALREF_ENTRY(env, ref); #endif /* USDT2 */ JNIHandles::destroy_global(ref); #ifndef USDT2 DTRACE_PROBE(hotspot_jni, DeleteGlobalRef__return); #else /* USDT2 */ - HOTSPOT_JNI_DELETEGLOBALREF_RETURN( - ); + HOTSPOT_JNI_DELETEGLOBALREF_RETURN(); #endif /* USDT2 */ JNI_END @@ -978,15 +952,13 @@ JNI_QUICK_ENTRY(void, jni_DeleteLocalRef(JNIEnv *env, jobject obj)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, DeleteLocalRef__entry, env, obj); #else /* USDT2 */ - HOTSPOT_JNI_DELETELOCALREF_ENTRY( - env, obj); + HOTSPOT_JNI_DELETELOCALREF_ENTRY(env, obj); #endif /* USDT2 */ JNIHandles::destroy_local(obj); #ifndef USDT2 DTRACE_PROBE(hotspot_jni, DeleteLocalRef__return); #else /* USDT2 */ - HOTSPOT_JNI_DELETELOCALREF_RETURN( - ); + HOTSPOT_JNI_DELETELOCALREF_RETURN(); #endif /* USDT2 */ JNI_END @@ -995,8 +967,7 @@ JNI_QUICK_ENTRY(jboolean, jni_IsSameObject(JNIEnv *env, jobject r1, jobject r2)) #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, IsSameObject__entry, env, r1, r2); #else /* USDT2 */ - HOTSPOT_JNI_ISSAMEOBJECT_ENTRY( - env, r1, r2); + HOTSPOT_JNI_ISSAMEOBJECT_ENTRY(env, r1, r2); #endif /* USDT2 */ oop a = JNIHandles::resolve(r1); oop b = JNIHandles::resolve(r2); @@ -1004,8 +975,7 @@ JNI_QUICK_ENTRY(jboolean, jni_IsSameObject(JNIEnv *env, jobject r1, jobject r2)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, IsSameObject__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_ISSAMEOBJECT_RETURN( - ret); + HOTSPOT_JNI_ISSAMEOBJECT_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -1016,15 +986,13 @@ JNI_ENTRY(jobject, jni_NewLocalRef(JNIEnv *env, jobject ref)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, NewLocalRef__entry, env, ref); #else /* USDT2 */ - HOTSPOT_JNI_NEWLOCALREF_ENTRY( - env, ref); + HOTSPOT_JNI_NEWLOCALREF_ENTRY(env, ref); #endif /* USDT2 */ jobject ret = JNIHandles::make_local(env, JNIHandles::resolve(ref)); #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, NewLocalRef__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_NEWLOCALREF_RETURN( - ret); + HOTSPOT_JNI_NEWLOCALREF_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -1034,8 +1002,7 @@ JNI_LEAF(jint, jni_EnsureLocalCapacity(JNIEnv *env, jint capacity)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, EnsureLocalCapacity__entry, env, capacity); #else /* USDT2 */ - HOTSPOT_JNI_ENSURELOCALCAPACITY_ENTRY( - env, capacity); + HOTSPOT_JNI_ENSURELOCALCAPACITY_ENTRY(env, capacity); #endif /* USDT2 */ jint ret; if (capacity >= 0 && capacity <= MAX_REASONABLE_LOCAL_CAPACITY) { @@ -1046,8 +1013,7 @@ JNI_LEAF(jint, jni_EnsureLocalCapacity(JNIEnv *env, jint capacity)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, EnsureLocalCapacity__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_ENSURELOCALCAPACITY_RETURN( - ret); + HOTSPOT_JNI_ENSURELOCALCAPACITY_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -1058,8 +1024,7 @@ JNI_LEAF(jobjectRefType, jni_GetObjectRefType(JNIEnv *env, jobject obj)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetObjectRefType__entry, env, obj); #else /* USDT2 */ - HOTSPOT_JNI_GETOBJECTREFTYPE_ENTRY( - env, obj); + HOTSPOT_JNI_GETOBJECTREFTYPE_ENTRY(env, obj); #endif /* USDT2 */ jobjectRefType ret; if (JNIHandles::is_local_handle(thread, obj) || @@ -1074,8 +1039,7 @@ JNI_LEAF(jobjectRefType, jni_GetObjectRefType(JNIEnv *env, jobject obj)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetObjectRefType__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETOBJECTREFTYPE_RETURN( - (void *) ret); + HOTSPOT_JNI_GETOBJECTREFTYPE_RETURN((void *) ret); #endif /* USDT2 */ return ret; JNI_END @@ -1391,6 +1355,10 @@ static void jni_invoke_nonstatic(JNIEnv *env, JavaValue* result, jobject receive static instanceOop alloc_object(jclass clazz, TRAPS) { KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz))); + if (k == NULL) { + ResourceMark rm(THREAD); + THROW_(vmSymbols::java_lang_InstantiationException(), NULL); + } k()->check_valid_for_instantiation(false, CHECK_NULL); InstanceKlass::cast(k())->initialize(CHECK_NULL); instanceOop ih = InstanceKlass::cast(k())->allocate_instance(THREAD); @@ -1410,8 +1378,7 @@ JNI_ENTRY(jobject, jni_AllocObject(JNIEnv *env, jclass clazz)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, AllocObject__entry, env, clazz); #else /* USDT2 */ - HOTSPOT_JNI_ALLOCOBJECT_ENTRY( - env, clazz); + HOTSPOT_JNI_ALLOCOBJECT_ENTRY(env, clazz); #endif /* USDT2 */ jobject ret = NULL; DT_RETURN_MARK(AllocObject, jobject, (const jobject&)ret); @@ -1433,8 +1400,7 @@ JNI_ENTRY(jobject, jni_NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID, #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, NewObjectA__entry, env, clazz, methodID); #else /* USDT2 */ - HOTSPOT_JNI_NEWOBJECTA_ENTRY( - env, clazz, (uintptr_t) methodID); + HOTSPOT_JNI_NEWOBJECTA_ENTRY(env, clazz, (uintptr_t) methodID); #endif /* USDT2 */ jobject obj = NULL; DT_RETURN_MARK(NewObjectA, jobject, (const jobject)obj); @@ -1459,8 +1425,7 @@ JNI_ENTRY(jobject, jni_NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID, #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, NewObjectV__entry, env, clazz, methodID); #else /* USDT2 */ - HOTSPOT_JNI_NEWOBJECTV_ENTRY( - env, clazz, (uintptr_t) methodID); + HOTSPOT_JNI_NEWOBJECTV_ENTRY(env, clazz, (uintptr_t) methodID); #endif /* USDT2 */ jobject obj = NULL; DT_RETURN_MARK(NewObjectV, jobject, (const jobject&)obj); @@ -1485,8 +1450,7 @@ JNI_ENTRY(jobject, jni_NewObject(JNIEnv *env, jclass clazz, jmethodID methodID, #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, NewObject__entry, env, clazz, methodID); #else /* USDT2 */ - HOTSPOT_JNI_NEWOBJECT_ENTRY( - env, clazz, (uintptr_t) methodID); + HOTSPOT_JNI_NEWOBJECT_ENTRY(env, clazz, (uintptr_t) methodID); #endif /* USDT2 */ jobject obj = NULL; DT_RETURN_MARK(NewObject, jobject, (const jobject&)obj); @@ -1508,8 +1472,7 @@ JNI_ENTRY(jclass, jni_GetObjectClass(JNIEnv *env, jobject obj)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetObjectClass__entry, env, obj); #else /* USDT2 */ - HOTSPOT_JNI_GETOBJECTCLASS_ENTRY( - env, obj); + HOTSPOT_JNI_GETOBJECTCLASS_ENTRY(env, obj); #endif /* USDT2 */ Klass* k = JNIHandles::resolve_non_null(obj)->klass(); jclass ret = @@ -1517,8 +1480,7 @@ JNI_ENTRY(jclass, jni_GetObjectClass(JNIEnv *env, jobject obj)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetObjectClass__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETOBJECTCLASS_RETURN( - ret); + HOTSPOT_JNI_GETOBJECTCLASS_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -1528,8 +1490,7 @@ JNI_QUICK_ENTRY(jboolean, jni_IsInstanceOf(JNIEnv *env, jobject obj, jclass claz #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, IsInstanceOf__entry, env, obj, clazz); #else /* USDT2 */ - HOTSPOT_JNI_ISINSTANCEOF_ENTRY( - env, obj, clazz); + HOTSPOT_JNI_ISINSTANCEOF_ENTRY(env, obj, clazz); #endif /* USDT2 */ jboolean ret = JNI_TRUE; if (obj != NULL) { @@ -1543,8 +1504,7 @@ JNI_QUICK_ENTRY(jboolean, jni_IsInstanceOf(JNIEnv *env, jobject obj, jclass claz #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, IsInstanceOf__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_ISINSTANCEOF_RETURN( - ret); + HOTSPOT_JNI_ISINSTANCEOF_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -1608,15 +1568,13 @@ JNI_ENTRY(jmethodID, jni_GetMethodID(JNIEnv *env, jclass clazz, #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, GetMethodID__entry, env, clazz, name, sig); #else /* USDT2 */ - HOTSPOT_JNI_GETMETHODID_ENTRY( - env, clazz, (char *) name, (char *) sig); + HOTSPOT_JNI_GETMETHODID_ENTRY(env, clazz, (char *) name, (char *) sig); #endif /* USDT2 */ jmethodID ret = get_method_id(env, clazz, name, sig, false, thread); #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetMethodID__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETMETHODID_RETURN( - (uintptr_t) ret); + HOTSPOT_JNI_GETMETHODID_RETURN((uintptr_t) ret); #endif /* USDT2 */ return ret; JNI_END @@ -1628,15 +1586,13 @@ JNI_ENTRY(jmethodID, jni_GetStaticMethodID(JNIEnv *env, jclass clazz, #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, GetStaticMethodID__entry, env, clazz, name, sig); #else /* USDT2 */ - HOTSPOT_JNI_GETSTATICMETHODID_ENTRY( - env, (char *) clazz, (char *) name, (char *)sig); + HOTSPOT_JNI_GETSTATICMETHODID_ENTRY(env, (char *) clazz, (char *) name, (char *)sig); #endif /* USDT2 */ jmethodID ret = get_method_id(env, clazz, name, sig, true, thread); #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetStaticMethodID__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETSTATICMETHODID_RETURN( - (uintptr_t) ret); + HOTSPOT_JNI_GETSTATICMETHODID_RETURN((uintptr_t) ret); #endif /* USDT2 */ return ret; JNI_END @@ -1896,8 +1852,7 @@ JNI_ENTRY(void, jni_CallVoidMethod(JNIEnv *env, jobject obj, jmethodID methodID, #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, CallVoidMethod__entry, env, obj, methodID); #else /* USDT2 */ - HOTSPOT_JNI_CALLVOIDMETHOD_ENTRY( - env, obj, (uintptr_t) methodID); + HOTSPOT_JNI_CALLVOIDMETHOD_ENTRY(env, obj, (uintptr_t) methodID); #endif /* USDT2 */ DT_VOID_RETURN_MARK(CallVoidMethod); @@ -1915,8 +1870,7 @@ JNI_ENTRY(void, jni_CallVoidMethodV(JNIEnv *env, jobject obj, jmethodID methodID #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, CallVoidMethodV__entry, env, obj, methodID); #else /* USDT2 */ - HOTSPOT_JNI_CALLVOIDMETHODV_ENTRY( - env, obj, (uintptr_t) methodID); + HOTSPOT_JNI_CALLVOIDMETHODV_ENTRY(env, obj, (uintptr_t) methodID); #endif /* USDT2 */ DT_VOID_RETURN_MARK(CallVoidMethodV); @@ -1931,8 +1885,7 @@ JNI_ENTRY(void, jni_CallVoidMethodA(JNIEnv *env, jobject obj, jmethodID methodID #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, CallVoidMethodA__entry, env, obj, methodID); #else /* USDT2 */ - HOTSPOT_JNI_CALLVOIDMETHODA_ENTRY( - env, obj, (uintptr_t) methodID); + HOTSPOT_JNI_CALLVOIDMETHODA_ENTRY(env, obj, (uintptr_t) methodID); #endif /* USDT2 */ DT_VOID_RETURN_MARK(CallVoidMethodA); @@ -2194,8 +2147,7 @@ JNI_ENTRY(void, jni_CallNonvirtualVoidMethod(JNIEnv *env, jobject obj, jclass cl DTRACE_PROBE4(hotspot_jni, CallNonvirtualVoidMethod__entry, env, obj, cls, methodID); #else /* USDT2 */ - HOTSPOT_JNI_CALLNONVIRTUALVOIDMETHOD_ENTRY( - env, obj, cls, (uintptr_t) methodID); + HOTSPOT_JNI_CALLNONVIRTUALVOIDMETHOD_ENTRY(env, obj, cls, (uintptr_t) methodID); #endif /* USDT2 */ DT_VOID_RETURN_MARK(CallNonvirtualVoidMethod); @@ -2496,8 +2448,7 @@ JNI_ENTRY(void, jni_CallStaticVoidMethod(JNIEnv *env, jclass cls, jmethodID meth #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, CallStaticVoidMethod__entry, env, cls, methodID); #else /* USDT2 */ - HOTSPOT_JNI_CALLSTATICVOIDMETHOD_ENTRY( - env, cls, (uintptr_t) methodID); + HOTSPOT_JNI_CALLSTATICVOIDMETHOD_ENTRY(env, cls, (uintptr_t) methodID); #endif /* USDT2 */ DT_VOID_RETURN_MARK(CallStaticVoidMethod); @@ -2515,8 +2466,7 @@ JNI_ENTRY(void, jni_CallStaticVoidMethodV(JNIEnv *env, jclass cls, jmethodID met #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, CallStaticVoidMethodV__entry, env, cls, methodID); #else /* USDT2 */ - HOTSPOT_JNI_CALLSTATICVOIDMETHODV_ENTRY( - env, cls, (uintptr_t) methodID); + HOTSPOT_JNI_CALLSTATICVOIDMETHODV_ENTRY(env, cls, (uintptr_t) methodID); #endif /* USDT2 */ DT_VOID_RETURN_MARK(CallStaticVoidMethodV); @@ -2531,8 +2481,7 @@ JNI_ENTRY(void, jni_CallStaticVoidMethodA(JNIEnv *env, jclass cls, jmethodID met #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, CallStaticVoidMethodA__entry, env, cls, methodID); #else /* USDT2 */ - HOTSPOT_JNI_CALLSTATICVOIDMETHODA_ENTRY( - env, cls, (uintptr_t) methodID); + HOTSPOT_JNI_CALLSTATICVOIDMETHODA_ENTRY(env, cls, (uintptr_t) methodID); #endif /* USDT2 */ DT_VOID_RETURN_MARK(CallStaticVoidMethodA); @@ -2560,8 +2509,7 @@ JNI_ENTRY(jfieldID, jni_GetFieldID(JNIEnv *env, jclass clazz, #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, GetFieldID__entry, env, clazz, name, sig); #else /* USDT2 */ - HOTSPOT_JNI_GETFIELDID_ENTRY( - env, clazz, (char *) name, (char *) sig); + HOTSPOT_JNI_GETFIELDID_ENTRY(env, clazz, (char *) name, (char *) sig); #endif /* USDT2 */ jfieldID ret = 0; DT_RETURN_MARK(GetFieldID, jfieldID, (const jfieldID&)ret); @@ -2597,8 +2545,7 @@ JNI_ENTRY(jobject, jni_GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, GetObjectField__entry, env, obj, fieldID); #else /* USDT2 */ - HOTSPOT_JNI_GETOBJECTFIELD_ENTRY( - env, obj, (uintptr_t) fieldID); + HOTSPOT_JNI_GETOBJECTFIELD_ENTRY(env, obj, (uintptr_t) fieldID); #endif /* USDT2 */ oop o = JNIHandles::resolve_non_null(obj); Klass* k = o->klass(); @@ -2632,8 +2579,7 @@ JNI_ENTRY(jobject, jni_GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetObjectField__return, ret); #else /* USDT2 */ -HOTSPOT_JNI_GETOBJECTFIELD_RETURN( - ret); +HOTSPOT_JNI_GETOBJECTFIELD_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -2758,8 +2704,7 @@ JNI_QUICK_ENTRY(void, jni_SetObjectField(JNIEnv *env, jobject obj, jfieldID fiel #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, SetObjectField__entry, env, obj, fieldID, value); #else /* USDT2 */ - HOTSPOT_JNI_SETOBJECTFIELD_ENTRY( - env, obj, (uintptr_t) fieldID, value); + HOTSPOT_JNI_SETOBJECTFIELD_ENTRY(env, obj, (uintptr_t) fieldID, value); #endif /* USDT2 */ oop o = JNIHandles::resolve_non_null(obj); Klass* k = o->klass(); @@ -2776,8 +2721,7 @@ JNI_QUICK_ENTRY(void, jni_SetObjectField(JNIEnv *env, jobject obj, jfieldID fiel #ifndef USDT2 DTRACE_PROBE(hotspot_jni, SetObjectField__return); #else /* USDT2 */ - HOTSPOT_JNI_SETOBJECTFIELD_RETURN( -); + HOTSPOT_JNI_SETOBJECTFIELD_RETURN(); #endif /* USDT2 */ JNI_END @@ -2880,8 +2824,7 @@ JNI_ENTRY(jobject, jni_ToReflectedField(JNIEnv *env, jclass cls, jfieldID fieldI DTRACE_PROBE4(hotspot_jni, ToReflectedField__entry, env, cls, fieldID, isStatic); #else /* USDT2 */ - HOTSPOT_JNI_TOREFLECTEDFIELD_ENTRY( - env, cls, (uintptr_t) fieldID, isStatic); + HOTSPOT_JNI_TOREFLECTEDFIELD_ENTRY(env, cls, (uintptr_t) fieldID, isStatic); #endif /* USDT2 */ jobject ret = NULL; DT_RETURN_MARK(ToReflectedField, jobject, (const jobject&)ret); @@ -2925,8 +2868,7 @@ JNI_ENTRY(jfieldID, jni_GetStaticFieldID(JNIEnv *env, jclass clazz, #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, GetStaticFieldID__entry, env, clazz, name, sig); #else /* USDT2 */ - HOTSPOT_JNI_GETSTATICFIELDID_ENTRY( - env, clazz, (char *) name, (char *) sig); + HOTSPOT_JNI_GETSTATICFIELDID_ENTRY(env, clazz, (char *) name, (char *) sig); #endif /* USDT2 */ jfieldID ret = NULL; DT_RETURN_MARK(GetStaticFieldID, jfieldID, (const jfieldID&)ret); @@ -2966,8 +2908,7 @@ JNI_ENTRY(jobject, jni_GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, GetStaticObjectField__entry, env, clazz, fieldID); #else /* USDT2 */ - HOTSPOT_JNI_GETSTATICOBJECTFIELD_ENTRY( - env, clazz, (uintptr_t) fieldID); + HOTSPOT_JNI_GETSTATICOBJECTFIELD_ENTRY(env, clazz, (uintptr_t) fieldID); #endif /* USDT2 */ #if INCLUDE_JNI_CHECK DEBUG_ONLY(Klass* param_k = jniCheck::validate_class(thread, clazz);) @@ -2983,8 +2924,7 @@ JNI_ENTRY(jobject, jni_GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetStaticObjectField__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETSTATICOBJECTFIELD_RETURN( - ret); + HOTSPOT_JNI_GETSTATICOBJECTFIELD_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -3069,8 +3009,7 @@ JNI_ENTRY(void, jni_SetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fie #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, SetStaticObjectField__entry, env, clazz, fieldID, value); #else /* USDT2 */ - HOTSPOT_JNI_SETSTATICOBJECTFIELD_ENTRY( - env, clazz, (uintptr_t) fieldID, value); + HOTSPOT_JNI_SETSTATICOBJECTFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value); #endif /* USDT2 */ JNIid* id = jfieldIDWorkaround::from_static_jfieldID(fieldID); assert(id->is_static_field_id(), "invalid static field id"); @@ -3085,8 +3024,7 @@ JNI_ENTRY(void, jni_SetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fie #ifndef USDT2 DTRACE_PROBE(hotspot_jni, SetStaticObjectField__return); #else /* USDT2 */ - HOTSPOT_JNI_SETSTATICOBJECTFIELD_RETURN( - ); + HOTSPOT_JNI_SETSTATICOBJECTFIELD_RETURN(); #endif /* USDT2 */ JNI_END @@ -3189,8 +3127,7 @@ JNI_ENTRY(jstring, jni_NewString(JNIEnv *env, const jchar *unicodeChars, jsize l #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, NewString__entry, env, unicodeChars, len); #else /* USDT2 */ - HOTSPOT_JNI_NEWSTRING_ENTRY( - env, (uint16_t *) unicodeChars, len); + HOTSPOT_JNI_NEWSTRING_ENTRY(env, (uint16_t *) unicodeChars, len); #endif /* USDT2 */ jstring ret = NULL; DT_RETURN_MARK(NewString, jstring, (const jstring&)ret); @@ -3205,8 +3142,7 @@ JNI_QUICK_ENTRY(jsize, jni_GetStringLength(JNIEnv *env, jstring string)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetStringLength__entry, env, string); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGLENGTH_ENTRY( - env, string); + HOTSPOT_JNI_GETSTRINGLENGTH_ENTRY(env, string); #endif /* USDT2 */ jsize ret = 0; oop s = JNIHandles::resolve_non_null(string); @@ -3216,8 +3152,7 @@ JNI_QUICK_ENTRY(jsize, jni_GetStringLength(JNIEnv *env, jstring string)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetStringLength__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGLENGTH_RETURN( - ret); + HOTSPOT_JNI_GETSTRINGLENGTH_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -3229,8 +3164,7 @@ JNI_QUICK_ENTRY(const jchar*, jni_GetStringChars( #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, GetStringChars__entry, env, string, isCopy); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGCHARS_ENTRY( - env, string, (uintptr_t *) isCopy); + HOTSPOT_JNI_GETSTRINGCHARS_ENTRY(env, string, (uintptr_t *) isCopy); #endif /* USDT2 */ jchar* buf = NULL; oop s = JNIHandles::resolve_non_null(string); @@ -3254,8 +3188,7 @@ JNI_QUICK_ENTRY(const jchar*, jni_GetStringChars( #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetStringChars__return, buf); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGCHARS_RETURN( - buf); + HOTSPOT_JNI_GETSTRINGCHARS_RETURN(buf); #endif /* USDT2 */ return buf; JNI_END @@ -3266,8 +3199,7 @@ JNI_QUICK_ENTRY(void, jni_ReleaseStringChars(JNIEnv *env, jstring str, const jch #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, ReleaseStringChars__entry, env, str, chars); #else /* USDT2 */ - HOTSPOT_JNI_RELEASESTRINGCHARS_ENTRY( - env, str, (uint16_t *) chars); + HOTSPOT_JNI_RELEASESTRINGCHARS_ENTRY(env, str, (uint16_t *) chars); #endif /* USDT2 */ //%note jni_6 if (chars != NULL) { @@ -3278,8 +3210,7 @@ JNI_QUICK_ENTRY(void, jni_ReleaseStringChars(JNIEnv *env, jstring str, const jch #ifndef USDT2 DTRACE_PROBE(hotspot_jni, ReleaseStringChars__return); #else /* USDT2 */ - HOTSPOT_JNI_RELEASESTRINGCHARS_RETURN( -); + HOTSPOT_JNI_RELEASESTRINGCHARS_RETURN(); #endif /* USDT2 */ JNI_END @@ -3298,8 +3229,7 @@ JNI_ENTRY(jstring, jni_NewStringUTF(JNIEnv *env, const char *bytes)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, NewStringUTF__entry, env, bytes); #else /* USDT2 */ - HOTSPOT_JNI_NEWSTRINGUTF_ENTRY( - env, (char *) bytes); + HOTSPOT_JNI_NEWSTRINGUTF_ENTRY(env, (char *) bytes); #endif /* USDT2 */ jstring ret; DT_RETURN_MARK(NewStringUTF, jstring, (const jstring&)ret); @@ -3315,8 +3245,7 @@ JNI_ENTRY(jsize, jni_GetStringUTFLength(JNIEnv *env, jstring string)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetStringUTFLength__entry, env, string); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGUTFLENGTH_ENTRY( - env, string); + HOTSPOT_JNI_GETSTRINGUTFLENGTH_ENTRY(env, string); #endif /* USDT2 */ jsize ret = 0; oop java_string = JNIHandles::resolve_non_null(string); @@ -3326,8 +3255,7 @@ JNI_ENTRY(jsize, jni_GetStringUTFLength(JNIEnv *env, jstring string)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetStringUTFLength__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGUTFLENGTH_RETURN( - ret); + HOTSPOT_JNI_GETSTRINGUTFLENGTH_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -3338,8 +3266,7 @@ JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboole #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, GetStringUTFChars__entry, env, string, isCopy); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGUTFCHARS_ENTRY( - env, string, (uintptr_t *) isCopy); + HOTSPOT_JNI_GETSTRINGUTFCHARS_ENTRY(env, string, (uintptr_t *) isCopy); #endif /* USDT2 */ char* result = NULL; oop java_string = JNIHandles::resolve_non_null(string); @@ -3357,8 +3284,7 @@ JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboole #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetStringUTFChars__return, result); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGUTFCHARS_RETURN( - result); + HOTSPOT_JNI_GETSTRINGUTFCHARS_RETURN(result); #endif /* USDT2 */ return result; JNI_END @@ -3369,8 +3295,7 @@ JNI_LEAF(void, jni_ReleaseStringUTFChars(JNIEnv *env, jstring str, const char *c #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, ReleaseStringUTFChars__entry, env, str, chars); #else /* USDT2 */ - HOTSPOT_JNI_RELEASESTRINGUTFCHARS_ENTRY( - env, str, (char *) chars); + HOTSPOT_JNI_RELEASESTRINGUTFCHARS_ENTRY(env, str, (char *) chars); #endif /* USDT2 */ if (chars != NULL) { FreeHeap((char*) chars); @@ -3378,8 +3303,7 @@ JNI_LEAF(void, jni_ReleaseStringUTFChars(JNIEnv *env, jstring str, const char *c #ifndef USDT2 DTRACE_PROBE(hotspot_jni, ReleaseStringUTFChars__return); #else /* USDT2 */ -HOTSPOT_JNI_RELEASESTRINGUTFCHARS_RETURN( -); +HOTSPOT_JNI_RELEASESTRINGUTFCHARS_RETURN(); #endif /* USDT2 */ JNI_END @@ -3389,8 +3313,7 @@ JNI_QUICK_ENTRY(jsize, jni_GetArrayLength(JNIEnv *env, jarray array)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetArrayLength__entry, env, array); #else /* USDT2 */ - HOTSPOT_JNI_GETARRAYLENGTH_ENTRY( - env, array); + HOTSPOT_JNI_GETARRAYLENGTH_ENTRY(env, array); #endif /* USDT2 */ arrayOop a = arrayOop(JNIHandles::resolve_non_null(array)); assert(a->is_array(), "must be array"); @@ -3398,8 +3321,7 @@ JNI_QUICK_ENTRY(jsize, jni_GetArrayLength(JNIEnv *env, jarray array)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetArrayLength__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETARRAYLENGTH_RETURN( - ret); + HOTSPOT_JNI_GETARRAYLENGTH_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -3421,8 +3343,7 @@ JNI_ENTRY(jobjectArray, jni_NewObjectArray(JNIEnv *env, jsize length, jclass ele #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, NewObjectArray__entry, env, length, elementClass, initialElement); #else /* USDT2 */ - HOTSPOT_JNI_NEWOBJECTARRAY_ENTRY( - env, length, elementClass, initialElement); + HOTSPOT_JNI_NEWOBJECTARRAY_ENTRY(env, length, elementClass, initialElement); #endif /* USDT2 */ jobjectArray ret = NULL; DT_RETURN_MARK(NewObjectArray, jobjectArray, (const jobjectArray&)ret); @@ -3453,8 +3374,7 @@ JNI_ENTRY(jobject, jni_GetObjectArrayElement(JNIEnv *env, jobjectArray array, js #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, GetObjectArrayElement__entry, env, array, index); #else /* USDT2 */ - HOTSPOT_JNI_GETOBJECTARRAYELEMENT_ENTRY( - env, array, index); + HOTSPOT_JNI_GETOBJECTARRAYELEMENT_ENTRY(env, array, index); #endif /* USDT2 */ jobject ret = NULL; DT_RETURN_MARK(GetObjectArrayElement, jobject, (const jobject&)ret); @@ -3481,8 +3401,7 @@ JNI_ENTRY(void, jni_SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, SetObjectArrayElement__entry, env, array, index, value); #else /* USDT2 */ - HOTSPOT_JNI_SETOBJECTARRAYELEMENT_ENTRY( - env, array, index, value); + HOTSPOT_JNI_SETOBJECTARRAYELEMENT_ENTRY(env, array, index, value); #endif /* USDT2 */ DT_VOID_RETURN_MARK(SetObjectArrayElement); @@ -4034,8 +3953,7 @@ JNI_ENTRY(jint, jni_RegisterNatives(JNIEnv *env, jclass clazz, #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, RegisterNatives__entry, env, clazz, methods, nMethods); #else /* USDT2 */ - HOTSPOT_JNI_REGISTERNATIVES_ENTRY( - env, clazz, (void *) methods, nMethods); + HOTSPOT_JNI_REGISTERNATIVES_ENTRY(env, clazz, (void *) methods, nMethods); #endif /* USDT2 */ jint ret = 0; DT_RETURN_MARK(RegisterNatives, jint, (const jint&)ret); @@ -4077,8 +3995,7 @@ JNI_ENTRY(jint, jni_UnregisterNatives(JNIEnv *env, jclass clazz)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, UnregisterNatives__entry, env, clazz); #else /* USDT2 */ - HOTSPOT_JNI_UNREGISTERNATIVES_ENTRY( - env, clazz); + HOTSPOT_JNI_UNREGISTERNATIVES_ENTRY(env, clazz); #endif /* USDT2 */ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)); //%note jni_2 @@ -4094,8 +4011,7 @@ JNI_ENTRY(jint, jni_UnregisterNatives(JNIEnv *env, jclass clazz)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, UnregisterNatives__return, 0); #else /* USDT2 */ - HOTSPOT_JNI_UNREGISTERNATIVES_RETURN( - 0); + HOTSPOT_JNI_UNREGISTERNATIVES_RETURN(0); #endif /* USDT2 */ return 0; JNI_END @@ -4115,8 +4031,7 @@ JNI_ENTRY(jint, jni_MonitorEnter(JNIEnv *env, jobject jobj)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, MonitorEnter__entry, env, jobj); #else /* USDT2 */ - HOTSPOT_JNI_MONITORENTER_ENTRY( - env, jobj); + HOTSPOT_JNI_MONITORENTER_ENTRY(env, jobj); #endif /* USDT2 */ jint ret = JNI_ERR; DT_RETURN_MARK(MonitorEnter, jint, (const jint&)ret); @@ -4143,8 +4058,7 @@ JNI_ENTRY(jint, jni_MonitorExit(JNIEnv *env, jobject jobj)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, MonitorExit__entry, env, jobj); #else /* USDT2 */ - HOTSPOT_JNI_MONITOREXIT_ENTRY( - env, jobj); + HOTSPOT_JNI_MONITOREXIT_ENTRY(env, jobj); #endif /* USDT2 */ jint ret = JNI_ERR; DT_RETURN_MARK(MonitorExit, jint, (const jint&)ret); @@ -4177,8 +4091,7 @@ JNI_ENTRY(void, jni_GetStringRegion(JNIEnv *env, jstring string, jsize start, js #ifndef USDT2 DTRACE_PROBE5(hotspot_jni, GetStringRegion__entry, env, string, start, len, buf); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGREGION_ENTRY( - env, string, start, len, buf); + HOTSPOT_JNI_GETSTRINGREGION_ENTRY(env, string, start, len, buf); #endif /* USDT2 */ DT_VOID_RETURN_MARK(GetStringRegion); oop s = JNIHandles::resolve_non_null(string); @@ -4206,8 +4119,7 @@ JNI_ENTRY(void, jni_GetStringUTFRegion(JNIEnv *env, jstring string, jsize start, #ifndef USDT2 DTRACE_PROBE5(hotspot_jni, GetStringUTFRegion__entry, env, string, start, len, buf); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGUTFREGION_ENTRY( - env, string, start, len, buf); + HOTSPOT_JNI_GETSTRINGUTFREGION_ENTRY(env, string, start, len, buf); #endif /* USDT2 */ DT_VOID_RETURN_MARK(GetStringUTFRegion); oop s = JNIHandles::resolve_non_null(string); @@ -4237,8 +4149,7 @@ JNI_ENTRY(void*, jni_GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboole #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, GetPrimitiveArrayCritical__entry, env, array, isCopy); #else /* USDT2 */ - HOTSPOT_JNI_GETPRIMITIVEARRAYCRITICAL_ENTRY( - env, array, (uintptr_t *) isCopy); + HOTSPOT_JNI_GETPRIMITIVEARRAYCRITICAL_ENTRY(env, array, (uintptr_t *) isCopy); #endif /* USDT2 */ GC_locker::lock_critical(thread); if (isCopy != NULL) { @@ -4256,8 +4167,7 @@ JNI_ENTRY(void*, jni_GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboole #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetPrimitiveArrayCritical__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETPRIMITIVEARRAYCRITICAL_RETURN( - ret); + HOTSPOT_JNI_GETPRIMITIVEARRAYCRITICAL_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -4268,16 +4178,14 @@ JNI_ENTRY(void, jni_ReleasePrimitiveArrayCritical(JNIEnv *env, jarray array, voi #ifndef USDT2 DTRACE_PROBE4(hotspot_jni, ReleasePrimitiveArrayCritical__entry, env, array, carray, mode); #else /* USDT2 */ - HOTSPOT_JNI_RELEASEPRIMITIVEARRAYCRITICAL_ENTRY( - env, array, carray, mode); + HOTSPOT_JNI_RELEASEPRIMITIVEARRAYCRITICAL_ENTRY(env, array, carray, mode); #endif /* USDT2 */ // The array, carray and mode arguments are ignored GC_locker::unlock_critical(thread); #ifndef USDT2 DTRACE_PROBE(hotspot_jni, ReleasePrimitiveArrayCritical__return); #else /* USDT2 */ -HOTSPOT_JNI_RELEASEPRIMITIVEARRAYCRITICAL_RETURN( -); +HOTSPOT_JNI_RELEASEPRIMITIVEARRAYCRITICAL_RETURN(); #endif /* USDT2 */ JNI_END @@ -4287,8 +4195,7 @@ JNI_ENTRY(const jchar*, jni_GetStringCritical(JNIEnv *env, jstring string, jbool #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, GetStringCritical__entry, env, string, isCopy); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGCRITICAL_ENTRY( - env, string, (uintptr_t *) isCopy); + HOTSPOT_JNI_GETSTRINGCRITICAL_ENTRY(env, string, (uintptr_t *) isCopy); #endif /* USDT2 */ GC_locker::lock_critical(thread); if (isCopy != NULL) { @@ -4307,8 +4214,7 @@ JNI_ENTRY(const jchar*, jni_GetStringCritical(JNIEnv *env, jstring string, jbool #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetStringCritical__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_GETSTRINGCRITICAL_RETURN( - (uint16_t *) ret); + HOTSPOT_JNI_GETSTRINGCRITICAL_RETURN((uint16_t *) ret); #endif /* USDT2 */ return ret; JNI_END @@ -4319,16 +4225,14 @@ JNI_ENTRY(void, jni_ReleaseStringCritical(JNIEnv *env, jstring str, const jchar #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, ReleaseStringCritical__entry, env, str, chars); #else /* USDT2 */ - HOTSPOT_JNI_RELEASESTRINGCRITICAL_ENTRY( - env, str, (uint16_t *) chars); + HOTSPOT_JNI_RELEASESTRINGCRITICAL_ENTRY(env, str, (uint16_t *) chars); #endif /* USDT2 */ // The str and chars arguments are ignored GC_locker::unlock_critical(thread); #ifndef USDT2 DTRACE_PROBE(hotspot_jni, ReleaseStringCritical__return); #else /* USDT2 */ -HOTSPOT_JNI_RELEASESTRINGCRITICAL_RETURN( -); +HOTSPOT_JNI_RELEASESTRINGCRITICAL_RETURN(); #endif /* USDT2 */ JNI_END @@ -4338,16 +4242,14 @@ JNI_ENTRY(jweak, jni_NewWeakGlobalRef(JNIEnv *env, jobject ref)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, NewWeakGlobalRef__entry, env, ref); #else /* USDT2 */ - HOTSPOT_JNI_NEWWEAKGLOBALREF_ENTRY( - env, ref); + HOTSPOT_JNI_NEWWEAKGLOBALREF_ENTRY(env, ref); #endif /* USDT2 */ Handle ref_handle(thread, JNIHandles::resolve(ref)); jweak ret = JNIHandles::make_weak_global(ref_handle); #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, NewWeakGlobalRef__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_NEWWEAKGLOBALREF_RETURN( - ret); + HOTSPOT_JNI_NEWWEAKGLOBALREF_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -4358,15 +4260,13 @@ JNI_ENTRY(void, jni_DeleteWeakGlobalRef(JNIEnv *env, jweak ref)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, DeleteWeakGlobalRef__entry, env, ref); #else /* USDT2 */ - HOTSPOT_JNI_DELETEWEAKGLOBALREF_ENTRY( - env, ref); + HOTSPOT_JNI_DELETEWEAKGLOBALREF_ENTRY(env, ref); #endif /* USDT2 */ JNIHandles::destroy_weak_global(ref); #ifndef USDT2 DTRACE_PROBE(hotspot_jni, DeleteWeakGlobalRef__return); #else /* USDT2 */ - HOTSPOT_JNI_DELETEWEAKGLOBALREF_RETURN( - ); + HOTSPOT_JNI_DELETEWEAKGLOBALREF_RETURN(); #endif /* USDT2 */ JNI_END @@ -4376,16 +4276,14 @@ JNI_QUICK_ENTRY(jboolean, jni_ExceptionCheck(JNIEnv *env)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, ExceptionCheck__entry, env); #else /* USDT2 */ - HOTSPOT_JNI_EXCEPTIONCHECK_ENTRY( - env); + HOTSPOT_JNI_EXCEPTIONCHECK_ENTRY(env); #endif /* USDT2 */ jni_check_async_exceptions(thread); jboolean ret = (thread->has_pending_exception()) ? JNI_TRUE : JNI_FALSE; #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, ExceptionCheck__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_EXCEPTIONCHECK_RETURN( - ret); + HOTSPOT_JNI_EXCEPTIONCHECK_RETURN(ret); #endif /* USDT2 */ return ret; JNI_END @@ -4481,8 +4379,7 @@ extern "C" jobject JNICALL jni_NewDirectByteBuffer(JNIEnv *env, void* address, j #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, NewDirectByteBuffer__entry, env, address, capacity); #else /* USDT2 */ - HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_ENTRY( - env, address, capacity); + HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_ENTRY(env, address, capacity); #endif /* USDT2 */ if (!directBufferSupportInitializeEnded) { @@ -4490,8 +4387,7 @@ extern "C" jobject JNICALL jni_NewDirectByteBuffer(JNIEnv *env, void* address, j #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, NewDirectByteBuffer__return, NULL); #else /* USDT2 */ - HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_RETURN( - NULL); + HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_RETURN(NULL); #endif /* USDT2 */ return NULL; } @@ -4506,8 +4402,7 @@ extern "C" jobject JNICALL jni_NewDirectByteBuffer(JNIEnv *env, void* address, j #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, NewDirectByteBuffer__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_RETURN( - ret); + HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_RETURN(ret); #endif /* USDT2 */ return ret; } @@ -4528,8 +4423,7 @@ extern "C" void* JNICALL jni_GetDirectBufferAddress(JNIEnv *env, jobject buf) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetDirectBufferAddress__entry, env, buf); #else /* USDT2 */ - HOTSPOT_JNI_GETDIRECTBUFFERADDRESS_ENTRY( - env, buf); + HOTSPOT_JNI_GETDIRECTBUFFERADDRESS_ENTRY(env, buf); #endif /* USDT2 */ void* ret = NULL; DT_RETURN_MARK(GetDirectBufferAddress, void*, (const void*&)ret); @@ -4564,8 +4458,7 @@ extern "C" jlong JNICALL jni_GetDirectBufferCapacity(JNIEnv *env, jobject buf) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetDirectBufferCapacity__entry, env, buf); #else /* USDT2 */ - HOTSPOT_JNI_GETDIRECTBUFFERCAPACITY_ENTRY( - env, buf); + HOTSPOT_JNI_GETDIRECTBUFFERCAPACITY_ENTRY(env, buf); #endif /* USDT2 */ jlong ret = -1; DT_RETURN_MARK(GetDirectBufferCapacity, jlong, (const jlong&)ret); @@ -4596,14 +4489,12 @@ JNI_LEAF(jint, jni_GetVersion(JNIEnv *env)) #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetVersion__entry, env); #else /* USDT2 */ - HOTSPOT_JNI_GETVERSION_ENTRY( - env); + HOTSPOT_JNI_GETVERSION_ENTRY(env); #endif /* USDT2 */ #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetVersion__return, CurrentVersion); #else /* USDT2 */ - HOTSPOT_JNI_GETVERSION_RETURN( - CurrentVersion); + HOTSPOT_JNI_GETVERSION_RETURN(CurrentVersion); #endif /* USDT2 */ return CurrentVersion; JNI_END @@ -4615,15 +4506,13 @@ JNI_LEAF(jint, jni_GetJavaVM(JNIEnv *env, JavaVM **vm)) #ifndef USDT2 DTRACE_PROBE2(hotspot_jni, GetJavaVM__entry, env, vm); #else /* USDT2 */ - HOTSPOT_JNI_GETJAVAVM_ENTRY( - env, (void **) vm); + HOTSPOT_JNI_GETJAVAVM_ENTRY(env, (void **) vm); #endif /* USDT2 */ *vm = (JavaVM *)(&main_vm); #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, GetJavaVM__return, JNI_OK); #else /* USDT2 */ - HOTSPOT_JNI_GETJAVAVM_RETURN( - JNI_OK); + HOTSPOT_JNI_GETJAVAVM_RETURN(JNI_OK); #endif /* USDT2 */ return JNI_OK; JNI_END @@ -5014,8 +4903,7 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) { #ifndef USDT2 HS_DTRACE_PROBE1(hotspot_jni, GetDefaultJavaVMInitArgs__entry, args_); #else /* USDT2 */ - HOTSPOT_JNI_GETDEFAULTJAVAVMINITARGS_ENTRY( - args_); + HOTSPOT_JNI_GETDEFAULTJAVAVMINITARGS_ENTRY(args_); #endif /* USDT2 */ JDK1_1InitArgs *args = (JDK1_1InitArgs *)args_; jint ret = JNI_ERR; @@ -5061,6 +4949,7 @@ void TestVirtualSpace_test(); void TestMetaspaceAux_test(); void TestMetachunk_test(); void TestVirtualSpaceNode_test(); +void TestOldFreeSpaceCalculation_test(); #if INCLUDE_ALL_GCS void TestG1BiasedArray_test(); #endif @@ -5081,6 +4970,7 @@ void execute_internal_vm_tests() { run_unit_test(QuickSort::test_quick_sort()); run_unit_test(AltHashing::test_alt_hash()); run_unit_test(test_loggc_filename()); + run_unit_test(TestOldFreeSpaceCalculation_test()); #if INCLUDE_VM_STRUCTS run_unit_test(VMStructs::test()); #endif @@ -5108,8 +4998,7 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, v #ifndef USDT2 HS_DTRACE_PROBE3(hotspot_jni, CreateJavaVM__entry, vm, penv, args); #else /* USDT2 */ - HOTSPOT_JNI_CREATEJAVAVM_ENTRY( - (void **) vm, penv, args); + HOTSPOT_JNI_CREATEJAVAVM_ENTRY((void **) vm, penv, args); #endif /* USDT2 */ jint result = JNI_ERR; @@ -5166,6 +5055,7 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, v result = Threads::create_vm((JavaVMInitArgs*) args, &can_try_again); if (result == JNI_OK) { JavaThread *thread = JavaThread::current(); + assert(!thread->has_pending_exception(), "should have returned not OK"); /* thread is thread_in_vm here */ *vm = (JavaVM *)(&main_vm); *(JNIEnv**)penv = thread->jni_environment(); @@ -5202,6 +5092,19 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, v // Since this is not a JVM_ENTRY we have to set the thread state manually before leaving. ThreadStateTransition::transition_and_fence(thread, _thread_in_vm, _thread_in_native); } else { + // If create_vm exits because of a pending exception, exit with that + // exception. In the future when we figure out how to reclaim memory, + // we may be able to exit with JNI_ERR and allow the calling application + // to continue. + if (Universe::is_fully_initialized()) { + // otherwise no pending exception possible - VM will already have aborted + JavaThread* THREAD = JavaThread::current(); + if (HAS_PENDING_EXCEPTION) { + HandleMark hm; + vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION)); + } + } + if (can_try_again) { // reset safe_to_recreate_vm to 1 so that retrial would be possible safe_to_recreate_vm = 1; @@ -5231,8 +5134,7 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetCreatedJavaVMs(JavaVM **vm_buf, jsize HS_DTRACE_PROBE3(hotspot_jni, GetCreatedJavaVMs__entry, \ vm_buf, bufLen, numVMs); #else /* USDT2 */ - HOTSPOT_JNI_GETCREATEDJAVAVMS_ENTRY( - (void **) vm_buf, bufLen, (uintptr_t *) numVMs); + HOTSPOT_JNI_GETCREATEDJAVAVMS_ENTRY((void **) vm_buf, bufLen, (uintptr_t *) numVMs); #endif /* USDT2 */ if (vm_created) { if (numVMs != NULL) *numVMs = 1; @@ -5243,8 +5145,7 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetCreatedJavaVMs(JavaVM **vm_buf, jsize #ifndef USDT2 HS_DTRACE_PROBE1(hotspot_jni, GetCreatedJavaVMs__return, JNI_OK); #else /* USDT2 */ - HOTSPOT_JNI_GETCREATEDJAVAVMS_RETURN( - JNI_OK); + HOTSPOT_JNI_GETCREATEDJAVAVMS_RETURN(JNI_OK); #endif /* USDT2 */ return JNI_OK; } @@ -5262,8 +5163,7 @@ jint JNICALL jni_DestroyJavaVM(JavaVM *vm) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, DestroyJavaVM__entry, vm); #else /* USDT2 */ - HOTSPOT_JNI_DESTROYJAVAVM_ENTRY( - vm); + HOTSPOT_JNI_DESTROYJAVAVM_ENTRY(vm); #endif /* USDT2 */ jint res = JNI_ERR; DT_RETURN_MARK(DestroyJavaVM, jint, (const jint&)res); @@ -5419,15 +5319,13 @@ jint JNICALL jni_AttachCurrentThread(JavaVM *vm, void **penv, void *_args) { #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, AttachCurrentThread__entry, vm, penv, _args); #else /* USDT2 */ - HOTSPOT_JNI_ATTACHCURRENTTHREAD_ENTRY( - vm, penv, _args); + HOTSPOT_JNI_ATTACHCURRENTTHREAD_ENTRY(vm, penv, _args); #endif /* USDT2 */ if (!vm_created) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, AttachCurrentThread__return, JNI_ERR); #else /* USDT2 */ - HOTSPOT_JNI_ATTACHCURRENTTHREAD_RETURN( - (uint32_t) JNI_ERR); + HOTSPOT_JNI_ATTACHCURRENTTHREAD_RETURN((uint32_t) JNI_ERR); #endif /* USDT2 */ return JNI_ERR; } @@ -5437,8 +5335,7 @@ jint JNICALL jni_AttachCurrentThread(JavaVM *vm, void **penv, void *_args) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, AttachCurrentThread__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_ATTACHCURRENTTHREAD_RETURN( - ret); + HOTSPOT_JNI_ATTACHCURRENTTHREAD_RETURN(ret); #endif /* USDT2 */ return ret; } @@ -5448,8 +5345,7 @@ jint JNICALL jni_DetachCurrentThread(JavaVM *vm) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, DetachCurrentThread__entry, vm); #else /* USDT2 */ - HOTSPOT_JNI_DETACHCURRENTTHREAD_ENTRY( - vm); + HOTSPOT_JNI_DETACHCURRENTTHREAD_ENTRY(vm); #endif /* USDT2 */ VM_Exit::block_if_vm_exited(); @@ -5460,8 +5356,7 @@ jint JNICALL jni_DetachCurrentThread(JavaVM *vm) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, DetachCurrentThread__return, JNI_OK); #else /* USDT2 */ - HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN( - JNI_OK); + HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN(JNI_OK); #endif /* USDT2 */ return JNI_OK; } @@ -5471,8 +5366,7 @@ jint JNICALL jni_DetachCurrentThread(JavaVM *vm) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, DetachCurrentThread__return, JNI_ERR); #else /* USDT2 */ - HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN( - (uint32_t) JNI_ERR); + HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN((uint32_t) JNI_ERR); #endif /* USDT2 */ // Can't detach a thread that's running java, that can't work. return JNI_ERR; @@ -5497,8 +5391,7 @@ jint JNICALL jni_DetachCurrentThread(JavaVM *vm) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, DetachCurrentThread__return, JNI_OK); #else /* USDT2 */ - HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN( - JNI_OK); + HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN(JNI_OK); #endif /* USDT2 */ return JNI_OK; } @@ -5514,8 +5407,7 @@ jint JNICALL jni_GetEnv(JavaVM *vm, void **penv, jint version) { #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, GetEnv__entry, vm, penv, version); #else /* USDT2 */ - HOTSPOT_JNI_GETENV_ENTRY( - vm, penv, version); + HOTSPOT_JNI_GETENV_ENTRY(vm, penv, version); #endif /* USDT2 */ jint ret = JNI_ERR; DT_RETURN_MARK(GetEnv, jint, (const jint&)ret); @@ -5573,15 +5465,13 @@ jint JNICALL jni_AttachCurrentThreadAsDaemon(JavaVM *vm, void **penv, void *_arg #ifndef USDT2 DTRACE_PROBE3(hotspot_jni, AttachCurrentThreadAsDaemon__entry, vm, penv, _args); #else /* USDT2 */ - HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_ENTRY( - vm, penv, _args); + HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_ENTRY(vm, penv, _args); #endif /* USDT2 */ if (!vm_created) { #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, AttachCurrentThreadAsDaemon__return, JNI_ERR); #else /* USDT2 */ - HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_RETURN( - (uint32_t) JNI_ERR); + HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_RETURN((uint32_t) JNI_ERR); #endif /* USDT2 */ return JNI_ERR; } @@ -5591,8 +5481,7 @@ jint JNICALL jni_AttachCurrentThreadAsDaemon(JavaVM *vm, void **penv, void *_arg #ifndef USDT2 DTRACE_PROBE1(hotspot_jni, AttachCurrentThreadAsDaemon__return, ret); #else /* USDT2 */ - HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_RETURN( - ret); + HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_RETURN(ret); #endif /* USDT2 */ return ret; } diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp index 0f9135f4abf..ab3c5f445b3 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -272,7 +272,7 @@ class VM_GetCurrentLocation : public VM_Operation { // There can be a race condition between a VM_Operation reaching a safepoint // and the target thread exiting from Java execution. // We must recheck the last Java frame still exists. - if (_thread->has_last_Java_frame()) { + if (!_thread->is_exiting() && _thread->has_last_Java_frame()) { javaVFrame* vf = _thread->last_java_vframe(&rm); assert(vf != NULL, "must have last java frame"); Method* method = vf->method(); diff --git a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp index 4a57b20569b..1c3bbbfeed0 100644 --- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp @@ -147,6 +147,9 @@ void VM_RedefineClasses::doit() { _scratch_classes[i] = NULL; } + // Disable any dependent concurrent compilations + SystemDictionary::notice_modification(); + // Set flag indicating that some invariants are no longer true. // See jvmtiExport.hpp for detailed explanation. JvmtiExport::set_has_redefined_a_class(); diff --git a/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp b/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp index 7d72ca7f3ea..4c36c44afc2 100644 --- a/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp +++ b/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp @@ -306,7 +306,7 @@ void AdvancedThresholdPolicy::create_mdo(methodHandle mh, JavaThread* THREAD) { * profiling can start at level 0 and finish at level 3. * * b. 0 -> 2 -> 3 -> 4. - * This case occures when the load on C2 is deemed too high. So, instead of transitioning + * This case occurs when the load on C2 is deemed too high. So, instead of transitioning * into state 3 directly and over-profiling while a method is in the C2 queue we transition to * level 2 and wait until the load on C2 decreases. This path is disabled for OSRs. * diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 5a8ea0dbdd8..c6ccd3b1818 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -178,7 +178,7 @@ void Arguments::init_system_properties() { PropertyList_add(&_system_properties, new SystemProperty("java.vm.name", VM_Version::vm_name(), false)); PropertyList_add(&_system_properties, new SystemProperty("java.vm.info", VM_Version::vm_info_string(), true)); - // following are JVMTI agent writeable properties. + // Following are JVMTI agent writable properties. // Properties values are set to NULL and they are // os specific they are initialized in os::init_system_properties_values(). _java_ext_dirs = new SystemProperty("java.ext.dirs", NULL, true); @@ -878,7 +878,7 @@ bool Arguments::process_argument(const char* arg, arg_len = equal_sign - argname; } - Flag* found_flag = Flag::find_flag((const char*)argname, arg_len, true); + Flag* found_flag = Flag::find_flag((const char*)argname, arg_len, true, true); if (found_flag != NULL) { char locked_message_buf[BUFLEN]; found_flag->get_locked_message(locked_message_buf, BUFLEN); @@ -1306,7 +1306,7 @@ void Arguments::set_cms_and_parnew_gc_flags() { if (!FLAG_IS_DEFAULT(OldPLABSize)) { if (FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim)) { // OldPLABSize is not the default value but CMSParPromoteBlocksToClaim - // is. In this situtation let CMSParPromoteBlocksToClaim follow + // is. In this situation let CMSParPromoteBlocksToClaim follow // the value (either from the command line or ergonomics) of // OldPLABSize. Following OldPLABSize is an ergonomics decision. FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, OldPLABSize); @@ -1569,6 +1569,16 @@ void Arguments::set_parallel_gc_flags() { vm_exit(1); } + if (UseAdaptiveSizePolicy) { + // We don't want to limit adaptive heap sizing's freedom to adjust the heap + // unless the user actually sets these flags. + if (FLAG_IS_DEFAULT(MinHeapFreeRatio)) { + FLAG_SET_DEFAULT(MinHeapFreeRatio, 0); + } + if (FLAG_IS_DEFAULT(MaxHeapFreeRatio)) { + FLAG_SET_DEFAULT(MaxHeapFreeRatio, 100); + } + } // If InitialSurvivorRatio or MinSurvivorRatio were not specified, but the // SurvivorRatio has been set, reset their default values to SurvivorRatio + @@ -1844,7 +1854,7 @@ bool Arguments::verify_min_value(intx val, intx min, const char* name) { } bool Arguments::verify_percentage(uintx value, const char* name) { - if (value <= 100) { + if (is_percentage(value)) { return true; } jio_fprintf(defaultStream::error_stream(), @@ -1932,6 +1942,34 @@ bool is_filename_valid(const char *file_name) { return count_p < 2 && count_t < 2; } +bool Arguments::verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_heap_free_ratio) { + if (!is_percentage(min_heap_free_ratio)) { + err_msg.print("MinHeapFreeRatio must have a value between 0 and 100"); + return false; + } + if (min_heap_free_ratio > MaxHeapFreeRatio) { + err_msg.print("MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or " + "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")", min_heap_free_ratio, + MaxHeapFreeRatio); + return false; + } + return true; +} + +bool Arguments::verify_MaxHeapFreeRatio(FormatBuffer<80>& err_msg, uintx max_heap_free_ratio) { + if (!is_percentage(max_heap_free_ratio)) { + err_msg.print("MaxHeapFreeRatio must have a value between 0 and 100"); + return false; + } + if (max_heap_free_ratio < MinHeapFreeRatio) { + err_msg.print("MaxHeapFreeRatio (" UINTX_FORMAT ") must be greater than or " + "equal to MinHeapFreeRatio (" UINTX_FORMAT ")", max_heap_free_ratio, + MinHeapFreeRatio); + return false; + } + return true; +} + // Check consistency of GC selection bool Arguments::check_gc_consistency() { check_gclog_consistency(); @@ -2037,8 +2075,6 @@ bool Arguments::check_vm_args_consistency() { status = status && verify_interval(AdaptiveSizePolicyWeight, 0, 100, "AdaptiveSizePolicyWeight"); status = status && verify_percentage(ThresholdTolerance, "ThresholdTolerance"); - status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio"); - status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio"); // Divide by bucket size to prevent a large size from causing rollover when // calculating amount of memory needed to be allocated for the String table. @@ -2048,15 +2084,19 @@ bool Arguments::check_vm_args_consistency() { status = status && verify_interval(SymbolTableSize, minimumSymbolTableSize, (max_uintx / SymbolTable::bucket_size()), "SymbolTable size"); - if (MinHeapFreeRatio > MaxHeapFreeRatio) { - jio_fprintf(defaultStream::error_stream(), - "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or " - "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")\n", - MinHeapFreeRatio, MaxHeapFreeRatio); - status = false; + { + // Using "else if" below to avoid printing two error messages if min > max. + // This will also prevent us from reporting both min>100 and max>100 at the + // same time, but that is less annoying than printing two identical errors IMHO. + FormatBuffer<80> err_msg(""); + if (!verify_MinHeapFreeRatio(err_msg, MinHeapFreeRatio)) { + jio_fprintf(defaultStream::error_stream(), "%s\n", err_msg.buffer()); + status = false; + } else if (!verify_MaxHeapFreeRatio(err_msg, MaxHeapFreeRatio)) { + jio_fprintf(defaultStream::error_stream(), "%s\n", err_msg.buffer()); + status = false; + } } - // Keeping the heap 100% free is hard ;-) so limit it to 99%. - MinHeapFreeRatio = MIN2(MinHeapFreeRatio, (uintx) 99); // Min/MaxMetaspaceFreeRatio status = status && verify_percentage(MinMetaspaceFreeRatio, "MinMetaspaceFreeRatio"); @@ -2689,7 +2729,7 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, } else if (match_option(option, "-Xmaxf", &tail)) { char* err; int maxf = (int)(strtod(tail, &err) * 100); - if (*err != '\0' || maxf < 0 || maxf > 100) { + if (*err != '\0' || *tail == '\0' || maxf < 0 || maxf > 100) { jio_fprintf(defaultStream::error_stream(), "Bad max heap free percentage size: %s\n", option->optionString); @@ -2701,7 +2741,7 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, } else if (match_option(option, "-Xminf", &tail)) { char* err; int minf = (int)(strtod(tail, &err) * 100); - if (*err != '\0' || minf < 0 || minf > 100) { + if (*err != '\0' || *tail == '\0' || minf < 0 || minf > 100) { jio_fprintf(defaultStream::error_stream(), "Bad min heap free percentage size: %s\n", option->optionString); @@ -3646,9 +3686,9 @@ jint Arguments::apply_ergo() { // Set per-collector flags if (UseParallelGC || UseParallelOldGC) { set_parallel_gc_flags(); - } else if (UseConcMarkSweepGC) { // should be done before ParNew check below + } else if (UseConcMarkSweepGC) { // Should be done before ParNew check below set_cms_and_parnew_gc_flags(); - } else if (UseParNewGC) { // skipped if CMS is set above + } else if (UseParNewGC) { // Skipped if CMS is set above set_parnew_gc_flags(); } else if (UseG1GC) { set_g1_gc_flags(); @@ -3662,22 +3702,26 @@ jint Arguments::apply_ergo() { " using -XX:ParallelGCThreads=N"); } } + if (MinHeapFreeRatio == 100) { + // Keeping the heap 100% free is hard ;-) so limit it to 99%. + FLAG_SET_ERGO(uintx, MinHeapFreeRatio, 99); + } #else // INCLUDE_ALL_GCS assert(verify_serial_gc_flags(), "SerialGC unset"); #endif // INCLUDE_ALL_GCS - // Initialize Metaspace flags and alignments. + // Initialize Metaspace flags and alignments Metaspace::ergo_initialize(); // Set bytecode rewriting flags set_bytecode_flags(); - // Set flags if Aggressive optimization flags (-XX:+AggressiveOpts) enabled. + // Set flags if Aggressive optimization flags (-XX:+AggressiveOpts) enabled set_aggressive_opts_flags(); // Turn off biased locking for locking debug mode flags, - // which are subtlely different from each other but neither works with - // biased locking. + // which are subtly different from each other but neither works with + // biased locking if (UseHeavyMonitors #ifdef COMPILER1 || !UseFastLocking @@ -3727,10 +3771,6 @@ jint Arguments::apply_ergo() { // Doing the replace in parent maps helps speculation FLAG_SET_DEFAULT(ReplaceInParentMaps, true); } -#ifndef X86 - // Only on x86 for now - FLAG_SET_DEFAULT(TypeProfileLevel, 0); -#endif #endif if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) { diff --git a/hotspot/src/share/vm/runtime/arguments.hpp b/hotspot/src/share/vm/runtime/arguments.hpp index d016e22f22e..19aba5ea17a 100644 --- a/hotspot/src/share/vm/runtime/arguments.hpp +++ b/hotspot/src/share/vm/runtime/arguments.hpp @@ -27,6 +27,7 @@ #include "runtime/java.hpp" #include "runtime/perfData.hpp" +#include "utilities/debug.hpp" #include "utilities/top.hpp" // Arguments parses the command line and recognizes options @@ -370,11 +371,16 @@ class Arguments : AllStatic { static jint parse_vm_init_args(const JavaVMInitArgs* args); static jint parse_each_vm_init_arg(const JavaVMInitArgs* args, SysClassPath* scp_p, bool* scp_assembly_required_p, Flag::Flags origin); static jint finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required); - static bool is_bad_option(const JavaVMOption* option, jboolean ignore, - const char* option_type); + static bool is_bad_option(const JavaVMOption* option, jboolean ignore, const char* option_type); + static bool is_bad_option(const JavaVMOption* option, jboolean ignore) { return is_bad_option(option, ignore, NULL); } + + static bool is_percentage(uintx val) { + return val <= 100; + } + static bool verify_interval(uintx val, uintx min, uintx max, const char* name); static bool verify_min_value(intx val, intx min, const char* name); @@ -440,11 +446,20 @@ class Arguments : AllStatic { static jint apply_ergo(); // Adjusts the arguments after the OS have adjusted the arguments static jint adjust_after_os(); + + // Verifies that the given value will fit as a MinHeapFreeRatio. If not, an error + // message is returned in the provided buffer. + static bool verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_heap_free_ratio); + + // Verifies that the given value will fit as a MaxHeapFreeRatio. If not, an error + // message is returned in the provided buffer. + static bool verify_MaxHeapFreeRatio(FormatBuffer<80>& err_msg, uintx max_heap_free_ratio); + // Check for consistency in the selection of the garbage collector. static bool check_gc_consistency(); static void check_deprecated_gcs(); static void check_deprecated_gc_flags(); - // Check consistecy or otherwise of VM argument settings + // Check consistency or otherwise of VM argument settings static bool check_vm_args_consistency(); // Check stack pages settings static bool check_stack_pages(); @@ -494,7 +509,7 @@ class Arguments : AllStatic { // -Xprof static bool has_profile() { return _has_profile; } - // -Xms, -Xmx + // -Xms static uintx min_heap_size() { return _min_heap_size; } static void set_min_heap_size(uintx v) { _min_heap_size = v; } diff --git a/hotspot/src/share/vm/runtime/compilationPolicy.cpp b/hotspot/src/share/vm/runtime/compilationPolicy.cpp index 23fbc87f766..117850963e3 100644 --- a/hotspot/src/share/vm/runtime/compilationPolicy.cpp +++ b/hotspot/src/share/vm/runtime/compilationPolicy.cpp @@ -233,7 +233,7 @@ void NonTieredCompPolicy::reset_counter_for_invocation_event(methodHandle m) { } void NonTieredCompPolicy::reset_counter_for_back_branch_event(methodHandle m) { - // Delay next back-branch event but pump up invocation counter to triger + // Delay next back-branch event but pump up invocation counter to trigger // whole method compilation. MethodCounters* mcs = m->method_counters(); assert(mcs != NULL, "MethodCounters cannot be NULL for profiling"); @@ -251,7 +251,7 @@ void NonTieredCompPolicy::reset_counter_for_back_branch_event(methodHandle m) { // // CounterDecay // -// Interates through invocation counters and decrements them. This +// Iterates through invocation counters and decrements them. This // is done at each safepoint. // class CounterDecay : public AllStatic { @@ -321,7 +321,7 @@ void NonTieredCompPolicy::reprofile(ScopeDesc* trap_scope, bool is_osr) { } // This method can be called by any component of the runtime to notify the policy -// that it's recommended to delay the complation of this method. +// that it's recommended to delay the compilation of this method. void NonTieredCompPolicy::delay_compilation(Method* method) { MethodCounters* mcs = method->method_counters(); if (mcs != NULL) { diff --git a/hotspot/src/share/vm/runtime/compilationPolicy.hpp b/hotspot/src/share/vm/runtime/compilationPolicy.hpp index 6d0f1b6a9e4..62df7ece209 100644 --- a/hotspot/src/share/vm/runtime/compilationPolicy.hpp +++ b/hotspot/src/share/vm/runtime/compilationPolicy.hpp @@ -72,7 +72,7 @@ public: // reprofile request virtual void reprofile(ScopeDesc* trap_scope, bool is_osr) = 0; // delay_compilation(method) can be called by any component of the runtime to notify the policy - // that it's recommended to delay the complation of this method. + // that it's recommended to delay the compilation of this method. virtual void delay_compilation(Method* method) = 0; // disable_compilation() is called whenever the runtime decides to disable compilation of the // specified method. diff --git a/hotspot/src/share/vm/runtime/deoptimization.cpp b/hotspot/src/share/vm/runtime/deoptimization.cpp index 8b6fc334db9..4c124bd0099 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.cpp +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp @@ -380,7 +380,7 @@ Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread frame deopt_sender = stub_frame.sender(&dummy_map); // First is the deoptee frame deopt_sender = deopt_sender.sender(&dummy_map); // Now deoptee caller - // It's possible that the number of paramters at the call site is + // It's possible that the number of parameters at the call site is // different than number of arguments in the callee when method // handles are used. If the caller is interpreted get the real // value so that the proper amount of space can be added to it's @@ -540,7 +540,7 @@ void Deoptimization::cleanup_deopt_info(JavaThread *thread, // popframe condition bit set, we should always clear it now thread->clear_popframe_condition(); #else - // C++ interpeter will clear has_pending_popframe when it enters + // C++ interpreter will clear has_pending_popframe when it enters // with method_resume. For deopt_resume2 we clear it now. if (thread->popframe_forcing_deopt_reexecution()) thread->clear_popframe_condition(); diff --git a/hotspot/src/share/vm/runtime/deoptimization.hpp b/hotspot/src/share/vm/runtime/deoptimization.hpp index b70a478b328..a32e33ca928 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.hpp +++ b/hotspot/src/share/vm/runtime/deoptimization.hpp @@ -206,7 +206,7 @@ class Deoptimization : AllStatic { // Called by assembly stub after execution has returned to // deoptimized frame and after the stack unrolling. // @argument thread. Thread where stub_frame resides. - // @argument exec_mode. Determines how execution should be continuted in top frame. + // @argument exec_mode. Determines how execution should be continued in top frame. // 0 means continue after current byte code // 1 means exception has happened, handle exception // 2 means reexecute current bytecode (for uncommon traps). diff --git a/hotspot/src/share/vm/runtime/frame.cpp b/hotspot/src/share/vm/runtime/frame.cpp index e2269a34367..4bffc40833f 100644 --- a/hotspot/src/share/vm/runtime/frame.cpp +++ b/hotspot/src/share/vm/runtime/frame.cpp @@ -649,7 +649,7 @@ void frame::interpreter_frame_print_on(outputStream* st) const { #endif } -// Return whether the frame is in the VM or os indicating a Hotspot problem. +// Print whether the frame is in the VM or OS indicating a HotSpot problem. // Otherwise, it's likely a bug in the native library that the Java code calls, // hopefully indicating where to submit bugs. void frame::print_C_frame(outputStream* st, char* buf, int buflen, address pc) { @@ -928,7 +928,7 @@ void frame::oops_interpreted_do(OopClosure* f, CLDToOopClosure* cld_f, // klass, and the klass needs to be kept alive while executing. The GCs // don't trace through method pointers, so typically in similar situations // the mirror or the class loader of the klass are installed as a GC root. - // To minimze the overhead of doing that here, we ask the GC to pass down a + // To minimize the overhead of doing that here, we ask the GC to pass down a // closure that knows how to keep klasses alive given a ClassLoaderData. cld_f->do_cld(m->method_holder()->class_loader_data()); } diff --git a/hotspot/src/share/vm/runtime/globals.cpp b/hotspot/src/share/vm/runtime/globals.cpp index f1783af15d4..526d47c9ad6 100644 --- a/hotspot/src/share/vm/runtime/globals.cpp +++ b/hotspot/src/share/vm/runtime/globals.cpp @@ -31,6 +31,7 @@ #include "utilities/ostream.hpp" #include "utilities/macros.hpp" #include "utilities/top.hpp" +#include "trace/tracing.hpp" #if INCLUDE_ALL_GCS #include "gc_implementation/g1/g1_globals.hpp" #endif // INCLUDE_ALL_GCS @@ -62,6 +63,14 @@ ARCH_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PRODUCT_FLAG, \ MATERIALIZE_FLAGS_EXT +static bool is_product_build() { +#ifdef PRODUCT + return true; +#else + return false; +#endif +} + void Flag::check_writable() { if (is_constant_in_binary()) { fatal(err_msg("flag is constant: %s", _name)); @@ -235,6 +244,27 @@ bool Flag::is_unlocked() const { // Get custom message for this locked flag, or return NULL if // none is available. void Flag::get_locked_message(char* buf, int buflen) const { + buf[0] = '\0'; + if (is_diagnostic() && !is_unlocked()) { + jio_snprintf(buf, buflen, "Error: VM option '%s' is diagnostic and must be enabled via -XX:+UnlockDiagnosticVMOptions.\n", + _name); + return; + } + if (is_experimental() && !is_unlocked()) { + jio_snprintf(buf, buflen, "Error: VM option '%s' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.\n", + _name); + return; + } + if (is_develop() && is_product_build()) { + jio_snprintf(buf, buflen, "Error: VM option '%s' is develop and is available only in debug version of VM.\n", + _name); + return; + } + if (is_notproduct() && is_product_build()) { + jio_snprintf(buf, buflen, "Error: VM option '%s' is notproduct and is available only in debug version of VM.\n", + _name); + return; + } get_locked_message_ext(buf, buflen); } @@ -464,13 +494,13 @@ inline bool str_equal(const char* s, const char* q, size_t len) { } // Search the flag table for a named flag -Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked) { +Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked, bool return_flag) { for (Flag* current = &flagTable[0]; current->_name != NULL; current++) { if (str_equal(current->_name, name, length)) { // Found a matching entry. // Don't report notproduct and develop flags in product builds. if (current->is_constant_in_binary()) { - return NULL; + return (return_flag == true ? current : NULL); } // Report locked flags only if allowed. if (!(current->is_unlocked() || current->is_unlocker())) { @@ -564,6 +594,17 @@ bool CommandLineFlags::wasSetOnCmdline(const char* name, bool* value) { return true; } +template +static void trace_flag_changed(const char* name, const T old_value, const T new_value, const Flag::Flags origin) +{ + E e; + e.set_name(name); + e.set_old_value(old_value); + e.set_new_value(new_value); + e.set_origin(origin); + e.commit(); +} + bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) { Flag* result = Flag::find_flag(name, len); if (result == NULL) return false; @@ -577,6 +618,7 @@ bool CommandLineFlags::boolAtPut(char* name, size_t len, bool* value, Flag::Flag if (result == NULL) return false; if (!result->is_bool()) return false; bool old_value = result->get_bool(); + trace_flag_changed(name, old_value, *value, origin); result->set_bool(*value); *value = old_value; result->set_origin(origin); @@ -586,6 +628,7 @@ bool CommandLineFlags::boolAtPut(char* name, size_t len, bool* value, Flag::Flag void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin) { Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type"); + trace_flag_changed(faddr->_name, faddr->get_bool(), value, origin); faddr->set_bool(value); faddr->set_origin(origin); } @@ -603,6 +646,7 @@ bool CommandLineFlags::intxAtPut(char* name, size_t len, intx* value, Flag::Flag if (result == NULL) return false; if (!result->is_intx()) return false; intx old_value = result->get_intx(); + trace_flag_changed(name, old_value, *value, origin); result->set_intx(*value); *value = old_value; result->set_origin(origin); @@ -612,6 +656,7 @@ bool CommandLineFlags::intxAtPut(char* name, size_t len, intx* value, Flag::Flag void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin) { Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type"); + trace_flag_changed(faddr->_name, faddr->get_intx(), value, origin); faddr->set_intx(value); faddr->set_origin(origin); } @@ -629,6 +674,7 @@ bool CommandLineFlags::uintxAtPut(char* name, size_t len, uintx* value, Flag::Fl if (result == NULL) return false; if (!result->is_uintx()) return false; uintx old_value = result->get_uintx(); + trace_flag_changed(name, old_value, *value, origin); result->set_uintx(*value); *value = old_value; result->set_origin(origin); @@ -638,6 +684,7 @@ bool CommandLineFlags::uintxAtPut(char* name, size_t len, uintx* value, Flag::Fl void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin) { Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type"); + trace_flag_changed(faddr->_name, faddr->get_uintx(), value, origin); faddr->set_uintx(value); faddr->set_origin(origin); } @@ -655,6 +702,7 @@ bool CommandLineFlags::uint64_tAtPut(char* name, size_t len, uint64_t* value, Fl if (result == NULL) return false; if (!result->is_uint64_t()) return false; uint64_t old_value = result->get_uint64_t(); + trace_flag_changed(name, old_value, *value, origin); result->set_uint64_t(*value); *value = old_value; result->set_origin(origin); @@ -664,6 +712,7 @@ bool CommandLineFlags::uint64_tAtPut(char* name, size_t len, uint64_t* value, Fl void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin) { Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type"); + trace_flag_changed(faddr->_name, faddr->get_uint64_t(), value, origin); faddr->set_uint64_t(value); faddr->set_origin(origin); } @@ -681,6 +730,7 @@ bool CommandLineFlags::doubleAtPut(char* name, size_t len, double* value, Flag:: if (result == NULL) return false; if (!result->is_double()) return false; double old_value = result->get_double(); + trace_flag_changed(name, old_value, *value, origin); result->set_double(*value); *value = old_value; result->set_origin(origin); @@ -690,6 +740,7 @@ bool CommandLineFlags::doubleAtPut(char* name, size_t len, double* value, Flag:: void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin) { Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_double(), "wrong flag type"); + trace_flag_changed(faddr->_name, faddr->get_double(), value, origin); faddr->set_double(value); faddr->set_origin(origin); } @@ -707,6 +758,7 @@ bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Fl if (result == NULL) return false; if (!result->is_ccstr()) return false; ccstr old_value = result->get_ccstr(); + trace_flag_changed(name, old_value, *value, origin); char* new_value = NULL; if (*value != NULL) { new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal); @@ -728,6 +780,7 @@ void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, F Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type"); ccstr old_value = faddr->get_ccstr(); + trace_flag_changed(faddr->_name, old_value, value, origin); char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal); strcpy(new_value, value); faddr->set_ccstr(new_value); diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 5f72d40a276..b5d8880e91e 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -241,7 +241,7 @@ struct Flag { // number of flags static size_t numFlags; - static Flag* find_flag(const char* name, size_t length, bool allow_locked = false); + static Flag* find_flag(const char* name, size_t length, bool allow_locked = false, bool return_flag = false); static Flag* fuzzy_match(const char* name, size_t length, bool allow_locked = false); void check_writable(); @@ -3135,15 +3135,15 @@ class CommandLineFlags { "Maximum size of class area in Metaspace when compressed " \ "class pointers are used") \ \ - product(uintx, MinHeapFreeRatio, 40, \ + manageable(uintx, MinHeapFreeRatio, 40, \ "The minimum percentage of heap free after GC to avoid expansion."\ - " For most GCs this applies to the old generation. In G1 it" \ - " applies to the whole heap. Not supported by ParallelGC.") \ + " For most GCs this applies to the old generation. In G1 and" \ + " ParallelGC it applies to the whole heap.") \ \ - product(uintx, MaxHeapFreeRatio, 70, \ + manageable(uintx, MaxHeapFreeRatio, 70, \ "The maximum percentage of heap free after GC to avoid shrinking."\ - " For most GCs this applies to the old generation. In G1 it" \ - " applies to the whole heap. Not supported by ParallelGC.") \ + " For most GCs this applies to the old generation. In G1 and" \ + " ParallelGC it applies to the whole heap.") \ \ product(intx, SoftRefLRUPolicyMSPerMB, 1000, \ "Number of milliseconds per MB of free space in the heap") \ @@ -3639,7 +3639,7 @@ class CommandLineFlags { product(uintx, MaxDirectMemorySize, 0, \ "Maximum total size of NIO direct-buffer allocations") \ \ - /* temporary developer defined flags */ \ + /* Flags used for temporary code during development */ \ \ diagnostic(bool, UseNewCode, false, \ "Testing Only: Use the new version while testing") \ diff --git a/hotspot/src/share/vm/runtime/globals_extension.hpp b/hotspot/src/share/vm/runtime/globals_extension.hpp index b746bebe882..468d4bb87fa 100644 --- a/hotspot/src/share/vm/runtime/globals_extension.hpp +++ b/hotspot/src/share/vm/runtime/globals_extension.hpp @@ -31,7 +31,7 @@ // Construct enum of Flag_ constants. -// Parens left off in the following for the enum decl below. +// Parenthesis left off in the following for the enum decl below. #define FLAG_MEMBER(flag) Flag_##flag #define RUNTIME_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), diff --git a/hotspot/src/share/vm/runtime/handles.hpp b/hotspot/src/share/vm/runtime/handles.hpp index c2ce4b38c5a..e7212214a14 100644 --- a/hotspot/src/share/vm/runtime/handles.hpp +++ b/hotspot/src/share/vm/runtime/handles.hpp @@ -267,7 +267,7 @@ class HandleArea: public Arena { // HandleMarks manually. // // A HandleMark constructor will record the current handle area top, and the -// desctructor will reset the top, destroying all handles allocated in between. +// destructor will reset the top, destroying all handles allocated in between. // The following code will therefore NOT work: // // Handle h; diff --git a/hotspot/src/share/vm/runtime/java.cpp b/hotspot/src/share/vm/runtime/java.cpp index f5fde748fd5..1c4087412cb 100644 --- a/hotspot/src/share/vm/runtime/java.cpp +++ b/hotspot/src/share/vm/runtime/java.cpp @@ -608,6 +608,7 @@ void notify_vm_shutdown() { HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); #else /* USDT2 */ HOTSPOT_VM_SHUTDOWN(); + HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); #endif /* USDT2 */ } diff --git a/hotspot/src/share/vm/runtime/javaCalls.cpp b/hotspot/src/share/vm/runtime/javaCalls.cpp index 2de958d6f0e..027d8d9b50f 100644 --- a/hotspot/src/share/vm/runtime/javaCalls.cpp +++ b/hotspot/src/share/vm/runtime/javaCalls.cpp @@ -302,7 +302,7 @@ void JavaCalls::call(JavaValue* result, methodHandle method, JavaCallArguments* // Check if we need to wrap a potential OS exception handler around thread // This is used for e.g. Win32 structured exception handlers assert(THREAD->is_Java_thread(), "only JavaThreads can make JavaCalls"); - // Need to wrap each and everytime, since there might be native code down the + // Need to wrap each and every time, since there might be native code down the // stack that has installed its own exception handlers os::os_exception_wrapper(call_helper, result, &method, args, THREAD); } diff --git a/hotspot/src/share/vm/runtime/jniHandles.cpp b/hotspot/src/share/vm/runtime/jniHandles.cpp index 7a3fb8b4c51..373c3359d02 100644 --- a/hotspot/src/share/vm/runtime/jniHandles.cpp +++ b/hotspot/src/share/vm/runtime/jniHandles.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -195,8 +195,10 @@ private: int _count; public: CountHandleClosure(): _count(0) {} - virtual void do_oop(oop* unused) { - _count++; + virtual void do_oop(oop* ooph) { + if (*ooph != JNIHandles::deleted_handle()) { + _count++; + } } virtual void do_oop(narrowOop* unused) { ShouldNotReachHere(); } int count() { return _count; } @@ -461,7 +463,7 @@ jobject JNIHandleBlock::allocate_handle(oop obj) { // Append new block Thread* thread = Thread::current(); Handle obj_handle(thread, obj); - // This can block, so we need to preserve obj accross call. + // This can block, so we need to preserve obj across call. _last->_next = JNIHandleBlock::allocate_block(thread); _last = _last->_next; _allocate_before_rebuild--; @@ -528,7 +530,7 @@ int JNIHandleBlock::length() const { return result; } -// This method is not thread-safe, i.e., must be called whule holding a lock on the +// This method is not thread-safe, i.e., must be called while holding a lock on the // structure. long JNIHandleBlock::memory_usage() const { return length() * sizeof(JNIHandleBlock); diff --git a/hotspot/src/share/vm/runtime/jniHandles.hpp b/hotspot/src/share/vm/runtime/jniHandles.hpp index 1b6b6b81f67..1bd97c3cf09 100644 --- a/hotspot/src/share/vm/runtime/jniHandles.hpp +++ b/hotspot/src/share/vm/runtime/jniHandles.hpp @@ -106,7 +106,7 @@ class JNIHandleBlock : public CHeapObj { JNIHandleBlock* _next; // Link to next block // The following instance variables are only used by the first block in a chain. - // Having two types of blocks complicates the code and the space overhead in negligble. + // Having two types of blocks complicates the code and the space overhead in negligible. JNIHandleBlock* _last; // Last block in use JNIHandleBlock* _pop_frame_link; // Block to restore on PopLocalFrame call oop* _free_list; // Handle free list diff --git a/hotspot/src/share/vm/runtime/mutex.cpp b/hotspot/src/share/vm/runtime/mutex.cpp index 91d9de9ddce..4cd55e7d6f9 100644 --- a/hotspot/src/share/vm/runtime/mutex.cpp +++ b/hotspot/src/share/vm/runtime/mutex.cpp @@ -507,7 +507,7 @@ void Monitor::ILock (Thread * Self) { _OnDeck = NULL ; // Note that we current drop the inner lock (clear OnDeck) in the slow-path - // epilog immediately after having acquired the outer lock. + // epilogue immediately after having acquired the outer lock. // But instead we could consider the following optimizations: // A. Shift or defer dropping the inner lock until the subsequent IUnlock() operation. // This might avoid potential reacquisition of the inner lock in IUlock(). @@ -931,7 +931,7 @@ void Monitor::lock (Thread * Self) { check_block_state(Self); if (Self->is_Java_thread()) { - // Horribile dictu - we suffer through a state transition + // Horrible dictu - we suffer through a state transition assert(rank() > Mutex::special, "Potential deadlock with special or lesser rank mutex"); ThreadBlockInVM tbivm ((JavaThread *) Self) ; ILock (Self) ; @@ -963,7 +963,7 @@ void Monitor::lock_without_safepoint_check () { } -// Returns true if thread succeceed [sic] in grabbing the lock, otherwise false. +// Returns true if thread succeeds in grabbing the lock, otherwise false. bool Monitor::try_lock() { Thread * const Self = Thread::current(); diff --git a/hotspot/src/share/vm/runtime/mutex.hpp b/hotspot/src/share/vm/runtime/mutex.hpp index fc2c434f9f2..dbd32669549 100644 --- a/hotspot/src/share/vm/runtime/mutex.hpp +++ b/hotspot/src/share/vm/runtime/mutex.hpp @@ -90,7 +90,7 @@ class Monitor : public CHeapObj { // A special lock: Is a lock where you are guaranteed not to block while you are // holding it, i.e., no vm operation can happen, taking other locks, etc. // NOTE: It is critical that the rank 'special' be the lowest (earliest) - // (except for "event"?) for the deadlock dection to work correctly. + // (except for "event"?) for the deadlock detection to work correctly. // The rank native is only for use in Mutex's created by JVM_RawMonitorCreate, // which being external to the VM are not subject to deadlock detection. // The rank safepoint is used only for synchronization in reaching a @@ -241,7 +241,7 @@ class Monitor : public CHeapObj { // // Currently, however, the base object is a monitor. Monitor contains all the // logic for wait(), notify(), etc. Mutex extends monitor and restricts the -// visiblity of wait(), notify(), and notify_all(). +// visibility of wait(), notify(), and notify_all(). // // Another viable alternative would have been to have Monitor extend Mutex and // implement all the normal mutex and wait()-notify() logic in Mutex base class. diff --git a/hotspot/src/share/vm/runtime/mutexLocker.hpp b/hotspot/src/share/vm/runtime/mutexLocker.hpp index 361febdcdb8..9e35c03fbed 100644 --- a/hotspot/src/share/vm/runtime/mutexLocker.hpp +++ b/hotspot/src/share/vm/runtime/mutexLocker.hpp @@ -43,7 +43,7 @@ // Mutexes used in the VM. extern Mutex* Patching_lock; // a lock used to guard code patching of compiled code -extern Monitor* SystemDictionary_lock; // a lock on the system dictonary +extern Monitor* SystemDictionary_lock; // a lock on the system dictionary extern Mutex* PackageTable_lock; // a lock on the class loader package table extern Mutex* CompiledIC_lock; // a lock used to guard compiled IC patching and access extern Mutex* InlineCacheBuffer_lock; // a lock used to guard the InlineCacheBuffer @@ -345,8 +345,8 @@ class MutexUnlockerEx: StackObj { // - reentrant locking // - locking out of order // -// Only too be used for verify code, where we can relaxe out dead-lock -// dection code a bit (unsafe, but probably ok). This code is NEVER to +// Only to be used for verify code, where we can relax out dead-lock +// detection code a bit (unsafe, but probably ok). This code is NEVER to // be included in a product version. // class VerifyMutexLocker: StackObj { @@ -358,7 +358,7 @@ class VerifyMutexLocker: StackObj { _mutex = mutex; _reentrant = mutex->owned_by_self(); if (!_reentrant) { - // We temp. diable strict safepoint checking, while we require the lock + // We temp. disable strict safepoint checking, while we require the lock FlagSetting fs(StrictSafepointChecks, false); _mutex->lock(); } diff --git a/hotspot/src/share/vm/runtime/objectMonitor.cpp b/hotspot/src/share/vm/runtime/objectMonitor.cpp index 523887502ca..5ab77844195 100644 --- a/hotspot/src/share/vm/runtime/objectMonitor.cpp +++ b/hotspot/src/share/vm/runtime/objectMonitor.cpp @@ -234,7 +234,7 @@ static volatile int InitDone = 0 ; // * Taken together, the cxq and the EntryList constitute or form a // single logical queue of threads stalled trying to acquire the lock. // We use two distinct lists to improve the odds of a constant-time -// dequeue operation after acquisition (in the ::enter() epilog) and +// dequeue operation after acquisition (in the ::enter() epilogue) and // to reduce heat on the list ends. (c.f. Michael Scott's "2Q" algorithm). // A key desideratum is to minimize queue & monitor metadata manipulation // that occurs while holding the monitor lock -- that is, we want to @@ -677,7 +677,7 @@ void ATTR ObjectMonitor::EnterI (TRAPS) { // non-null and elect a new "Responsible" timer thread. // // This thread executes: - // ST Responsible=null; MEMBAR (in enter epilog - here) + // ST Responsible=null; MEMBAR (in enter epilogue - here) // LD cxq|EntryList (in subsequent exit) // // Entering threads in the slow/contended path execute: @@ -2031,7 +2031,7 @@ int ObjectMonitor::TrySpin_VaryDuration (Thread * Self) { TEVENT (Spin abort -- too many spinners) ; return 0 ; } - // Slighty racy, but benign ... + // Slightly racy, but benign ... Adjust (&_Spinner, 1) ; } diff --git a/hotspot/src/share/vm/runtime/objectMonitor.hpp b/hotspot/src/share/vm/runtime/objectMonitor.hpp index 10b3609c0bb..5a2756826cb 100644 --- a/hotspot/src/share/vm/runtime/objectMonitor.hpp +++ b/hotspot/src/share/vm/runtime/objectMonitor.hpp @@ -101,7 +101,7 @@ class ObjectMonitor { static int Spinner_offset_in_bytes() { return offset_of(ObjectMonitor, _Spinner); } public: - // Eventaully we'll make provisions for multiple callbacks, but + // Eventually we'll make provisions for multiple callbacks, but // now one will suffice. static int (*SpinCallbackFunction)(intptr_t, int) ; static intptr_t SpinCallbackArgument ; @@ -272,7 +272,7 @@ public: // type int, or int32_t but not intptr_t. There's no reason // to use 64-bit fields for these variables on a 64-bit JVM. - volatile intptr_t _count; // reference count to prevent reclaimation/deflation + volatile intptr_t _count; // reference count to prevent reclamation/deflation // at stop-the-world time. See deflate_idle_monitors(). // _count is approximately |_WaitSet| + |_EntryList| protected: diff --git a/hotspot/src/share/vm/runtime/orderAccess.hpp b/hotspot/src/share/vm/runtime/orderAccess.hpp index b59b4642c2c..faf8d2a50c9 100644 --- a/hotspot/src/share/vm/runtime/orderAccess.hpp +++ b/hotspot/src/share/vm/runtime/orderAccess.hpp @@ -61,13 +61,13 @@ // // Ensures that Load1 completes before Store2 and any subsequent store // operations. Loads before Load1 may *not* float below Store2 and any -// subseqeuent store operations. +// subsequent store operations. // // StoreLoad: Store1(s); StoreLoad; Load2 // // Ensures that Store1 completes before Load2 and any subsequent load // operations. Stores before Store1 may *not* float below Load2 and any -// subseqeuent load operations. +// subsequent load operations. // // // We define two further operations, 'release' and 'acquire'. They are @@ -176,7 +176,7 @@ // compilers that we currently use (SunStudio, gcc and VC++) respect the // semantics of volatile here. If you build HotSpot using other // compilers, you may need to verify that no compiler reordering occurs -// across the sequence point respresented by the volatile access. +// across the sequence point represented by the volatile access. // // // os::is_MP Considered Redundant @@ -311,7 +311,7 @@ class OrderAccess : AllStatic { private: // This is a helper that invokes the StubRoutines::fence_entry() // routine if it exists, It should only be used by platforms that - // don't another way to do the inline eassembly. + // don't have another way to do the inline assembly. static void StubRoutines_fence(); }; diff --git a/hotspot/src/share/vm/runtime/os.cpp b/hotspot/src/share/vm/runtime/os.cpp index 332ec2951af..74617ab97e8 100644 --- a/hotspot/src/share/vm/runtime/os.cpp +++ b/hotspot/src/share/vm/runtime/os.cpp @@ -236,7 +236,7 @@ static void signal_thread_entry(JavaThread* thread, TRAPS) { while (true) { int sig; { - // FIXME : Currently we have not decieded what should be the status + // FIXME : Currently we have not decided what should be the status // for this java thread blocked here. Once we decide about // that we should fix this. sig = os::signal_wait(); @@ -583,7 +583,7 @@ void print_neighbor_blocks(void* ptr) { ptrdiff_t size = *size_addr_from_base(start_of_prev_block); u_char* obj = start_of_prev_block + space_before; if (size <= 0 ) { - // start is bad; mayhave been confused by OS data inbetween objects + // start is bad; may have been confused by OS data in between objects // search one more backwards start_of_prev_block = find_cushion_backwards(start_of_prev_block); size = *size_addr_from_base(start_of_prev_block); @@ -1011,7 +1011,7 @@ void os::print_location(outputStream* st, intptr_t x, bool verbose) { if (Universe::heap()->is_in(addr)) { HeapWord* p = Universe::heap()->block_start(addr); bool print = false; - // If we couldn't find it it just may mean that heap wasn't parseable + // If we couldn't find it it just may mean that heap wasn't parsable // See if we were just given an oop directly if (p != NULL && Universe::heap()->block_is_obj(p)) { print = true; @@ -1443,7 +1443,7 @@ void os::trace_page_sizes(const char* str, const size_t region_min_size, // >= 2 physical CPU's and >=2GB of memory, with some fuzz // because the graphics memory (?) sometimes masks physical memory. // If you want to change the definition of a server class machine -// on some OS or platform, e.g., >=4GB on Windohs platforms, +// on some OS or platform, e.g., >=4GB on Windows platforms, // then you'll have to parameterize this method based on that state, // as was done for logical processors here, or replicate and // specialize this method for each platform. (Or fix os to have diff --git a/hotspot/src/share/vm/runtime/os.hpp b/hotspot/src/share/vm/runtime/os.hpp index 17fcd3bdd79..54aeb012a49 100644 --- a/hotspot/src/share/vm/runtime/os.hpp +++ b/hotspot/src/share/vm/runtime/os.hpp @@ -395,7 +395,7 @@ class os: AllStatic { // was equal. However, some platforms mask off faulting addresses // to the page size, so now we just check that the address is // within the page. This makes the thread argument unnecessary, - // but we retain the NULL check to preserve existing behaviour. + // but we retain the NULL check to preserve existing behavior. if (thread == NULL) return false; address page = (address) _mem_serialize_page; return addr >= page && addr < (page + os::vm_page_size()); @@ -430,7 +430,10 @@ class os: AllStatic { static intx current_thread_id(); static int current_process_id(); static int sleep(Thread* thread, jlong ms, bool interruptable); - static int naked_sleep(); + // Short standalone OS sleep suitable for slow path spin loop. + // Ignores Thread.interrupt() (so keep it short). + // ms = 0, will sleep for the least amount of time allowed by the OS. + static void naked_short_sleep(jlong ms); static void infinite_sleep(); // never returns, use with CAUTION static void yield(); // Yields to all threads with same priority enum YieldResult { @@ -540,7 +543,7 @@ class os: AllStatic { // Loads .dll/.so and // in case of error it checks if .dll/.so was built for the - // same architecture as Hotspot is running on + // same architecture as HotSpot is running on static void* dll_load(const char *name, char *ebuf, int ebuflen); // lookup symbol in a shared library diff --git a/hotspot/src/share/vm/runtime/park.cpp b/hotspot/src/share/vm/runtime/park.cpp index 6380570ef50..6f278dff23a 100644 --- a/hotspot/src/share/vm/runtime/park.cpp +++ b/hotspot/src/share/vm/runtime/park.cpp @@ -59,58 +59,22 @@ ParkEvent * ParkEvent::Allocate (Thread * t) { // Start by trying to recycle an existing but unassociated // ParkEvent from the global free list. - for (;;) { - ev = FreeList ; - if (ev == NULL) break ; - // 1: Detach - sequester or privatize the list - // Tantamount to ev = Swap (&FreeList, NULL) - if (Atomic::cmpxchg_ptr (NULL, &FreeList, ev) != ev) { - continue ; + // Using a spin lock since we are part of the mutex impl. + // 8028280: using concurrent free list without memory management can leak + // pretty badly it turns out. + Thread::SpinAcquire(&ListLock, "ParkEventFreeListAllocate"); + { + ev = FreeList; + if (ev != NULL) { + FreeList = ev->FreeNext; } - - // We've detached the list. The list in-hand is now - // local to this thread. This thread can operate on the - // list without risk of interference from other threads. - // 2: Extract -- pop the 1st element from the list. - ParkEvent * List = ev->FreeNext ; - if (List == NULL) break ; - for (;;) { - // 3: Try to reattach the residual list - guarantee (List != NULL, "invariant") ; - ParkEvent * Arv = (ParkEvent *) Atomic::cmpxchg_ptr (List, &FreeList, NULL) ; - if (Arv == NULL) break ; - - // New nodes arrived. Try to detach the recent arrivals. - if (Atomic::cmpxchg_ptr (NULL, &FreeList, Arv) != Arv) { - continue ; - } - guarantee (Arv != NULL, "invariant") ; - // 4: Merge Arv into List - ParkEvent * Tail = List ; - while (Tail->FreeNext != NULL) Tail = Tail->FreeNext ; - Tail->FreeNext = Arv ; - } - break ; } + Thread::SpinRelease(&ListLock); if (ev != NULL) { guarantee (ev->AssociatedWith == NULL, "invariant") ; } else { // Do this the hard way -- materialize a new ParkEvent. - // In rare cases an allocating thread might detach a long list -- - // installing null into FreeList -- and then stall or be obstructed. - // A 2nd thread calling Allocate() would see FreeList == null. - // The list held privately by the 1st thread is unavailable to the 2nd thread. - // In that case the 2nd thread would have to materialize a new ParkEvent, - // even though free ParkEvents existed in the system. In this case we end up - // with more ParkEvents in circulation than we need, but the race is - // rare and the outcome is benign. Ideally, the # of extant ParkEvents - // is equal to the maximum # of threads that existed at any one time. - // Because of the race mentioned above, segments of the freelist - // can be transiently inaccessible. At worst we may end up with the - // # of ParkEvents in circulation slightly above the ideal. - // Note that if we didn't have the TSM/immortal constraint, then - // when reattaching, above, we could trim the list. ev = new ParkEvent () ; guarantee ((intptr_t(ev) & 0xFF) == 0, "invariant") ; } @@ -124,13 +88,14 @@ void ParkEvent::Release (ParkEvent * ev) { if (ev == NULL) return ; guarantee (ev->FreeNext == NULL , "invariant") ; ev->AssociatedWith = NULL ; - for (;;) { - // Push ev onto FreeList - // The mechanism is "half" lock-free. - ParkEvent * List = FreeList ; - ev->FreeNext = List ; - if (Atomic::cmpxchg_ptr (ev, &FreeList, List) == List) break ; + // Note that if we didn't have the TSM/immortal constraint, then + // when reattaching we could trim the list. + Thread::SpinAcquire(&ListLock, "ParkEventFreeListRelease"); + { + ev->FreeNext = FreeList; + FreeList = ev; } + Thread::SpinRelease(&ListLock); } // Override operator new and delete so we can ensure that the @@ -152,7 +117,7 @@ void ParkEvent::operator delete (void * a) { // 6399321 As a temporary measure we copied & modified the ParkEvent:: // allocate() and release() code for use by Parkers. The Parker:: forms -// will eventually be removed as we consolide and shift over to ParkEvents +// will eventually be removed as we consolidate and shift over to ParkEvents // for both builtin synchronization and JSR166 operations. volatile int Parker::ListLock = 0 ; @@ -164,56 +129,21 @@ Parker * Parker::Allocate (JavaThread * t) { // Start by trying to recycle an existing but unassociated // Parker from the global free list. - for (;;) { - p = FreeList ; - if (p == NULL) break ; - // 1: Detach - // Tantamount to p = Swap (&FreeList, NULL) - if (Atomic::cmpxchg_ptr (NULL, &FreeList, p) != p) { - continue ; + // 8028280: using concurrent free list without memory management can leak + // pretty badly it turns out. + Thread::SpinAcquire(&ListLock, "ParkerFreeListAllocate"); + { + p = FreeList; + if (p != NULL) { + FreeList = p->FreeNext; } - - // We've detached the list. The list in-hand is now - // local to this thread. This thread can operate on the - // list without risk of interference from other threads. - // 2: Extract -- pop the 1st element from the list. - Parker * List = p->FreeNext ; - if (List == NULL) break ; - for (;;) { - // 3: Try to reattach the residual list - guarantee (List != NULL, "invariant") ; - Parker * Arv = (Parker *) Atomic::cmpxchg_ptr (List, &FreeList, NULL) ; - if (Arv == NULL) break ; - - // New nodes arrived. Try to detach the recent arrivals. - if (Atomic::cmpxchg_ptr (NULL, &FreeList, Arv) != Arv) { - continue ; - } - guarantee (Arv != NULL, "invariant") ; - // 4: Merge Arv into List - Parker * Tail = List ; - while (Tail->FreeNext != NULL) Tail = Tail->FreeNext ; - Tail->FreeNext = Arv ; - } - break ; } + Thread::SpinRelease(&ListLock); if (p != NULL) { guarantee (p->AssociatedWith == NULL, "invariant") ; } else { // Do this the hard way -- materialize a new Parker.. - // In rare cases an allocating thread might detach - // a long list -- installing null into FreeList --and - // then stall. Another thread calling Allocate() would see - // FreeList == null and then invoke the ctor. In this case we - // end up with more Parkers in circulation than we need, but - // the race is rare and the outcome is benign. - // Ideally, the # of extant Parkers is equal to the - // maximum # of threads that existed at any one time. - // Because of the race mentioned above, segments of the - // freelist can be transiently inaccessible. At worst - // we may end up with the # of Parkers in circulation - // slightly above the ideal. p = new Parker() ; } p->AssociatedWith = t ; // Associate p with t @@ -227,11 +157,12 @@ void Parker::Release (Parker * p) { guarantee (p->AssociatedWith != NULL, "invariant") ; guarantee (p->FreeNext == NULL , "invariant") ; p->AssociatedWith = NULL ; - for (;;) { - // Push p onto FreeList - Parker * List = FreeList ; - p->FreeNext = List ; - if (Atomic::cmpxchg_ptr (p, &FreeList, List) == List) break ; + + Thread::SpinAcquire(&ListLock, "ParkerFreeListRelease"); + { + p->FreeNext = FreeList; + FreeList = p; } + Thread::SpinRelease(&ListLock); } diff --git a/hotspot/src/share/vm/runtime/perfData.cpp b/hotspot/src/share/vm/runtime/perfData.cpp index 60b71fde184..f2152ab1c64 100644 --- a/hotspot/src/share/vm/runtime/perfData.cpp +++ b/hotspot/src/share/vm/runtime/perfData.cpp @@ -39,7 +39,7 @@ PerfDataList* PerfDataManager::_sampled = NULL; PerfDataList* PerfDataManager::_constants = NULL; /* - * The jvmstat global and subsysem jvmstat counter name spaces. The top + * The jvmstat global and subsystem jvmstat counter name spaces. The top * level name spaces imply the interface stability level of the counter, * which generally follows the Java package, class, and property naming * conventions. The CounterNS enumeration values should be used to index diff --git a/hotspot/src/share/vm/runtime/perfData.hpp b/hotspot/src/share/vm/runtime/perfData.hpp index 9ba4e4b71e4..f9836ac08ff 100644 --- a/hotspot/src/share/vm/runtime/perfData.hpp +++ b/hotspot/src/share/vm/runtime/perfData.hpp @@ -116,7 +116,7 @@ enum CounterNS { * * A PerfData subtype is not required to provide an implementation for * each variability classification. For example, the String type provides - * Variable and Constant variablility classifications in the PerfStringVariable + * Variable and Constant variability classifications in the PerfStringVariable * and PerfStringConstant classes, but does not provide a counter type. * * Performance data are also described by a unit of measure. Units allow @@ -172,10 +172,10 @@ enum CounterNS { * foo_counter->inc(); * * Creating a performance counter that holds a variably change long - * data value with untis specified in U_Bytes in the "com.sun.ci + * data value with units specified in U_Bytes in the "com.sun.ci * name space. * - * PerfLongVariable* bar_varible; + * PerfLongVariable* bar_variable; * bar_variable = PerfDataManager::create_long_variable(COM_CI, "bar", .* PerfData::U_Bytes, * optionalInitialValue, @@ -203,7 +203,7 @@ enum CounterNS { * In this example, the PerfData pointer can be ignored as the caller * is relying on the StatSampler PeriodicTask to sample the given * address at a regular interval. The interval is defined by the - * PerfDataSamplingInterval global variable, and is applyied on + * PerfDataSamplingInterval global variable, and is applied on * a system wide basis, not on an per-counter basis. * * Creating a performance counter in an arbitrary name space that utilizes @@ -234,7 +234,7 @@ enum CounterNS { * the UsePerfData flag. Counters will be created on the c-heap * if UsePerfData is false. * - * Until further noice, all PerfData objects should be created and + * Until further notice, all PerfData objects should be created and * manipulated within a guarded block. The guard variable is * UsePerfData, a product flag set to true by default. This flag may * be removed from the product in the future. @@ -586,7 +586,7 @@ class PerfStringVariable : public PerfString { * * The abstraction is not complete. A more general container class * would provide an Iterator abstraction that could be used to - * traverse the lists. This implementation still relys upon integer + * traverse the lists. This implementation still relies upon integer * iterators and the at(int index) method. However, the GrowableArray * is not directly visible outside this class and can be replaced by * some other implementation, as long as that implementation provides diff --git a/hotspot/src/share/vm/runtime/perfMemory.hpp b/hotspot/src/share/vm/runtime/perfMemory.hpp index d1256fb2e87..18a2efd2f55 100644 --- a/hotspot/src/share/vm/runtime/perfMemory.hpp +++ b/hotspot/src/share/vm/runtime/perfMemory.hpp @@ -55,7 +55,7 @@ * of the fields must be changed along with their counterparts in the * PerfDataBuffer Java class. The first four bytes of this structure * should never change, or compatibility problems between the monitoring - * applications and Hotspot VMs will result. The reserved fields are + * applications and HotSpot VMs will result. The reserved fields are * available for future enhancements. */ typedef struct { diff --git a/hotspot/src/share/vm/runtime/reflection.cpp b/hotspot/src/share/vm/runtime/reflection.cpp index a8d24fa6d10..dadcf60263f 100644 --- a/hotspot/src/share/vm/runtime/reflection.cpp +++ b/hotspot/src/share/vm/runtime/reflection.cpp @@ -482,7 +482,7 @@ static bool under_host_klass(InstanceKlass* ik, Klass* host_klass) { ik = InstanceKlass::cast(hc); // There's no way to make a host class loop short of patching memory. - // Therefore there cannot be a loop here unles there's another bug. + // Therefore there cannot be a loop here unless there's another bug. // Still, let's check for it. assert(--inf_loop_check > 0, "no host_klass loop"); } diff --git a/hotspot/src/share/vm/runtime/reflection.hpp b/hotspot/src/share/vm/runtime/reflection.hpp index 418c300faf9..d8694948cd7 100644 --- a/hotspot/src/share/vm/runtime/reflection.hpp +++ b/hotspot/src/share/vm/runtime/reflection.hpp @@ -138,9 +138,9 @@ private: static BasicType basic_type_mirror_to_basic_type(oop basic_type_mirror, TRAPS); public: - // Method invokation through java.lang.reflect.Method + // Method invocation through java.lang.reflect.Method static oop invoke_method(oop method_mirror, Handle receiver, objArrayHandle args, TRAPS); - // Method invokation through java.lang.reflect.Constructor + // Method invocation through java.lang.reflect.Constructor static oop invoke_constructor(oop method_mirror, objArrayHandle args, TRAPS); }; diff --git a/hotspot/src/share/vm/runtime/registerMap.hpp b/hotspot/src/share/vm/runtime/registerMap.hpp index 5dd677ac4e1..b0f536fb95c 100644 --- a/hotspot/src/share/vm/runtime/registerMap.hpp +++ b/hotspot/src/share/vm/runtime/registerMap.hpp @@ -70,7 +70,7 @@ class JavaThread; // 3) The RegisterMap keeps track of the values of callee-saved registers // from frame to frame (hence, the name). For some stack traversal the // values of the callee-saved registers does not matter, e.g., if you -// only need the static properies such as frame type, pc, and such. +// only need the static properties such as frame type, pc, and such. // Updating of the RegisterMap can be turned off by instantiating the // register map as: RegisterMap map(thread, false); diff --git a/hotspot/src/share/vm/runtime/relocator.cpp b/hotspot/src/share/vm/runtime/relocator.cpp index 450bcf28a94..73b1ce3eed4 100644 --- a/hotspot/src/share/vm/runtime/relocator.cpp +++ b/hotspot/src/share/vm/runtime/relocator.cpp @@ -141,7 +141,7 @@ Relocator::Relocator(methodHandle m, RelocatorListener* listener) { } // size is the new size of the instruction at bci. Hence, if size is less than the current -// instruction sice, we will shrink the code. +// instruction size, we will shrink the code. methodHandle Relocator::insert_space_at(int bci, int size, u_char inst_buffer[], TRAPS) { _changes = new GrowableArray (10); _changes->push(new ChangeWiden(bci, size, inst_buffer)); @@ -192,7 +192,7 @@ bool Relocator::handle_code_changes() { // Execute operation if (!ci->handle_code_change(this)) return false; - // Shuffel items up + // Shuffle items up for (int index = 1; index < _changes->length(); index++) { _changes->at_put(index-1, _changes->at(index)); } @@ -214,7 +214,7 @@ bool Relocator::is_opcode_lookupswitch(Bytecodes::Code bc) { } // We need a special instruction size method, since lookupswitches and tableswitches might not be -// properly alligned during relocation +// properly aligned during relocation int Relocator::rc_instr_len(int bci) { Bytecodes::Code bc= code_at(bci); switch (bc) { @@ -611,7 +611,7 @@ bool Relocator::relocate_code(int bci, int ilen, int delta) { // In case we have shrunken a tableswitch/lookupswitch statement, we store the last // bytes that get overwritten. We have to copy the bytes after the change_jumps method - // has been called, since it is likly to update last offset in a tableswitch/lookupswitch + // has been called, since it is likely to update last offset in a tableswitch/lookupswitch if (delta < 0) { assert(delta>=-3, "we cannot overwrite more than 3 bytes"); memcpy(_overwrite, addr_at(bci + ilen + delta), -delta); diff --git a/hotspot/src/share/vm/runtime/safepoint.cpp b/hotspot/src/share/vm/runtime/safepoint.cpp index 48e523f5aa0..5e04b0ba73d 100644 --- a/hotspot/src/share/vm/runtime/safepoint.cpp +++ b/hotspot/src/share/vm/runtime/safepoint.cpp @@ -156,7 +156,7 @@ void SafepointSynchronize::begin() { // stopped by different mechanisms: // // 1. Running interpreted - // The interpeter dispatch table is changed to force it to + // The interpreter dispatch table is changed to force it to // check for a safepoint condition between bytecodes. // 2. Running in native code // When returning from the native code, a Java thread must check @@ -282,7 +282,7 @@ void SafepointSynchronize::begin() { // See the comments in synchronizer.cpp for additional remarks on spinning. // // In the future we might: - // 1. Modify the safepoint scheme to avoid potentally unbounded spinning. + // 1. Modify the safepoint scheme to avoid potentially unbounded spinning. // This is tricky as the path used by a thread exiting the JVM (say on // on JNI call-out) simply stores into its state field. The burden // is placed on the VM thread, which must poll (spin). @@ -489,7 +489,7 @@ void SafepointSynchronize::end() { ConcurrentGCThread::safepoint_desynchronize(); } #endif // INCLUDE_ALL_GCS - // record this time so VMThread can keep track how much time has elasped + // record this time so VMThread can keep track how much time has elapsed // since last safepoint. _end_of_last_safepoint = os::javaTimeMillis(); } @@ -826,7 +826,7 @@ void SafepointSynchronize::handle_polling_page_exception(JavaThread *thread) { void SafepointSynchronize::print_safepoint_timeout(SafepointTimeoutReason reason) { if (!timeout_error_printed) { timeout_error_printed = true; - // Print out the thread infor which didn't reach the safepoint for debugging + // Print out the thread info which didn't reach the safepoint for debugging // purposes (useful when there are lots of threads in the debugger). tty->print_cr(""); tty->print_cr("# SafepointSynchronize::begin: Timeout detected:"); @@ -1093,7 +1093,7 @@ void ThreadSafepointState::handle_polling_page_exception() { if (caller_fr.is_deoptimized_frame()) { // The exception patch will destroy registers that are still // live and will be needed during deoptimization. Defer the - // Async exception should have defered the exception until the + // Async exception should have deferred the exception until the // next safepoint which will be detected when we get into // the interpreter so if we have an exception now things // are messed up. diff --git a/hotspot/src/share/vm/runtime/safepoint.hpp b/hotspot/src/share/vm/runtime/safepoint.hpp index 005ea4d0360..e43eef4df96 100644 --- a/hotspot/src/share/vm/runtime/safepoint.hpp +++ b/hotspot/src/share/vm/runtime/safepoint.hpp @@ -59,7 +59,7 @@ class SafepointSynchronize : AllStatic { public: enum SynchronizeState { _not_synchronized = 0, // Threads not synchronized at a safepoint - // Keep this value 0. See the coment in do_call_back() + // Keep this value 0. See the comment in do_call_back() _synchronizing = 1, // Synchronizing in progress _synchronized = 2 // All Java threads are stopped at a safepoint. Only VM thread is running }; @@ -91,7 +91,7 @@ class SafepointSynchronize : AllStatic { } SafepointStats; private: - static volatile SynchronizeState _state; // Threads might read this flag directly, without acquireing the Threads_lock + static volatile SynchronizeState _state; // Threads might read this flag directly, without acquiring the Threads_lock static volatile int _waiting_to_block; // number of threads we are waiting for to block static int _current_jni_active_count; // Counts the number of active critical natives during the safepoint @@ -106,7 +106,7 @@ public: private: static long _end_of_last_safepoint; // Time of last safepoint in milliseconds - // statistics + // Statistics static jlong _safepoint_begin_time; // time when safepoint begins static SafepointStats* _safepoint_stats; // array of SafepointStats struct static int _cur_stat_index; // current index to the above array @@ -155,7 +155,7 @@ public: _current_jni_active_count++; } - // Called when a thread volantary blocks + // Called when a thread voluntarily blocks static void block(JavaThread *thread); static void signal_thread_at_safepoint() { _waiting_to_block--; } @@ -172,7 +172,7 @@ public: static bool is_cleanup_needed(); static void do_cleanup_tasks(); - // debugging + // Debugging static void print_state() PRODUCT_RETURN; static void safepoint_msg(const char* format, ...) PRODUCT_RETURN; @@ -183,7 +183,7 @@ public: static void set_is_at_safepoint() { _state = _synchronized; } static void set_is_not_at_safepoint() { _state = _not_synchronized; } - // assembly support + // Assembly support static address address_of_state() { return (address)&_state; } static address safepoint_counter_addr() { return (address)&_safepoint_counter; } diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp index fc89af6c45e..698c8d2336a 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp @@ -472,7 +472,7 @@ JRT_LEAF(jdouble, SharedRuntime::l2d(jlong x)) return (jdouble)x; JRT_END -// Exception handling accross interpreter/compiler boundaries +// Exception handling across interpreter/compiler boundaries // // exception_handler_for_return_address(...) returns the continuation address. // The continuation address is the entry point of the exception handler of the @@ -694,8 +694,8 @@ address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, // Allow abbreviated catch tables. The idea is to allow a method // to materialize its exceptions without committing to the exact // routing of exceptions. In particular this is needed for adding - // a synthethic handler to unlock monitors when inlining - // synchonized methods since the unlock path isn't represented in + // a synthetic handler to unlock monitors when inlining + // synchronized methods since the unlock path isn't represented in // the bytecodes. t = table.entry_for(catch_pco, -1, 0); } @@ -819,7 +819,7 @@ address SharedRuntime::continuation_for_implicit_exception(JavaThread* thread, // Exception happened in CodeCache. Must be either: // 1. Inline-cache check in C2I handler blob, // 2. Inline-cache check in nmethod, or - // 3. Implict null exception in nmethod + // 3. Implicit null exception in nmethod if (!cb->is_nmethod()) { bool is_in_blob = cb->is_adapter_blob() || cb->is_method_handles_adapter_blob(); @@ -2850,7 +2850,7 @@ VMRegPair *SharedRuntime::find_callee_arguments(Symbol* sig, bool has_receiver, // called from very start of a compiled OSR nmethod. A temp array is // allocated to hold the interesting bits of the interpreter frame. All // active locks are inflated to allow them to move. The displaced headers and -// active interpeter locals are copied into the temp buffer. Then we return +// active interpreter locals are copied into the temp buffer. Then we return // back to the compiled code. The compiled code then pops the current // interpreter frame off the stack and pushes a new compiled frame. Then it // copies the interpreter locals and displaced headers where it wants. diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.hpp b/hotspot/src/share/vm/runtime/sharedRuntime.hpp index 6fc9424528e..1b696b0d97f 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.hpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.hpp @@ -382,7 +382,7 @@ class SharedRuntime: AllStatic { // present if we see that compiled code is present the compiled call site // will be patched/re-resolved so that later calls will run compiled. - // Aditionally a c2i blob need to have a unverified entry because it can be reached + // Additionally a c2i blob need to have a unverified entry because it can be reached // in situations where the call site is an inlined cache site and may go megamorphic. // A i2c adapter is simpler than the c2i adapter. This is because it is assumed @@ -576,7 +576,7 @@ class SharedRuntime: AllStatic { // arguments for a Java-compiled call, and jumps to Rmethod-> code()-> // code_begin(). It is broken to call it without an nmethod assigned. // The usual behavior is to lift any register arguments up out of the -// stack and possibly re-pack the extra arguments to be contigious. +// stack and possibly re-pack the extra arguments to be contiguous. // I2C adapters will save what the interpreter's stack pointer will be // after arguments are popped, then adjust the interpreter's frame // size to force alignment and possibly to repack the arguments. @@ -593,7 +593,7 @@ class SharedRuntime: AllStatic { // outgoing stack args will be dead after the copy. // // Native wrappers, like adapters, marshal arguments. Unlike adapters they -// also perform an offical frame push & pop. They have a call to the native +// also perform an official frame push & pop. They have a call to the native // routine in their middles and end in a return (instead of ending in a jump). // The native wrappers are stored in real nmethods instead of the BufferBlobs // used by the adapters. The code generation happens here because it's very @@ -610,7 +610,7 @@ class AdapterHandlerEntry : public BasicHashtableEntry { #ifdef ASSERT // Captures code and signature used to generate this adapter when - // verifing adapter equivalence. + // verifying adapter equivalence. unsigned char* _saved_code; int _saved_code_length; #endif diff --git a/hotspot/src/share/vm/runtime/sharedRuntimeTrans.cpp b/hotspot/src/share/vm/runtime/sharedRuntimeTrans.cpp index 6390ae1a045..5173a6176ab 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntimeTrans.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntimeTrans.cpp @@ -113,7 +113,7 @@ double scalbn (double x, int n) { } /* __ieee754_log(x) - * Return the logrithm of x + * Return the logarithm of x * * Method : * 1. Argument Reduction: find k and f such that diff --git a/hotspot/src/share/vm/runtime/sharedRuntimeTrig.cpp b/hotspot/src/share/vm/runtime/sharedRuntimeTrig.cpp index 74ed30cb003..f085664cbfb 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntimeTrig.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntimeTrig.cpp @@ -223,7 +223,7 @@ static double scalbnA (double x, int n) { * * fq[] final product of x*(2/pi) in fq[0],..,fq[jk] * - * ih integer. If >0 it indicats q[] is >= 0.5, hence + * ih integer. If >0 it indicates q[] is >= 0.5, hence * it also indicates the *sign* of the result. * */ @@ -347,7 +347,7 @@ recompute: if(z==0.0) { jz -= 1; q0 -= 24; while(iq[jz]==0) { jz--; q0-=24;} - } else { /* break z into 24-bit if neccessary */ + } else { /* break z into 24-bit if necessary */ z = scalbnA(z,-q0); if(z>=two24B) { fw = (double)((int)(twon24*z)); @@ -409,7 +409,7 @@ recompute: /* * ==================================================== - * Copyright (c) 1993 Oracle and/or its affilates. All rights reserved. + * Copyright (c) 1993 Oracle and/or its affiliates. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this diff --git a/hotspot/src/share/vm/runtime/signature.cpp b/hotspot/src/share/vm/runtime/signature.cpp index ceaef3f56fd..3bad97a71d9 100644 --- a/hotspot/src/share/vm/runtime/signature.cpp +++ b/hotspot/src/share/vm/runtime/signature.cpp @@ -152,7 +152,7 @@ void SignatureIterator::iterate_parameters() { _parameter_index = 0; } -// Optimized version of iterat_parameters when fingerprint is known +// Optimized version of iterate_parameters when fingerprint is known void SignatureIterator::iterate_parameters( uint64_t fingerprint ) { uint64_t saved_fingerprint = fingerprint; diff --git a/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp b/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp index ad4c27cf29e..85b34bbd671 100644 --- a/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp +++ b/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp @@ -387,7 +387,7 @@ void SimpleThresholdPolicy::method_back_branch_event(methodHandle mh, methodHand int bci, CompLevel level, nmethod* nm, JavaThread* thread) { // If the method is already compiling, quickly bail out. if (is_compilation_enabled() && !CompileBroker::compilation_is_in_queue(mh, bci)) { - // Use loop event as an opportinity to also check there's been + // Use loop event as an opportunity to also check there's been // enough calls. CompLevel cur_level = comp_level(mh()); CompLevel next_level = call_event(mh(), cur_level); diff --git a/hotspot/src/share/vm/runtime/statSampler.cpp b/hotspot/src/share/vm/runtime/statSampler.cpp index 0b24def2497..082cc4ec45e 100644 --- a/hotspot/src/share/vm/runtime/statSampler.cpp +++ b/hotspot/src/share/vm/runtime/statSampler.cpp @@ -222,8 +222,8 @@ const char* StatSampler::get_system_property(const char* name, TRAPS) { * The list of System Properties that have corresponding PerfData * string instrumentation created by retrieving the named property's * value from System.getProperty() and unconditionally creating a - * PerfStringConstant object initialized to the retreived value. This - * is not an exhustive list of Java properties with corresponding string + * PerfStringConstant object initialized to the retrieved value. This + * is not an exhaustive list of Java properties with corresponding string * instrumentation as the create_system_property_instrumentation() method * creates other property based instrumentation conditionally. */ @@ -325,7 +325,7 @@ void StatSampler::create_misc_perfdata() { // create string instrumentation for various Java properties. create_system_property_instrumentation(CHECK); - // hotspot flags (from .hotspotrc) and args (from command line) + // HotSpot flags (from .hotspotrc) and args (from command line) // PerfDataManager::create_string_constant(JAVA_RT, "vmFlags", Arguments::jvm_flags(), CHECK); diff --git a/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp b/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp index d9f81b1d5cc..820ad469efc 100644 --- a/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp +++ b/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp @@ -111,7 +111,7 @@ class StubCodeGenerator: public StackObj { }; -// Stack-allocated helper class used to assciate a stub code with a name. +// Stack-allocated helper class used to associate a stub code with a name. // All stub code generating functions that use a StubCodeMark will be registered // in the global StubCodeDesc list and the generated stub code can be identified // later via an address pointing into it. diff --git a/hotspot/src/share/vm/runtime/synchronizer.cpp b/hotspot/src/share/vm/runtime/synchronizer.cpp index 8ea34005b03..75e81704122 100644 --- a/hotspot/src/share/vm/runtime/synchronizer.cpp +++ b/hotspot/src/share/vm/runtime/synchronizer.cpp @@ -737,10 +737,10 @@ bool ObjectSynchronizer::current_thread_holds_lock(JavaThread* thread, } // Be aware of this method could revoke bias of the lock object. -// This method querys the ownership of the lock handle specified by 'h_obj'. +// This method queries the ownership of the lock handle specified by 'h_obj'. // If the current thread owns the lock, it returns owner_self. If no // thread owns the lock, it returns owner_none. Otherwise, it will return -// ower_other. +// owner_other. ObjectSynchronizer::LockOwnership ObjectSynchronizer::query_lock_ownership (JavaThread *self, Handle h_obj) { // The caller must beware this method can revoke bias, and diff --git a/hotspot/src/share/vm/runtime/synchronizer.hpp b/hotspot/src/share/vm/runtime/synchronizer.hpp index af8df338a5c..4908c559c78 100644 --- a/hotspot/src/share/vm/runtime/synchronizer.hpp +++ b/hotspot/src/share/vm/runtime/synchronizer.hpp @@ -49,7 +49,7 @@ class ObjectSynchronizer : AllStatic { // to use enter() and exit() in order to make sure user be ware // of the performance and semantics difference. They are normally // used by ObjectLocker etc. The interpreter and compiler use - // assembly copies of these routines. Please keep them synchornized. + // assembly copies of these routines. Please keep them synchronized. // // attempt_rebias flag is used by UseBiasedLocking implementation static void fast_enter (Handle obj, BasicLock* lock, bool attempt_rebias, TRAPS); diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index a7b8068e211..e93b808ebba 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -767,7 +767,7 @@ bool JavaThread::wait_for_ext_suspend_completion(int retries, int delay, void JavaThread::record_jump(address target, address instr, const char* file, int line) { // This should not need to be atomic as the only way for simultaneous - // updates is via interrupts. Even then this should be rare or non-existant + // updates is via interrupts. Even then this should be rare or non-existent // and we don't care that much anyway. int index = _jmp_ring_index; @@ -925,10 +925,10 @@ void Thread::check_for_valid_safepoint_state(bool potential_vm_operation) { // Threads_lock is special, since the safepoint synchronization will not start before this is // acquired. Hence, a JavaThread cannot be holding it at a safepoint. So is VMOperationRequest_lock, // since it is used to transfer control between JavaThreads and the VMThread - // Do not *exclude* any locks unless you are absolutly sure it is correct. Ask someone else first! + // Do not *exclude* any locks unless you are absolutely sure it is correct. Ask someone else first! if ( (cur->allow_vm_block() && cur != Threads_lock && - cur != Compile_lock && // Temporary: should not be necessary when we get spearate compilation + cur != Compile_lock && // Temporary: should not be necessary when we get separate compilation cur != VMOperationRequest_lock && cur != VMOperationQueue_lock) || cur->rank() == Mutex::special) { @@ -1271,7 +1271,7 @@ int WatcherThread::sleep() const { time_slept = 0; time_before_loop = now; } else { - // need to recalulate since we might have new tasks in _tasks + // need to recalculate since we might have new tasks in _tasks time_slept = (int) ((now - time_before_loop) / 1000000); } @@ -1638,7 +1638,7 @@ void JavaThread::run() { // initialize thread-local alloc buffer related fields this->initialize_tlab(); - // used to test validitity of stack trace backs + // used to test validity of stack trace backs this->record_base_of_stack_pointer(); // Record real stack base and size. @@ -3301,6 +3301,58 @@ void Threads::threads_do(ThreadClosure* tc) { // If CompilerThreads ever become non-JavaThreads, add them here } + +void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) { + TraceTime timer("Initialize java.lang classes", TraceStartupTime); + + if (EagerXrunInit && Arguments::init_libraries_at_startup()) { + create_vm_init_libraries(); + } + + initialize_class(vmSymbols::java_lang_String(), CHECK); + + // Initialize java_lang.System (needed before creating the thread) + initialize_class(vmSymbols::java_lang_System(), CHECK); + initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK); + Handle thread_group = create_initial_thread_group(CHECK); + Universe::set_main_thread_group(thread_group()); + initialize_class(vmSymbols::java_lang_Thread(), CHECK); + oop thread_object = create_initial_thread(thread_group, main_thread, CHECK); + main_thread->set_threadObj(thread_object); + // Set thread status to running since main thread has + // been started and running. + java_lang_Thread::set_thread_status(thread_object, + java_lang_Thread::RUNNABLE); + + // The VM creates & returns objects of this class. Make sure it's initialized. + initialize_class(vmSymbols::java_lang_Class(), CHECK); + + // The VM preresolves methods to these classes. Make sure that they get initialized + initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK); + initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK); + call_initializeSystemClass(CHECK); + + // get the Java runtime name after java.lang.System is initialized + JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); + JDK_Version::set_runtime_version(get_java_runtime_version(THREAD)); + + // an instance of OutOfMemory exception has been allocated earlier + initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK); + initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK); + initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK); + initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK); + initialize_class(vmSymbols::java_lang_ArithmeticException(), CHECK); + initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK); + initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK); + initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK); +} + +void Threads::initialize_jsr292_core_classes(TRAPS) { + initialize_class(vmSymbols::java_lang_invoke_MethodHandle(), CHECK); + initialize_class(vmSymbols::java_lang_invoke_MemberName(), CHECK); + initialize_class(vmSymbols::java_lang_invoke_MethodHandleNatives(), CHECK); +} + jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { extern void JDK_Version_init(); @@ -3320,7 +3372,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Initialize system properties. Arguments::init_system_properties(); - // So that JDK version can be used as a discrimintor when parsing arguments + // So that JDK version can be used as a discriminator when parsing arguments JDK_Version_init(); // Update/Initialize System properties after JDK version number is known @@ -3359,7 +3411,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { jint adjust_after_os_result = Arguments::adjust_after_os(); if (adjust_after_os_result != JNI_OK) return adjust_after_os_result; - // intialize TLS + // initialize TLS ThreadLocalStorage::init(); // Bootstrap native memory tracking, so it can start recording memory @@ -3470,13 +3522,13 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { VMThread::execute(&verify_op); } - EXCEPTION_MARK; + Thread* THREAD = Thread::current(); // At this point, the Universe is initialized, but we have not executed // any byte code. Now is a good time (the only time) to dump out the // internal state of the JVM for sharing. if (DumpSharedSpaces) { - MetaspaceShared::preload_and_dump(CHECK_0); + MetaspaceShared::preload_and_dump(CHECK_JNI_ERR); ShouldNotReachHere(); } @@ -3487,74 +3539,12 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Notify JVMTI agents that VM has started (JNI is up) - nop if no agents. JvmtiExport::post_vm_start(); - { - TraceTime timer("Initialize java.lang classes", TraceStartupTime); + initialize_java_lang_classes(main_thread, CHECK_JNI_ERR); - if (EagerXrunInit && Arguments::init_libraries_at_startup()) { - create_vm_init_libraries(); - } - - initialize_class(vmSymbols::java_lang_String(), CHECK_0); - - // Initialize java_lang.System (needed before creating the thread) - initialize_class(vmSymbols::java_lang_System(), CHECK_0); - initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK_0); - Handle thread_group = create_initial_thread_group(CHECK_0); - Universe::set_main_thread_group(thread_group()); - initialize_class(vmSymbols::java_lang_Thread(), CHECK_0); - oop thread_object = create_initial_thread(thread_group, main_thread, CHECK_0); - main_thread->set_threadObj(thread_object); - // Set thread status to running since main thread has - // been started and running. - java_lang_Thread::set_thread_status(thread_object, - java_lang_Thread::RUNNABLE); - - // The VM creates & returns objects of this class. Make sure it's initialized. - initialize_class(vmSymbols::java_lang_Class(), CHECK_0); - - // The VM preresolves methods to these classes. Make sure that they get initialized - initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK_0); - initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK_0); - call_initializeSystemClass(CHECK_0); - - // get the Java runtime name after java.lang.System is initialized - JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); - JDK_Version::set_runtime_version(get_java_runtime_version(THREAD)); - - // an instance of OutOfMemory exception has been allocated earlier - initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK_0); - initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK_0); - initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK_0); - initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK_0); - initialize_class(vmSymbols::java_lang_ArithmeticException(), CHECK_0); - initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK_0); - initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK_0); - initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK_0); - } - - // See : bugid 4211085. - // Background : the static initializer of java.lang.Compiler tries to read - // property"java.compiler" and read & write property "java.vm.info". - // When a security manager is installed through the command line - // option "-Djava.security.manager", the above properties are not - // readable and the static initializer for java.lang.Compiler fails - // resulting in a NoClassDefFoundError. This can happen in any - // user code which calls methods in java.lang.Compiler. - // Hack : the hack is to pre-load and initialize this class, so that only - // system domains are on the stack when the properties are read. - // Currently even the AWT code has calls to methods in java.lang.Compiler. - // On the classic VM, java.lang.Compiler is loaded very early to load the JIT. - // Future Fix : the best fix is to grant everyone permissions to read "java.compiler" and - // read and write"java.vm.info" in the default policy file. See bugid 4211383 - // Once that is done, we should remove this hack. - initialize_class(vmSymbols::java_lang_Compiler(), CHECK_0); - - // More hackery - the static initializer of java.lang.Compiler adds the string "nojit" to - // the java.vm.info property if no jit gets loaded through java.lang.Compiler (the hotspot - // compiler does not get loaded through java.lang.Compiler). "java -version" with the - // hotspot vm says "nojit" all the time which is confusing. So, we reset it here. - // This should also be taken out as soon as 4211383 gets fixed. - reset_vm_info_property(CHECK_0); + // We need this for ClassDataSharing - the initial vm.info property is set + // with the default value of CDS "sharing" which may be reset through + // command line options. + reset_vm_info_property(CHECK_JNI_ERR); quicken_jni_functions(); @@ -3583,10 +3573,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Note that we do not use CHECK_0 here since we are inside an EXCEPTION_MARK and // set_init_completed has just been called, causing exceptions not to be shortcut // anymore. We call vm_exit_during_initialization directly instead. - SystemDictionary::compute_java_system_loader(THREAD); - if (HAS_PENDING_EXCEPTION) { - vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION)); - } + SystemDictionary::compute_java_system_loader(CHECK_JNI_ERR); #if INCLUDE_ALL_GCS // Support for ConcurrentMarkSweep. This should be cleaned up @@ -3594,12 +3581,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // once things are properly refactored. XXX YSR if (UseConcMarkSweepGC || UseG1GC) { if (UseConcMarkSweepGC) { - ConcurrentMarkSweepThread::makeSurrogateLockerThread(THREAD); + ConcurrentMarkSweepThread::makeSurrogateLockerThread(CHECK_JNI_ERR); } else { - ConcurrentMarkThread::makeSurrogateLockerThread(THREAD); - } - if (HAS_PENDING_EXCEPTION) { - vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION)); + ConcurrentMarkThread::makeSurrogateLockerThread(CHECK_JNI_ERR); } } #endif // INCLUDE_ALL_GCS @@ -3642,19 +3626,16 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { CompileBroker::compilation_init(); #endif + // Pre-initialize some JSR292 core classes to avoid deadlock during class loading. + // It is done after compilers are initialized, because otherwise compilations of + // signature polymorphic MH intrinsics can be missed + // (see SystemDictionary::find_method_handle_intrinsic). if (EnableInvokeDynamic) { - // Pre-initialize some JSR292 core classes to avoid deadlock during class loading. - // It is done after compilers are initialized, because otherwise compilations of - // signature polymorphic MH intrinsics can be missed - // (see SystemDictionary::find_method_handle_intrinsic). - initialize_class(vmSymbols::java_lang_invoke_MethodHandle(), CHECK_0); - initialize_class(vmSymbols::java_lang_invoke_MemberName(), CHECK_0); - initialize_class(vmSymbols::java_lang_invoke_MethodHandleNatives(), CHECK_0); + initialize_jsr292_core_classes(CHECK_JNI_ERR); } #if INCLUDE_MANAGEMENT Management::initialize(THREAD); -#endif // INCLUDE_MANAGEMENT if (HAS_PENDING_EXCEPTION) { // management agent fails to start possibly due to @@ -3662,6 +3643,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // stack trace if appropriate. Simply exit VM. vm_exit(1); } +#endif // INCLUDE_MANAGEMENT if (Arguments::has_profile()) FlatProfiler::engage(main_thread, true); if (MemProfiling) MemProfiler::engage(); @@ -4156,7 +4138,7 @@ bool Threads::includes(JavaThread* p) { // but the garbage collector must provide a safe context for them to run. // In particular, these things should never be called when the Threads_lock // is held by some other thread. (Note: the Safepoint abstraction also -// uses the Threads_lock to gurantee this property. It also makes sure that +// uses the Threads_lock to guarantee this property. It also makes sure that // all threads gets blocked when exiting or starting). void Threads::oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf) { @@ -4446,9 +4428,7 @@ void Thread::SpinAcquire (volatile int * adr, const char * LockName) { ++ctr ; if ((ctr & 0xFFF) == 0 || !os::is_MP()) { if (Yields > 5) { - // Consider using a simple NakedSleep() instead. - // Then SpinAcquire could be called by non-JVM threads - Thread::current()->_ParkEvent->park(1) ; + os::naked_short_sleep(1); } else { os::NakedYield() ; ++Yields ; diff --git a/hotspot/src/share/vm/runtime/thread.hpp b/hotspot/src/share/vm/runtime/thread.hpp index d655df4f1da..ec862167dc5 100644 --- a/hotspot/src/share/vm/runtime/thread.hpp +++ b/hotspot/src/share/vm/runtime/thread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -1231,7 +1231,7 @@ class JavaThread: public Thread { void set_vframe_array_head(vframeArray* value) { _vframe_array_head = value; } vframeArray* vframe_array_head() const { return _vframe_array_head; } - // Side structure for defering update of java frame locals until deopt occurs + // Side structure for deferring update of java frame locals until deopt occurs GrowableArray* deferred_locals() const { return _deferred_locals_updates; } void set_deferred_locals(GrowableArray* vf) { _deferred_locals_updates = vf; } @@ -1891,6 +1891,8 @@ class Threads: AllStatic { static bool _vm_complete; #endif + static void initialize_java_lang_classes(JavaThread* main_thread, TRAPS); + static void initialize_jsr292_core_classes(TRAPS); public: // Thread management // force_daemon is a concession to JNI, where we may need to add a diff --git a/hotspot/src/share/vm/runtime/unhandledOops.hpp b/hotspot/src/share/vm/runtime/unhandledOops.hpp index 8381b62be12..73572646706 100644 --- a/hotspot/src/share/vm/runtime/unhandledOops.hpp +++ b/hotspot/src/share/vm/runtime/unhandledOops.hpp @@ -34,7 +34,7 @@ // destructor. The constructor adds the oop address on a list // off each thread and the destructor removes the oop. At a potential // safepoint, the stack addresses of the local variable oops are trashed -// with a recognizeable value. If the local variable is used again, it +// with a recognizable value. If the local variable is used again, it // will segfault, indicating an unsafe use of that oop. // eg: // oop o; //register &o on list diff --git a/hotspot/src/share/vm/runtime/vframeArray.hpp b/hotspot/src/share/vm/runtime/vframeArray.hpp index 1d3dbd605b7..e828eb53237 100644 --- a/hotspot/src/share/vm/runtime/vframeArray.hpp +++ b/hotspot/src/share/vm/runtime/vframeArray.hpp @@ -53,7 +53,7 @@ class vframeArrayElement : public _ValueObj { frame _frame; // the interpreter frame we will unpack into int _bci; // raw bci for this vframe - bool _reexecute; // whether sould we reexecute this bytecode + bool _reexecute; // whether we should reexecute this bytecode Method* _method; // the method for this vframe MonitorChunk* _monitors; // active monitors for this vframe StackValueCollection* _locals; @@ -158,7 +158,7 @@ class vframeArray: public CHeapObj { // Tells whether index is within bounds. bool is_within_bounds(int index) const { return 0 <= index && index < frames(); } - // Accessores for instance variable + // Accessories for instance variable int frames() const { return _frames; } static vframeArray* allocate(JavaThread* thread, int frame_size, GrowableArray* chunk, diff --git a/hotspot/src/share/vm/runtime/virtualspace.cpp b/hotspot/src/share/vm/runtime/virtualspace.cpp index 24650f39f04..45730fa49fc 100644 --- a/hotspot/src/share/vm/runtime/virtualspace.cpp +++ b/hotspot/src/share/vm/runtime/virtualspace.cpp @@ -551,10 +551,10 @@ bool VirtualSpace::expand_by(size_t bytes, bool pre_touch) { // Determine which regions need to grow in this expand_by call. // If you are growing in the lower region, high() must be in that - // region so calcuate the size based on high(). For the middle and + // region so calculate the size based on high(). For the middle and // upper regions, determine the starting point of growth based on the // location of high(). By getting the MAX of the region's low address - // (or the prevoius region's high address) and high(), we can tell if it + // (or the previous region's high address) and high(), we can tell if it // is an intra or inter region growth. size_t lower_needs = 0; if (aligned_lower_new_high > lower_high()) { diff --git a/hotspot/src/share/vm/runtime/vm_operations.hpp b/hotspot/src/share/vm/runtime/vm_operations.hpp index ca616a52cf4..005fc11780b 100644 --- a/hotspot/src/share/vm/runtime/vm_operations.hpp +++ b/hotspot/src/share/vm/runtime/vm_operations.hpp @@ -154,7 +154,7 @@ class VM_Operation: public CHeapObj { void set_next(VM_Operation *next) { _next = next; } void set_prev(VM_Operation *prev) { _prev = prev; } - // Configuration. Override these appropriatly in subclasses. + // Configuration. Override these appropriately in subclasses. virtual VMOp_Type type() const = 0; virtual Mode evaluation_mode() const { return _safepoint; } virtual bool allow_nested_vm_operations() const { return false; } diff --git a/hotspot/src/share/vm/services/attachListener.cpp b/hotspot/src/share/vm/services/attachListener.cpp index 5dd6a7a0ea9..e7d8c380951 100644 --- a/hotspot/src/share/vm/services/attachListener.cpp +++ b/hotspot/src/share/vm/services/attachListener.cpp @@ -282,6 +282,20 @@ static jint set_uintx_flag(const char* name, AttachOperation* op, outputStream* return JNI_ERR; } } + + if (strncmp(name, "MaxHeapFreeRatio", 17) == 0) { + FormatBuffer<80> err_msg(""); + if (!Arguments::verify_MaxHeapFreeRatio(err_msg, value)) { + out->print_cr(err_msg.buffer()); + return JNI_ERR; + } + } else if (strncmp(name, "MinHeapFreeRatio", 17) == 0) { + FormatBuffer<80> err_msg(""); + if (!Arguments::verify_MinHeapFreeRatio(err_msg, value)) { + out->print_cr(err_msg.buffer()); + return JNI_ERR; + } + } bool res = CommandLineFlags::uintxAtPut((char*)name, &value, Flag::ATTACH_ON_DEMAND); if (! res) { out->print_cr("setting flag %s failed", name); diff --git a/hotspot/src/share/vm/services/diagnosticCommand.cpp b/hotspot/src/share/vm/services/diagnosticCommand.cpp index 71b552801aa..daa09f36ff4 100644 --- a/hotspot/src/share/vm/services/diagnosticCommand.cpp +++ b/hotspot/src/share/vm/services/diagnosticCommand.cpp @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "gc_implementation/shared/vmGCOperations.hpp" #include "runtime/javaCalls.hpp" +#include "runtime/os.hpp" #include "services/diagnosticArgument.hpp" #include "services/diagnosticCommand.hpp" #include "services/diagnosticFramework.hpp" @@ -44,6 +45,7 @@ void DCmdRegistrant::register_dcmds(){ DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); + DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); @@ -610,8 +612,7 @@ void JMXStartRemoteDCmd::execute(DCmdSource source, TRAPS) { } JMXStartLocalDCmd::JMXStartLocalDCmd(outputStream *output, bool heap_allocated) : - DCmd(output, heap_allocated) -{ + DCmd(output, heap_allocated) { // do nothing } @@ -632,7 +633,6 @@ void JMXStartLocalDCmd::execute(DCmdSource source, TRAPS) { JavaCalls::call_static(&result, ik, vmSymbols::startLocalAgent_name(), vmSymbols::void_method_signature(), CHECK); } - void JMXStopRemoteDCmd::execute(DCmdSource source, TRAPS) { ResourceMark rm(THREAD); HandleMark hm(THREAD); @@ -650,3 +650,12 @@ void JMXStopRemoteDCmd::execute(DCmdSource source, TRAPS) { JavaCalls::call_static(&result, ik, vmSymbols::stopRemoteAgent_name(), vmSymbols::void_method_signature(), CHECK); } +VMDynamicLibrariesDCmd::VMDynamicLibrariesDCmd(outputStream *output, bool heap_allocated) : + DCmd(output, heap_allocated) { + // do nothing +} + +void VMDynamicLibrariesDCmd::execute(DCmdSource source, TRAPS) { + os::print_dll_info(output()); + output()->cr(); +} diff --git a/hotspot/src/share/vm/services/diagnosticCommand.hpp b/hotspot/src/share/vm/services/diagnosticCommand.hpp index 5485b119dec..a23af05aa09 100644 --- a/hotspot/src/share/vm/services/diagnosticCommand.hpp +++ b/hotspot/src/share/vm/services/diagnosticCommand.hpp @@ -132,6 +132,29 @@ public: virtual void execute(DCmdSource source, TRAPS); }; +class VMDynamicLibrariesDCmd : public DCmd { +public: + VMDynamicLibrariesDCmd(outputStream* output, bool heap); + static const char* name() { + return "VM.dynlibs"; + } + static const char* description() { + return "Print loaded dynamic libraries."; + } + static const char* impact() { + return "Low"; + } + static const JavaPermission permission() { + JavaPermission p = {"java.lang.management.ManagementPermission", + "monitor", NULL}; + return p; + } + static int num_arguments() { + return 0; + }; + virtual void execute(DCmdSource source, TRAPS); +}; + class VMUptimeDCmd : public DCmdWithParser { protected: DCmdArgument _date; diff --git a/hotspot/src/share/vm/services/management.cpp b/hotspot/src/share/vm/services/management.cpp index 404f57c9c55..aae6bc61bb7 100644 --- a/hotspot/src/share/vm/services/management.cpp +++ b/hotspot/src/share/vm/services/management.cpp @@ -1833,6 +1833,18 @@ JVM_ENTRY(void, jmm_SetVMGlobal(JNIEnv *env, jstring flag_name, jvalue new_value succeed = CommandLineFlags::intxAtPut(name, &ivalue, Flag::MANAGEMENT); } else if (flag->is_uintx()) { uintx uvalue = (uintx)new_value.j; + + if (strncmp(name, "MaxHeapFreeRatio", 17) == 0) { + FormatBuffer<80> err_msg(""); + if (!Arguments::verify_MaxHeapFreeRatio(err_msg, uvalue)) { + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), err_msg.buffer()); + } + } else if (strncmp(name, "MinHeapFreeRatio", 17) == 0) { + FormatBuffer<80> err_msg(""); + if (!Arguments::verify_MinHeapFreeRatio(err_msg, uvalue)) { + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), err_msg.buffer()); + } + } succeed = CommandLineFlags::uintxAtPut(name, &uvalue, Flag::MANAGEMENT); } else if (flag->is_uint64_t()) { uint64_t uvalue = (uint64_t)new_value.j; diff --git a/hotspot/src/share/vm/trace/trace.xml b/hotspot/src/share/vm/trace/trace.xml index 218207b732c..75efeea115e 100644 --- a/hotspot/src/share/vm/trace/trace.xml +++ b/hotspot/src/share/vm/trace/trace.xml @@ -122,6 +122,46 @@ Declares a structure type that can be used in other events. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hotspot/src/share/vm/trace/tracetypes.xml b/hotspot/src/share/vm/trace/tracetypes.xml index ab9a95b77d5..9305d2fa75e 100644 --- a/hotspot/src/share/vm/trace/tracetypes.xml +++ b/hotspot/src/share/vm/trace/tracetypes.xml @@ -85,12 +85,6 @@ Now we can use the content + data type in declaring event fields. - - - - - @@ -116,17 +110,6 @@ Now we can use the content + data type in declaring event fields. - - - - - - - - - - @@ -167,6 +150,11 @@ Now we can use the content + data type in declaring event fields. + + + + @@ -351,6 +339,10 @@ Now we can use the content + data type in declaring event fields. + + + diff --git a/hotspot/src/share/vm/utilities/dtrace.hpp b/hotspot/src/share/vm/utilities/dtrace.hpp index 0e260fe09b6..73f5f7c3fba 100644 --- a/hotspot/src/share/vm/utilities/dtrace.hpp +++ b/hotspot/src/share/vm/utilities/dtrace.hpp @@ -38,7 +38,10 @@ #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \ do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0) -#define USDT1 1 +#define USDT2 1 +#include "dtracefiles/hotspot.h" +#include "dtracefiles/hotspot_jni.h" +#include "dtracefiles/hs_private.h" #elif defined(LINUX) #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() #define USDT1 1 diff --git a/hotspot/src/share/vm/utilities/exceptions.hpp b/hotspot/src/share/vm/utilities/exceptions.hpp index beaabf8dcf7..504d4caf5e3 100644 --- a/hotspot/src/share/vm/utilities/exceptions.hpp +++ b/hotspot/src/share/vm/utilities/exceptions.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -200,6 +200,7 @@ class Exceptions { #define CHECK_NH CHECK_(Handle()) #define CHECK_NULL CHECK_(NULL) #define CHECK_false CHECK_(false) +#define CHECK_JNI_ERR CHECK_(JNI_ERR) #define CHECK_AND_CLEAR THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return; } (void)(0 #define CHECK_AND_CLEAR_(result) THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return result; } (void)(0 diff --git a/hotspot/src/share/vm/utilities/globalDefinitions.hpp b/hotspot/src/share/vm/utilities/globalDefinitions.hpp index ecb5429c783..8986f53a272 100644 --- a/hotspot/src/share/vm/utilities/globalDefinitions.hpp +++ b/hotspot/src/share/vm/utilities/globalDefinitions.hpp @@ -149,7 +149,7 @@ const int LogHeapWordsPerLong = LogBytesPerLong - LogHeapWordSize; // The larger HeapWordSize for 64bit requires larger heaps // for the same application running in 64bit. See bug 4967770. // The minimum alignment to a heap word size is done. Other -// parts of the memory system may required additional alignment +// parts of the memory system may require additional alignment // and are responsible for those alignments. #ifdef _LP64 #define ScaleForWordSize(x) align_size_down_((x) * 13 / 10, HeapWordSize) diff --git a/hotspot/test/TEST.groups b/hotspot/test/TEST.groups index ee67fe938c7..ae74a76a868 100644 --- a/hotspot/test/TEST.groups +++ b/hotspot/test/TEST.groups @@ -86,7 +86,8 @@ needs_jdk = \ runtime/RedefineObject/TestRedefineObject.java \ runtime/XCheckJniJsig/XCheckJSig.java \ serviceability/attach/AttachWithStalePidFile.java \ - serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java + serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java \ + serviceability/dcmd/DynLibDcmdTest.java # JRE adds further tests to compact3 diff --git a/hotspot/test/compiler/7184394/TestAESMain.java b/hotspot/test/compiler/7184394/TestAESMain.java index 48baf572b3e..ff9e12bcd38 100644 --- a/hotspot/test/compiler/7184394/TestAESMain.java +++ b/hotspot/test/compiler/7184394/TestAESMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 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 @@ -39,20 +39,32 @@ public class TestAESMain { System.out.println(iters + " iterations"); TestAESEncode etest = new TestAESEncode(); etest.prepare(); + // warm-up for 20K iterations + System.out.println("Starting encryption warm-up"); + for (int i=0; i<20000; i++) { + etest.run(); + } + System.out.println("Finished encryption warm-up"); long start = System.nanoTime(); for (int i=0; i 0) { + System.out.println("FAILED"); + System.exit(97); + } + System.out.println("PASSED"); + } +} diff --git a/hotspot/test/compiler/inlining/DefaultAndConcreteMethodsCHA.java b/hotspot/test/compiler/inlining/DefaultAndConcreteMethodsCHA.java new file mode 100644 index 00000000000..821ac79067f --- /dev/null +++ b/hotspot/test/compiler/inlining/DefaultAndConcreteMethodsCHA.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8031695 + * @summary CHA ignores default methods during analysis leading to incorrect code generation + * + * @run main/othervm -Xbatch DefaultAndConcreteMethodsCHA + */ +interface I { + default int m() { return 0; } +} + +class A implements I {} + +class C extends A { } +class D extends A { public int m() { return 1; } } + +public class DefaultAndConcreteMethodsCHA { + public static int test(A obj) { + return obj.m(); + } + public static void main(String[] args) { + for (int i = 0; i < 10000; i++) { + int idC = test(new C()); + if (idC != 0) { + throw new Error("C.m didn't invoke I.m: id "+idC); + } + + int idD = test(new D()); + if (idD != 1) { + throw new Error("D.m didn't invoke D.m: id "+idD); + } + } + + } +} diff --git a/hotspot/test/gc/g1/Test2GbHeap.java b/hotspot/test/gc/g1/Test2GbHeap.java new file mode 100644 index 00000000000..6b0cd3b8de2 --- /dev/null +++ b/hotspot/test/gc/g1/Test2GbHeap.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test Test2GbHeap + * @bug 8031686 + * @summary Regression test to ensure we can start G1 with 2gb heap. + * @key gc + * @key regression + * @library /testlibrary + */ + +import java.util.ArrayList; + +import com.oracle.java.testlibrary.OutputAnalyzer; +import com.oracle.java.testlibrary.ProcessTools; + +public class Test2GbHeap { + public static void main(String[] args) throws Exception { + ArrayList testArguments = new ArrayList(); + + testArguments.add("-XX:+UseG1GC"); + testArguments.add("-Xmx2g"); + testArguments.add("-version"); + + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(testArguments.toArray(new String[0])); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + + // Avoid failing test for setups not supported. + if (output.getOutput().contains("Could not reserve enough space for 2097152KB object heap")) { + // Will fail on machines with too little memory (and Windows 32-bit VM), ignore such failures. + output.shouldHaveExitValue(1); + } else if (output.getOutput().contains("G1 GC is disabled in this release")) { + // G1 is not supported on embedded, ignore such failures. + output.shouldHaveExitValue(1); + } else { + // Normally everything should be fine. + output.shouldHaveExitValue(0); + } + } +} diff --git a/hotspot/test/gc/g1/TestStringSymbolTableStats.java b/hotspot/test/gc/g1/TestStringSymbolTableStats.java new file mode 100644 index 00000000000..f95aea87d00 --- /dev/null +++ b/hotspot/test/gc/g1/TestStringSymbolTableStats.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestStringSymbolTableStats.java + * @bug 8027476 8027455 + * @summary Ensure that the G1TraceStringSymbolTableScrubbing prints the expected message. + * @key gc + * @library /testlibrary + */ + +import com.oracle.java.testlibrary.ProcessTools; +import com.oracle.java.testlibrary.OutputAnalyzer; + +public class TestStringSymbolTableStats { + public static void main(String[] args) throws Exception { + + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", + "-XX:+UnlockExperimentalVMOptions", + "-XX:+G1TraceStringSymbolTableScrubbing", + SystemGCTest.class.getName()); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + + System.out.println("Output:\n" + output.getOutput()); + + output.shouldContain("Cleaned string and symbol table"); + output.shouldHaveExitValue(0); + } + + static class SystemGCTest { + public static void main(String [] args) { + System.out.println("Calling System.gc()"); + System.gc(); + } + } +} diff --git a/hotspot/test/runtime/6626217/Test6626217.sh b/hotspot/test/runtime/6626217/Test6626217.sh index 363d172de2c..cc9a721194e 100644 --- a/hotspot/test/runtime/6626217/Test6626217.sh +++ b/hotspot/test/runtime/6626217/Test6626217.sh @@ -48,6 +48,11 @@ ${CP} ${TESTSRC}${FS}* ${THIS_DIR} # A Clean Compile: this line will probably fail within jtreg as have a clean dir: ${RM} -f *.class *.impl many_loader.java +# Make sure that the compilation steps occurs in the future as not to allow fast systems +# to copy and compile bug_21227.java so fast as to make the class and java have the same +# time stamp, which later on would make the compilation step of many_loader.java fail +sleep 2 + # Compile all the usual suspects, including the default 'many_loader' ${CP} many_loader1.java.foo many_loader.java ${JAVAC} ${TESTJAVACOPTS} -source 1.4 -target 1.4 -Xlint *.java diff --git a/hotspot/test/runtime/6929067/Test6929067.sh b/hotspot/test/runtime/6929067/Test6929067.sh index 4f21bcfea18..4fa7fe2b51d 100644 --- a/hotspot/test/runtime/6929067/Test6929067.sh +++ b/hotspot/test/runtime/6929067/Test6929067.sh @@ -1,15 +1,13 @@ #!/bin/sh ## -## @ignore 8028740 ## @test Test6929067.sh ## @bug 6929067 ## @bug 8021296 ## @summary Stack guard pages should be removed when thread is detached -## @compile T.java ## @run shell Test6929067.sh ## -set -x + if [ "${TESTSRC}" = "" ] then TESTSRC=${PWD} @@ -114,10 +112,8 @@ fi LD_LIBRARY_PATH=.:${COMPILEJAVA}/jre/lib/${ARCH}/${VMTYPE}:/usr/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH -cp ${TESTSRC}${FS}invoke.c . - -# Copy the result of our @compile action: -cp ${TESTCLASSES}${FS}T.class . +cp ${TESTSRC}${FS}*.java ${THIS_DIR} +${TESTJAVA}${FS}bin${FS}javac *.java echo "Architecture: ${ARCH}" echo "Compilation flag: ${COMP_FLAG}" @@ -127,9 +123,9 @@ echo "VM type: ${VMTYPE}" # for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation. $gcc_cmd -DLINUX ${COMP_FLAG} -o invoke \ - -I${COMPILEJAVA}/include -I${COMPILEJAVA}/include/linux \ - -L${COMPILEJAVA}/jre/lib/${ARCH}/${VMTYPE} \ - -ljvm -lpthread invoke.c + -I${TESTJAVA}/include -I${TESTJAVA}/include/linux \ + -L${TESTJAVA}/jre/lib/${ARCH}/${VMTYPE} \ + ${TESTSRC}${FS}invoke.c -ljvm -lpthread ./invoke exit $? diff --git a/hotspot/test/runtime/CommandLine/CompilerConfigFileWarning.java b/hotspot/test/runtime/CommandLine/CompilerConfigFileWarning.java index 1f1894419ab..e5df0c9450b 100644 --- a/hotspot/test/runtime/CommandLine/CompilerConfigFileWarning.java +++ b/hotspot/test/runtime/CommandLine/CompilerConfigFileWarning.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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,8 +33,7 @@ import com.oracle.java.testlibrary.*; public class CompilerConfigFileWarning { public static void main(String[] args) throws Exception { - String vmVersion = System.getProperty("java.vm.version"); - if (vmVersion.toLowerCase().contains("debug") || vmVersion.toLowerCase().contains("jvmg")) { + if (Platform.isDebugBuild()) { System.out.println("Skip on debug builds since we'll always read the file there"); return; } diff --git a/hotspot/test/runtime/CommandLine/ConfigFileWarning.java b/hotspot/test/runtime/CommandLine/ConfigFileWarning.java index 470808eaff3..b81da5923fd 100644 --- a/hotspot/test/runtime/CommandLine/ConfigFileWarning.java +++ b/hotspot/test/runtime/CommandLine/ConfigFileWarning.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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,8 +33,7 @@ import com.oracle.java.testlibrary.*; public class ConfigFileWarning { public static void main(String[] args) throws Exception { - String vmVersion = System.getProperty("java.vm.version"); - if (vmVersion.toLowerCase().contains("debug") || vmVersion.toLowerCase().contains("jvmg")) { + if (Platform.isDebugBuild()) { System.out.println("Skip on debug builds since we'll always read the file there"); return; } diff --git a/hotspot/test/runtime/CommandLine/VMOptionWarning.java b/hotspot/test/runtime/CommandLine/VMOptionWarning.java new file mode 100644 index 00000000000..164cec00975 --- /dev/null +++ b/hotspot/test/runtime/CommandLine/VMOptionWarning.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8027314 + * @summary Warn if diagnostic or experimental vm option is used and -XX:+UnlockDiagnosticVMOptions or -XX:+UnlockExperimentalVMOptions, respectively, isn't specified. Warn if develop or notproduct vm option is used with product version of VM. + * @library /testlibrary + */ + +import com.oracle.java.testlibrary.*; + +public class VMOptionWarning { + public static void main(String[] args) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+PredictedLoadedClassCount", "-version"); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldContain("Error: VM option 'PredictedLoadedClassCount' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions."); + + if (Platform.isDebugBuild()) { + System.out.println("Skip the rest of the tests on debug builds since diagnostic, develop, and notproduct options are available on debug builds."); + return; + } + + pb = ProcessTools.createJavaProcessBuilder("-XX:+PrintInlining", "-version"); + output = new OutputAnalyzer(pb.start()); + output.shouldContain("Error: VM option 'PrintInlining' is diagnostic and must be enabled via -XX:+UnlockDiagnosticVMOptions."); + + pb = ProcessTools.createJavaProcessBuilder("-XX:+TraceJNICalls", "-version"); + output = new OutputAnalyzer(pb.start()); + output.shouldContain("Error: VM option 'TraceJNICalls' is develop and is available only in debug version of VM."); + + pb = ProcessTools.createJavaProcessBuilder("-XX:+TraceJVMCalls", "-version"); + output = new OutputAnalyzer(pb.start()); + output.shouldContain("Error: VM option 'TraceJVMCalls' is notproduct and is available only in debug version of VM."); + } +} diff --git a/hotspot/test/runtime/LoadClass/LoadClassNegative.java b/hotspot/test/runtime/LoadClass/LoadClassNegative.java index 02b7c8c6101..43d5a923f3e 100644 --- a/hotspot/test/runtime/LoadClass/LoadClassNegative.java +++ b/hotspot/test/runtime/LoadClass/LoadClassNegative.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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,7 +22,6 @@ */ /* - * @ignore 8028095 * @test * @key regression * @bug 8020675 diff --git a/hotspot/test/runtime/SharedArchiveFile/ArchiveDoesNotExist.java b/hotspot/test/runtime/SharedArchiveFile/ArchiveDoesNotExist.java new file mode 100644 index 00000000000..ba0cb013b58 --- /dev/null +++ b/hotspot/test/runtime/SharedArchiveFile/ArchiveDoesNotExist.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test ArchiveDoesNotExist + * @summary Test how VM handles "file does not exist" situation while + * attempting to use CDS archive. JVM should exit gracefully + * when sharing mode is ON, and continue w/o sharing if sharing + * mode is AUTO. + * @library /testlibrary + * @run main ArchiveDoesNotExist + */ + +import com.oracle.java.testlibrary.*; +import java.io.File; + +public class ArchiveDoesNotExist { + public static void main(String[] args) throws Exception { + String fileName = "test.jsa"; + + File cdsFile = new File(fileName); + if (cdsFile.exists()) + throw new RuntimeException("Test error: cds file already exists"); + + // Sharing: on + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-XX:SharedArchiveFile=./" + fileName, + "-Xshare:on", + "-version"); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldContain("Specified shared archive not found"); + output.shouldHaveExitValue(1); + + // Sharing: auto + pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-XX:SharedArchiveFile=./" + fileName, + "-Xshare:auto", + "-version"); + + output = new OutputAnalyzer(pb.start()); + output.shouldContain("java version"); + output.shouldNotContain("sharing"); + output.shouldHaveExitValue(0); + } +} diff --git a/hotspot/test/runtime/SharedArchiveFile/CdsWriteError.java b/hotspot/test/runtime/SharedArchiveFile/CdsWriteError.java new file mode 100644 index 00000000000..09189b9881a --- /dev/null +++ b/hotspot/test/runtime/SharedArchiveFile/CdsWriteError.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test CdsWriteError + * @summary Test how VM handles situation when it is impossible to write the + * CDS archive. VM is expected to exit gracefully and display the + * correct reason for the error. + * @library /testlibrary + * @run main CdsWriteError + */ + +import com.oracle.java.testlibrary.*; +import java.io.File; + +public class CdsWriteError { + public static void main(String[] args) throws Exception { + + if (Platform.isWindows()) { + System.out.println("This test is ignored on Windows. This test " + + "manipulates folder writable attribute, which is known to be " + + "often ignored by Windows"); + + return; + } + + String folderName = "tmp"; + String fileName = folderName + File.separator + "empty.jsa"; + + // create an empty archive file and make it read only + File folder = new File(folderName); + if (!folder.mkdir()) + throw new RuntimeException("Error when creating a tmp folder"); + + File cdsFile = new File(fileName); + if (!cdsFile.createNewFile()) + throw new RuntimeException("Error when creating an empty CDS file"); + if (!cdsFile.setWritable(false)) + throw new RuntimeException("Error: could not set writable attribute on cds file"); + if (!folder.setWritable(false)) + throw new RuntimeException("Error: could not set writable attribute on the cds folder"); + + try { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + fileName, "-Xshare:dump"); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldContain("Unable to create shared archive file"); + output.shouldHaveExitValue(1); + } finally { + // doing this, just in case, to make sure that files can be deleted by the harness + // on any subsequent run + folder.setWritable(true); + cdsFile.setWritable(true); + } + } +} + diff --git a/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java b/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java new file mode 100644 index 00000000000..9cbed20a04e --- /dev/null +++ b/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test DefaultUseWithClient + * @summary Test default behavior of sharing with -client + * @library /testlibrary + * @run main DefaultUseWithClient + */ + +import com.oracle.java.testlibrary.*; +import java.io.File; + +public class DefaultUseWithClient { + public static void main(String[] args) throws Exception { + String fileName = "test.jsa"; + + // On 32-bit windows CDS should be on by default in "-client" config + // Skip this test on any other platform + boolean is32BitWindows = (Platform.isWindows() && Platform.is32bit()); + if (!is32BitWindows) { + System.out.println("Test only applicable on 32-bit Windows. Skipping"); + return; + } + + // create the archive + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-XX:SharedArchiveFile=./" + fileName, + "-Xshare:dump"); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldHaveExitValue(0); + + pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-XX:SharedArchiveFile=./" + fileName, + "-client", + "-version"); + + output = new OutputAnalyzer(pb.start()); + output.shouldContain("sharing"); + output.shouldHaveExitValue(0); + } +} diff --git a/hotspot/test/runtime/finalStatic/FinalStatic.java b/hotspot/test/runtime/finalStatic/FinalStatic.java new file mode 100644 index 00000000000..314b1928f41 --- /dev/null +++ b/hotspot/test/runtime/finalStatic/FinalStatic.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8028553 + * @summary Test that VerifyError is not thrown when 'overriding' a static method. + * @run main FinalStatic + */ + +import java.lang.reflect.*; +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; + +/* + * class A { static final int m() {return FAIL; } } + * class B extends A { int m() { return PASS; } } + * class FinalStatic { + * public static void main () { + * Object b = new B(); + * b.m(); + * } + * } + */ +public class FinalStatic { + + static final String CLASS_NAME_A = "A"; + static final String CLASS_NAME_B = "B"; + static final int FAILED = 0; + static final int EXPECTED = 1234; + + static class TestClassLoader extends ClassLoader implements Opcodes { + + @Override + public Class findClass(String name) throws ClassNotFoundException { + byte[] b; + try { + b = loadClassData(name); + } catch (Throwable th) { + // th.printStackTrace(); + throw new ClassNotFoundException("Loading error", th); + } + return defineClass(name, b, 0, b.length); + } + + private byte[] loadClassData(String name) throws Exception { + ClassWriter cw = new ClassWriter(0); + MethodVisitor mv; + switch (name) { + case CLASS_NAME_A: + cw.visit(52, ACC_SUPER | ACC_PUBLIC, CLASS_NAME_A, null, "java/lang/Object", null); + { + mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null); + mv.visitCode(); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V"); + mv.visitInsn(RETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + + mv = cw.visitMethod(ACC_FINAL | ACC_STATIC, "m", "()I", null, null); + mv.visitCode(); + mv.visitLdcInsn(FAILED); + mv.visitInsn(IRETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + } + break; + case CLASS_NAME_B: + cw.visit(52, ACC_SUPER | ACC_PUBLIC, CLASS_NAME_B, null, CLASS_NAME_A, null); + { + mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null); + mv.visitCode(); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, CLASS_NAME_A, "", "()V"); + mv.visitInsn(RETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + + mv = cw.visitMethod(ACC_PUBLIC, "m", "()I", null, null); + mv.visitCode(); + mv.visitLdcInsn(EXPECTED); + mv.visitInsn(IRETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + + } + break; + default: + break; + } + cw.visitEnd(); + + return cw.toByteArray(); + } + } + + public static void main(String[] args) throws Exception { + TestClassLoader tcl = new TestClassLoader(); + Class a = tcl.loadClass(CLASS_NAME_A); + Class b = tcl.loadClass(CLASS_NAME_B); + Object inst = b.newInstance(); + Method[] meths = b.getDeclaredMethods(); + + Method m = meths[0]; + int mod = m.getModifiers(); + if ((mod & Modifier.FINAL) != 0) { + throw new Exception("FAILED: " + m + " is FINAL"); + } + if ((mod & Modifier.STATIC) != 0) { + throw new Exception("FAILED: " + m + " is STATIC"); + } + + m.setAccessible(true); + if (!m.invoke(inst).equals(EXPECTED)) { + throw new Exception("FAILED: " + EXPECTED + " from " + m); + } + + System.out.println("Passed."); + } +} diff --git a/hotspot/test/runtime/jsig/Test8017498.sh b/hotspot/test/runtime/jsig/Test8017498.sh index bcf05205bff..0c3c2dbcfe1 100644 --- a/hotspot/test/runtime/jsig/Test8017498.sh +++ b/hotspot/test/runtime/jsig/Test8017498.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2013, 2014, 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 @@ -29,6 +29,7 @@ ## @bug 8017498 ## @bug 8020791 ## @bug 8021296 +## @bug 8022301 ## @summary sigaction(sig) results in process hang/timed-out if sig is much greater than SIGRTMAX ## @run shell/timeout=30 Test8017498.sh ## @@ -42,6 +43,8 @@ echo "TESTSRC=${TESTSRC}" ## Adding common setup Variables for running shell tests. . ${TESTSRC}/../../test_env.sh +EXTRA_CFLAG= + # set platform-dependent variables OS=`uname -s` case "$OS" in @@ -57,6 +60,7 @@ case "$OS" in MY_LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}amd64${FS}libjsig.so else MY_LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}i386${FS}libjsig.so + EXTRA_CFLAG=-m32 fi echo MY_LD_PRELOAD = ${MY_LD_PRELOAD} ;; @@ -72,6 +76,7 @@ cp ${TESTSRC}${FS}*.java ${THIS_DIR} ${TESTJAVA}${FS}bin${FS}javac *.java $gcc_cmd -DLINUX -fPIC -shared \ + ${EXTRA_CFLAG} -z noexecstack \ -o ${TESTSRC}${FS}libTestJNI.so \ -I${TESTJAVA}${FS}include \ -I${TESTJAVA}${FS}include${FS}linux \ diff --git a/hotspot/test/runtime/lambda-features/InvokespecialInterface.java b/hotspot/test/runtime/lambda-features/InvokespecialInterface.java new file mode 100644 index 00000000000..25e7904c257 --- /dev/null +++ b/hotspot/test/runtime/lambda-features/InvokespecialInterface.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @bug 8032024 + * @bug 8025937 + * @summary [JDK 8] Test invokespecial and invokeinterface with the same JVM_CONSTANT_InterfaceMethodref + * @run main InvokespecialInterface + */ +import java.util.function.*; +import java.util.*; + +interface I { + default void imethod() { System.out.println("I::imethod"); } +} + +class C implements I { + public void foo() { I.super.imethod(); } // invokespecial InterfaceMethod + public void bar() { I i = this; i.imethod(); } // invokeinterface same + public void doSomeInvokedynamic() { + String str = "world"; + Supplier foo = ()->"hello, "+str; + String res = foo.get(); + System.out.println(res); + } +} + +public class InvokespecialInterface { + public static void main(java.lang.String[] unused) { + // need to create C and call I::foo() + C c = new C(); + c.foo(); + c.bar(); + c.doSomeInvokedynamic(); + } +}; + + diff --git a/hotspot/test/runtime/memory/ReadFromNoaccessArea.java b/hotspot/test/runtime/memory/ReadFromNoaccessArea.java index c80fab9efe4..1078dd2e4ea 100644 --- a/hotspot/test/runtime/memory/ReadFromNoaccessArea.java +++ b/hotspot/test/runtime/memory/ReadFromNoaccessArea.java @@ -22,7 +22,6 @@ */ /* - * @ignore 8028398 * @test * @summary Test that touching noaccess area in class ReservedHeapSpace results in SIGSEGV/ACCESS_VIOLATION * @library /testlibrary /testlibrary/whitebox diff --git a/hotspot/test/serviceability/dcmd/DcmdUtil.java b/hotspot/test/serviceability/dcmd/DcmdUtil.java new file mode 100644 index 00000000000..39ddb06b274 --- /dev/null +++ b/hotspot/test/serviceability/dcmd/DcmdUtil.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.management.ManagementFactoryHelper; + +import com.sun.management.DiagnosticCommandMBean; + +public class DcmdUtil +{ + public static String executeDcmd(String cmd, String ... args) { + DiagnosticCommandMBean dcmd = ManagementFactoryHelper.getDiagnosticCommandMBean(); + Object[] dcmdArgs = {args}; + String[] signature = {String[].class.getName()}; + + try { + System.out.print("> " + cmd + " "); + for (String s : args) { + System.out.print(s + " "); + } + System.out.println(":"); + String result = (String) dcmd.invoke(transform(cmd), dcmdArgs, signature); + System.out.println(result); + return result; + } catch(Exception ex) { + ex.printStackTrace(); + } + return null; + } + + private static String transform(String name) { + StringBuilder sb = new StringBuilder(); + boolean toLower = true; + boolean toUpper = false; + for (int i = 0; i < name.length(); i++) { + char c = name.charAt(i); + if (c == '.' || c == '_') { + toLower = false; + toUpper = true; + } else { + if (toUpper) { + toUpper = false; + sb.append(Character.toUpperCase(c)); + } else if(toLower) { + sb.append(Character.toLowerCase(c)); + } else { + sb.append(c); + } + } + } + return sb.toString(); + } + +} diff --git a/hotspot/test/serviceability/dcmd/DynLibDcmdTest.java b/hotspot/test/serviceability/dcmd/DynLibDcmdTest.java new file mode 100644 index 00000000000..a5c71839952 --- /dev/null +++ b/hotspot/test/serviceability/dcmd/DynLibDcmdTest.java @@ -0,0 +1,67 @@ +import java.util.HashSet; +import java.util.Set; +import com.oracle.java.testlibrary.Platform; + +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Test of VM.dynlib diagnostic command via MBean + * @library /testlibrary + * @compile DcmdUtil.java + * @run main DynLibDcmdTest + */ + +public class DynLibDcmdTest { + + public static void main(String[] args) throws Exception { + String result = DcmdUtil.executeDcmd("VM.dynlibs"); + + String osDependentBaseString = null; + if (Platform.isSolaris()) { + osDependentBaseString = "lib%s.so"; + } else if (Platform.isWindows()) { + osDependentBaseString = "%s.dll"; + } else if (Platform.isOSX()) { + osDependentBaseString = "lib%s.dylib"; + } else if (Platform.isLinux()) { + osDependentBaseString = "lib%s.so"; + } + + if (osDependentBaseString == null) { + throw new Exception("Unsupported OS"); + } + + Set expectedContent = new HashSet<>(); + expectedContent.add(String.format(osDependentBaseString, "jvm")); + expectedContent.add(String.format(osDependentBaseString, "java")); + expectedContent.add(String.format(osDependentBaseString, "management")); + + for(String expected : expectedContent) { + if (!result.contains(expected)) { + throw new Exception("Dynamic library list output did not contain the expected string: '" + expected + "'"); + } + } + } +} diff --git a/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java b/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java new file mode 100644 index 00000000000..bd743ab1c1f --- /dev/null +++ b/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8028623 + * @summary Test hashing of extended characters in Serviceability Agent. + * @library /testlibrary + * @compile -encoding utf8 Test8028623.java + * @run main Test8028623 + */ + +import com.oracle.java.testlibrary.JDKToolLauncher; +import com.oracle.java.testlibrary.OutputBuffer; +import com.oracle.java.testlibrary.ProcessTools; + +import java.io.File; + +public class Test8028623 { + + public static int à = 1; + public static String dumpFile = "heap.out"; + + public static void main (String[] args) { + + System.out.println(Ã); + + try { + int pid = ProcessTools.getProcessId(); + JDKToolLauncher jmap = JDKToolLauncher.create("jmap") + .addToolArg("-F") + .addToolArg("-dump:live,format=b,file=" + dumpFile) + .addToolArg(Integer.toString(pid)); + ProcessBuilder pb = new ProcessBuilder(jmap.getCommand()); + OutputBuffer output = ProcessTools.getOutput(pb); + Process p = pb.start(); + int e = p.waitFor(); + System.out.println("stdout:"); + System.out.println(output.getStdout()); + System.out.println("stderr:"); + System.out.println(output.getStderr()); + + if (e != 0) { + throw new RuntimeException("jmap returns: " + e); + } + if (! new File(dumpFile).exists()) { + throw new RuntimeException("dump file NOT created: '" + dumpFile + "'"); + } + } catch (Throwable t) { + t.printStackTrace(); + throw new RuntimeException("Test failed with: " + t); + } + } +} diff --git a/jdk/.hgtags b/jdk/.hgtags index 4cde2b895e7..5a7ffba22b9 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -244,3 +244,4 @@ e4499a6529e8c3e762ba86f45cdd774c92a8e7bc jdk8-b119 d31cd980e1da31fa496a359caaf1a165aeb5791a jdk8-b120 27b384262cba51dd0fe3e3534820189b46abc8cb jdk9-b00 3b4ac8d1b76fc6bec9815f0ab714f15b552e4c7b jdk9-b01 +8c8275426a3207d91393354f7a7f9bc362ec25cf jdk9-b02 diff --git a/jdk/make/CompileDemos.gmk b/jdk/make/CompileDemos.gmk index c0b1b713ac6..3b1839102a7 100644 --- a/jdk/make/CompileDemos.gmk +++ b/jdk/make/CompileDemos.gmk @@ -214,9 +214,12 @@ define SetupJVMTIDemo # Param 5 = libs for posix # Param 6 = libs for windows # Param 7 = libs for solaris + # Param 8 = libs for linux + # Param 9 = extra directories with required sources BUILD_DEMO_JVMTI_$1_EXTRA_SRC := \ $$(wildcard $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/demo/jvmti/$1) \ - $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)) + $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)) \ + $9 BUILD_DEMO_JVMTI_$1_EXTRA_SRC_EXCLUDE := \ $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)/README.txt) \ $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)/sample.makefile.txt) @@ -308,9 +311,19 @@ $(eval $(call SetupJVMTIDemo,compiledMethodLoad, agent_util)) $(eval $(call SetupJVMTIDemo,gctest, agent_util)) $(eval $(call SetupJVMTIDemo,heapTracker, agent_util java_crw_demo)) $(eval $(call SetupJVMTIDemo,heapViewer, agent_util)) + +# On AIX, hprof requires 'dladdr' from src/aix/porting/porting_aix.cpp +BUILD_LIBHPROF_AIX_EXTRA_SRC := +BUILD_LIBHPROF_AIX_EXTRA_CFLAGS := +ifeq ($(OPENJDK_TARGET_OS), aix) + BUILD_LIBHPROF_AIX_EXTRA_SRC += $(JDK_TOPDIR)/src/aix/porting + BUILD_LIBHPROF_AIX_EXTRA_CFLAGS += -I$(JDK_TOPDIR)/src/aix/porting +endif + $(eval $(call SetupJVMTIDemo,hprof, java_crw_demo, \ - -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt, C, \ - -ldl, ws2_32.lib winmm.lib, -lsocket -lnsl, -lpthread)) + -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \ + $(BUILD_LIBHPROF_AIX_EXTRA_CFLAGS), C, \ + -ldl, ws2_32.lib winmm.lib, -lsocket -lnsl, -lpthread, $(BUILD_LIBHPROF_AIX_EXTRA_SRC))) $(eval $(call SetupJVMTIDemo,minst, agent_util java_crw_demo)) $(eval $(call SetupJVMTIDemo,mtrace, agent_util java_crw_demo)) diff --git a/jdk/make/CompileJavaClasses.gmk b/jdk/make/CompileJavaClasses.gmk index e68f86bede7..5a725b502e6 100644 --- a/jdk/make/CompileJavaClasses.gmk +++ b/jdk/make/CompileJavaClasses.gmk @@ -146,6 +146,17 @@ ifneq ($(OPENJDK_TARGET_OS), macosx) sun/tools/attach/BsdVirtualMachine.java endif +ifneq ($(OPENJDK_TARGET_OS),aix) + EXFILES+=sun/nio/ch/AixAsynchronousChannelProvider.java \ + sun/nio/ch/AixPollPort.java \ + sun/nio/fs/AixFileStore.java \ + sun/nio/fs/AixFileSystem.java \ + sun/nio/fs/AixFileSystemProvider.java \ + sun/nio/fs/AixNativeDispatcher.java \ + sun/tools/attach/AixAttachProvider.java \ + sun/tools/attach/AixVirtualMachine.java +endif + # Exclude BreakIterator classes that are just used in compile process to generate # data files and shouldn't go in the product EXFILES += sun/text/resources/BreakIteratorRules.java \ @@ -217,9 +228,9 @@ endif # Exclude another implicitly not included file. EXFILES += sun/util/locale/AsciiUtil.java -ifeq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx)) +ifeq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx aix)) # - # only solaris and macosx + # only solaris, macosx and aix # EXFILES += sun/nio/fs/PollingWatchService.java endif @@ -289,6 +300,16 @@ SECURITY_PKGS := \ sun/security/pkcs11 \ # +AIX_SRC_DIRS := +ifeq ($(OPENJDK_TARGET_OS),aix) + AIX_SRC_DIRS += $(JDK_TOPDIR)/src/aix/classes + + # these files are duplicated in AIX_SRC_DIRS + EXFILES += $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java +endif + # The exception handling of swing beaninfo # These resources violates the convention of having code and resources together under # $(JDK_TOPDIR)/src/.../classes directories @@ -313,6 +334,7 @@ $(eval $(call SetupJavaCompilation,BUILD_JDK,\ SRC:=$(JDK_TOPDIR)/src/share/classes \ $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes \ $(MACOSX_SRC_DIRS) \ + $(AIX_SRC_DIRS) \ $(JDK_OUTPUTDIR)/gensrc \ $(JDK_OUTPUTDIR)/gensrc_no_srczip \ $(CLOSED_SRC_DIRS),\ @@ -387,7 +409,7 @@ endif ########################################################################################## -all: $(BUILD_JDK) $(BUILD_SECURITY) $(BUILD_JOBJC) $(BUILD_JOBJC_HEADERS) $(COPY_EXTRA) \ +all: $(BUILD_JDK) $(BUILD_SECURITY) $(COPY_EXTRA) \ $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin \ $(BUILD_ACCESSBRIDGE_32) $(BUILD_ACCESSBRIDGE_64) \ $(BUILD_ACCESSBRIDGE_LEGACY) diff --git a/jdk/make/CompileLaunchers.gmk b/jdk/make/CompileLaunchers.gmk index e4cd5cef0ce..1757785f2db 100644 --- a/jdk/make/CompileLaunchers.gmk +++ b/jdk/make/CompileLaunchers.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -104,6 +104,10 @@ define SetupLauncher $1_LDFLAGS_SUFFIX += -pthread endif + ifeq ($(OPENJDK_TARGET_OS), aix) + $1_LDFLAGS_SUFFIX += -L$(JDK_OUTPUTDIR)/objs -ljli_static + endif + ifeq ($(USE_EXTERNAL_LIBZ), true) $1_LDFLAGS_SUFFIX += -lz endif @@ -126,10 +130,21 @@ define SetupLauncher $1_CFLAGS := $(filter-out -MD, $(CFLAGS_JDKEXE)) endif - ifneq ($(wildcard $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)), ) - $1_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU) + # The linker on older SuSE distros (e.g. on SLES 10) complains with: + # "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable." + # if feeded with a version script which contains named tags. + ifeq ($(USING_BROKEN_SUSE_LD),yes) + ifneq ($(wildcard $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU).anonymous), ) + $1_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU).anonymous + else + $1_MAPFILE := + endif else - $1_MAPFILE := + ifneq ($(wildcard $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)), ) + $1_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU) + else + $1_MAPFILE := + endif endif $(call SetupNativeCompilation,BUILD_LAUNCHER_$1, \ @@ -180,7 +195,7 @@ define SetupLauncher BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1) - ifeq ($(OPENJDK_TARGET_OS), macosx) + ifneq (,$(filter $(OPENJDK_TARGET_OS), macosx aix)) $$(BUILD_LAUNCHER_$1): $(JDK_OUTPUTDIR)/objs/libjli_static.a endif @@ -450,6 +465,16 @@ ifeq ($(OPENJDK_TARGET_OS), windows) # anyway. UNPACKEXE_DEBUG_SYMBOLS := endif + +# The linker on older SuSE distros (e.g. on SLES 10) complains with: +# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable." +# if feeded with a version script which contains named tags. +ifeq ($(USING_BROKEN_SUSE_LD), yes) + UNPACK_MAPFILE = $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous +else + UNPACK_MAPFILE = $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200 +endif + $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE, \ SRC := $(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack, \ EXCLUDE_FILES := jni.cpp, \ @@ -461,7 +486,7 @@ $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE, \ CFLAGS_linux := -fPIC, \ CFLAGS_solaris := -KPIC, \ CFLAGS_macosx := -fPIC, \ - MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200, \ + MAPFILE := $(UNPACK_MAPFILE),\ LDFLAGS := $(UNPACKEXE_ZIPOBJS), \ LDFLAGS_windows := $(CXXFLAGS_JDKEXE), \ LDFLAGS_posix := $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \ @@ -605,7 +630,7 @@ BUILD_JSPAWNHELPER_DST_DIR := $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR) LINK_JSPAWNHELPER_OBJECTS := $(JDK_OUTPUTDIR)/objs/libjava/childproc.o LINK_JSPAWNHELPER_FLAGS := -ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris), ) +ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix), ) BUILD_JSPAWNHELPER := 1 endif @@ -614,7 +639,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx) endif ifeq ($(OPENJDK_TARGET_CPU_BITS), 64) - LINK_JSPAWNHELPER_FLAGS += -m64 + LINK_JSPAWNHELPER_FLAGS += $(COMPILER_TARGET_BITS_FLAG)64 endif ifeq ($(BUILD_JSPAWNHELPER), 1) diff --git a/jdk/make/GenerateClasses.gmk b/jdk/make/GenerateClasses.gmk index f4dafc55087..1503c0b8dd4 100644 --- a/jdk/make/GenerateClasses.gmk +++ b/jdk/make/GenerateClasses.gmk @@ -52,7 +52,7 @@ $(eval $(call SetupJavaCompilation,BUILD_BOOTSTRAP_RMIC, \ ########################################################################################## -BTRMIC_CP := $(CORBA_OUTPUTDIR)/btjars/btcorba.jar$(PATH_SEP)$(JDK_OUTPUTDIR)/btclasses_rmic$(PATH_SEP)$(BOOTSTRAP_JAVAC_JAR) +BTRMIC_CP := $(INTERIM_CORBA_JAR)$(PATH_SEP)$(JDK_OUTPUTDIR)/btclasses_rmic$(PATH_SEP)$(INTERIM_LANGTOOLS_JAR) BTRMIC_ARGS := "-Xbootclasspath/p:$(BTRMIC_CP)" -cp "$(BTRMIC_CP)" RMIC := $(JAVA) $(BTRMIC_ARGS) sun.rmi.rmic.Main diff --git a/jdk/make/GenerateSources.gmk b/jdk/make/GenerateSources.gmk index ba443f7da52..732c0c83f8a 100644 --- a/jdk/make/GenerateSources.gmk +++ b/jdk/make/GenerateSources.gmk @@ -29,6 +29,7 @@ include $(SPEC) include MakeBase.gmk include JavaCompilation.gmk include NativeCompilation.gmk +include TextFileProcessing.gmk # Setup the java compilers for the JDK build. include Setup.gmk diff --git a/jdk/make/Setup.gmk b/jdk/make/Setup.gmk index 8a81f2b868b..fd42e76142a 100644 --- a/jdk/make/Setup.gmk +++ b/jdk/make/Setup.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, 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,7 +27,7 @@ DISABLE_WARNINGS := -Xlint:all,-deprecation,-unchecked,-rawtypes,-cast,-serial,- # To build with all warnings enabled, do the following: # make JAVAC_WARNINGS="-Xlint:all -Xmaxwarns 10000" -JAVAC_WARNINGS := -Xlint:-unchecked,-deprecation,-overrides,auxiliaryclass,classfile,dep-ann,divzero,empty,overloads,try,varargs -Werror +JAVAC_WARNINGS := -Xlint:-unchecked,-deprecation,-overrides,auxiliaryclass,cast,classfile,dep-ann,divzero,empty,overloads,static,try,varargs -Werror # Any java code executed during a JDK build to build other parts of the JDK must be # executed by the bootstrap JDK (probably with -Xbootclasspath/p: ) and for this diff --git a/jdk/make/Tools.gmk b/jdk/make/Tools.gmk index 1c3b791f621..661bf3e3b03 100644 --- a/jdk/make/Tools.gmk +++ b/jdk/make/Tools.gmk @@ -102,7 +102,7 @@ TOOL_JDWPGEN = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.jdwpgen.Main # TODO: Lots of files in jdk/make/tools/CharsetMapping dir TOOL_CHARSETMAPPING = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \ - build.tools.charsetmapping.Main + build.tools.charsetmapping.Main $(LOG_INFO) TOOL_SPP = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.spp.Spp @@ -122,12 +122,12 @@ TOOL_OSX_TOBIN = $(JAVA) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses TOOL_CLDRCONVERTER = $(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \ build.tools.cldrconverter.CLDRConverter -TOOL_CHECKDEPS = $(JAVA) -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ +TOOL_CHECKDEPS = $(JAVA) -Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR) \ -cp $(JDK_OUTPUTDIR)/btclasses:$(JDK_OUTPUTDIR) \ build.tools.deps.CheckDeps TOOL_ADDTORESTRICTEDPKGS=$(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \ - build.tools.addtorestrictedpkgs.AddToRestrictedPkgs + build.tools.addtorestrictedpkgs.AddToRestrictedPkgs ########################################################################################## diff --git a/jdk/src/share/classes/sun/nio/cs/standard-charsets b/jdk/make/data/charsetmapping/standard-charsets similarity index 97% rename from jdk/src/share/classes/sun/nio/cs/standard-charsets rename to jdk/make/data/charsetmapping/standard-charsets index 0785a4edafc..f9f4db12c6a 100644 --- a/jdk/src/share/classes/sun/nio/cs/standard-charsets +++ b/jdk/make/data/charsetmapping/standard-charsets @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2014, 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,11 +34,6 @@ # compared to the charsets packaged in "ExtendedCharsets" provider, # which is lazy initialized. -# This year should only change if the generated source is modified. -copyright 2000, 2007, -package sun.nio.cs -class StandardCharsets - charset US-ASCII US_ASCII # IANA aliases diff --git a/jdk/make/data/classlist/classlist.aix b/jdk/make/data/classlist/classlist.aix new file mode 100644 index 00000000000..d07236da9e9 --- /dev/null +++ b/jdk/make/data/classlist/classlist.aix @@ -0,0 +1,2406 @@ +java/lang/Object +java/lang/String +java/io/Serializable +java/lang/Comparable +java/lang/CharSequence +java/lang/Class +java/lang/reflect/GenericDeclaration +java/lang/reflect/Type +java/lang/reflect/AnnotatedElement +java/lang/Cloneable +java/lang/ClassLoader +java/lang/System +java/lang/Throwable +java/lang/Error +java/lang/ThreadDeath +java/lang/Exception +java/lang/RuntimeException +java/security/ProtectionDomain +java/security/AccessControlContext +java/lang/ClassNotFoundException +java/lang/NoClassDefFoundError +java/lang/LinkageError +java/lang/ClassCastException +java/lang/ArrayStoreException +java/lang/VirtualMachineError +java/lang/OutOfMemoryError +java/lang/StackOverflowError +java/lang/IllegalMonitorStateException +java/lang/ref/Reference +java/lang/ref/SoftReference +java/lang/ref/WeakReference +java/lang/ref/FinalReference +java/lang/ref/PhantomReference +java/lang/ref/Finalizer +java/lang/Thread +java/lang/Runnable +java/lang/ThreadGroup +java/lang/Thread$UncaughtExceptionHandler +java/util/Properties +java/util/Hashtable +java/util/Map +java/util/Dictionary +java/lang/reflect/AccessibleObject +java/lang/reflect/Field +java/lang/reflect/Member +java/lang/reflect/Method +java/lang/reflect/Constructor +sun/reflect/MagicAccessorImpl +sun/reflect/MethodAccessorImpl +sun/reflect/MethodAccessor +sun/reflect/ConstructorAccessorImpl +sun/reflect/ConstructorAccessor +sun/reflect/DelegatingClassLoader +sun/reflect/ConstantPool +sun/reflect/UnsafeStaticFieldAccessorImpl +sun/reflect/UnsafeFieldAccessorImpl +sun/reflect/FieldAccessorImpl +sun/reflect/FieldAccessor +java/util/Vector +java/util/List +java/util/Collection +java/lang/Iterable +java/util/RandomAccess +java/util/AbstractList +java/util/AbstractCollection +java/lang/StringBuffer +java/lang/AbstractStringBuilder +java/lang/Appendable +java/lang/StackTraceElement +java/nio/Buffer +java/lang/Boolean +java/lang/Character +java/lang/Float +java/lang/Number +java/lang/Double +java/lang/Byte +java/lang/Short +java/lang/Integer +java/lang/Long +java/lang/NullPointerException +java/lang/ArithmeticException +java/io/ObjectStreamField +java/lang/String$CaseInsensitiveComparator +java/util/Comparator +java/lang/RuntimePermission +java/security/BasicPermission +java/security/Permission +java/security/Guard +sun/misc/SoftCache +java/util/AbstractMap +java/lang/ref/ReferenceQueue +java/lang/ref/ReferenceQueue$Null +java/lang/ref/ReferenceQueue$Lock +java/util/HashMap +java/lang/annotation/Annotation +java/util/HashMap$Entry +java/util/Map$Entry +java/security/AccessController +java/lang/reflect/ReflectPermission +sun/reflect/ReflectionFactory$GetReflectionFactoryAction +java/security/PrivilegedAction +java/util/Stack +sun/reflect/ReflectionFactory +java/lang/ref/Reference$Lock +java/lang/ref/Reference$ReferenceHandler +java/lang/ref/Finalizer$FinalizerThread +java/util/Hashtable$EmptyEnumerator +java/util/Enumeration +java/util/Hashtable$EmptyIterator +java/util/Iterator +java/util/Hashtable$Entry +java/nio/charset/Charset +sun/nio/cs/StandardCharsets +sun/nio/cs/FastCharsetProvider +java/nio/charset/spi/CharsetProvider +sun/nio/cs/StandardCharsets$Aliases +sun/util/PreHashedMap +sun/nio/cs/StandardCharsets$Classes +sun/nio/cs/StandardCharsets$Cache +java/lang/ThreadLocal +java/util/concurrent/atomic/AtomicInteger +sun/misc/Unsafe +java/lang/NoSuchMethodError +java/lang/IncompatibleClassChangeError +sun/reflect/Reflection +java/util/Collections +java/util/Collections$EmptySet +java/util/AbstractSet +java/util/Set +java/util/Collections$EmptyList +java/util/Collections$EmptyMap +java/util/Collections$ReverseComparator +java/util/Collections$SynchronizedMap +java/lang/Class$3 +java/lang/reflect/Modifier +java/lang/reflect/ReflectAccess +sun/reflect/LangReflectAccess +java/util/Arrays +java/lang/Math +sun/nio/cs/US_ASCII +sun/nio/cs/HistoricallyNamedCharset +sun/misc/VM +java/lang/StringCoding +java/lang/ThreadLocal$ThreadLocalMap +java/lang/ThreadLocal$ThreadLocalMap$Entry +java/lang/StringCoding$StringDecoder +sun/nio/cs/US_ASCII$Decoder +java/nio/charset/CharsetDecoder +java/nio/charset/CodingErrorAction +java/nio/ByteBuffer +java/nio/HeapByteBuffer +java/nio/Bits +java/nio/ByteOrder +java/nio/CharBuffer +java/lang/Readable +java/nio/HeapCharBuffer +java/nio/charset/CoderResult +java/nio/charset/CoderResult$1 +java/nio/charset/CoderResult$Cache +java/nio/charset/CoderResult$2 +sun/misc/Version +java/io/FileInputStream +java/io/InputStream +java/io/Closeable +java/io/FileDescriptor +java/io/FileOutputStream +java/io/OutputStream +java/io/Flushable +java/io/BufferedInputStream +java/io/FilterInputStream +java/util/concurrent/atomic/AtomicReferenceFieldUpdater +java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl +sun/reflect/misc/ReflectUtil +java/io/PrintStream +java/io/FilterOutputStream +java/io/BufferedOutputStream +java/io/OutputStreamWriter +java/io/Writer +sun/nio/cs/StreamEncoder +sun/security/action/GetPropertyAction +sun/nio/cs/US_ASCII$Encoder +java/nio/charset/CharsetEncoder +sun/nio/cs/Surrogate$Parser +sun/nio/cs/Surrogate +java/io/BufferedWriter +java/lang/Runtime +java/io/File +java/io/FileSystem +java/io/UnixFileSystem +java/io/ExpiringCache +java/io/ExpiringCache$1 +java/util/LinkedHashMap +java/util/LinkedHashMap$Entry +java/lang/StringBuilder +java/io/File$1 +sun/misc/JavaIODeleteOnExitAccess +sun/misc/SharedSecrets +java/lang/ClassLoader$3 +java/lang/StringCoding$StringEncoder +java/io/ExpiringCache$Entry +java/lang/ClassLoader$NativeLibrary +java/lang/Terminator +java/lang/Terminator$1 +sun/misc/SignalHandler +sun/misc/Signal +sun/misc/NativeSignalHandler +java/io/Console +java/io/Console$1 +sun/misc/JavaIOAccess +java/io/Console$1$1 +java/lang/Shutdown +java/util/ArrayList +java/lang/Shutdown$Lock +java/lang/ApplicationShutdownHooks +java/util/IdentityHashMap +sun/misc/OSEnvironment +java/lang/System$2 +sun/misc/JavaLangAccess +java/lang/Compiler +java/lang/Compiler$1 +sun/misc/Launcher +sun/misc/Launcher$Factory +java/net/URLStreamHandlerFactory +sun/misc/Launcher$ExtClassLoader +java/net/URLClassLoader +java/security/SecureClassLoader +sun/security/util/Debug +java/net/URLClassLoader$7 +sun/misc/JavaNetAccess +java/util/StringTokenizer +sun/misc/Launcher$ExtClassLoader$1 +java/security/PrivilegedExceptionAction +sun/misc/MetaIndex +java/io/BufferedReader +java/io/Reader +java/io/FileReader +java/io/InputStreamReader +sun/nio/cs/StreamDecoder +java/lang/reflect/Array +sun/net/www/ParseUtil +java/util/BitSet +java/io/ObjectStreamClass +java/net/URL +java/util/Locale +java/util/concurrent/ConcurrentHashMap +java/util/concurrent/ConcurrentMap +java/util/concurrent/ConcurrentHashMap$Segment +java/util/concurrent/locks/ReentrantLock +java/util/concurrent/locks/Lock +java/util/concurrent/locks/ReentrantLock$NonfairSync +java/util/concurrent/locks/ReentrantLock$Sync +java/util/concurrent/locks/AbstractQueuedSynchronizer +java/util/concurrent/locks/AbstractOwnableSynchronizer +java/util/concurrent/locks/AbstractQueuedSynchronizer$Node +java/util/concurrent/ConcurrentHashMap$HashEntry +java/lang/CharacterDataLatin1 +java/net/Parts +sun/net/www/protocol/file/Handler +java/net/URLStreamHandler +java/lang/Class$1 +sun/reflect/ReflectionFactory$1 +sun/reflect/NativeConstructorAccessorImpl +sun/reflect/DelegatingConstructorAccessorImpl +java/util/HashSet +sun/misc/URLClassPath +sun/net/www/protocol/jar/Handler +sun/misc/Launcher$AppClassLoader +sun/misc/Launcher$AppClassLoader$1 +java/lang/SystemClassLoaderAction +java/net/URLClassLoader$1 +sun/misc/URLClassPath$3 +sun/misc/URLClassPath$JarLoader +sun/misc/URLClassPath$Loader +java/security/PrivilegedActionException +sun/misc/URLClassPath$FileLoader +sun/misc/URLClassPath$FileLoader$1 +sun/misc/Resource +sun/nio/ByteBuffered +java/security/CodeSource +java/security/Permissions +java/security/PermissionCollection +sun/net/www/protocol/file/FileURLConnection +sun/net/www/URLConnection +java/net/URLConnection +java/net/UnknownContentHandler +java/net/ContentHandler +sun/net/www/MessageHeader +java/io/FilePermission +java/io/FilePermission$1 +sun/security/provider/PolicyFile +java/security/Policy +java/security/Policy$UnsupportedEmptyCollection +java/io/FilePermissionCollection +java/security/AllPermission +java/security/UnresolvedPermission +java/security/BasicPermissionCollection +java/security/Principal +java/security/cert/Certificate +java/util/AbstractList$Itr +java/util/IdentityHashMap$KeySet +java/util/IdentityHashMap$KeyIterator +java/util/IdentityHashMap$IdentityHashMapIterator +java/io/DeleteOnExitHook +java/util/LinkedHashSet +java/util/HashMap$KeySet +java/util/LinkedHashMap$KeyIterator +java/util/LinkedHashMap$LinkedHashIterator +java/awt/Frame +java/awt/MenuContainer +java/awt/Window +javax/accessibility/Accessible +java/awt/Container +java/awt/Component +java/awt/image/ImageObserver +java/lang/InterruptedException +java/awt/Label +java/util/logging/Logger +java/util/logging/Handler +java/util/logging/Level +java/util/logging/LogManager +java/util/logging/LogManager$1 +java/beans/PropertyChangeSupport +java/util/logging/LogManager$LogNode +java/util/logging/LoggingPermission +java/util/logging/LogManager$Cleaner +java/util/logging/LogManager$RootLogger +java/util/logging/LogManager$2 +java/util/Properties$LineReader +java/util/Hashtable$Enumerator +java/beans/PropertyChangeEvent +java/util/EventObject +java/awt/Component$AWTTreeLock +sun/awt/DebugHelper +sun/awt/NativeLibLoader +sun/security/action/LoadLibraryAction +java/awt/GraphicsEnvironment +java/awt/GraphicsEnvironment$1 +java/lang/ProcessEnvironment +java/lang/ProcessEnvironment$Variable +java/lang/ProcessEnvironment$ExternalData +java/lang/ProcessEnvironment$Value +java/lang/ProcessEnvironment$StringEnvironment +java/util/Collections$UnmodifiableMap +sun/awt/DebugHelperStub +java/awt/Toolkit +java/awt/Toolkit$3 +sun/util/CoreResourceBundleControl +java/util/ResourceBundle$Control +java/util/Arrays$ArrayList +java/util/Collections$UnmodifiableRandomAccessList +java/util/Collections$UnmodifiableList +java/util/Collections$UnmodifiableCollection +java/util/ResourceBundle +java/util/ResourceBundle$1 +java/util/ResourceBundle$RBClassLoader +java/util/ResourceBundle$RBClassLoader$1 +java/util/ResourceBundle$CacheKey +java/util/ResourceBundle$LoaderReference +java/util/ResourceBundle$CacheKeyReference +java/util/ResourceBundle$SingleFormatControl +sun/awt/resources/awt +java/util/ListResourceBundle +java/awt/Toolkit$1 +java/io/FileNotFoundException +java/io/IOException +java/awt/event/KeyEvent +java/awt/event/InputEvent +java/awt/event/ComponentEvent +java/awt/AWTEvent +java/awt/event/NativeLibLoader +java/util/WeakHashMap +java/util/WeakHashMap$Entry +java/awt/Component$DummyRequestFocusController +sun/awt/RequestFocusController +java/awt/LayoutManager +java/awt/LightweightDispatcher +java/awt/event/AWTEventListener +java/util/EventListener +java/awt/Dimension +java/awt/geom/Dimension2D +java/util/concurrent/atomic/AtomicBoolean +java/awt/ComponentOrientation +java/awt/Component$2 +java/lang/NoSuchMethodException +sun/awt/AppContext +sun/awt/AppContext$1 +sun/awt/AppContext$2 +sun/awt/MostRecentKeyValue +java/awt/Cursor +sun/awt/X11GraphicsEnvironment +sun/java2d/SunGraphicsEnvironment +sun/java2d/FontSupport +sun/awt/DisplayChangedListener +sun/java2d/SunGraphicsEnvironment$TTFilter +java/io/FilenameFilter +sun/java2d/SunGraphicsEnvironment$T1Filter +sun/awt/X11GraphicsEnvironment$1 +sun/awt/SunToolkit +sun/awt/WindowClosingSupport +sun/awt/WindowClosingListener +sun/awt/ComponentFactory +sun/awt/InputMethodSupport +java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject +java/util/concurrent/locks/Condition +sun/awt/AWTAutoShutdown +sun/awt/AWTAutoShutdown$PeerMap +sun/awt/SunToolkit$6 +java/awt/Dialog$ModalExclusionType +java/lang/Enum +java/awt/Dialog +java/awt/Dialog$ModalityType +java/awt/ModalEventFilter +java/awt/EventFilter +sun/reflect/UnsafeFieldAccessorFactory +sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl +sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl +sun/awt/SunDisplayChanger +sun/java2d/SunGraphicsEnvironment$1 +java/io/StreamTokenizer +sun/font/FontManager +sun/font/FileFont +sun/font/PhysicalFont +sun/font/Font2D +sun/font/CompositeFont +java/util/HashMap$Values +java/util/HashMap$ValueIterator +java/util/HashMap$HashIterator +sun/font/FontManager$1 +java/awt/Font +java/awt/geom/AffineTransform +sun/font/AttributeValues +sun/font/EAttribute +java/text/AttributedCharacterIterator$Attribute +java/lang/Class$4 +sun/reflect/NativeMethodAccessorImpl +sun/reflect/DelegatingMethodAccessorImpl +java/awt/font/TextAttribute +java/lang/Integer$IntegerCache +sun/font/TrueTypeFont +java/awt/font/FontRenderContext +java/awt/RenderingHints +sun/awt/SunHints +sun/awt/SunHints$Key +java/awt/RenderingHints$Key +sun/awt/SunHints$Value +sun/awt/SunHints$LCDContrastKey +sun/font/Type1Font +java/awt/geom/Point2D$Float +java/awt/geom/Point2D +sun/font/StrikeMetrics +java/awt/geom/Rectangle2D$Float +java/awt/geom/Rectangle2D +java/awt/geom/RectangularShape +java/awt/Shape +java/awt/geom/GeneralPath +java/awt/geom/Path2D$Float +java/awt/geom/Path2D +sun/font/CharToGlyphMapper +sun/font/PhysicalStrike +sun/font/FontStrike +sun/font/GlyphList +sun/font/StrikeCache +sun/java2d/Disposer +sun/java2d/Disposer$1 +sun/font/StrikeCache$1 +sun/font/FontManager$FontRegistrationInfo +sun/awt/motif/MFontConfiguration +sun/awt/FontConfiguration +sun/awt/FontDescriptor +java/util/Scanner +java/util/regex/Pattern +java/util/regex/Pattern$8 +java/util/regex/Pattern$Node +java/util/regex/Pattern$LastNode +java/util/regex/Pattern$GroupHead +java/util/regex/Pattern$CharPropertyNames +java/util/regex/Pattern$CharPropertyNames$1 +java/util/regex/Pattern$CharPropertyNames$CharPropertyFactory +java/util/regex/Pattern$CharPropertyNames$2 +java/util/regex/Pattern$CharPropertyNames$5 +java/util/regex/Pattern$CharPropertyNames$3 +java/util/regex/Pattern$CharPropertyNames$6 +java/util/regex/Pattern$CharPropertyNames$CloneableProperty +java/util/regex/Pattern$CharProperty +java/util/regex/Pattern$CharPropertyNames$4 +java/util/regex/Pattern$CharPropertyNames$7 +java/util/regex/Pattern$CharPropertyNames$8 +java/util/regex/Pattern$CharPropertyNames$9 +java/util/regex/Pattern$CharPropertyNames$10 +java/util/regex/Pattern$CharPropertyNames$11 +java/util/regex/Pattern$CharPropertyNames$12 +java/util/regex/Pattern$CharPropertyNames$13 +java/util/regex/Pattern$CharPropertyNames$14 +java/util/regex/Pattern$CharPropertyNames$15 +java/util/regex/Pattern$CharPropertyNames$16 +java/util/regex/Pattern$CharPropertyNames$17 +java/util/regex/Pattern$CharPropertyNames$18 +java/util/regex/Pattern$CharPropertyNames$19 +java/util/regex/Pattern$CharPropertyNames$20 +java/util/regex/Pattern$CharPropertyNames$21 +java/util/regex/Pattern$Curly +java/util/regex/Pattern$Slice +java/util/regex/Pattern$Begin +java/util/regex/Pattern$First +java/util/regex/Pattern$Start +java/util/regex/Pattern$TreeInfo +java/util/regex/Pattern$All +java/util/regex/Pattern$BitClass +java/util/regex/Pattern$BmpCharProperty +java/util/regex/Pattern$6 +java/util/regex/Pattern$CharProperty$1 +java/util/regex/Pattern$10 +sun/nio/ch/FileChannelImpl +java/nio/channels/FileChannel +java/nio/channels/ByteChannel +java/nio/channels/ReadableByteChannel +java/nio/channels/Channel +java/nio/channels/WritableByteChannel +java/nio/channels/GatheringByteChannel +java/nio/channels/ScatteringByteChannel +java/nio/channels/spi/AbstractInterruptibleChannel +java/nio/channels/InterruptibleChannel +sun/nio/ch/Util +sun/nio/ch/IOUtil +sun/nio/ch/FileDispatcher +sun/nio/ch/NativeDispatcher +sun/nio/ch/Reflect +java/nio/MappedByteBuffer +sun/nio/ch/Reflect$1 +sun/nio/ch/NativeThreadSet +java/nio/channels/Channels +java/util/Scanner$1 +sun/misc/LRUCache +java/util/regex/Matcher +java/util/regex/MatchResult +java/text/NumberFormat +java/text/Format +java/text/spi/NumberFormatProvider +java/util/spi/LocaleServiceProvider +sun/util/LocaleServiceProviderPool +sun/util/LocaleServiceProviderPool$1 +java/util/ServiceLoader +java/util/ServiceLoader$LazyIterator +java/util/ServiceLoader$1 +java/util/HashMap$EntrySet +java/util/LinkedHashMap$EntryIterator +sun/misc/Launcher$1 +sun/misc/URLClassPath$2 +java/lang/ClassLoader$2 +sun/misc/URLClassPath$1 +java/net/URLClassLoader$3 +sun/misc/CompoundEnumeration +sun/misc/URLClassPath$JarLoader$1 +sun/misc/FileURLMapper +java/net/URLClassLoader$3$1 +sun/util/resources/LocaleData +sun/util/resources/LocaleData$1 +sun/util/resources/LocaleData$LocaleDataResourceBundleControl +sun/util/LocaleDataMetaInfo +sun/text/resources/FormatData +java/util/ResourceBundle$BundleReference +sun/text/resources/FormatData_en +sun/text/resources/FormatData_en_US +java/text/DecimalFormatSymbols +java/text/spi/DecimalFormatSymbolsProvider +java/util/Currency +java/util/Currency$1 +java/util/CurrencyData +java/util/spi/CurrencyNameProvider +sun/util/resources/CurrencyNames +sun/util/resources/LocaleNamesBundle +sun/util/resources/OpenListResourceBundle +sun/util/resources/CurrencyNames_en_US +java/text/DecimalFormat +java/text/FieldPosition +java/text/DigitList +java/math/RoundingMode +java/util/regex/Pattern$GroupTail +java/util/regex/Pattern$Ctype +java/util/regex/Pattern$Ques +java/util/regex/Pattern$GroupCurly +java/util/regex/Pattern$5 +java/util/regex/Pattern$Loop +java/util/regex/Pattern$Prolog +java/util/regex/Pattern$9 +java/util/regex/Pattern$BranchConn +java/util/regex/Pattern$Branch +java/nio/channels/spi/AbstractInterruptibleChannel$1 +sun/nio/ch/Interruptible +sun/nio/ch/NativeThread +sun/nio/ch/DirectBuffer +java/nio/DirectByteBuffer +java/nio/DirectByteBuffer$Deallocator +sun/misc/Cleaner +sun/nio/ch/IOStatus +java/util/regex/ASCII +java/io/DataInputStream +java/io/DataInput +java/lang/Short$ShortCache +java/util/HashMap$KeyIterator +sun/font/CompositeFontDescriptor +sun/font/Font2DHandle +sun/font/FontFamily +java/awt/GraphicsDevice +sun/awt/X11GraphicsDevice +sun/awt/X11GraphicsConfig +java/awt/GraphicsConfiguration +java/awt/ImageCapabilities +sun/java2d/x11/X11SurfaceData +sun/java2d/SurfaceData +java/awt/Transparency +sun/java2d/DisposerTarget +sun/java2d/InvalidPipeException +java/lang/IllegalStateException +sun/java2d/NullSurfaceData +sun/java2d/loops/SurfaceType +sun/awt/image/PixelConverter +sun/awt/image/PixelConverter$Xrgb +sun/awt/image/PixelConverter$Argb +sun/awt/image/PixelConverter$ArgbPre +sun/awt/image/PixelConverter$Xbgr +sun/awt/image/PixelConverter$Rgba +sun/awt/image/PixelConverter$RgbaPre +sun/awt/image/PixelConverter$Ushort565Rgb +sun/awt/image/PixelConverter$Ushort555Rgb +sun/awt/image/PixelConverter$Ushort555Rgbx +sun/awt/image/PixelConverter$Ushort4444Argb +sun/awt/image/PixelConverter$ByteGray +sun/awt/image/PixelConverter$UshortGray +sun/awt/image/PixelConverter$Rgbx +sun/awt/image/PixelConverter$Bgrx +sun/awt/image/PixelConverter$ArgbBm +java/awt/image/ColorModel +java/awt/image/DirectColorModel +java/awt/image/PackedColorModel +java/awt/color/ColorSpace +java/awt/color/ICC_Profile +sun/awt/color/ProfileDeferralInfo +sun/awt/color/ProfileDeferralMgr +java/awt/color/ICC_ProfileRGB +java/awt/color/ICC_Profile$1 +sun/awt/color/ProfileActivator +java/awt/color/ICC_ColorSpace +sun/java2d/pipe/NullPipe +sun/java2d/pipe/PixelDrawPipe +sun/java2d/pipe/PixelFillPipe +sun/java2d/pipe/ShapeDrawPipe +sun/java2d/pipe/TextPipe +sun/java2d/pipe/DrawImagePipe +java/awt/image/IndexColorModel +sun/java2d/pipe/LoopPipe +sun/java2d/pipe/OutlineTextRenderer +sun/java2d/pipe/SolidTextRenderer +sun/java2d/pipe/GlyphListLoopPipe +sun/java2d/pipe/GlyphListPipe +sun/java2d/pipe/AATextRenderer +sun/java2d/pipe/LCDTextRenderer +sun/java2d/pipe/AlphaColorPipe +sun/java2d/pipe/CompositePipe +sun/java2d/pipe/PixelToShapeConverter +sun/java2d/pipe/TextRenderer +sun/java2d/pipe/SpanClipRenderer +sun/java2d/pipe/Region +sun/java2d/pipe/RegionIterator +sun/java2d/pipe/DuctusShapeRenderer +sun/java2d/pipe/DuctusRenderer +sun/java2d/pipe/AlphaPaintPipe +sun/java2d/pipe/SpanShapeRenderer$Composite +sun/java2d/pipe/SpanShapeRenderer +sun/java2d/pipe/GeneralCompositePipe +sun/java2d/pipe/DrawImage +sun/java2d/loops/RenderCache +sun/java2d/loops/RenderCache$Entry +sun/java2d/loops/XORComposite +java/awt/Composite +sun/font/X11TextRenderer +sun/java2d/loops/GraphicsPrimitive +sun/java2d/x11/X11PMBlitLoops +sun/java2d/loops/Blit +sun/java2d/loops/GraphicsPrimitiveMgr +sun/java2d/loops/CompositeType +sun/java2d/SunGraphics2D +sun/awt/ConstrainableGraphics +java/awt/Graphics2D +java/awt/Graphics +java/awt/Color +java/awt/Paint +java/awt/AlphaComposite +sun/java2d/loops/BlitBg +sun/java2d/loops/ScaledBlit +sun/java2d/loops/FillRect +sun/java2d/loops/FillSpans +sun/java2d/loops/DrawLine +sun/java2d/loops/DrawRect +sun/java2d/loops/DrawPolygons +sun/java2d/loops/DrawPath +sun/java2d/loops/FillPath +sun/java2d/loops/MaskBlit +sun/java2d/loops/MaskFill +sun/java2d/loops/DrawGlyphList +sun/java2d/loops/DrawGlyphListAA +sun/java2d/loops/DrawGlyphListLCD +sun/java2d/loops/TransformHelper +java/awt/BasicStroke +java/awt/Stroke +sun/misc/PerformanceLogger +sun/misc/PerformanceLogger$TimeData +sun/java2d/pipe/ValidatePipe +sun/java2d/loops/CustomComponent +sun/java2d/loops/GraphicsPrimitiveProxy +sun/java2d/loops/GeneralRenderer +sun/java2d/loops/GraphicsPrimitiveMgr$1 +sun/java2d/loops/GraphicsPrimitiveMgr$2 +sun/java2d/x11/X11PMBlitLoops$DelegateBlitLoop +sun/java2d/x11/X11PMBlitBgLoops +sun/java2d/x11/X11SurfaceData$LazyPipe +sun/awt/X11GraphicsConfig$X11GCDisposerRecord +sun/java2d/DisposerRecord +java/awt/BorderLayout +java/awt/LayoutManager2 +java/awt/Rectangle +java/awt/Toolkit$2 +sun/awt/X11/XToolkit +sun/awt/X11/XConstants +sun/awt/UNIXToolkit +java/util/TreeMap +java/util/NavigableMap +java/util/SortedMap +sun/awt/X11/XlibWrapper +sun/awt/X11/XUtilConstants +sun/awt/X11/XProtocolConstants +sun/awt/X11/XCursorFontConstants +sun/awt/X11/XlibWrapper$1 +sun/awt/X11/XToolkit$4 +sun/awt/X11/XModifierKeymap +sun/awt/X11/XWrapperBase +sun/awt/X11/Native +sun/awt/X11/Native$1 +java/awt/EventQueue +sun/awt/X11/XToolkit$7 +java/util/EmptyStackException +java/lang/reflect/InvocationTargetException +java/awt/EventDispatchThread +java/awt/event/PaintEvent +java/awt/event/MouseEvent +sun/awt/PeerEvent +java/awt/event/InvocationEvent +java/awt/ActiveEvent +java/awt/EventQueueItem +sun/awt/X11/XToolkit$1 +sun/awt/X11/XToolkit$XErrorHandler +sun/awt/X11/XToolkit$5 +sun/awt/X11/XEventDispatcher +sun/awt/SunToolkit$ModalityListenerList +sun/awt/ModalityListener +sun/awt/SunToolkit$1 +java/util/MissingResourceException +java/awt/Queue +sun/awt/PostEventQueue +java/util/LinkedList +java/util/Deque +java/util/Queue +java/util/AbstractSequentialList +java/util/LinkedList$Entry +sun/awt/X11/AwtScreenData +sun/awt/X11/XWM +sun/awt/X11/MWMConstants +sun/awt/X11/XAtom +java/awt/Insets +sun/awt/X11/XWM$1 +sun/awt/X11/XWM$2 +sun/awt/X11/XSetWindowAttributes +sun/awt/X11/XErrorEvent +sun/awt/X11/XNETProtocol +sun/awt/X11/XStateProtocol +sun/awt/X11/XLayerProtocol +sun/awt/X11/XProtocol +sun/awt/X11/XProtocol$1 +sun/awt/X11/WindowPropertyGetter +sun/awt/X11/UnsafeXDisposerRecord +sun/awt/X11/XPropertyCache +sun/awt/X11/XWINProtocol +sun/awt/X11/XAtomList +sun/awt/X11/XToolkit$3 +sun/awt/X11/XAnyEvent +sun/awt/X11/IXAnyEvent +java/awt/Window$WindowDisposerRecord +java/awt/KeyboardFocusManager +java/awt/KeyEventDispatcher +java/awt/KeyEventPostProcessor +java/awt/AWTKeyStroke +java/awt/AWTKeyStroke$1 +java/awt/DefaultKeyboardFocusManager +java/awt/DefaultFocusTraversalPolicy +java/awt/ContainerOrderFocusTraversalPolicy +java/awt/FocusTraversalPolicy +java/awt/MutableBoolean +java/util/Collections$UnmodifiableSet +sun/awt/HeadlessToolkit +sun/awt/X11/XKeyboardFocusManagerPeer +java/awt/peer/KeyboardFocusManagerPeer +sun/awt/X11/XKeyboardFocusManagerPeer$1 +sun/awt/X11/XFramePeer +java/awt/peer/FramePeer +java/awt/peer/WindowPeer +java/awt/peer/ContainerPeer +java/awt/peer/ComponentPeer +sun/awt/X11/XDecoratedPeer +sun/awt/X11/XWindowPeer +sun/awt/X11/XPanelPeer +java/awt/peer/PanelPeer +sun/awt/X11/XCanvasPeer +java/awt/peer/CanvasPeer +sun/awt/X11/XComponentPeer +java/awt/dnd/peer/DropTargetPeer +sun/awt/X11/XWindow +sun/awt/X11ComponentPeer +sun/awt/X11/XBaseWindow +sun/awt/X11/XCreateWindowParams +java/lang/Long$LongCache +sun/awt/X11/XBaseWindow$InitialiseState +sun/awt/X11/XBaseWindow$StateLock +sun/awt/X11/AwtGraphicsConfigData +sun/awt/X11/XVisualInfo +java/awt/SystemColor +sun/awt/X11/MotifColorUtilities +java/lang/StrictMath +sun/awt/X11/XRepaintArea +sun/awt/RepaintArea +sun/awt/X11/XWindowAttributesData +java/util/concurrent/locks/LockSupport +sun/awt/X11/WindowDimensions +java/awt/Point +java/util/TreeMap$Entry +sun/nio/cs/UTF_8 +sun/nio/cs/Unicode +sun/nio/cs/UTF_8$Encoder +sun/nio/cs/UTF_8$Decoder +sun/nio/cs/Surrogate$Generator +sun/awt/X11/XPropertyEvent +sun/awt/X11/XDropTargetEventProcessor +sun/awt/X11/XDragSourceContextPeer +sun/awt/X11/XDragSourceProtocolListener +sun/awt/dnd/SunDragSourceContextPeer +java/awt/dnd/peer/DragSourceContextPeer +sun/awt/X11/XAwtState +sun/awt/X11/XBaseWindow$1 +sun/awt/X11/XRootWindow +sun/nio/cs/ISO_8859_1 +sun/nio/cs/ISO_8859_1$Encoder +sun/nio/cs/ISO_8859_1$Decoder +sun/java2d/x11/X11SurfaceData$X11WindowSurfaceData +sun/java2d/loops/RenderLoops +sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec +sun/java2d/DefaultDisposerRecord +sun/java2d/x11/X11Renderer +sun/awt/X11/XGlobalCursorManager +sun/awt/GlobalCursorManager +sun/awt/X11/XToolkit$6 +java/awt/Cursor$CursorDisposer +java/awt/AWTException +java/awt/HeadlessException +java/lang/UnsupportedOperationException +sun/reflect/UnsafeLongFieldAccessorImpl +sun/reflect/UnsafeIntegerFieldAccessorImpl +sun/awt/X11/XClientMessageEvent +sun/awt/X11/XIconInfo +sun/awt/X11/XAWTIcon32_java_icon16_png +sun/awt/X11/XAWTIcon32_java_icon24_png +sun/awt/X11/XAWTIcon32_java_icon32_png +sun/awt/X11/XAWTIcon32_java_icon48_png +sun/awt/X11/XSizeHints +sun/awt/X11/XContentWindow +sun/awt/X11/XFocusProxyWindow +sun/awt/X11/XWMHints +java/util/LinkedList$ListItr +java/util/ListIterator +sun/awt/SunToolkit$2 +java/awt/image/BufferStrategy +java/awt/dnd/DropTarget +java/awt/dnd/DropTargetListener +java/awt/event/ComponentListener +java/awt/event/FocusListener +java/awt/event/HierarchyListener +java/awt/event/HierarchyBoundsListener +java/awt/event/KeyListener +java/awt/event/MouseListener +java/awt/event/MouseMotionListener +java/awt/event/MouseWheelListener +java/awt/event/InputMethodListener +java/awt/Component$NativeInLightFixer +java/awt/event/ContainerListener +javax/accessibility/AccessibleContext +sun/reflect/UnsafeObjectFieldAccessorImpl +java/awt/peer/LightweightPeer +sun/awt/X11/XLabelPeer +java/awt/peer/LabelPeer +sun/awt/X11/XMapEvent +sun/awt/X11/XQueryTree +sun/awt/X11/XConfigureEvent +sun/awt/X11/PropMwmHints +sun/awt/GlobalCursorManager$NativeUpdater +javax/swing/JFrame +javax/swing/WindowConstants +javax/swing/RootPaneContainer +javax/swing/TransferHandler$HasGetTransferHandler +javax/swing/JLabel +javax/swing/SwingConstants +javax/swing/JComponent +javax/swing/JComponent$1 +javax/swing/SwingUtilities +javax/swing/JRootPane +sun/security/action/GetBooleanAction +javax/swing/event/EventListenerList +javax/swing/JPanel +java/awt/FlowLayout +javax/swing/UIManager +javax/swing/UIManager$LookAndFeelInfo +sun/swing/SwingUtilities2 +sun/swing/SwingUtilities2$LSBCacheEntry +javax/swing/UIManager$LAFState +javax/swing/UIDefaults +javax/swing/MultiUIDefaults +javax/swing/UIManager$1 +javax/swing/plaf/metal/MetalLookAndFeel +javax/swing/plaf/basic/BasicLookAndFeel +javax/swing/LookAndFeel +sun/swing/DefaultLookup +javax/swing/plaf/metal/OceanTheme +javax/swing/plaf/metal/DefaultMetalTheme +javax/swing/plaf/metal/MetalTheme +javax/swing/plaf/ColorUIResource +javax/swing/plaf/UIResource +sun/swing/PrintColorUIResource +javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate +javax/swing/plaf/FontUIResource +sun/swing/SwingLazyValue +javax/swing/UIDefaults$LazyValue +javax/swing/UIDefaults$ActiveValue +javax/swing/plaf/InsetsUIResource +sun/swing/SwingUtilities2$2 +javax/swing/plaf/basic/BasicLookAndFeel$2 +javax/swing/plaf/DimensionUIResource +javax/swing/UIDefaults$LazyInputMap +java/lang/Character$CharacterCache +javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue +javax/swing/plaf/metal/MetalLookAndFeel$FontActiveValue +java/awt/print/PrinterJob +sun/swing/SwingUtilities2$AATextInfo +sun/awt/X11/XAWTXSettings +sun/awt/X11/XMSelectionListener +sun/awt/XSettings +sun/awt/X11/XMSelection +sun/awt/X11/XMSelection$1 +javax/swing/plaf/metal/MetalLookAndFeel$AATextListener +java/beans/PropertyChangeListener +java/beans/PropertyChangeListenerProxy +java/util/EventListenerProxy +sun/awt/EventListenerAggregate +javax/swing/UIDefaults$ProxyLazyValue +javax/swing/plaf/metal/OceanTheme$1 +javax/swing/plaf/metal/OceanTheme$2 +javax/swing/plaf/metal/OceanTheme$3 +javax/swing/plaf/metal/OceanTheme$4 +javax/swing/plaf/metal/OceanTheme$5 +javax/swing/plaf/metal/OceanTheme$6 +javax/swing/RepaintManager +javax/swing/RepaintManager$DisplayChangedHandler +javax/swing/SwingPaintEventDispatcher +sun/awt/PaintEventDispatcher +javax/swing/UIManager$2 +javax/swing/UIManager$3 +java/awt/PopupMenu +java/awt/Menu +java/awt/MenuItem +java/awt/MenuComponent +java/io/ObjectOutputStream +java/io/ObjectOutput +java/io/DataOutput +java/io/ObjectStreamConstants +java/io/PrintWriter +java/io/ObjectInputStream +java/io/ObjectInput +java/awt/Event +java/awt/im/InputContext +java/awt/event/MouseWheelEvent +java/awt/BufferCapabilities +sun/awt/CausedFocusEvent$Cause +java/awt/PointerInfo +java/awt/Component$BaselineResizeBehavior +java/awt/FontMetrics +java/awt/Image +java/awt/image/ImageProducer +java/awt/image/VolatileImage +java/awt/im/InputMethodRequests +java/awt/event/FocusEvent +java/awt/event/InputMethodEvent +java/awt/event/HierarchyEvent +javax/accessibility/AccessibleStateSet +com/sun/swing/internal/plaf/metal/resources/metal +sun/util/ResourceBundleEnumeration +com/sun/swing/internal/plaf/basic/resources/basic +javax/swing/plaf/basic/BasicPanelUI +javax/swing/plaf/PanelUI +javax/swing/plaf/ComponentUI +sun/reflect/misc/MethodUtil +sun/reflect/misc/MethodUtil$1 +java/util/jar/JarFile +java/util/zip/ZipFile +java/util/zip/ZipConstants +java/util/jar/JavaUtilJarAccessImpl +sun/misc/JavaUtilJarAccess +sun/misc/JarIndex +java/util/zip/ZipEntry +java/util/jar/JarFile$JarFileEntry +java/util/jar/JarEntry +sun/misc/URLClassPath$JarLoader$2 +sun/net/www/protocol/jar/JarURLConnection +java/net/JarURLConnection +sun/net/www/protocol/jar/JarFileFactory +sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController +java/net/HttpURLConnection +sun/net/www/protocol/jar/URLJarFile +sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry +sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream +java/util/zip/ZipFile$ZipFileInputStream +java/security/AllPermissionCollection +java/lang/IllegalAccessException +javax/swing/JPasswordField +javax/swing/JTextField +javax/swing/text/JTextComponent +javax/swing/Scrollable +javax/swing/JLayeredPane +javax/swing/JRootPane$1 +javax/swing/ArrayTable +javax/swing/JInternalFrame +javax/swing/JRootPane$RootLayout +javax/swing/BufferStrategyPaintManager +javax/swing/RepaintManager$PaintManager +javax/swing/plaf/metal/MetalRootPaneUI +javax/swing/plaf/basic/BasicRootPaneUI +javax/swing/plaf/RootPaneUI +javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap +javax/swing/plaf/ComponentInputMapUIResource +javax/swing/ComponentInputMap +javax/swing/InputMap +javax/swing/plaf/InputMapUIResource +javax/swing/KeyStroke +java/awt/VKCollection +sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl +javax/swing/plaf/basic/LazyActionMap +javax/swing/plaf/ActionMapUIResource +javax/swing/ActionMap +javax/swing/LayoutFocusTraversalPolicy +javax/swing/SortingFocusTraversalPolicy +javax/swing/InternalFrameFocusTraversalPolicy +javax/swing/SwingContainerOrderFocusTraversalPolicy +javax/swing/SwingDefaultFocusTraversalPolicy +javax/swing/LayoutComparator +javax/swing/plaf/metal/MetalLabelUI +javax/swing/plaf/basic/BasicLabelUI +javax/swing/plaf/LabelUI +javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1 +javax/swing/plaf/basic/BasicHTML +javax/swing/SystemEventQueueUtilities +javax/swing/SystemEventQueueUtilities$SystemEventQueue +sun/awt/NullComponentPeer +java/awt/event/WindowEvent +java/awt/EventQueue$1 +java/awt/EventDispatchThread$1 +java/awt/Conditional +java/awt/EventDispatchThread$HierarchyEventFilter +java/awt/EventFilter$FilterAction +sun/awt/dnd/SunDropTargetEvent +java/awt/event/ActionEvent +java/util/jar/Manifest +java/io/ByteArrayInputStream +java/util/jar/Attributes +java/util/jar/Manifest$FastInputStream +java/util/jar/Attributes$Name +sun/misc/ASCIICaseInsensitiveComparator +java/util/jar/JarVerifier +java/io/ByteArrayOutputStream +sun/misc/ExtensionDependency +java/lang/Package +sun/security/util/ManifestEntryVerifier +sun/security/provider/Sun +java/security/Provider +java/security/Provider$ServiceKey +java/security/Provider$EngineDescription +sun/security/provider/Sun$1 +java/security/Security +java/security/Security$1 +sun/misc/FloatingDecimal +sun/misc/FloatingDecimal$1 +sun/security/provider/NativePRNG +java/security/SecureRandomSpi +sun/security/provider/NativePRNG$1 +sun/security/provider/NativePRNG$RandomIO +sun/misc/BASE64Decoder +sun/misc/CharacterDecoder +sun/security/util/SignatureFileVerifier +java/awt/event/KeyAdapter +java/lang/NumberFormatException +java/lang/IllegalArgumentException +java/io/FileWriter +java/net/Authenticator +java/net/MalformedURLException +javax/swing/text/Element +javax/swing/text/Document +javax/swing/text/PlainDocument +javax/swing/text/AbstractDocument +javax/swing/text/GapContent +javax/swing/text/AbstractDocument$Content +javax/swing/text/GapVector +javax/swing/text/GapContent$MarkVector +javax/swing/text/GapContent$MarkData +javax/swing/text/StyleContext +javax/swing/text/AbstractDocument$AttributeContext +javax/swing/text/StyleConstants +javax/swing/text/StyleConstants$CharacterConstants +javax/swing/text/AttributeSet$CharacterAttribute +javax/swing/text/StyleConstants$FontConstants +javax/swing/text/AttributeSet$FontAttribute +javax/swing/text/StyleConstants$ColorConstants +javax/swing/text/AttributeSet$ColorAttribute +javax/swing/text/StyleConstants$ParagraphConstants +javax/swing/text/AttributeSet$ParagraphAttribute +javax/swing/text/StyleContext$FontKey +javax/swing/text/SimpleAttributeSet +javax/swing/text/MutableAttributeSet +javax/swing/text/AttributeSet +javax/swing/text/SimpleAttributeSet$EmptyAttributeSet +javax/swing/text/StyleContext$NamedStyle +javax/swing/text/Style +javax/swing/text/SimpleAttributeSet$1 +javax/swing/text/StyleContext$SmallAttributeSet +javax/swing/text/AbstractDocument$BidiRootElement +javax/swing/text/AbstractDocument$BranchElement +javax/swing/text/AbstractDocument$AbstractElement +javax/swing/tree/TreeNode +javax/swing/text/AbstractDocument$1 +javax/swing/text/AbstractDocument$BidiElement +javax/swing/text/AbstractDocument$LeafElement +javax/swing/text/GapContent$StickyPosition +javax/swing/text/Position +javax/swing/text/StyleContext$KeyEnumeration +javax/swing/text/GapContent$InsertUndo +javax/swing/undo/AbstractUndoableEdit +javax/swing/undo/UndoableEdit +javax/swing/text/AbstractDocument$DefaultDocumentEvent +javax/swing/event/DocumentEvent +javax/swing/undo/CompoundEdit +javax/swing/event/DocumentEvent$EventType +javax/swing/text/Segment +java/text/CharacterIterator +javax/swing/text/Utilities +javax/swing/text/SegmentCache +javax/swing/text/SegmentCache$CachedSegment +javax/swing/event/UndoableEditEvent +javax/swing/text/AbstractDocument$ElementEdit +javax/swing/event/DocumentEvent$ElementChange +java/net/Socket +java/net/InetAddress +java/net/InetAddress$Cache +java/net/InetAddress$Cache$Type +java/net/InetAddressImplFactory +java/net/Inet4AddressImpl +java/net/InetAddressImpl +java/net/InetAddress$1 +sun/net/spi/nameservice/NameService +sun/net/util/IPAddressUtil +java/util/RandomAccessSubList +java/util/SubList +java/util/SubList$1 +java/util/AbstractList$ListItr +java/net/Inet4Address +java/net/InetSocketAddress +java/net/SocketAddress +java/net/SocksSocketImpl +java/net/SocksConsts +java/net/PlainSocketImpl +java/net/SocketImpl +java/net/SocketOptions +java/net/SocketException +java/net/SocksSocketImpl$5 +java/net/ProxySelector +sun/net/spi/DefaultProxySelector +sun/net/spi/DefaultProxySelector$1 +sun/net/NetProperties +sun/net/NetProperties$1 +sun/net/spi/DefaultProxySelector$NonProxyInfo +java/net/Inet6Address +java/net/URI +java/net/URI$Parser +java/net/Proxy +java/net/Proxy$Type +java/net/ConnectException +javax/swing/JMenu +javax/swing/MenuElement +javax/swing/JMenuItem +javax/swing/AbstractButton +java/awt/ItemSelectable +javax/swing/event/MenuListener +javax/swing/JCheckBoxMenuItem +javax/swing/Icon +javax/swing/JButton +java/awt/event/WindowListener +java/net/URLClassLoader$2 +javax/swing/ImageIcon +javax/swing/ImageIcon$1 +java/awt/MediaTracker +sun/misc/SoftCache$ValueCell +sun/awt/image/URLImageSource +sun/awt/image/InputStreamImageSource +sun/awt/image/ImageFetchable +sun/awt/image/ToolkitImage +java/awt/Image$1 +sun/awt/image/SurfaceManager$ImageAccessor +sun/awt/image/SurfaceManager +sun/awt/image/NativeLibLoader +java/awt/ImageMediaEntry +java/awt/MediaEntry +sun/awt/image/ImageRepresentation +java/awt/image/ImageConsumer +sun/awt/image/ImageWatched +sun/awt/image/ImageWatched$Link +sun/awt/image/ImageWatched$WeakLink +sun/awt/image/ImageConsumerQueue +sun/awt/image/ImageFetcher +sun/awt/image/FetcherInfo +sun/awt/image/ImageFetcher$1 +sun/awt/image/GifImageDecoder +sun/awt/image/ImageDecoder +sun/awt/image/GifFrame +java/awt/image/Raster +java/awt/image/DataBufferByte +java/awt/image/DataBuffer +java/awt/image/PixelInterleavedSampleModel +java/awt/image/ComponentSampleModel +java/awt/image/SampleModel +sun/awt/image/ByteInterleavedRaster +sun/awt/image/ByteComponentRaster +sun/awt/image/SunWritableRaster +java/awt/image/WritableRaster +java/awt/image/BufferedImage +java/awt/image/WritableRenderedImage +java/awt/image/RenderedImage +sun/awt/image/IntegerComponentRaster +sun/awt/image/BytePackedRaster +java/awt/Canvas +sun/font/FontDesignMetrics +sun/font/FontStrikeDesc +sun/font/CompositeStrike +sun/font/FontStrikeDisposer +sun/font/StrikeCache$SoftDisposerRef +sun/font/StrikeCache$DisposableStrike +sun/font/TrueTypeFont$TTDisposerRecord +sun/font/TrueTypeFont$1 +java/io/RandomAccessFile +java/nio/ByteBufferAsIntBufferB +java/nio/IntBuffer +sun/font/TrueTypeFont$DirectoryEntry +java/nio/ByteBufferAsShortBufferB +java/nio/ShortBuffer +sun/nio/cs/UTF_16 +sun/nio/cs/UTF_16$Decoder +sun/nio/cs/UnicodeDecoder +sun/font/FileFontStrike +sun/font/FileFont$FileFontDisposer +sun/font/TrueTypeGlyphMapper +sun/font/CMap +sun/font/CMap$NullCMapClass +sun/font/CMap$CMapFormat4 +java/nio/ByteBufferAsCharBufferB +sun/font/FontDesignMetrics$KeyReference +sun/awt/image/PNGImageDecoder +sun/awt/image/PNGFilterInputStream +java/util/zip/InflaterInputStream +java/util/zip/Inflater +sun/awt/EventQueueItem +sun/awt/SunToolkit$3 +sun/awt/X11/XExposeEvent +sun/awt/X11/ComponentAccessor +sun/awt/X11/ComponentAccessor$1 +sun/reflect/UnsafeBooleanFieldAccessorImpl +sun/awt/event/IgnorePaintEvent +java/awt/image/DataBufferInt +java/awt/image/SinglePixelPackedSampleModel +sun/awt/image/IntegerInterleavedRaster +sun/java2d/x11/X11RemoteOffScreenImage +sun/awt/image/RemoteOffScreenImage +sun/awt/image/OffScreenImage +sun/java2d/x11/X11RemoteOffScreenImage$X11RemoteSurfaceManager +sun/awt/image/OffScreenSurfaceManager +sun/awt/image/CachingSurfaceManager +sun/awt/image/RasterListener +sun/awt/image/BufImgSurfaceData +sun/java2d/opengl/GLXGraphicsConfig +sun/java2d/opengl/OGLGraphicsConfig +sun/java2d/x11/X11SurfaceData$X11PixmapSurfaceData +sun/awt/image/WritableRasterNative +sun/awt/image/DataBufferNative +sun/java2d/SurfaceManagerFactory +sun/java2d/x11/X11CachingSurfaceManager +sun/java2d/opengl/GLXSurfaceData +sun/java2d/opengl/OGLSurfaceData +sun/font/CompositeGlyphMapper +sun/java2d/loops/FontInfo +java/util/Date +sun/util/calendar/CalendarSystem +sun/util/calendar/Gregorian +sun/util/calendar/BaseCalendar +sun/util/calendar/AbstractCalendar +java/util/TimeZone +java/lang/InheritableThreadLocal +sun/util/calendar/ZoneInfo +sun/util/calendar/ZoneInfoFile +sun/util/calendar/ZoneInfoFile$1 +java/util/TimeZone$1 +sun/util/calendar/Gregorian$Date +sun/util/calendar/BaseCalendar$Date +sun/util/calendar/CalendarDate +sun/util/calendar/CalendarUtils +java/util/TimeZone$DisplayNames +sun/util/TimeZoneNameUtility +sun/util/resources/TimeZoneNames +sun/util/resources/TimeZoneNamesBundle +sun/util/resources/TimeZoneNames_en +java/util/spi/TimeZoneNameProvider +java/lang/ProcessBuilder +java/lang/ProcessImpl +java/lang/UNIXProcess +java/lang/Process +java/lang/UNIXProcess$Gate +java/lang/UNIXProcess$1 +java/lang/UNIXProcess$1$1 +java/lang/UNIXProcess$1$1$1 +java/net/ServerSocket +java/util/Random +java/util/concurrent/atomic/AtomicLong +java/lang/InternalError +java/io/StringReader +java/lang/SecurityException +java/io/FilterReader +java/lang/reflect/Proxy +java/lang/reflect/InvocationHandler +java/lang/NoSuchFieldException +java/lang/InstantiationException +java/lang/ArrayIndexOutOfBoundsException +java/lang/IndexOutOfBoundsException +javax/swing/JDialog +sun/awt/X11/XClipboard +sun/awt/datatransfer/SunClipboard +java/awt/datatransfer/Clipboard +java/awt/datatransfer/SystemFlavorMap +java/awt/datatransfer/FlavorMap +java/awt/datatransfer/FlavorTable +java/awt/datatransfer/SystemFlavorMap$1 +sun/net/ProgressMonitor +sun/net/DefaultProgressMeteringPolicy +sun/net/ProgressMeteringPolicy +java/awt/datatransfer/SystemFlavorMap$2 +java/awt/datatransfer/MimeType +java/io/Externalizable +java/awt/datatransfer/MimeTypeParameterList +sun/awt/datatransfer/DataTransferer +java/util/Collections$SynchronizedSet +java/util/Collections$SynchronizedCollection +java/awt/datatransfer/DataFlavor +java/awt/datatransfer/DataFlavor$1 +sun/awt/datatransfer/DataTransferer$CharsetComparator +sun/awt/datatransfer/DataTransferer$IndexedComparator +sun/nio/cs/UTF_16LE +sun/nio/cs/UTF_16BE +sun/awt/datatransfer/DataTransferer$DataFlavorComparator +java/rmi/Remote +sun/awt/datatransfer/DataTransferer$1 +sun/awt/X11/XDataTransferer +sun/awt/datatransfer/ToolkitThreadBlockedHandler +javax/imageio/ImageTypeSpecifier +sun/awt/X11/XSelection +sun/security/action/GetIntegerAction +sun/awt/X11/XSelection$IncrementalTransferHandler +sun/awt/X11/XSelection$SelectionEventHandler +java/awt/datatransfer/Transferable +java/io/EOFException +java/util/Vector$1 +java/util/zip/ZipFile$1 +java/util/zip/ZipFile$2 +java/util/jar/JarFile$1 +java/util/PropertyResourceBundle +java/util/ResourceBundle$Control$1 +java/util/Hashtable$EntrySet +java/lang/IllegalAccessError +java/text/MessageFormat +java/text/MessageFormat$Field +java/text/Format$Field +java/lang/CloneNotSupportedException +sun/reflect/MethodAccessorGenerator +sun/reflect/AccessorGenerator +sun/reflect/ClassFileConstants +java/lang/Void +sun/reflect/ByteVectorFactory +sun/reflect/ByteVectorImpl +sun/reflect/ByteVector +sun/reflect/ClassFileAssembler +sun/reflect/UTF8 +sun/reflect/Label +sun/reflect/Label$PatchInfo +sun/reflect/MethodAccessorGenerator$1 +sun/reflect/ClassDefiner +sun/reflect/ClassDefiner$1 +sun/reflect/BootstrapConstructorAccessorImpl +java/awt/event/ActionListener +javax/swing/Timer +javax/swing/Timer$DoPostEvent +javax/swing/TimerQueue +javax/swing/TimerQueue$1 +javax/swing/ToolTipManager +java/awt/event/MouseAdapter +javax/swing/ToolTipManager$insideTimerAction +javax/swing/ToolTipManager$outsideTimerAction +javax/swing/ToolTipManager$stillInsideTimerAction +javax/swing/ToolTipManager$Actions +sun/swing/UIAction +javax/swing/Action +javax/swing/ToolTipManager$MoveBeforeEnterListener +java/awt/event/MouseMotionAdapter +java/util/Hashtable$ValueCollection +javax/swing/event/CaretListener +javax/swing/JToolBar +javax/swing/JSplitPane +javax/swing/border/Border +javax/swing/JToggleButton +javax/swing/border/EmptyBorder +javax/swing/border/AbstractBorder +javax/swing/DefaultButtonModel +javax/swing/ButtonModel +javax/swing/AbstractButton$Handler +javax/swing/event/ChangeListener +java/awt/event/ItemListener +javax/swing/plaf/metal/MetalButtonUI +javax/swing/plaf/basic/BasicButtonUI +javax/swing/plaf/ButtonUI +javax/swing/plaf/metal/MetalBorders +javax/swing/plaf/BorderUIResource$CompoundBorderUIResource +javax/swing/border/CompoundBorder +javax/swing/plaf/metal/MetalBorders$ButtonBorder +javax/swing/plaf/basic/BasicBorders$MarginBorder +javax/swing/plaf/basic/BasicButtonListener +java/awt/AWTEventMulticaster +java/awt/event/WindowFocusListener +java/awt/event/WindowStateListener +java/awt/event/AdjustmentListener +java/awt/event/TextListener +javax/swing/event/AncestorListener +java/beans/VetoableChangeListener +javax/swing/ButtonGroup +javax/swing/JToggleButton$ToggleButtonModel +javax/swing/plaf/metal/MetalToggleButtonUI +javax/swing/plaf/basic/BasicToggleButtonUI +javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder +java/awt/CardLayout +javax/swing/Box +javax/swing/plaf/metal/MetalBorders$TextFieldBorder +javax/swing/plaf/metal/MetalBorders$Flush3DBorder +javax/swing/BoxLayout +javax/swing/JMenuBar +javax/swing/DefaultSingleSelectionModel +javax/swing/SingleSelectionModel +javax/swing/plaf/basic/BasicMenuBarUI +javax/swing/plaf/MenuBarUI +javax/swing/plaf/basic/DefaultMenuLayout +javax/swing/plaf/metal/MetalBorders$MenuBarBorder +javax/swing/plaf/basic/BasicMenuBarUI$Handler +javax/swing/KeyboardManager +javax/swing/event/MenuEvent +javax/swing/JMenu$MenuChangeListener +javax/swing/JMenuItem$MenuItemFocusListener +javax/swing/plaf/basic/BasicMenuUI +javax/swing/plaf/basic/BasicMenuItemUI +javax/swing/plaf/MenuItemUI +javax/swing/plaf/metal/MetalBorders$MenuItemBorder +javax/swing/plaf/metal/MetalIconFactory +javax/swing/plaf/metal/MetalIconFactory$MenuArrowIcon +javax/swing/plaf/basic/BasicMenuUI$Handler +javax/swing/event/MenuKeyListener +javax/swing/plaf/basic/BasicMenuItemUI$Handler +javax/swing/event/MenuDragMouseListener +javax/swing/event/MouseInputListener +javax/swing/event/ChangeEvent +java/awt/event/ContainerEvent +javax/swing/plaf/metal/MetalIconFactory$MenuItemArrowIcon +javax/swing/JPopupMenu +javax/swing/plaf/basic/BasicPopupMenuUI +javax/swing/plaf/PopupMenuUI +javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper +java/awt/event/AWTEventListenerProxy +java/awt/Toolkit$SelectiveAWTEventListener +java/awt/Toolkit$ToolkitEventMulticaster +javax/swing/plaf/basic/BasicLookAndFeel$1 +javax/swing/plaf/metal/MetalBorders$PopupMenuBorder +javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener +javax/swing/event/PopupMenuListener +javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener +javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber +javax/swing/MenuSelectionManager +javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper +javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1 +java/awt/event/FocusAdapter +javax/swing/JMenu$WinListener +java/awt/event/WindowAdapter +javax/swing/JPopupMenu$Separator +javax/swing/JSeparator +javax/swing/plaf/metal/MetalPopupMenuSeparatorUI +javax/swing/plaf/metal/MetalSeparatorUI +javax/swing/plaf/basic/BasicSeparatorUI +javax/swing/plaf/SeparatorUI +javax/swing/JComboBox +javax/swing/event/ListDataListener +javax/swing/event/CaretEvent +javax/swing/text/TabExpander +javax/swing/JScrollBar +java/awt/Adjustable +javax/swing/event/MouseInputAdapter +javax/swing/JScrollBar$ModelListener +javax/swing/DefaultBoundedRangeModel +javax/swing/BoundedRangeModel +javax/swing/plaf/metal/MetalScrollBarUI +javax/swing/plaf/basic/BasicScrollBarUI +javax/swing/plaf/ScrollBarUI +javax/swing/plaf/metal/MetalBumps +javax/swing/plaf/metal/MetalScrollButton +javax/swing/plaf/basic/BasicArrowButton +javax/swing/plaf/basic/BasicScrollBarUI$TrackListener +javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener +javax/swing/plaf/basic/BasicScrollBarUI$ModelListener +javax/swing/plaf/metal/MetalScrollBarUI$ScrollBarListener +javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler +javax/swing/plaf/basic/BasicScrollBarUI$Handler +javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener +javax/swing/CellRendererPane +java/util/HashMap$EntryIterator +javax/swing/border/MatteBorder +sun/font/StandardGlyphVector +java/awt/font/GlyphVector +sun/font/StandardGlyphVector$GlyphStrike +sun/font/CoreMetrics +sun/font/FontLineMetrics +java/awt/font/LineMetrics +javax/swing/ComboBoxModel +javax/swing/ListModel +javax/swing/ListCellRenderer +javax/swing/DefaultComboBoxModel +javax/swing/MutableComboBoxModel +javax/swing/AbstractListModel +javax/swing/JComboBox$1 +javax/swing/AncestorNotifier +javax/swing/plaf/metal/MetalComboBoxUI +javax/swing/plaf/basic/BasicComboBoxUI +javax/swing/plaf/ComboBoxUI +javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager +javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager +javax/swing/plaf/basic/BasicComboPopup +javax/swing/plaf/basic/ComboPopup +javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass +javax/swing/border/LineBorder +javax/swing/plaf/basic/BasicComboPopup$1 +javax/swing/JList +javax/swing/DropMode +javax/swing/DefaultListSelectionModel +javax/swing/ListSelectionModel +javax/swing/plaf/basic/BasicListUI +javax/swing/plaf/ListUI +javax/swing/plaf/basic/BasicListUI$ListTransferHandler +javax/swing/TransferHandler +javax/swing/TransferHandler$TransferAction +javax/swing/DefaultListCellRenderer$UIResource +javax/swing/DefaultListCellRenderer +javax/swing/TransferHandler$SwingDropTarget +java/awt/dnd/DropTargetContext +javax/swing/TransferHandler$DropHandler +javax/swing/TransferHandler$TransferSupport +javax/swing/plaf/basic/BasicListUI$Handler +javax/swing/event/ListSelectionListener +javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag +javax/swing/plaf/basic/BasicComboPopup$Handler +javax/swing/JScrollPane +javax/swing/ScrollPaneConstants +javax/swing/ScrollPaneLayout$UIResource +javax/swing/ScrollPaneLayout +javax/swing/JViewport +javax/swing/ViewportLayout +javax/swing/plaf/basic/BasicViewportUI +javax/swing/plaf/ViewportUI +javax/swing/JScrollPane$ScrollBar +javax/swing/JViewport$ViewListener +java/awt/event/ComponentAdapter +javax/swing/plaf/metal/MetalScrollPaneUI +javax/swing/plaf/basic/BasicScrollPaneUI +javax/swing/plaf/ScrollPaneUI +javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder +javax/swing/plaf/basic/BasicScrollPaneUI$Handler +javax/swing/plaf/metal/MetalScrollPaneUI$1 +javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource +javax/swing/plaf/basic/BasicComboBoxRenderer +javax/swing/plaf/metal/MetalComboBoxEditor$UIResource +javax/swing/plaf/metal/MetalComboBoxEditor +javax/swing/plaf/basic/BasicComboBoxEditor +javax/swing/ComboBoxEditor +javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField +javax/swing/JTextField$NotifyAction +javax/swing/text/TextAction +javax/swing/AbstractAction +javax/swing/text/JTextComponent$MutableCaretEvent +javax/swing/plaf/metal/MetalTextFieldUI +javax/swing/plaf/basic/BasicTextFieldUI +javax/swing/plaf/basic/BasicTextUI +javax/swing/text/ViewFactory +javax/swing/plaf/TextUI +javax/swing/plaf/basic/BasicTextUI$BasicCursor +javax/swing/text/DefaultEditorKit +javax/swing/text/EditorKit +javax/swing/text/DefaultEditorKit$InsertContentAction +javax/swing/text/DefaultEditorKit$DeletePrevCharAction +javax/swing/text/DefaultEditorKit$DeleteNextCharAction +javax/swing/text/DefaultEditorKit$ReadOnlyAction +javax/swing/text/DefaultEditorKit$DeleteWordAction +javax/swing/text/DefaultEditorKit$WritableAction +javax/swing/text/DefaultEditorKit$CutAction +javax/swing/text/DefaultEditorKit$CopyAction +javax/swing/text/DefaultEditorKit$PasteAction +javax/swing/text/DefaultEditorKit$VerticalPageAction +javax/swing/text/DefaultEditorKit$PageAction +javax/swing/text/DefaultEditorKit$InsertBreakAction +javax/swing/text/DefaultEditorKit$BeepAction +javax/swing/text/DefaultEditorKit$NextVisualPositionAction +javax/swing/text/DefaultEditorKit$BeginWordAction +javax/swing/text/DefaultEditorKit$EndWordAction +javax/swing/text/DefaultEditorKit$PreviousWordAction +javax/swing/text/DefaultEditorKit$NextWordAction +javax/swing/text/DefaultEditorKit$BeginLineAction +javax/swing/text/DefaultEditorKit$EndLineAction +javax/swing/text/DefaultEditorKit$BeginParagraphAction +javax/swing/text/DefaultEditorKit$EndParagraphAction +javax/swing/text/DefaultEditorKit$BeginAction +javax/swing/text/DefaultEditorKit$EndAction +javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction +javax/swing/text/DefaultEditorKit$InsertTabAction +javax/swing/text/DefaultEditorKit$SelectWordAction +javax/swing/text/DefaultEditorKit$SelectLineAction +javax/swing/text/DefaultEditorKit$SelectParagraphAction +javax/swing/text/DefaultEditorKit$SelectAllAction +javax/swing/text/DefaultEditorKit$UnselectAction +javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction +javax/swing/text/DefaultEditorKit$DumpModelAction +javax/swing/plaf/basic/BasicTextUI$TextTransferHandler +javax/swing/text/Position$Bias +javax/swing/plaf/basic/BasicTextUI$RootView +javax/swing/text/View +javax/swing/plaf/basic/BasicTextUI$UpdateHandler +javax/swing/event/DocumentListener +javax/swing/plaf/basic/BasicTextUI$DragListener +javax/swing/plaf/basic/BasicComboBoxEditor$UIResource +javax/swing/plaf/basic/BasicTextUI$BasicCaret +javax/swing/text/DefaultCaret +javax/swing/text/Caret +javax/swing/text/DefaultCaret$Handler +java/awt/datatransfer/ClipboardOwner +javax/swing/plaf/basic/BasicTextUI$BasicHighlighter +javax/swing/text/DefaultHighlighter +javax/swing/text/LayeredHighlighter +javax/swing/text/Highlighter +javax/swing/text/Highlighter$Highlight +javax/swing/text/DefaultHighlighter$DefaultHighlightPainter +javax/swing/text/LayeredHighlighter$LayerPainter +javax/swing/text/Highlighter$HighlightPainter +javax/swing/text/DefaultHighlighter$SafeDamager +javax/swing/text/FieldView +javax/swing/text/PlainView +javax/swing/text/JTextComponent$DefaultKeymap +javax/swing/text/Keymap +javax/swing/text/JTextComponent$KeymapWrapper +javax/swing/text/JTextComponent$KeymapActionMap +javax/swing/plaf/basic/BasicTextUI$FocusAction +javax/swing/plaf/basic/BasicTextUI$TextActionWrapper +javax/swing/JTextArea +javax/swing/JEditorPane +javax/swing/JTextField$ScrollRepainter +javax/swing/plaf/metal/MetalComboBoxEditor$1 +javax/swing/plaf/metal/MetalComboBoxEditor$EditorBorder +javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener +javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler +javax/swing/plaf/basic/BasicComboBoxUI$Handler +javax/swing/plaf/metal/MetalComboBoxButton +javax/swing/plaf/metal/MetalComboBoxIcon +javax/swing/plaf/metal/MetalComboBoxButton$1 +javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager +javax/swing/JComboBox$KeySelectionManager +javax/swing/JToolBar$DefaultToolBarLayout +javax/swing/plaf/metal/MetalToolBarUI +javax/swing/plaf/basic/BasicToolBarUI +javax/swing/plaf/ToolBarUI +javax/swing/plaf/metal/MetalBorders$ToolBarBorder +javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue$1 +javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder +javax/swing/plaf/metal/MetalBorders$RolloverMarginBorder +javax/swing/plaf/basic/BasicBorders$RadioButtonBorder +javax/swing/plaf/basic/BasicBorders$ButtonBorder +javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder +javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener +javax/swing/plaf/basic/BasicToolBarUI$DockingListener +javax/swing/plaf/basic/BasicToolBarUI$Handler +javax/swing/border/EtchedBorder +javax/swing/JToolBar$Separator +javax/swing/plaf/basic/BasicToolBarSeparatorUI +sun/awt/color/CMM +java/applet/Applet +java/awt/Panel +com/sun/awt/AWTUtilities +javax/swing/KeyboardManager$ComponentKeyStrokePair +sun/awt/EmbeddedFrame +sun/awt/im/InputMethodContext +java/awt/im/spi/InputMethodContext +sun/awt/im/InputContext +sun/awt/im/InputMethodManager +sun/awt/im/ExecutableInputMethodManager +sun/awt/X11/XInputMethodDescriptor +sun/awt/X11InputMethodDescriptor +java/awt/im/spi/InputMethodDescriptor +sun/awt/im/InputMethodLocator +sun/awt/im/ExecutableInputMethodManager$2 +sun/misc/Service +sun/misc/Service$LazyIterator +java/util/TreeSet +java/util/NavigableSet +java/util/SortedSet +javax/swing/SizeRequirements +javax/swing/plaf/basic/BasicGraphicsUtils +java/awt/event/AdjustmentEvent +java/awt/MenuBar +sun/awt/X11/XComponentPeer$2 +java/awt/SequencedEvent +java/beans/PropertyVetoException +java/awt/DefaultKeyboardFocusManager$TypeAheadMarker +java/awt/KeyboardFocusManager$HeavyweightFocusRequest +java/awt/KeyboardFocusManager$LightweightFocusRequest +sun/awt/KeyboardFocusManagerPeerImpl +sun/awt/SunToolkit$7 +java/awt/Window$1DisposeAction +java/awt/LightweightDispatcher$2 +sun/awt/X11/XReparentEvent +sun/awt/X11/XWindowAttributes +javax/swing/SystemEventQueueUtilities$ComponentWorkRequest +sun/awt/X11/XFocusChangeEvent +sun/awt/X11/XComponentPeer$1 +sun/awt/X11/XUnmapEvent +java/io/StringWriter +javax/swing/JWindow +java/io/UnsupportedEncodingException +java/net/UnknownHostException +java/nio/channels/SocketChannel +java/nio/channels/spi/AbstractSelectableChannel +java/nio/channels/SelectableChannel +java/net/SocketImplFactory +javax/swing/UnsupportedLookAndFeelException +java/lang/UnsatisfiedLinkError +javax/swing/Box$Filler +javax/swing/JComponent$2 +sun/net/www/MimeTable +java/net/FileNameMap +sun/net/www/MimeTable$1 +sun/net/www/MimeTable$2 +sun/net/www/MimeEntry +java/net/URLConnection$1 +java/text/SimpleDateFormat +java/text/DateFormat +java/text/DateFormat$Field +java/util/Calendar +java/util/GregorianCalendar +sun/util/resources/CalendarData +sun/util/resources/CalendarData_en +java/text/DateFormatSymbols +java/text/spi/DateFormatSymbolsProvider +java/text/DontCareFieldPosition +java/text/DontCareFieldPosition$1 +java/text/Format$FieldDelegate +javax/swing/plaf/BorderUIResource +javax/swing/BorderFactory +javax/swing/border/BevelBorder +javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon +javax/swing/plaf/metal/MetalIconFactory$FolderIcon16 +java/util/zip/ZipInputStream +java/io/PushbackInputStream +java/util/zip/CRC32 +java/util/zip/Checksum +java/lang/Thread$State +javax/swing/SwingUtilities$SharedOwnerFrame +javax/swing/JTable +javax/swing/event/TableModelListener +javax/swing/event/TableColumnModelListener +javax/swing/event/CellEditorListener +javax/swing/event/RowSorterListener +javax/swing/BufferStrategyPaintManager$BufferInfo +java/awt/Component$BltSubRegionBufferStrategy +sun/awt/SubRegionShowable +java/awt/Component$BltBufferStrategy +sun/awt/image/SunVolatileImage +sun/awt/image/BufferedImageGraphicsConfig +sun/print/PrinterGraphicsConfig +sun/java2d/x11/X11VolatileSurfaceManager +sun/awt/image/VolatileSurfaceManager +java/awt/print/PrinterGraphics +java/awt/PrintGraphics +java/awt/GraphicsCallback$PaintCallback +java/awt/GraphicsCallback +sun/awt/SunGraphicsCallback +javax/swing/JRadioButton +java/lang/ClassFormatError +javax/swing/JTabbedPane +javax/swing/JTabbedPane$ModelListener +javax/swing/plaf/metal/MetalTabbedPaneUI +javax/swing/plaf/basic/BasicTabbedPaneUI +javax/swing/plaf/TabbedPaneUI +javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout +javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout +javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneScrollLayout +javax/swing/plaf/basic/BasicTabbedPaneUI$Handler +sun/swing/ImageIconUIResource +javax/swing/GrayFilter +java/awt/image/RGBImageFilter +java/awt/image/ImageFilter +java/awt/image/FilteredImageSource +org/w3c/dom/Node +org/xml/sax/SAXException +javax/xml/parsers/ParserConfigurationException +org/xml/sax/EntityResolver +java/security/NoSuchAlgorithmException +java/security/GeneralSecurityException +java/util/zip/GZIPInputStream +java/util/zip/DeflaterOutputStream +org/xml/sax/InputSource +javax/xml/parsers/DocumentBuilderFactory +javax/xml/parsers/FactoryFinder +javax/xml/parsers/SecuritySupport +javax/xml/parsers/SecuritySupport$2 +javax/xml/parsers/SecuritySupport$5 +javax/xml/parsers/SecuritySupport$1 +javax/xml/parsers/SecuritySupport$4 +javax/xml/parsers/DocumentBuilder +org/w3c/dom/Document +org/xml/sax/helpers/DefaultHandler +org/xml/sax/DTDHandler +org/xml/sax/ContentHandler +org/xml/sax/ErrorHandler +org/xml/sax/SAXNotSupportedException +org/xml/sax/Locator +org/xml/sax/SAXNotRecognizedException +org/xml/sax/SAXParseException +org/w3c/dom/NodeList +org/w3c/dom/events/EventTarget +org/w3c/dom/traversal/DocumentTraversal +org/w3c/dom/events/DocumentEvent +org/w3c/dom/ranges/DocumentRange +org/w3c/dom/Entity +org/w3c/dom/Element +org/w3c/dom/CharacterData +org/w3c/dom/CDATASection +org/w3c/dom/Text +org/xml/sax/AttributeList +org/w3c/dom/DOMException +org/w3c/dom/Notation +org/w3c/dom/DocumentType +org/w3c/dom/Attr +org/w3c/dom/EntityReference +org/w3c/dom/ProcessingInstruction +org/w3c/dom/Comment +org/w3c/dom/DocumentFragment +org/w3c/dom/events/Event +org/w3c/dom/events/MutationEvent +org/w3c/dom/traversal/TreeWalker +org/w3c/dom/ranges/Range +org/w3c/dom/traversal/NodeIterator +org/w3c/dom/events/EventException +org/w3c/dom/NamedNodeMap +java/lang/StringIndexOutOfBoundsException +java/awt/GridLayout +javax/swing/plaf/metal/MetalRadioButtonUI +javax/swing/plaf/basic/BasicRadioButtonUI +javax/swing/plaf/basic/BasicBorders +javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon +java/awt/event/ItemEvent +java/awt/CardLayout$Card +javax/swing/JCheckBox +javax/swing/event/ListSelectionEvent +javax/swing/plaf/metal/MetalCheckBoxUI +javax/swing/plaf/metal/MetalIconFactory$CheckBoxIcon +java/lang/ExceptionInInitializerError +com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI +javax/swing/JProgressBar +javax/swing/JProgressBar$ModelListener +javax/swing/plaf/metal/MetalProgressBarUI +javax/swing/plaf/basic/BasicProgressBarUI +javax/swing/plaf/ProgressBarUI +javax/swing/plaf/BorderUIResource$LineBorderUIResource +javax/swing/plaf/basic/BasicProgressBarUI$Handler +javax/swing/tree/TreeModel +javax/swing/table/TableCellRenderer +javax/swing/table/JTableHeader +javax/swing/event/TreeExpansionListener +javax/swing/table/AbstractTableModel +javax/swing/table/TableModel +javax/swing/table/DefaultTableCellRenderer +javax/swing/JTree +javax/swing/tree/TreeSelectionModel +javax/swing/tree/DefaultTreeCellRenderer +javax/swing/tree/TreeCellRenderer +javax/swing/table/TableCellEditor +javax/swing/CellEditor +javax/swing/JToolTip +javax/swing/table/TableColumn +javax/swing/table/DefaultTableColumnModel +javax/swing/table/TableColumnModel +javax/swing/table/DefaultTableModel +javax/swing/event/TableModelEvent +sun/swing/table/DefaultTableCellHeaderRenderer +javax/swing/plaf/basic/BasicTableHeaderUI +javax/swing/plaf/TableHeaderUI +javax/swing/plaf/basic/BasicTableHeaderUI$1 +javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler +javax/swing/DefaultCellEditor +javax/swing/tree/TreeCellEditor +javax/swing/AbstractCellEditor +javax/swing/plaf/basic/BasicTableUI +javax/swing/plaf/TableUI +javax/swing/plaf/basic/BasicTableUI$TableTransferHandler +javax/swing/plaf/basic/BasicTableUI$Handler +javax/swing/tree/DefaultTreeSelectionModel +javax/swing/tree/TreePath +javax/swing/plaf/metal/MetalTreeUI +javax/swing/plaf/basic/BasicTreeUI +javax/swing/plaf/TreeUI +javax/swing/plaf/basic/BasicTreeUI$Actions +javax/swing/plaf/basic/BasicTreeUI$TreeTransferHandler +javax/swing/plaf/metal/MetalTreeUI$LineListener +javax/swing/plaf/basic/BasicTreeUI$Handler +javax/swing/event/TreeModelListener +javax/swing/event/TreeSelectionListener +javax/swing/event/SwingPropertyChangeSupport +javax/swing/tree/VariableHeightLayoutCache +javax/swing/tree/AbstractLayoutCache +javax/swing/tree/RowMapper +javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler +javax/swing/tree/AbstractLayoutCache$NodeDimensions +javax/swing/JTree$TreeModelHandler +javax/swing/tree/VariableHeightLayoutCache$TreeStateNode +javax/swing/tree/DefaultMutableTreeNode +javax/swing/tree/MutableTreeNode +javax/swing/tree/DefaultMutableTreeNode$1 +javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration +javax/swing/event/TableColumnModelEvent +java/text/ParseException +java/text/NumberFormat$Field +javax/swing/event/UndoableEditListener +javax/swing/filechooser/FileFilter +javax/swing/tree/DefaultTreeModel +javax/swing/tree/DefaultTreeCellEditor +javax/swing/tree/DefaultTreeCellEditor$1 +javax/swing/tree/DefaultTreeCellEditor$DefaultTextField +javax/swing/DefaultCellEditor$1 +javax/swing/DefaultCellEditor$EditorDelegate +javax/swing/tree/DefaultTreeCellEditor$EditorContainer +javax/swing/JTree$TreeSelectionRedirector +javax/swing/event/TreeModelEvent +javax/swing/plaf/metal/MetalSplitPaneUI +javax/swing/plaf/basic/BasicSplitPaneUI +javax/swing/plaf/SplitPaneUI +javax/swing/plaf/basic/BasicSplitPaneDivider +javax/swing/plaf/basic/BasicBorders$SplitPaneBorder +javax/swing/plaf/metal/MetalSplitPaneDivider +javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout +javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler +javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder +javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager +javax/swing/plaf/basic/BasicSplitPaneUI$1 +javax/swing/plaf/basic/BasicSplitPaneUI$Handler +javax/swing/plaf/metal/MetalSplitPaneDivider$1 +javax/swing/plaf/basic/BasicSplitPaneDivider$OneTouchActionHandler +javax/swing/plaf/metal/MetalSplitPaneDivider$2 +javax/swing/border/TitledBorder +javax/swing/plaf/basic/BasicTextAreaUI +java/util/Collections$UnmodifiableCollection$1 +java/io/InterruptedIOException +java/net/NoRouteToHostException +java/net/BindException +javax/swing/tree/PathPlaceHolder +javax/swing/event/TreeSelectionEvent +javax/swing/JList$3 +javax/swing/JList$ListSelectionHandler +javax/swing/JSlider +javax/swing/JSlider$ModelListener +javax/swing/plaf/metal/MetalSliderUI +javax/swing/plaf/basic/BasicSliderUI +javax/swing/plaf/SliderUI +javax/swing/plaf/basic/BasicSliderUI$Actions +javax/swing/plaf/metal/MetalIconFactory$HorizontalSliderThumbIcon +javax/swing/plaf/metal/MetalIconFactory$VerticalSliderThumbIcon +javax/swing/plaf/basic/BasicSliderUI$TrackListener +javax/swing/plaf/basic/BasicSliderUI$Handler +javax/swing/plaf/basic/BasicSliderUI$ScrollListener +javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener +javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler +sun/java2d/HeadlessGraphicsEnvironment +java/util/Hashtable$KeySet +java/awt/FontFormatException +sun/java2d/SunGraphicsEnvironment$2 +sun/font/Type1Font$1 +java/nio/channels/FileChannel$MapMode +sun/nio/ch/FileChannelImpl$Unmapper +sun/nio/ch/Util$3 +java/nio/DirectByteBufferR +java/nio/charset/Charset$3 +sun/nio/cs/ext/ExtendedCharsets +sun/nio/cs/AbstractCharsetProvider +sun/nio/cs/ext/SJIS +sun/nio/cs/ext/SJIS$Decoder +sun/nio/cs/ext/DelegatableDecoder +sun/nio/cs/ext/JIS_X_0208_Decoder +sun/nio/cs/ext/DoubleByteDecoder +sun/nio/cs/ext/JIS_X_0201$Decoder +sun/nio/cs/SingleByteDecoder +java/lang/CharacterData00 +javax/swing/DefaultListModel +javax/swing/event/ListDataEvent +javax/sound/sampled/DataLine +javax/sound/sampled/Line +javax/sound/sampled/Line$Info +javax/sound/sampled/DataLine$Info +javax/sound/sampled/Control$Type +javax/sound/sampled/FloatControl$Type +javax/sound/sampled/LineUnavailableException +javax/sound/sampled/UnsupportedAudioFileException +javax/swing/JRadioButtonMenuItem +javax/swing/JMenuItem$AccessibleJMenuItem +javax/swing/AbstractButton$AccessibleAbstractButton +javax/accessibility/AccessibleAction +javax/accessibility/AccessibleValue +javax/accessibility/AccessibleText +javax/accessibility/AccessibleExtendedComponent +javax/accessibility/AccessibleComponent +javax/swing/JComponent$AccessibleJComponent +java/awt/Container$AccessibleAWTContainer +java/awt/Component$AccessibleAWTComponent +javax/accessibility/AccessibleRelationSet +javax/accessibility/AccessibleState +javax/accessibility/AccessibleBundle +javax/swing/plaf/basic/BasicCheckBoxMenuItemUI +javax/swing/plaf/metal/MetalIconFactory$CheckBoxMenuItemIcon +javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem +javax/swing/plaf/basic/BasicRadioButtonMenuItemUI +javax/swing/plaf/metal/MetalIconFactory$RadioButtonMenuItemIcon +sun/awt/image/ImageDecoder$1 +javax/swing/JTabbedPane$Page +java/net/DatagramSocket +java/net/MulticastSocket +java/net/DatagramPacket +sun/net/InetAddressCachePolicy +sun/net/InetAddressCachePolicy$1 +sun/net/InetAddressCachePolicy$2 +java/net/InetAddress$CacheEntry +java/net/PlainDatagramSocketImpl +java/net/DatagramSocketImpl +java/net/NetworkInterface +java/net/InterfaceAddress +java/text/Collator +java/text/spi/CollatorProvider +sun/text/resources/CollationData +sun/text/resources/CollationData_en +sun/util/EmptyListResourceBundle +java/text/RuleBasedCollator +java/text/CollationRules +java/text/RBCollationTables +java/text/RBTableBuilder +java/text/RBCollationTables$BuildAPI +sun/text/IntHashtable +sun/text/UCompactIntArray +sun/text/normalizer/NormalizerImpl +sun/text/normalizer/ICUData +sun/text/normalizer/NormalizerDataReader +sun/text/normalizer/ICUBinary$Authenticate +sun/text/normalizer/ICUBinary +sun/text/normalizer/NormalizerImpl$FCDTrieImpl +sun/text/normalizer/Trie$DataManipulate +sun/text/normalizer/NormalizerImpl$NormTrieImpl +sun/text/normalizer/NormalizerImpl$AuxTrieImpl +sun/text/normalizer/IntTrie +sun/text/normalizer/Trie +sun/text/normalizer/CharTrie +sun/text/normalizer/CharTrie$FriendAgent +sun/text/normalizer/UnicodeSet +sun/text/normalizer/UnicodeMatcher +sun/text/normalizer/NormalizerImpl$DecomposeArgs +java/text/MergeCollation +java/text/PatternEntry$Parser +java/text/PatternEntry +java/text/EntryPair +sun/text/ComposedCharIter +sun/text/normalizer/UTF16 +sun/net/www/protocol/http/Handler +java/io/ObjectInputStream$BlockDataInputStream +java/io/ObjectInputStream$PeekInputStream +java/io/ObjectInputStream$HandleTable +java/io/ObjectInputStream$ValidationList +java/io/Bits +java/io/ObjectStreamClass$Caches +java/io/ObjectStreamClass$WeakClassKey +java/io/ObjectStreamClass$EntryFuture +java/io/ObjectStreamClass$2 +sun/reflect/SerializationConstructorAccessorImpl +java/io/ObjectStreamClass$FieldReflectorKey +java/io/ObjectStreamClass$FieldReflector +java/io/ObjectStreamClass$1 +java/io/DataOutputStream +java/io/ObjectStreamClass$MemberSignature +java/io/ObjectStreamClass$3 +java/io/ObjectStreamClass$4 +java/io/ObjectStreamClass$5 +java/security/MessageDigest +java/security/MessageDigestSpi +sun/security/jca/GetInstance +sun/security/jca/Providers +sun/security/jca/ProviderList +sun/security/jca/ProviderConfig +sun/security/jca/ProviderList$3 +sun/security/jca/ProviderList$1 +sun/security/jca/ProviderList$2 +sun/security/jca/ProviderConfig$1 +sun/security/jca/ProviderConfig$3 +java/security/Provider$Service +java/security/Provider$UString +sun/security/provider/SHA +sun/security/provider/DigestBase +sun/security/jca/GetInstance$Instance +java/security/MessageDigest$Delegate +sun/security/provider/ByteArrayAccess +java/io/ObjectStreamClass$ClassDataSlot +java/io/ObjectInputStream$CallbackContext +sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl +java/security/SignatureException +java/security/InvalidKeyException +java/security/KeyException +java/security/Signature +java/security/SignatureSpi +java/io/ObjectOutputStream$BlockDataOutputStream +sun/security/provider/DSAPublicKey +java/security/interfaces/DSAPublicKey +java/security/interfaces/DSAKey +java/security/PublicKey +java/security/Key +sun/security/x509/X509Key +java/io/ObjectOutputStream$HandleTable +java/io/ObjectOutputStream$ReplaceTable +sun/security/x509/AlgorithmId +sun/security/util/DerEncoder +sun/security/util/BitArray +sun/security/util/DerOutputStream +sun/security/util/DerValue +java/math/BigInteger +java/security/interfaces/DSAParams +sun/security/util/DerInputStream +sun/security/util/DerInputBuffer +sun/security/util/ObjectIdentifier +java/security/AlgorithmParameters +java/security/AlgorithmParametersSpi +sun/security/provider/DSAParameters +sun/security/util/ByteArrayLexOrder +sun/security/util/ByteArrayTagOrder +sun/security/util/DerIndefLenConverter +java/io/InvalidClassException +java/io/ObjectStreamException +java/io/ObjectInputStream$GetFieldImpl +java/io/ObjectInputStream$GetField +sun/security/jca/ServiceId +sun/security/jca/ProviderList$ServiceList +sun/security/jca/ProviderList$ServiceList$1 +java/security/Signature$Delegate +java/security/interfaces/DSAPrivateKey +java/security/PrivateKey +sun/security/provider/DSA$SHA1withDSA +sun/security/provider/DSA +java/security/spec/DSAParameterSpec +java/security/spec/AlgorithmParameterSpec +java/math/MutableBigInteger +java/math/SignedMutableBigInteger +java/awt/EventQueue$1AWTInvocationLock +javax/swing/SystemEventQueueUtilities$RunnableCanvas +javax/swing/SystemEventQueueUtilities$RunnableCanvasGraphics +java/awt/Component$FlipBufferStrategy +java/awt/SentEvent +sun/awt/X11/XDestroyWindowEvent +sun/awt/X11/XDropTargetRegistry +sun/awt/X11/XEmbeddedFramePeer +sun/awt/X11/XDragAndDropProtocols +sun/awt/X11/XDropTargetContextPeer +sun/awt/dnd/SunDropTargetContextPeer +java/awt/dnd/peer/DropTargetContextPeer +sun/awt/X11/XDropTargetContextPeer$XDropTargetProtocolListenerImpl +sun/awt/X11/XDropTargetProtocolListener +sun/awt/X11/XDnDDragSourceProtocol +sun/awt/X11/XDragSourceProtocol +sun/awt/X11/MotifDnDDragSourceProtocol +sun/awt/X11/XDnDDropTargetProtocol +sun/awt/X11/XDropTargetProtocol +sun/awt/X11/MotifDnDDropTargetProtocol +sun/awt/X11/XDnDConstants +sun/awt/X11/MotifDnDConstants +javax/swing/JTable$2 +javax/swing/JTable$Resizable3 +javax/swing/JTable$Resizable2 +javax/swing/JTable$5 +javax/swing/event/AncestorEvent +sun/font/FontDesignMetrics$MetricsKey +java/awt/geom/Line2D$Float +java/awt/geom/Line2D +com/sun/java/swing/plaf/gtk/GTKLookAndFeel +javax/swing/plaf/synth/SynthLookAndFeel +javax/swing/plaf/synth/DefaultSynthStyleFactory +javax/swing/plaf/synth/SynthStyleFactory +sun/swing/BakedArrayList +javax/swing/plaf/synth/SynthLookAndFeel$Handler +javax/swing/plaf/synth/SynthDefaultLookup +com/sun/java/swing/plaf/gtk/GTKEngine +com/sun/java/swing/plaf/gtk/GTKDefaultEngine +com/sun/java/swing/plaf/gtk/GTKEngine$Settings +com/sun/java/swing/plaf/gtk/GTKStyleFactory +com/sun/java/swing/plaf/gtk/PangoFonts +sun/font/FontManager$FontConfigInfo +com/sun/java/swing/plaf/gtk/GTKLookAndFeel$WeakPCL +javax/swing/plaf/synth/Region +javax/swing/plaf/synth/SynthLookAndFeel$AATextListener +com/sun/java/swing/plaf/gtk/GTKNativeEngine +com/sun/java/swing/plaf/gtk/GTKNativeEngine$WidgetType +com/sun/java/swing/plaf/gtk/GTKRegion +com/sun/java/swing/plaf/gtk/GTKDefaultStyle +com/sun/java/swing/plaf/gtk/GTKStyle +com/sun/java/swing/plaf/gtk/GTKConstants +javax/swing/plaf/synth/SynthStyle +javax/swing/plaf/synth/SynthGraphicsUtils +com/sun/java/swing/plaf/gtk/GTKGraphicsUtils +com/sun/java/swing/plaf/gtk/GTKStyle$GTKStockIcon +sun/swing/plaf/synth/SynthIcon +com/sun/java/swing/plaf/gtk/GTKColorType +javax/swing/plaf/synth/ColorType +com/sun/java/swing/plaf/gtk/resources/gtk +com/sun/swing/internal/plaf/synth/resources/synth +com/sun/java/swing/plaf/gtk/GTKStyle$GTKLazyValue +com/sun/java/swing/plaf/gtk/GTKLookAndFeel$1FontLazyValue +com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2 +com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3 +javax/swing/plaf/synth/SynthPanelUI +javax/swing/plaf/synth/SynthConstants +javax/swing/plaf/synth/SynthContext +javax/swing/plaf/synth/SynthBorder +javax/swing/plaf/synth/SynthRootPaneUI +javax/swing/plaf/synth/SynthLabelUI +javax/swing/plaf/synth/SynthButtonUI +javax/swing/plaf/synth/SynthToggleButtonUI +javax/swing/plaf/basic/BasicBorders$FieldBorder +javax/swing/plaf/synth/SynthMenuBarUI +javax/swing/plaf/synth/DefaultMenuLayout +javax/swing/plaf/synth/SynthMenuUI +javax/swing/plaf/synth/SynthUI +com/sun/java/swing/plaf/gtk/GTKIconFactory +com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon +com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon +com/sun/java/swing/plaf/gtk/GTKConstants$ArrowType +javax/swing/plaf/basic/BasicIconFactory +javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon +javax/swing/plaf/synth/SynthMenuItemUI +javax/swing/plaf/synth/SynthPopupMenuUI +javax/swing/plaf/synth/SynthSeparatorUI +javax/swing/plaf/synth/SynthScrollBarUI +javax/swing/plaf/synth/SynthArrowButton +javax/swing/plaf/synth/SynthArrowButton$SynthArrowButtonUI +javax/swing/plaf/synth/SynthComboBoxUI +javax/swing/plaf/synth/SynthComboPopup +javax/swing/plaf/synth/SynthListUI +javax/swing/plaf/synth/SynthListUI$SynthListCellRenderer +javax/swing/plaf/synth/SynthViewportUI +javax/swing/plaf/synth/SynthScrollPaneUI +javax/swing/plaf/synth/SynthScrollPaneUI$ViewportBorder +javax/swing/plaf/synth/SynthComboBoxUI$SynthComboBoxRenderer +javax/swing/plaf/synth/SynthComboBoxUI$SynthComboBoxEditor +javax/swing/plaf/synth/SynthTextFieldUI +javax/swing/plaf/synth/SynthToolBarUI +javax/swing/plaf/synth/SynthToolBarUI$SynthToolBarLayoutManager +com/sun/java/swing/plaf/gtk/GTKIconFactory$ToolBarHandleIcon +com/sun/java/swing/plaf/gtk/GTKConstants$Orientation +sun/awt/X11/XTranslateCoordinates +com/sun/java/swing/plaf/gtk/GTKPainter +javax/swing/plaf/synth/SynthPainter +javax/swing/plaf/synth/SynthPainter$1 +com/sun/java/swing/plaf/gtk/GTKConstants$PositionType +com/sun/java/swing/plaf/gtk/GTKConstants$ShadowType +java/io/ObjectInputStream$HandleTable$HandleList +sun/java2d/pipe/ShapeSpanIterator +sun/java2d/pipe/SpanIterator +sun/dc/path/PathConsumer +sun/dc/pr/PathStroker +sun/dc/pr/PathDasher +java/awt/geom/LineIterator +java/awt/geom/PathIterator +sun/applet/Main +sun/applet/AppletMessageHandler +sun/applet/resources/MsgAppletViewer +sun/applet/AppletSecurity +sun/awt/AWTSecurityManager +java/lang/SecurityManager +java/security/DomainCombiner +sun/applet/AppletSecurity$1 +java/lang/SecurityManager$1 +java/security/SecurityPermission +java/util/PropertyPermission +sun/applet/AppletViewer +java/applet/AppletContext +java/awt/print/Printable +sun/security/util/SecurityConstants +java/awt/AWTPermission +java/net/NetPermission +java/net/SocketPermission +javax/security/auth/AuthPermission +java/lang/Thread$1 +java/util/logging/LogManager$5 +java/util/logging/LogManager$6 +sun/applet/StdAppletViewerFactory +sun/applet/AppletViewerFactory +sun/applet/AppletViewer$UserActionListener +sun/applet/AppletViewerPanel +sun/applet/AppletPanel +java/applet/AppletStub +sun/misc/MessageUtils +sun/applet/AppletPanel$10 +java/security/Policy$1 +sun/security/provider/PolicyFile$1 +sun/security/provider/PolicyInfo +sun/security/provider/PolicyFile$3 +sun/security/util/PropertyExpander +sun/security/provider/PolicyParser +sun/security/util/PolicyUtil +sun/security/provider/PolicyParser$GrantEntry +sun/security/provider/PolicyParser$PermissionEntry +sun/security/provider/PolicyFile$PolicyEntry +sun/security/provider/PolicyFile$6 +sun/security/provider/PolicyFile$7 +sun/security/provider/SelfPermission +java/net/SocketPermissionCollection +java/util/PropertyPermissionCollection +sun/applet/AppletPanel$9 +sun/applet/AppletClassLoader +sun/applet/AppletClassLoader$4 +sun/applet/AppletThreadGroup +sun/applet/AppContextCreator +sun/applet/AppletPanel$1 +sun/awt/X11/XMenuBarPeer +java/awt/peer/MenuBarPeer +java/awt/peer/MenuComponentPeer +sun/awt/X11/XBaseMenuWindow +sun/awt/X11/XMenuPeer +java/awt/peer/MenuPeer +java/awt/peer/MenuItemPeer +sun/awt/X11/XMenuItemPeer +java/awt/MenuShortcut +sun/awt/X11/XMenuWindow +sun/awt/X11/XMenuBarPeer$1 +sun/awt/X11/XMenuItemPeer$TextMetrics +sun/awt/AppContext$3 +sun/awt/MostRecentThreadAppContext +sun/awt/X11/XMenuBarPeer$MappingData +sun/awt/X11/XBaseMenuWindow$MappingData +sun/applet/AppletViewer$1 +sun/applet/AppletViewer$1AppletEventListener +sun/applet/AppletListener +sun/applet/AppletEventMulticaster +sun/misc/Queue +sun/misc/QueueElement +sun/applet/AppletEvent +sun/applet/AppletClassLoader$1 +sun/awt/X11/XBaseMenuWindow$3 +java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent +sun/awt/CausedFocusEvent +sun/awt/X11/XWindow$1 +java/net/URLClassLoader$4 +sun/applet/AppletClassLoader$2 +javax/swing/JApplet +java/lang/ClassLoader$1 +sun/security/provider/PolicyFile$5 +java/security/PermissionsEnumerator +java/util/Collections$1 +sun/applet/AppletPanel$11 +sun/applet/AppletPanel$8 +sun/applet/AppletPanel$2 +sun/applet/AppletPanel$3 +sun/applet/AppletPanel$6 +javax/swing/BufferStrategyPaintManager$1 +# f3ac8b467e7f8c49 diff --git a/jdk/make/data/tzdata/VERSION b/jdk/make/data/tzdata/VERSION index 1d7698924aa..2f162e0638a 100644 --- a/jdk/make/data/tzdata/VERSION +++ b/jdk/make/data/tzdata/VERSION @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2013h +tzdata2013i diff --git a/jdk/make/data/tzdata/africa b/jdk/make/data/tzdata/africa index 0eed8b1a26a..82d14a4a14d 100644 --- a/jdk/make/data/tzdata/africa +++ b/jdk/make/data/tzdata/africa @@ -500,14 +500,13 @@ Rule Libya 1997 only - Apr 4 0:00 1:00 S Rule Libya 1997 only - Oct 4 0:00 0 - Rule Libya 2013 only - Mar lastFri 1:00 1:00 S Rule Libya 2013 only - Oct lastFri 2:00 0 - - -# The 1996 and 1997 entries are from Shanks & Pottenger; -# the IATA SSIM data contain some obvious errors. # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Tripoli 0:52:44 - LMT 1920 1:00 Libya CE%sT 1959 2:00 - EET 1982 1:00 Libya CE%sT 1990 May 4 +# The 1996 and 1997 entries are from Shanks & Pottenger; +# the IATA SSIM data contain some obvious errors. 2:00 - EET 1996 Sep 30 1:00 Libya CE%sT 1997 Oct 4 2:00 - EET 2012 Nov 10 2:00 diff --git a/jdk/make/data/tzdata/asia b/jdk/make/data/tzdata/asia index fd278e5c8a8..1a8f83d3a64 100644 --- a/jdk/make/data/tzdata/asia +++ b/jdk/make/data/tzdata/asia @@ -1403,12 +1403,22 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u # switch back to standard time this winter, so the will stay on DST # until about the same time next year (at least). # http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950 -# -# From Paul Eggert (2013-09-21): -# It's looking like this change will be permanent; see -# Petra News Agency, Cancelling winter saved Jordan $7 million (2013-02-20) -# . -# So move Jordan to UTC+3 as of the abovementioned date. + +# From Steffen Thorsen (2013-12-11): +# Jordan Times and other sources say that Jordan is going back to +# UTC+2 on 2013-12-19 at midnight: +# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime +# Official, in Arabic: +# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14 +# ... Our background/permalink about it +# http://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html +# ... +# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P +# ... says midnight for the coming one and 1:00 for the ones in the future +# (and they will use DST again next year, using the normal schedule). + +# From Paul Eggert (2013-12-11): +# As Steffen suggested, consider the past 21-month experiment to be DST. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Jordan 1973 only - Jun 6 0:00 1:00 S @@ -1438,11 +1448,13 @@ Rule Jordan 2002 2012 - Mar lastThu 24:00 1:00 S Rule Jordan 2003 only - Oct 24 0:00s 0 - Rule Jordan 2004 only - Oct 15 0:00s 0 - Rule Jordan 2005 only - Sep lastFri 0:00s 0 - -Rule Jordan 2006 2012 - Oct lastFri 0:00s 0 - +Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 - +Rule Jordan 2013 only - Dec 20 0:00 0 - +Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S +Rule Jordan 2014 max - Oct lastFri 0:00s 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Amman 2:23:44 - LMT 1931 - 2:00 Jordan EE%sT 2012 Oct 26 0:00s - 3:00 - AST + 2:00 Jordan EE%sT # Kazakhstan diff --git a/jdk/make/data/tzdata/northamerica b/jdk/make/data/tzdata/northamerica index b8caf6d019b..9e551bb1c46 100644 --- a/jdk/make/data/tzdata/northamerica +++ b/jdk/make/data/tzdata/northamerica @@ -2688,6 +2688,11 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose # to DST--and one more hour on 1999-04-04--when the announcers will have # returned to Baltimore, which switches on that date.) +# From Steffen Thorsen (2013-11-11): +# DST start in Cuba in 2004 ... does not follow the same rules as the +# years before. The correct date should be Sunday 2004-03-28 00:00 ... +# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html + # From Evert van der Veer via Steffen Thorsen (2004-10-28): # Cuba is not going back to standard time this year. # From Paul Eggert (2006-03-22): @@ -2877,7 +2882,8 @@ Rule Cuba 1996 only - Oct 6 0:00s 0 S Rule Cuba 1997 only - Oct 12 0:00s 0 S Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S -Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D diff --git a/jdk/make/gendata/GendataFontConfig.gmk b/jdk/make/gendata/GendataFontConfig.gmk index 4ee52db1676..35b502d1c36 100644 --- a/jdk/make/gendata/GendataFontConfig.gmk +++ b/jdk/make/gendata/GendataFontConfig.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -66,6 +66,13 @@ ifeq ($(OPENJDK_TARGET_OS), macosx) GENDATA_FONT_CONFIG_SRC_PREFIX := macosx. endif +ifeq ($(OPENJDK_TARGET_OS), aix) + GENDATA_FONT_CONFIG_SRC_DIR := \ + $(JDK_TOPDIR)/src/aix/classes/sun/awt/fontconfigs + GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties + GENDATA_FONT_CONFIG_SRC_PREFIX := aix. +endif + ### $(GENDATA_FONT_CONFIG_DST)/%.src: \ diff --git a/jdk/make/gensrc/GensrcCharsetMapping.gmk b/jdk/make/gensrc/GensrcCharsetMapping.gmk index 5624ebfae4b..821f4e03071 100644 --- a/jdk/make/gensrc/GensrcCharsetMapping.gmk +++ b/jdk/make/gensrc/GensrcCharsetMapping.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, 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,80 +25,151 @@ GENSRC_CHARSETMAPPING := -GENSRC_TMP := $(JDK_OUTPUTDIR)/gensrc -GENSRC_DST := $(JDK_OUTPUTDIR)/gensrc/sun/nio/cs - -GENSRC_DATA := $(JDK_TOPDIR)/make/data/charsetmapping -GENSRC_JAVA_SRC := $(JDK_TOPDIR)/make/src/classes/build/tools/charsetmapping - -GENSRC_TEMPLATES := $(GENSRC_DATA)/SingleByte-X.java.template $(GENSRC_DATA)/DoubleByte-X.java.template +CHARSET_DATA_DIR := $(JDK_TOPDIR)/make/data/charsetmapping ### - -$(GENSRC_TMP)/_the.charsetmapping.dir: - $(ECHO) Generating charsetmapping classes - $(MKDIR) -p $(GENSRC_DST)/ext - $(TOUCH) $@ - +### Generate files using the charsetmapping tool ### -GENSRC_SB := $(GENSRC_TMP)/_the.charsetmapping.sbcs +CHARSET_GENSRC_JAVA_DIR := $(JDK_OUTPUTDIR)/gensrc/sun/nio/cs +CHARSET_DONE := $(CHARSET_GENSRC_JAVA_DIR)/_the.charsetmapping +CHARSET_COPYRIGHT_HEADER_BASE := $(JDK_TOPDIR)/make/src/classes/build/tools/charsetmapping +CHARSET_TEMPLATES := \ + $(CHARSET_DATA_DIR)/SingleByte-X.java.template \ + $(CHARSET_DATA_DIR)/DoubleByte-X.java.template -$(GENSRC_SB): $(GENSRC_DATA)/sbcs $(GENSRC_TEMPLATES) $(GENSRC_TMP)/_the.charsetmapping.dir - $(TOOL_CHARSETMAPPING) $(LOG_INFO) $(GENSRC_DATA) $(GENSRC_DST) sbcs - $(TOUCH) $@ +# This target should be referenced using the order-only operator (|) +$(CHARSET_GENSRC_JAVA_DIR)/ext: + $(ECHO) "Generating charset mappings" + $(MKDIR) -p $(CHARSET_GENSRC_JAVA_DIR)/ext -GENSRC_CHARSETMAPPING += $(GENSRC_SB) +$(CHARSET_DONE)-sbcs: $(CHARSET_DATA_DIR)/sbcs \ + $(CHARSET_TEMPLATES) $(BUILD_TOOLS) | $(CHARSET_GENSRC_JAVA_DIR)/ext + $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR) sbcs + $(TOUCH) '$@' + +$(CHARSET_DONE)-extsbcs: $(CHARSET_DATA_DIR)/extsbcs \ + $(CHARSET_DONE)-sbcs $(CHARSET_TEMPLATES) $(BUILD_TOOLS) + $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR)/ext extsbcs + $(TOUCH) '$@' + +$(CHARSET_DONE)-dbcs: $(CHARSET_DATA_DIR)/dbcs \ + $(CHARSET_DONE)-sbcs $(CHARSET_TEMPLATES) $(BUILD_TOOLS) + $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR)/ext dbcs + $(TOUCH) '$@' + +$(CHARSET_DONE)-hkscs: $(CHARSET_COPYRIGHT_HEADER_BASE)/HKSCS.java \ + $(CHARSET_DONE)-sbcs $(BUILD_TOOLS) + $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR)/ext hkscs '$<' + $(TOUCH) '$@' + +$(CHARSET_DONE)-euctw: $(CHARSET_COPYRIGHT_HEADER_BASE)/EUC_TW.java \ + $(CHARSET_DONE)-sbcs $(BUILD_TOOLS) + $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR)/ext euctw '$<' + $(TOUCH) '$@' + +$(CHARSET_GENSRC_JAVA_DIR)/ext/sjis0213.dat: $(CHARSET_DATA_DIR)/sjis0213.map \ + $(CHARSET_DONE)-sbcs $(BUILD_TOOLS) + $(TOOL_CHARSETMAPPING) '$<' '$@' sjis0213 + +GENSRC_CHARSETMAPPING += \ + $(CHARSET_DONE)-sbcs \ + $(CHARSET_DONE)-extsbcs \ + $(CHARSET_DONE)-dbcs \ + $(CHARSET_DONE)-hkscs \ + $(CHARSET_DONE)-euctw \ + $(CHARSET_GENSRC_JAVA_DIR)/ext/sjis0213.dat \ + # ### - -$(GENSRC_DST)/ext/sjis0213.dat: $(GENSRC_DATA)/sjis0213.map $(GENSRC_SB) - $(TOOL_CHARSETMAPPING) $(LOG_INFO) $< $@ sjis0213 - -GENSRC_CHARSETMAPPING += $(GENSRC_DST)/ext/sjis0213.dat - +### Generate the sun/nio/cs/StandardCharsets.java file ### -$(GENSRC_DST)/ext/EUC_TWMapping.java: $(GENSRC_JAVA_SRC)/EUC_TW.java $(GENSRC_SB) - $(TOOL_CHARSETMAPPING) $(LOG_INFO) $(GENSRC_DATA) $(GENSRC_DST)/ext euctw $(GENSRC_JAVA_SRC)/EUC_TW.java +CHARSET_STANDARD_GENSRC_DIR := $(JDK_OUTPUTDIR)/gensrc/standardcharsets +CHARSET_STANDARD_DATA := $(CHARSET_DATA_DIR)/standard-charsets +CHARSET_STANDARD_JAVA := sun/nio/cs/StandardCharsets.java -GENSRC_CHARSETMAPPING += $(GENSRC_DST)/ext/EUC_TWMapping.java +CHARSET_ALIASES_TABLES_AWK := ' \ + BEGIN { n = 1; m = 1; } \ + /^[ \t]*charset / { \ + csn = $$2; cln = $$3; \ + lcsn = tolower(csn); \ + lcsns[n++] = lcsn; \ + csns[lcsn] = csn; \ + classMap[lcsn] = cln; \ + if (n > 2) \ + printf " };\n\n"; \ + printf " static final String[] aliases_%s = new String[] {\n", cln; \ + } \ + /^[ \t]*alias / { \ + acsns[m++] = tolower($$2); \ + aliasMap[tolower($$2)] = lcsn; \ + printf " \"%s\",\n", $$2; \ + } \ + END { \ + printf " };\n\n"; \ + } ' -### +CHARSET_ALIASES_MAP_AWK := ' \ + /^[ \t]*charset / { \ + csn = $$2; \ + lcsn = tolower(csn); \ + } \ + /^[ \t]*alias / { \ + an = tolower($$2); \ + printf "%-20s \"%s\"\n", an, lcsn; \ + } ' -$(GENSRC_DST)/ext/HKSCSMapping.java: $(GENSRC_JAVA_SRC)/HKSCS.java $(GENSRC_SB) - $(TOOL_CHARSETMAPPING) $(LOG_INFO) $(GENSRC_DATA) $(GENSRC_DST)/ext hkscs $(GENSRC_JAVA_SRC)/HKSCS.java +CHARSET_CLASSES_MAP_AWK := ' \ + /^[ \t]*charset / { \ + csn = $$2; cln = $$3; \ + lcsn = tolower(csn); \ + printf "%-20s \"%s\"\n", lcsn, cln; \ + } ' -GENSRC_CHARSETMAPPING += $(GENSRC_DST)/ext/HKSCSMapping.java +# This target should be referenced using the order-only operator (|) +$(CHARSET_STANDARD_GENSRC_DIR): + $(MKDIR) -p '$@' -### +$(CHARSET_STANDARD_GENSRC_DIR)/aliases-tables.java.snippet: $(CHARSET_STANDARD_DATA) \ + | $(CHARSET_STANDARD_GENSRC_DIR) + $(NAWK) < '$<' > '$@' $(CHARSET_ALIASES_TABLES_AWK) -$(GENSRC_TMP)/gensrc_the.charsetmapping.extsbcs: $(GENSRC_DATA)/extsbcs $(GENSRC_TEMPLATES) $(GENSRC_SB) - $(TOOL_CHARSETMAPPING) $(GENSRC_DATA) $(LOG_INFO) $(GENSRC_DST)/ext extsbcs - $(TOUCH) $@ +$(CHARSET_STANDARD_GENSRC_DIR)/aliases-map: $(CHARSET_STANDARD_DATA) \ + | $(CHARSET_STANDARD_GENSRC_DIR) + $(NAWK) < '$<' > '$@' $(CHARSET_ALIASES_MAP_AWK) -GENSRC_CHARSETMAPPING += $(GENSRC_TMP)/gensrc_the.charsetmapping.extsbcs +$(CHARSET_STANDARD_GENSRC_DIR)/classes-map: $(CHARSET_STANDARD_DATA) \ + | $(CHARSET_STANDARD_GENSRC_DIR) + $(NAWK) < '$<' > '$@' $(CHARSET_CLASSES_MAP_AWK) -### +$(CHARSET_STANDARD_GENSRC_DIR)/aliases-map.java.snippet: $(CHARSET_STANDARD_GENSRC_DIR)/aliases-map \ + $(BUILD_TOOLS) | $(CHARSET_STANDARD_GENSRC_DIR) + $(TOOL_HASHER) -i Aliases < '$<' > '$@' -$(GENSRC_TMP)/gensrc_the.charsetmapping.dbcs: $(GENSRC_DATA)/dbcs $(GENSRC_TEMPLATES) $(GENSRC_SB) - $(TOOL_CHARSETMAPPING) $(GENSRC_DATA) $(LOG_INFO) $(GENSRC_DST)/ext dbcs - $(TOUCH) $@ +$(CHARSET_STANDARD_GENSRC_DIR)/classes-map.java.snippet: $(CHARSET_STANDARD_GENSRC_DIR)/classes-map \ + $(BUILD_TOOLS) | $(CHARSET_STANDARD_GENSRC_DIR) + $(TOOL_HASHER) -i Classes < '$<' > '$@' -GENSRC_CHARSETMAPPING += $(GENSRC_TMP)/gensrc_the.charsetmapping.dbcs +$(CHARSET_STANDARD_GENSRC_DIR)/cache-map.java.snippet: $(CHARSET_STANDARD_GENSRC_DIR)/classes-map \ + $(BUILD_TOOLS) | $(CHARSET_STANDARD_GENSRC_DIR) + $(TOOL_HASHER) -i -e Cache -t Charset < '$<' > '$@' -### +$(eval $(call SetupTextFileProcessing, BUILD_CHARSET_STANDARD, \ + SOURCE_FILES := $(JDK_TOPDIR)/src/share/classes/$(CHARSET_STANDARD_JAVA).template, \ + OUTPUT_FILE := $(JDK_OUTPUTDIR)/gensrc/$(CHARSET_STANDARD_JAVA), \ + INCLUDES := \ + _INCLUDE_ALIASES_TABLES_ => $(CHARSET_STANDARD_GENSRC_DIR)/aliases-tables.java.snippet ; \ + _INCLUDE_ALIASES_MAP_ => $(CHARSET_STANDARD_GENSRC_DIR)/aliases-map.java.snippet ; \ + _INCLUDE_CLASSES_MAP_ => $(CHARSET_STANDARD_GENSRC_DIR)/classes-map.java.snippet ; \ + _INCLUDE_CACHE_MAP_ => $(CHARSET_STANDARD_GENSRC_DIR)/cache-map.java.snippet ; , \ +)) -GENSRC_CHARSET_PROVIDER_CMD := $(JDK_TOPDIR)/make/scripts/genCharsetProvider.sh +# Processing of template depends on the snippets being generated first +$(BUILD_CHARSET_STANDARD): \ + $(CHARSET_STANDARD_GENSRC_DIR)/aliases-tables.java.snippet \ + $(CHARSET_STANDARD_GENSRC_DIR)/aliases-map.java.snippet \ + $(CHARSET_STANDARD_GENSRC_DIR)/classes-map.java.snippet \ + $(CHARSET_STANDARD_GENSRC_DIR)/cache-map.java.snippet -$(GENSRC_DST)/StandardCharsets.java: $(JDK_TOPDIR)/src/share/classes/sun/nio/cs/standard-charsets \ - $(GENSRC_CHARSET_PROVIDER_CMD) \ - $(GENSRC_TMP)/_the.charsetmapping.dir - NAWK="$(NAWK)" TEMPDIR="$(GENSRC_TMP)" SH="$(SH)" \ - HASHER="$(TOOL_HASHER)" \ - SCRIPTS="$(JDK_TOPDIR)/make/scripts" \ - $(SH) -e $(GENSRC_CHARSET_PROVIDER_CMD) $(LOG_INFO) $< $(@D) - -GENSRC_CHARSETMAPPING += $(GENSRC_DST)/StandardCharsets.java - -$(GENSRC_CHARSETMAPPING): $(BUILD_TOOLS) +GENSRC_CHARSETMAPPING += $(BUILD_CHARSET_STANDARD) diff --git a/jdk/make/gensrc/GensrcJObjC.gmk b/jdk/make/gensrc/GensrcJObjC.gmk deleted file mode 100644 index 899ec25545f..00000000000 --- a/jdk/make/gensrc/GensrcJObjC.gmk +++ /dev/null @@ -1,112 +0,0 @@ -# -# Copyright (c) 2011, 2012, 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. -# - -GENSRC_JOBJC := - -JOBJC_FRAMEWORKS := Foundation CoreFoundation AppKit -FRAMEWORKS_DIR := /System/Library/Frameworks -GBM := /usr/bin/gen_bridge_metadata - -JOBJC_SRC := $(JDK_TOPDIR)/src/macosx/native/jobjc -JOBJC_TMP := $(JDK_OUTPUTDIR)/gensrc_jobjc -JOBJC_DST := $(JDK_OUTPUTDIR)/gensrc_jobjc/src - -# -# Build generator -# -$(eval $(call SetupJavaCompilation,BUILD_JOBJC_PRIMITIVE_CODER, \ - SETUP := GENERATE_OLDBYTECODE, \ - DISABLE_SJAVAC := true, \ - INCLUDES := core/java \ - com/apple, \ - SRC := $(JOBJC_SRC)/src \ - $(JOBJC_SRC)/src/generator/java, \ - BIN := $(JOBJC_TMP)/bin)) - -GENSRC_JOBJC += $(BUILD_JOBJC_PRIMITIVE_CODER) - -# -# Generate bridge support for select frameworks -# -BRIDGESUPPORT := $(addprefix $(JOBJC_TMP)/bridge/, $(addsuffix Full.bridgesupport, $(JOBJC_FRAMEWORKS))) - -# -# Define macro for rules to create bridge support -# Not sure why, but if the system has this framework bridge support, -# we appear to copy that, otherwise we run GBM which can be very slow. -# -define CreateBridgeSupport # Framework - $(RM) $@ $@.tmp - $(MKDIR) -p $(@D) - if [ -f $(FRAMEWORKS_DIR)/$1.framework/Resources/BridgeSupport/$(@F) ]; then \ - $(CP) $(FRAMEWORKS_DIR)/$1.framework/Resources/BridgeSupport/$(@F) $@.tmp ; \ - else \ - $(GBM) $(LOG_INFO) -F complete --framework $1 -o $@.tmp ; \ - fi - $(MV) $@.tmp $@ -endef - -# -# Currently 3 frameworks, avoid pattern rule due to the names being conflicting -# -$(JOBJC_TMP)/bridge/FoundationFull.bridgesupport: \ - $(wildcard $(FRAMEWORKS_DIR)/Foundation.framework/Headers/*.h) - $(call CreateBridgeSupport,Foundation) -$(JOBJC_TMP)/bridge/CoreFoundationFull.bridgesupport: \ - $(wildcard $(FRAMEWORKS_DIR)/CoreFoundation.framework/Headers/*.h) - $(call CreateBridgeSupport,CoreFoundation) -$(JOBJC_TMP)/bridge/AppKitFull.bridgesupport: \ - $(wildcard $(FRAMEWORKS_DIR)/AppKit.framework/Headers/*.h) - $(call CreateBridgeSupport,AppKit) - -# -# Find Xbootclasspath, for some reason, this involves firing up Java just -# so we can get the boot classpath, so we can remove anything in that -# classpath that ends with "JObjC.jar", and emit the new bootclasspath. -# -$(JOBJC_TMP)/_the.generator_bootclasspath: $(BUILD_JOBJC_PRIMITIVE_CODER) - $(ECHO) Generating jobjc framework bridge - $(RM) $@ - $(JAVA) $(LOG_INFO) -cp $(JOBJC_TMP)/bin com.apple.internal.jobjc.generator.BootClassPathMinus JObjC.jar > $@.tmp - $(MV) $@.tmp $@ - -# -# Run generator -# Now we use bootclasspath to run java again, with the bridge support to -# generate more source. -# -$(JOBJC_TMP)/_the.generator: $(JOBJC_TMP)/_the.generator_bootclasspath $(BRIDGESUPPORT) - $(RM) $@ - $(JAVA) $(LOG_INFO) -d64 -Xbootclasspath:`$(CAT) $(JOBJC_TMP)/_the.generator_bootclasspath` -cp $(JOBJC_TMP)/bin -ea com.apple.internal.jobjc.generator.Generator dst=$(JOBJC_DST) frameworks=$(JOBJC_TMP)/bridge - $(TOUCH) $@ - -# The generator delets all files in the target dir so it has to work in its -# own dir and have the files copied over to gensrc aftewards. -$(JDK_OUTPUTDIR)/gensrc/_the.jobjc.files: $(JOBJC_TMP)/_the.generator - $(MKDIR) -p $(@D) - $(CP) -rp $(JOBJC_DST)/* $(@D) - $(TOUCH) $@ - -GENSRC_JOBJC += $(JDK_OUTPUTDIR)/gensrc/_the.jobjc.files diff --git a/jdk/make/gensrc/GensrcLocaleDataMetaInfo.gmk b/jdk/make/gensrc/GensrcLocaleDataMetaInfo.gmk index 98947a0b92c..bf2e3a34552 100644 --- a/jdk/make/gensrc/GensrcLocaleDataMetaInfo.gmk +++ b/jdk/make/gensrc/GensrcLocaleDataMetaInfo.gmk @@ -53,8 +53,8 @@ endif # The EN locales EN_LOCALES := en% -# ja-JP-JP and th-TH-TH need to be manually added, as they don't have any resource files. -ALL_NON_EN_LOCALES := ja-JP-JP th-TH-TH +# Locales that don't have any resource files should be included here. +ALL_NON_EN_LOCALES := ja-JP-JP nb-NO nn-NO th-TH-TH SED_ARGS := -e 's|$(HASH)warn This file is preprocessed before being compiled|// -- This file was mechanically generated: Do not edit! -- //|g' diff --git a/jdk/make/gensrc/GensrcX11Wrappers.gmk b/jdk/make/gensrc/GensrcX11Wrappers.gmk index 4da4f37b2d9..0afe0664104 100644 --- a/jdk/make/gensrc/GensrcX11Wrappers.gmk +++ b/jdk/make/gensrc/GensrcX11Wrappers.gmk @@ -88,7 +88,7 @@ ifneq ($(COMPILE_TYPE), cross) # use -m32/-m64 only if the compiler supports it ifeq ($(COMPILER_SUPPORTS_TARGET_BITS_FLAG), true) - MEMORY_MODEL_FLAG = "-m$*" + MEMORY_MODEL_FLAG="$(COMPILER_TARGET_BITS_FLAG)$*" endif # Compile the C code into an executable. diff --git a/jdk/make/lib/Awt2dLibraries.gmk b/jdk/make/lib/Awt2dLibraries.gmk index 61d893ebbf2..a1263ba5775 100644 --- a/jdk/make/lib/Awt2dLibraries.gmk +++ b/jdk/make/lib/Awt2dLibraries.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, 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 @@ -231,6 +231,10 @@ else ifneq ($(OPENJDK_TARGET_OS), macosx) $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/x11 endif +ifeq ($(OPENJDK_TARGET_OS), aix) + LIBAWT_DIRS += $(JDK_TOPDIR)/src/aix/porting +endif + LIBAWT_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \ $(X_CFLAGS) \ $(foreach dir, $(LIBAWT_DIRS), -I$(dir)) @@ -305,10 +309,14 @@ LIBAWT_FILES := \ debug_trace.c \ debug_util.c -ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris linux)) +ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris linux aix)) LIBAWT_FILES += awt_LoadLibrary.c initIDs.c img_colors.c endif +ifeq ($(OPENJDK_TARGET_OS), aix) + LIBAWT_FILES += porting_aix.c +endif + ifeq ($(OPENJDK_TARGET_OS), macosx) LIBAWT_FILES += awt_LoadLibrary.c img_colors.c LIBAWT_CFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks @@ -473,6 +481,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT, \ LDFLAGS_solaris := -R/usr/dt/lib$(OPENJDK_TARGET_CPU_ISADIR) -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR), \ LDFLAGS_SUFFIX_linux := -ljvm $(LIBM) $(LIBDL) -ljava, \ LDFLAGS_SUFFIX_solaris := -ljvm $(LIBM) $(LIBDL) -ljava -lc, \ + LDFLAGS_SUFFIX_aix :=-ljvm $(LIBM) $(LIBDL) -ljava -lm,\ LDFLAGS_SUFFIX_macosx := -lmlib_image -ljvm $(LIBM) \ -framework Cocoa \ -framework OpenGL \ @@ -681,6 +690,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBLCMS, \ LDFLAGS_SUFFIX_solaris := -lawt -ljava -ljvm -lc, \ LDFLAGS_SUFFIX_macosx := $(LIBM) -lawt -ljava -ljvm, \ LDFLAGS_SUFFIX_linux := -lm -lawt -ljava -ljvm, \ + LDFLAGS_SUFFIX_aix := -lm -lawt -ljava -ljvm,\ VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \ RC_FLAGS := $(RC_FLAGS) \ -D "JDK_FNAME=lcms.dll" \ @@ -782,9 +792,9 @@ else endif BUILD_LIBFONTMANAGER_CFLAGS_COMMON := \ + $(FONT_HEADERS) \ $(X_CFLAGS) \ -DLE_STANDALONE -DHEADLESS \ - $(FONT_HEADERS) \ -I$(JDK_TOPDIR)/src/share/native/sun/font \ -I$(JDK_TOPDIR)/src/share/native/sun/font/layout \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ @@ -819,6 +829,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER, \ LDFLAGS_SUFFIX := $(BUILD_LIBFONTMANAGER_FONTLIB), \ LDFLAGS_SUFFIX_linux := -lawt $(LIBM) $(LIBCXX) -ljava -ljvm -lc, \ LDFLAGS_SUFFIX_solaris := -lawt -lawt_xawt -lc $(LIBM) $(LIBCXX) -ljava -ljvm, \ + LDFLAGS_SUFFIX_aix := -lawt -lawt_xawt $(LIBM) $(LIBCXX) -ljava -ljvm,\ LDFLAGS_SUFFIX_macosx := -lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup \ -ljava -ljvm, \ LDFLAGS_SUFFIX_windows := $(WIN_JAVA_LIB) advapi32.lib user32.lib gdi32.lib \ @@ -833,7 +844,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER, \ $(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT) -ifeq ($(OPENJDK_TARGET_OS), solaris) +ifneq (, $(findstring $(OPENJDK_TARGET_OS), solaris aix)) $(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT_XAWT) endif @@ -968,6 +979,7 @@ else # OPENJDK_TARGET_OS not windows $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_solaris := -L$(OPENWIN_HOME)/sfw/lib$(OPENJDK_TARGET_CPU_ISADIR) -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR), \ LDFLAGS_SUFFIX_linux := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX), \ + LDFLAGS_SUFFIX_aix := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX),\ LDFLAGS_SUFFIX_solaris := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX) -lXrender, \ LDFLAGS_SUFFIX_macosx := -Xlinker -rpath -Xlinker @loader_path $(JAWT_LIBS) \ -framework Cocoa $(LDFLAGS_JDKLIB_SUFFIX), \ @@ -1168,6 +1180,7 @@ ifeq ($(BUILD_HEADLESS), true) LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_ORIGIN)., \ REORDER := $(LIBAWT_HEADLESS_REORDER), \ LDFLAGS_SUFFIX_linux := -ljvm -lawt -lm $(LIBDL) -ljava, \ + LDFLAGS_SUFFIX_aix := -ljvm -lawt -ljava,\ LDFLAGS_SUFFIX_solaris := $(LIBDL) -ljvm -lawt -lm -ljava $(LIBCXX) -lc, \ OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libawt_headless, \ DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) diff --git a/jdk/make/lib/CoreLibraries.gmk b/jdk/make/lib/CoreLibraries.gmk index f5731bbed46..3be43c8689e 100644 --- a/jdk/make/lib/CoreLibraries.gmk +++ b/jdk/make/lib/CoreLibraries.gmk @@ -43,6 +43,7 @@ ifneq ($(OPENJDK_TARGET_OS), macosx) CFLAGS := $(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include, \ CFLAGS_windows_debug := -DLOGGING, \ + CFLAGS_aix := -qfloat=nomaf, \ ARFLAGS := $(ARFLAGS), \ OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libfdlibm, \ DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) @@ -198,6 +199,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJAVA, \ LDFLAGS_SUFFIX_posix := -ljvm -lverify, \ LDFLAGS_SUFFIX_solaris := -lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc, \ LDFLAGS_SUFFIX_linux := $(LIBDL) $(BUILD_LIBFDLIBM), \ + LDFLAGS_SUFFIX_aix := $(LIBDL) $(BUILD_LIBFDLIBM) -lm,\ LDFLAGS_SUFFIX_macosx := -L$(JDK_OUTPUTDIR)/objs/ -lfdlibm \ -framework CoreFoundation \ -framework Foundation \ @@ -266,6 +268,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBZIP, \ $(WIN_JAVA_LIB), \ LDFLAGS_SUFFIX_linux := -ljvm -ljava $(LIBZ), \ LDFLAGS_SUFFIX_solaris := -ljvm -ljava $(LIBZ) -lc, \ + LDFLAGS_SUFFIX_aix := -ljvm -ljava $(LIBZ),\ LDFLAGS_SUFFIX_macosx := $(LIBZ) -ljava -ljvm, \ VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \ RC_FLAGS := $(RC_FLAGS) \ @@ -404,6 +407,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJLI, \ LDFLAGS_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \ LDFLAGS_SUFFIX_solaris := $(LIBZ) $(LIBDL) -lc, \ LDFLAGS_SUFFIX_linux := $(LIBZ) $(LIBDL) -lc -lpthread, \ + LDFLAGS_SUFFIX_aix := $(LIBZ) $(LIBDL),\ LDFLAGS_SUFFIX_macosx := $(LIBZ), \ LDFLAGS_SUFFIX_windows := \ -export:JLI_Launch \ @@ -469,6 +473,22 @@ else ifeq ($(OPENJDK_TARGET_OS), macosx) $(call install-file) BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a + +else ifeq ($(OPENJDK_TARGET_OS), aix) + # AIX also requires a static libjli because the compiler doesn't support '-rpath' + $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ + STATIC_LIBRARY:=jli_static,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS),\ + ARFLAGS:=$(ARFLAGS),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static)) + + BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a + endif ########################################################################################## diff --git a/jdk/make/lib/NetworkingLibraries.gmk b/jdk/make/lib/NetworkingLibraries.gmk index 490845eec33..347c3237630 100644 --- a/jdk/make/lib/NetworkingLibraries.gmk +++ b/jdk/make/lib/NetworkingLibraries.gmk @@ -46,6 +46,10 @@ ifneq ($(OPENJDK_TARGET_OS), macosx) LIBNET_EXCLUDE_FILES += bsd_close.c endif +ifeq ($(OPENJDK_TARGET_OS), aix) + LIBNET_SRC_DIRS += $(JDK_TOPDIR)/src/aix/native/java/net/ +endif + ifeq ($(OPENJDK_TARGET_OS), windows) LIBNET_EXCLUDE_FILES += PlainSocketImpl.c PlainDatagramSocketImpl.c SdpSupport.c else @@ -69,6 +73,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBNET, \ LDFLAGS_SUFFIX_macosx := -ljvm -ljava, \ LDFLAGS_SUFFIX_solaris := -ljvm -ljava -lnsl -lsocket $(LIBDL) -lc, \ LDFLAGS_SUFFIX_linux := $(LIBDL) -ljvm -lpthread -ljava, \ + LDFLAGS_SUFFIX_aix := $(LIBDL) -ljvm -ljava,\ LDFLAGS_SUFFIX_windows := ws2_32.lib jvm.lib secur32.lib iphlpapi.lib \ delayimp.lib $(WIN_JAVA_LIB) advapi32.lib \ -DELAYLOAD:secur32.dll -DELAYLOAD:iphlpapi.dll, \ diff --git a/jdk/make/lib/NioLibraries.gmk b/jdk/make/lib/NioLibraries.gmk index 05ff4ced581..5c648c2dbe6 100644 --- a/jdk/make/lib/NioLibraries.gmk +++ b/jdk/make/lib/NioLibraries.gmk @@ -112,6 +112,24 @@ ifeq ($(OPENJDK_TARGET_OS), solaris) UnixNativeDispatcher.c endif +ifeq ($(OPENJDK_TARGET_OS), aix) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/make/mapfiles/libnio/mapfile-$(OPENJDK_TARGET_OS) + BUILD_LIBNIO_SRC += \ + $(JDK_TOPDIR)/src/aix/native/sun/nio/ch \ + $(JDK_TOPDIR)/src/aix/native/sun/nio/fs + BUILD_LIBNIO_FILES += \ + AixPollPort.c \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + UnixCopyFile.c \ + AixNativeDispatcher.c \ + UnixNativeDispatcher.c +endif + $(eval $(call SetupNativeCompilation,BUILD_LIBNIO, \ LIBRARY := nio, \ OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \ @@ -125,6 +143,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBNIO, \ LDFLAGS := $(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_SUFFIX_linux := -ljava -lnet -lpthread $(LIBDL), \ + LDFLAGS_SUFFIX_aix := -ljava -lnet $(LIBDL),\ LDFLAGS_SUFFIX_solaris := -ljvm -lsocket -lposix4 $(LIBDL) \ -lsendfile -ljava -lnet -lc, \ LDFLAGS_SUFFIX_windows := jvm.lib ws2_32.lib $(WIN_JAVA_LIB) \ @@ -148,7 +167,7 @@ $(BUILD_LIBNIO): $(BUILD_LIBNET) ifeq ($(OPENJDK_TARGET_OS_API), posix) - ifneq ($(OPENJDK_TARGET_OS), macosx) + ifeq (, $(filter $(OPENJDK_TARGET_OS), macosx aix)) # Suppress unused parameters required by exported JNI functions. SCTP_WERROR := -Werror -Wno-error=unused-parameter diff --git a/jdk/make/lib/ServiceabilityLibraries.gmk b/jdk/make/lib/ServiceabilityLibraries.gmk index 9d9520913d8..d95fc7e36b1 100644 --- a/jdk/make/lib/ServiceabilityLibraries.gmk +++ b/jdk/make/lib/ServiceabilityLibraries.gmk @@ -33,11 +33,19 @@ endif ifneq ($(OPENJDK_TARGET_OS), macosx) LIBATTACH_EXCLUDE_FILES += BsdVirtualMachine.c endif +ifneq ($(OPENJDK_TARGET_OS),aix) + LIBATTACH_EXCLUDE_FILES += AixVirtualMachine.c +endif + +LIBATTACH_SRC_FILES := $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/tools/attach +ifeq ($(OPENJDK_TARGET_OS),aix) + LIBATTACH_SRC_FILES += $(JDK_TOPDIR)/src/aix/native/sun/tools/attach +endif $(eval $(call SetupNativeCompilation,BUILD_LIBATTACH, \ LIBRARY := attach, \ OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \ - SRC := $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/tools/attach, \ + SRC := $(LIBATTACH_SRC_FILES), \ EXCLUDE_FILES := $(LIBATTACH_EXCLUDE_FILES), \ LANG := C, \ OPTIMIZATION := LOW, \ @@ -255,6 +263,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT, \ LDFLAGS_SUFFIX_macosx := -liconv $(LIBZ), \ LDFLAGS_SUFFIX_solaris := $(LIBZ) -L $(INSTALL_LIBRARIES_HERE)/jli -ljli $(LIBDL) -lc, \ LDFLAGS_SUFFIX_linux := $(LIBZ) -L $(INSTALL_LIBRARIES_HERE)/jli -ljli $(LIBDL), \ + LDFLAGS_SUFFIX_aix := $(LIBZ) -L$(JDK_OUTPUTDIR)/objs -ljli_static $(LIBDL),\ VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \ RC_FLAGS := $(RC_FLAGS) \ -D "JDK_FNAME=instrument.dll" \ @@ -263,7 +272,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT, \ OBJECT_DIR := $(LIBINSTRUMENT_DIR), \ DEBUG_SYMBOLS := true)) -ifneq (, $(findstring $(OPENJDK_TARGET_OS), macosx windows)) +ifneq (, $(findstring $(OPENJDK_TARGET_OS), macosx windows aix)) $(BUILD_LIBINSTRUMENT): $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) else $(BUILD_LIBINSTRUMENT): $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) @@ -314,6 +323,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT, \ 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 := $(JDK_TOPDIR)/src/windows/resource/version.rc, \ RC_FLAGS := $(RC_FLAGS) \ -D "JDK_FNAME=management.dll" \ @@ -334,6 +344,11 @@ BUILD_LIBHPROF_CFLAGS := -I$(JDK_TOPDIR)/src/share/demo/jvmti/hprof \ -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \ -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo +ifeq ($(OPENJDK_TARGET_OS), aix) + BUILD_LIBHPROF_SRC += $(JDK_TOPDIR)/src/aix/porting + BUILD_LIBHPROF_CFLAGS += -I$(JDK_TOPDIR)/src/aix/porting +endif + BUILD_LIBHPROF_LDFLAGS := LIBHPROF_OPTIMIZATION := HIGHEST diff --git a/jdk/make/lib/SoundLibraries.gmk b/jdk/make/lib/SoundLibraries.gmk index 6227900c56f..14580959ccc 100644 --- a/jdk/make/lib/SoundLibraries.gmk +++ b/jdk/make/lib/SoundLibraries.gmk @@ -71,6 +71,10 @@ ifeq ($(OPENJDK_TARGET_OS), linux) LIBJSOUND_CFLAGS += -DX_PLATFORM=X_LINUX endif # OPENJDK_TARGET_OS linux +ifeq ($(OPENJDK_TARGET_OS), aix) + LIBJSOUND_CFLAGS += -DX_PLATFORM=X_AIX +endif # OPENJDK_TARGET_OS aix + ifeq ($(OPENJDK_TARGET_OS), macosx) LIBJSOUND_LANG := C++ LIBJSOUND_CFLAGS += -DX_PLATFORM=X_MACOSX \ @@ -131,6 +135,10 @@ else ifeq ($(OPENJDK_TARGET_CPU), ppc) LIBJSOUND_CFLAGS += -DX_ARCH=X_PPC endif + + ifeq ($(OPENJDK_TARGET_CPU), ppc64) + LIBJSOUND_CFLAGS += -DX_ARCH=X_PPC64 + endif endif LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"' diff --git a/jdk/make/mapfiles/launchers/mapfile-ppc64 b/jdk/make/mapfiles/launchers/mapfile-ppc64 new file mode 100644 index 00000000000..fb4ceb5cd3a --- /dev/null +++ b/jdk/make/mapfiles/launchers/mapfile-ppc64 @@ -0,0 +1,39 @@ +# +# Copyright (c) 2004, 2012, 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. +# +# +# Specify what global symbols we export. Note that we're not really +# interested in declaring a version, simply scoping the file is sufficient. +# + +SUNWprivate_1.1 { + global: + main; # Provides basic adb symbol offsets + environ; # Public symbols and required by Java run time + _environ; + __environ_lock; + + local: + *; +}; diff --git a/jdk/make/mapfiles/launchers/mapfile-ppc64.anonymous b/jdk/make/mapfiles/launchers/mapfile-ppc64.anonymous new file mode 100644 index 00000000000..4fcde94d1d8 --- /dev/null +++ b/jdk/make/mapfiles/launchers/mapfile-ppc64.anonymous @@ -0,0 +1,40 @@ +# +# Copyright (c) 2004, 2012, 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 anonymous library interface (i.e. without a version tag) for broken SuSE ld because +# the linker on older SuSE distros (e.g. on SLES 10) complains with: +# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable." +# if feeded with a version script which contains named tags. + +{ + global: + main; # Provides basic adb symbol offsets + environ; # Public symbols and required by Java run time + _environ; + __environ_lock; + + local: + *; +}; diff --git a/jdk/make/mapfiles/launchers/mapfile-x86.anonymous b/jdk/make/mapfiles/launchers/mapfile-x86.anonymous new file mode 100644 index 00000000000..49032cd10df --- /dev/null +++ b/jdk/make/mapfiles/launchers/mapfile-x86.anonymous @@ -0,0 +1,49 @@ +# +# Copyright (c) 2004, 2012, 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 anonymous library interface (i.e. without a version tag) for broken SuSE ld because +# the linker on older SuSE distros (e.g. on SLES 10) complains with: +# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable." +# if feeded with a version script which contains named tags. + +{ + global: + main; # Provides basic adb symbol offsets + environ; # Public symbols and required by Java run time + _environ; + __environ_lock; + ___Argv; # The following are private, but as they are + _start; # exported from ctr1/crtn, the clever hacker + _init; # might know about them. However note, that + _fini; # their use is strictly not supported. + _lib_version; +# _mcount; + __fsr; + __fsr_init_value; + __longdouble_used; + + local: + *; +}; diff --git a/jdk/make/mapfiles/launchers/mapfile-x86_64.anonymous b/jdk/make/mapfiles/launchers/mapfile-x86_64.anonymous new file mode 100644 index 00000000000..4fcde94d1d8 --- /dev/null +++ b/jdk/make/mapfiles/launchers/mapfile-x86_64.anonymous @@ -0,0 +1,40 @@ +# +# Copyright (c) 2004, 2012, 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 anonymous library interface (i.e. without a version tag) for broken SuSE ld because +# the linker on older SuSE distros (e.g. on SLES 10) complains with: +# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable." +# if feeded with a version script which contains named tags. + +{ + global: + main; # Provides basic adb symbol offsets + environ; # Public symbols and required by Java run time + _environ; + __environ_lock; + + local: + *; +}; diff --git a/jdk/make/mapfiles/libattach/mapfile-aix b/jdk/make/mapfiles/libattach/mapfile-aix new file mode 100644 index 00000000000..4c02da01fce --- /dev/null +++ b/jdk/make/mapfiles/libattach/mapfile-aix @@ -0,0 +1,39 @@ +# +# Copyright (c) 2005, 2012, 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 public interface. + +SUNWprivate_1.1 { + global: + Java_sun_tools_attach_AixVirtualMachine_socket + Java_sun_tools_attach_AixVirtualMachine_connect + Java_sun_tools_attach_AixVirtualMachine_sendQuitTo + Java_sun_tools_attach_AixVirtualMachine_checkPermissions + Java_sun_tools_attach_AixVirtualMachine_close + Java_sun_tools_attach_AixVirtualMachine_read + Java_sun_tools_attach_AixVirtualMachine_write + local: + *; +}; diff --git a/jdk/make/mapfiles/libmanagement/mapfile-vers b/jdk/make/mapfiles/libmanagement/mapfile-vers index 218dd3e3e71..a4cb163806a 100644 --- a/jdk/make/mapfiles/libmanagement/mapfile-vers +++ b/jdk/make/mapfiles/libmanagement/mapfile-vers @@ -27,17 +27,17 @@ SUNWprivate_1.1 { global: - Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize; - Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize; - Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize; - Java_sun_management_OperatingSystemImpl_getMaxFileDescriptorCount; - Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount; - Java_sun_management_OperatingSystemImpl_getProcessCpuLoad; - Java_sun_management_OperatingSystemImpl_getProcessCpuTime; - Java_sun_management_OperatingSystemImpl_getSystemCpuLoad; - Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize; - Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize; - Java_sun_management_OperatingSystemImpl_initialize; + 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; diff --git a/jdk/make/mapfiles/libnet/mapfile-vers b/jdk/make/mapfiles/libnet/mapfile-vers index cdd98f8cce6..e3e7ce91fcf 100644 --- a/jdk/make/mapfiles/libnet/mapfile-vers +++ b/jdk/make/mapfiles/libnet/mapfile-vers @@ -105,6 +105,7 @@ SUNWprivate_1.1 { NET_MapSocketOption; NET_Wait; ipv6_available; + initInetAddressIDs; local: *; diff --git a/jdk/make/mapfiles/libnio/mapfile-aix b/jdk/make/mapfiles/libnio/mapfile-aix new file mode 100644 index 00000000000..72f54cf93d7 --- /dev/null +++ b/jdk/make/mapfiles/libnio/mapfile-aix @@ -0,0 +1,33 @@ +# +# Copyright (c) 2001, 2012, 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. +# + +# TODO: implement for AIX + +SUNWprivate_1.1 { + global: + + local: + *; +}; diff --git a/jdk/make/mapfiles/libnio/mapfile-linux b/jdk/make/mapfiles/libnio/mapfile-linux index e85bafae76d..8e05a44229f 100644 --- a/jdk/make/mapfiles/libnio/mapfile-linux +++ b/jdk/make/mapfiles/libnio/mapfile-linux @@ -117,6 +117,12 @@ SUNWprivate_1.1 { Java_sun_nio_ch_Net_getInterface6; Java_sun_nio_ch_Net_shutdown; Java_sun_nio_ch_Net_poll; + Java_sun_nio_ch_Net_pollinValue; + Java_sun_nio_ch_Net_polloutValue; + Java_sun_nio_ch_Net_pollerrValue; + Java_sun_nio_ch_Net_pollhupValue; + Java_sun_nio_ch_Net_pollnvalValue; + Java_sun_nio_ch_Net_pollconnValue; Java_sun_nio_ch_Net_isExclusiveBindAvailable; Java_sun_nio_ch_PollArrayWrapper_interrupt; Java_sun_nio_ch_PollArrayWrapper_poll0; diff --git a/jdk/make/mapfiles/libnio/mapfile-macosx b/jdk/make/mapfiles/libnio/mapfile-macosx index e5a92d93f18..906ef517741 100644 --- a/jdk/make/mapfiles/libnio/mapfile-macosx +++ b/jdk/make/mapfiles/libnio/mapfile-macosx @@ -109,6 +109,12 @@ SUNWprivate_1.1 { Java_sun_nio_ch_Net_getInterface6; Java_sun_nio_ch_Net_shutdown; Java_sun_nio_ch_Net_poll; + Java_sun_nio_ch_Net_pollinValue; + Java_sun_nio_ch_Net_polloutValue; + Java_sun_nio_ch_Net_pollerrValue; + Java_sun_nio_ch_Net_pollhupValue; + Java_sun_nio_ch_Net_pollnvalValue; + Java_sun_nio_ch_Net_pollconnValue; Java_sun_nio_ch_Net_isExclusiveBindAvailable; Java_sun_nio_ch_PollArrayWrapper_interrupt; Java_sun_nio_ch_PollArrayWrapper_poll0; diff --git a/jdk/make/mapfiles/libnio/mapfile-solaris b/jdk/make/mapfiles/libnio/mapfile-solaris index 3a610edd9e7..c610ce7dadc 100644 --- a/jdk/make/mapfiles/libnio/mapfile-solaris +++ b/jdk/make/mapfiles/libnio/mapfile-solaris @@ -105,6 +105,12 @@ SUNWprivate_1.1 { Java_sun_nio_ch_Net_getInterface6; Java_sun_nio_ch_Net_shutdown; Java_sun_nio_ch_Net_poll; + Java_sun_nio_ch_Net_pollinValue; + Java_sun_nio_ch_Net_polloutValue; + Java_sun_nio_ch_Net_pollerrValue; + Java_sun_nio_ch_Net_pollhupValue; + Java_sun_nio_ch_Net_pollnvalValue; + Java_sun_nio_ch_Net_pollconnValue; Java_sun_nio_ch_Net_isExclusiveBindAvailable; Java_sun_nio_ch_PollArrayWrapper_interrupt; Java_sun_nio_ch_PollArrayWrapper_poll0; diff --git a/jdk/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous b/jdk/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous new file mode 100644 index 00000000000..7f3a07934bd --- /dev/null +++ b/jdk/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous @@ -0,0 +1,34 @@ +# +# Copyright (c) 2011, 2012, 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 anonymous library interface (i.e. without a version tag) for broken SuSE ld because +# the linker on older SuSE distros (e.g. on SLES 10) complains with: +# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable." +# if feeded with a version script which contains named tags. + +{ + local: + *; +}; diff --git a/jdk/make/scripts/genCharsetProvider.sh b/jdk/make/scripts/genCharsetProvider.sh deleted file mode 100644 index d14527483a4..00000000000 --- a/jdk/make/scripts/genCharsetProvider.sh +++ /dev/null @@ -1,131 +0,0 @@ -#! /bin/sh - -# -# Copyright (c) 2004, 2012, 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. -# - -# Generate a charset provider class - -# Required environment variables -# NAWK awk tool -# TEMPDIR temporary directory -# HASHER Hasher program - -SPEC=$1; shift -DST=$1; shift - -eval `$NAWK <$SPEC ' - /^[ \t]*copyright / { printf "COPYRIGHT_YEARS=\"%s %s\"\n", $2, $3; } - /^[ \t]*package / { printf "PKG=%s\n", $2; } - /^[ \t]*class / { printf "CLASS=%s\n", $2; } -'` - -OUT=$DST/$CLASS.java -echo '-->' $OUT - - -# Header -# - -$SH ${SCRIPTS}/addNotices.sh "$COPYRIGHT_YEARS" > $OUT - -cat <<__END__ >>$OUT - -// -- This file was mechanically generated: Do not edit! -- // - -package $PKG; - -import java.nio.charset.*; - - -public class $CLASS - extends FastCharsetProvider -{ - -__END__ - - -# Alias tables -# -$NAWK <$SPEC >>$OUT ' - BEGIN { n = 1; m = 1; } - - /^[ \t]*charset / { - csn = $2; cln = $3; - lcsn = tolower(csn); - lcsns[n++] = lcsn; - csns[lcsn] = csn; - classMap[lcsn] = cln; - if (n > 2) - printf " };\n\n"; - printf " static final String[] aliases_%s = new String[] {\n", cln; - } - - /^[ \t]*alias / { - acsns[m++] = tolower($2); - aliasMap[tolower($2)] = lcsn; - printf " \"%s\",\n", $2; - } - - END { - printf " };\n\n"; - } -' - - -# Prehashed alias and class maps -# -$NAWK <$SPEC >$TEMPDIR/aliases ' - /^[ \t]*charset / { - csn = $2; - lcsn = tolower(csn); - } - /^[ \t]*alias / { - an = tolower($2); - printf "%-20s \"%s\"\n", an, lcsn; - } -' - -$NAWK <$SPEC >$TEMPDIR/classes ' - /^[ \t]*charset / { - csn = $2; cln = $3; - lcsn = tolower(csn); - printf "%-20s \"%s\"\n", lcsn, cln; - } -' - -${HASHER} -i Aliases <$TEMPDIR/aliases >>$OUT -${HASHER} -i Classes <$TEMPDIR/classes >>$OUT -${HASHER} -i -e Cache -t Charset <$TEMPDIR/classes >>$OUT - - -# Constructor -# -cat <<__END__ >>$OUT - public $CLASS() { - super("$PKG", new Aliases(), new Classes(), new Cache()); - } - -} -__END__ diff --git a/jdk/make/src/classes/build/tools/hasher/Hasher.java b/jdk/make/src/classes/build/tools/hasher/Hasher.java index bf041976ef2..058655e767c 100644 --- a/jdk/make/src/classes/build/tools/hasher/Hasher.java +++ b/jdk/make/src/classes/build/tools/hasher/Hasher.java @@ -43,9 +43,6 @@ import java.util.*; public class Hasher { - // This class cannot, sadly, make use of 1.5 features since it must be - // compiled and run with the bootstrap JDK, which is 1.4.2. - static final PrintStream out = System.out; static final PrintStream err = System.err; @@ -184,11 +181,13 @@ public class Hasher { if (md <= maxDepth) { // Success out.flush(); - if (cln != null) - err.print(cln + ": "); - err.println("Table size " + (1 << nb) + " (" + nb + " bits)" - + ", shift " + shift - + ", max chain depth " + md); + if (verbose) { + if (cln != null) + err.print(cln + ": "); + err.println("Table size " + (1 << nb) + " (" + nb + " bits)" + + ", shift " + shift + + ", max chain depth " + md); + } return this; } } diff --git a/jdk/src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties b/jdk/src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties new file mode 100644 index 00000000000..29e7c7d9510 --- /dev/null +++ b/jdk/src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties @@ -0,0 +1,77 @@ +# +# +# Copyright 2013 SAP AG. 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. +# + +# Minimal version for AIX using the standard Latin Type1 Fonts from the +# package X11.fnt.iso_T1. These fonts are installed by default into +# "/usr/lpp/X11/lib/X11/fonts/Type1" and sym-linked to "/usr/lib/X11/fonts/Type1" + +# Version + +version=1 + +# Component Font Mappings + +dialog.plain.latin-1=-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1 +dialog.bold.latin-1=-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1 +dialog.italic.latin-1=-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1 +dialog.bolditalic.latin-1=-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1 + +dialoginput.plain.latin-1=-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1 +dialoginput.bold.latin-1=-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1 +dialoginput.italic.latin-1=-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1 +dialoginput.bolditalic.latin-1=-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1 + +sansserif.plain.latin-1=-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1 +sansserif.bold.latin-1=-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1 +sansserif.italic.latin-1=-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1 +sansserif.bolditalic.latin-1=-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1 + +serif.plain.latin-1=-*-times new roman-medium-r-normal--*-%d-100-100-p-*-iso10646-1 +serif.bold.latin-1=-*-times new roman-bold-r-normal--*-%d-100-100-p-*-iso10646-1 +serif.italic.latin-1=-*-times new roman-medium-i-normal--*-%d-100-100-p-*-iso10646-1 +serif.bolditalic.latin-1=-*-times new roman-bold-i-normal--*-%d-100-100-p-*-iso10646-1 + +monospaced.plain.latin-1=-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1 +monospaced.bold.latin-1=-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1 +monospaced.italic.latin-1=-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1 +monospaced.bolditalic.latin-1=-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1 + +# Search Sequences + +sequence.allfonts=latin-1 + +filename.-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/cour.pfa +filename.-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/courb.pfa +filename.-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/couri.pfa +filename.-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/courbi.pfa +filename.-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helv.pfa +filename.-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvb.pfa +filename.-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvi.pfa +filename.-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvbi.pfa +filename.-*-times_new_roman-medium-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnr.pfa +filename.-*-times_new_roman-bold-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnrb.pfa +filename.-*-times_new_roman-medium-i-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnri.pfa +filename.-*-times_new_roman-bold-i-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnrbi.pfa diff --git a/jdk/src/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java b/jdk/src/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java new file mode 100644 index 00000000000..4c2c3d317bf --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 SAP AG. 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 sun.nio.ch; + +import java.nio.channels.*; +import java.nio.channels.spi.AsynchronousChannelProvider; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadFactory; +import java.io.IOException; + +public class AixAsynchronousChannelProvider + extends AsynchronousChannelProvider +{ + private static volatile AixPollPort defaultPort; + + private AixPollPort defaultEventPort() throws IOException { + if (defaultPort == null) { + synchronized (AixAsynchronousChannelProvider.class) { + if (defaultPort == null) { + defaultPort = new AixPollPort(this, ThreadPool.getDefault()).start(); + } + } + } + return defaultPort; + } + + public AixAsynchronousChannelProvider() { + } + + @Override + public AsynchronousChannelGroup openAsynchronousChannelGroup(int nThreads, ThreadFactory factory) + throws IOException + { + return new AixPollPort(this, ThreadPool.create(nThreads, factory)).start(); + } + + @Override + public AsynchronousChannelGroup openAsynchronousChannelGroup(ExecutorService executor, int initialSize) + throws IOException + { + return new AixPollPort(this, ThreadPool.wrap(executor, initialSize)).start(); + } + + private Port toPort(AsynchronousChannelGroup group) throws IOException { + if (group == null) { + return defaultEventPort(); + } else { + if (!(group instanceof AixPollPort)) + throw new IllegalChannelGroupException(); + return (Port)group; + } + } + + @Override + public AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(AsynchronousChannelGroup group) + throws IOException + { + return new UnixAsynchronousServerSocketChannelImpl(toPort(group)); + } + + @Override + public AsynchronousSocketChannel openAsynchronousSocketChannel(AsynchronousChannelGroup group) + throws IOException + { + return new UnixAsynchronousSocketChannelImpl(toPort(group)); + } +} diff --git a/jdk/src/aix/classes/sun/nio/ch/AixPollPort.java b/jdk/src/aix/classes/sun/nio/ch/AixPollPort.java new file mode 100644 index 00000000000..2db99a77b3e --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/AixPollPort.java @@ -0,0 +1,536 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 SAP AG. 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 sun.nio.ch; + +import java.nio.channels.spi.AsynchronousChannelProvider; +import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantLock; +import sun.misc.Unsafe; + +/** + * AsynchronousChannelGroup implementation based on the AIX pollset framework. + */ +final class AixPollPort + extends Port +{ + private static final Unsafe unsafe = Unsafe.getUnsafe(); + + static { + IOUtil.load(); + init(); + } + + /** + * struct pollfd { + * int fd; + * short events; + * short revents; + * } + */ + private static final int SIZEOF_POLLFD = eventSize(); + private static final int OFFSETOF_EVENTS = eventsOffset(); + private static final int OFFSETOF_REVENTS = reventsOffset(); + private static final int OFFSETOF_FD = fdOffset(); + + // opcodes + private static final int PS_ADD = 0x0; + private static final int PS_MOD = 0x1; + private static final int PS_DELETE = 0x2; + + // maximum number of events to poll at a time + private static final int MAX_POLL_EVENTS = 512; + + // pollset ID + private final int pollset; + + // true if port is closed + private boolean closed; + + // socket pair used for wakeup + private final int sp[]; + + // socket pair used to indicate pending pollsetCtl calls + // Background info: pollsetCtl blocks when another thread is in a pollsetPoll call. + private final int ctlSp[]; + + // number of wakeups pending + private final AtomicInteger wakeupCount = new AtomicInteger(); + + // address of the poll array passed to pollset_poll + private final long address; + + // encapsulates an event for a channel + static class Event { + final PollableChannel channel; + final int events; + + Event(PollableChannel channel, int events) { + this.channel = channel; + this.events = events; + } + + PollableChannel channel() { return channel; } + int events() { return events; } + } + + // queue of events for cases that a polling thread dequeues more than one + // event + private final ArrayBlockingQueue queue; + private final Event NEED_TO_POLL = new Event(null, 0); + private final Event EXECUTE_TASK_OR_SHUTDOWN = new Event(null, 0); + + // encapsulates a pollset control event for a file descriptor + static class ControlEvent { + final int fd; + final int events; + final boolean removeOnly; + int error = 0; + + ControlEvent(int fd, int events, boolean removeOnly) { + this.fd = fd; + this.events = events; + this.removeOnly = removeOnly; + } + + int fd() { return fd; } + int events() { return events; } + boolean removeOnly() { return removeOnly; } + int error() { return error; } + void setError(int error) { this.error = error; } + } + + // queue of control events that need to be processed + // (this object is also used for synchronization) + private final HashSet controlQueue = new HashSet(); + + // lock used to check whether a poll operation is ongoing + private final ReentrantLock controlLock = new ReentrantLock(); + + AixPollPort(AsynchronousChannelProvider provider, ThreadPool pool) + throws IOException + { + super(provider, pool); + + // open pollset + this.pollset = pollsetCreate(); + + // create socket pair for wakeup mechanism + int[] sv = new int[2]; + try { + socketpair(sv); + // register one end with pollset + pollsetCtl(pollset, PS_ADD, sv[0], Net.POLLIN); + } catch (IOException x) { + pollsetDestroy(pollset); + throw x; + } + this.sp = sv; + + // create socket pair for pollset control mechanism + sv = new int[2]; + try { + socketpair(sv); + // register one end with pollset + pollsetCtl(pollset, PS_ADD, sv[0], Net.POLLIN); + } catch (IOException x) { + pollsetDestroy(pollset); + throw x; + } + this.ctlSp = sv; + + // allocate the poll array + this.address = allocatePollArray(MAX_POLL_EVENTS); + + // create the queue and offer the special event to ensure that the first + // threads polls + this.queue = new ArrayBlockingQueue(MAX_POLL_EVENTS); + this.queue.offer(NEED_TO_POLL); + } + + AixPollPort start() { + startThreads(new EventHandlerTask()); + return this; + } + + /** + * Release all resources + */ + private void implClose() { + synchronized (this) { + if (closed) + return; + closed = true; + } + freePollArray(address); + close0(sp[0]); + close0(sp[1]); + close0(ctlSp[0]); + close0(ctlSp[1]); + pollsetDestroy(pollset); + } + + private void wakeup() { + if (wakeupCount.incrementAndGet() == 1) { + // write byte to socketpair to force wakeup + try { + interrupt(sp[1]); + } catch (IOException x) { + throw new AssertionError(x); + } + } + } + + @Override + void executeOnHandlerTask(Runnable task) { + synchronized (this) { + if (closed) + throw new RejectedExecutionException(); + offerTask(task); + wakeup(); + } + } + + @Override + void shutdownHandlerTasks() { + /* + * If no tasks are running then just release resources; otherwise + * write to the one end of the socketpair to wakeup any polling threads. + */ + int nThreads = threadCount(); + if (nThreads == 0) { + implClose(); + } else { + // send interrupt to each thread + while (nThreads-- > 0) { + wakeup(); + } + } + } + + // invoke by clients to register a file descriptor + @Override + void startPoll(int fd, int events) { + queueControlEvent(new ControlEvent(fd, events, false)); + } + + // Callback method for implementations that need special handling when fd is removed + @Override + protected void preUnregister(int fd) { + queueControlEvent(new ControlEvent(fd, 0, true)); + } + + // Add control event into queue and wait for completion. + // In case the control lock is free, this method also tries to apply the control change directly. + private void queueControlEvent(ControlEvent ev) { + // pollsetCtl blocks when a poll call is ongoing. This is very probable. + // Therefore we let the polling thread do the pollsetCtl call. + synchronized (controlQueue) { + controlQueue.add(ev); + // write byte to socketpair to force wakeup + try { + interrupt(ctlSp[1]); + } catch (IOException x) { + throw new AssertionError(x); + } + do { + // Directly empty queue if no poll call is ongoing. + if (controlLock.tryLock()) { + try { + processControlQueue(); + } finally { + controlLock.unlock(); + } + } else { + try { + // Do not starve in case the polling thread returned before + // we could write to ctlSp[1] but the polling thread did not + // release the control lock until we checked. Therefore, use + // a timed wait for the time being. + controlQueue.wait(100); + } catch (InterruptedException e) { + // ignore exception and try again + } + } + } while (controlQueue.contains(ev)); + } + if (ev.error() != 0) { + throw new AssertionError(); + } + } + + // Process all events currently stored in the control queue. + private void processControlQueue() { + synchronized (controlQueue) { + // On Aix it is only possible to set the event + // bits on the first call of pollsetCtl. Later + // calls only add bits, but cannot remove them. + // Therefore, we always remove the file + // descriptor ignoring the error and then add it. + Iterator iter = controlQueue.iterator(); + while (iter.hasNext()) { + ControlEvent ev = iter.next(); + pollsetCtl(pollset, PS_DELETE, ev.fd(), 0); + if (!ev.removeOnly()) { + ev.setError(pollsetCtl(pollset, PS_MOD, ev.fd(), ev.events())); + } + iter.remove(); + } + controlQueue.notifyAll(); + } + } + + /* + * Task to process events from pollset and dispatch to the channel's + * onEvent handler. + * + * Events are retreived from pollset in batch and offered to a BlockingQueue + * where they are consumed by handler threads. A special "NEED_TO_POLL" + * event is used to signal one consumer to re-poll when all events have + * been consumed. + */ + private class EventHandlerTask implements Runnable { + private Event poll() throws IOException { + try { + for (;;) { + int n; + controlLock.lock(); + try { + n = pollsetPoll(pollset, address, MAX_POLL_EVENTS); + } finally { + controlLock.unlock(); + } + /* + * 'n' events have been read. Here we map them to their + * corresponding channel in batch and queue n-1 so that + * they can be handled by other handler threads. The last + * event is handled by this thread (and so is not queued). + */ + fdToChannelLock.readLock().lock(); + try { + while (n-- > 0) { + long eventAddress = getEvent(address, n); + int fd = getDescriptor(eventAddress); + + // To emulate one shot semantic we need to remove + // the file descriptor here. + pollsetCtl(pollset, PS_DELETE, fd, 0); + + // wakeup + if (fd == sp[0]) { + if (wakeupCount.decrementAndGet() == 0) { + // no more wakeups so drain pipe + drain1(sp[0]); + } + + // This is the only file descriptor without + // one shot semantic => register it again. + pollsetCtl(pollset, PS_ADD, sp[0], Net.POLLIN); + + // queue special event if there are more events + // to handle. + if (n > 0) { + queue.offer(EXECUTE_TASK_OR_SHUTDOWN); + continue; + } + return EXECUTE_TASK_OR_SHUTDOWN; + } + + // wakeup to process control event + if (fd == ctlSp[0]) { + synchronized (controlQueue) { + drain1(ctlSp[0]); + // This file descriptor does not have + // one shot semantic => register it again. + pollsetCtl(pollset, PS_ADD, ctlSp[0], Net.POLLIN); + processControlQueue(); + } + continue; + } + + PollableChannel channel = fdToChannel.get(fd); + if (channel != null) { + int events = getRevents(eventAddress); + Event ev = new Event(channel, events); + + // n-1 events are queued; This thread handles + // the last one except for the wakeup + if (n > 0) { + queue.offer(ev); + } else { + return ev; + } + } + } + } finally { + fdToChannelLock.readLock().unlock(); + } + } + } finally { + // to ensure that some thread will poll when all events have + // been consumed + queue.offer(NEED_TO_POLL); + } + } + + public void run() { + Invoker.GroupAndInvokeCount myGroupAndInvokeCount = + Invoker.getGroupAndInvokeCount(); + final boolean isPooledThread = (myGroupAndInvokeCount != null); + boolean replaceMe = false; + Event ev; + try { + for (;;) { + // reset invoke count + if (isPooledThread) + myGroupAndInvokeCount.resetInvokeCount(); + + try { + replaceMe = false; + ev = queue.take(); + + // no events and this thread has been "selected" to + // poll for more. + if (ev == NEED_TO_POLL) { + try { + ev = poll(); + } catch (IOException x) { + x.printStackTrace(); + return; + } + } + } catch (InterruptedException x) { + continue; + } + + // handle wakeup to execute task or shutdown + if (ev == EXECUTE_TASK_OR_SHUTDOWN) { + Runnable task = pollTask(); + if (task == null) { + // shutdown request + return; + } + // run task (may throw error/exception) + replaceMe = true; + task.run(); + continue; + } + + // process event + try { + ev.channel().onEvent(ev.events(), isPooledThread); + } catch (Error x) { + replaceMe = true; throw x; + } catch (RuntimeException x) { + replaceMe = true; throw x; + } + } + } finally { + // last handler to exit when shutdown releases resources + int remaining = threadExit(this, replaceMe); + if (remaining == 0 && isShutdown()) { + implClose(); + } + } + } + } + + /** + * Allocates a poll array to handle up to {@code count} events. + */ + private static long allocatePollArray(int count) { + return unsafe.allocateMemory(count * SIZEOF_POLLFD); + } + + /** + * Free a poll array + */ + private static void freePollArray(long address) { + unsafe.freeMemory(address); + } + + /** + * Returns event[i]; + */ + private static long getEvent(long address, int i) { + return address + (SIZEOF_POLLFD*i); + } + + /** + * Returns event->fd + */ + private static int getDescriptor(long eventAddress) { + return unsafe.getInt(eventAddress + OFFSETOF_FD); + } + + /** + * Returns event->events + */ + private static int getEvents(long eventAddress) { + return unsafe.getChar(eventAddress + OFFSETOF_EVENTS); + } + + /** + * Returns event->revents + */ + private static int getRevents(long eventAddress) { + return unsafe.getChar(eventAddress + OFFSETOF_REVENTS); + } + + // -- Native methods -- + + private static native void init(); + + private static native int eventSize(); + + private static native int eventsOffset(); + + private static native int reventsOffset(); + + private static native int fdOffset(); + + private static native int pollsetCreate() throws IOException; + + private static native int pollsetCtl(int pollset, int opcode, int fd, int events); + + private static native int pollsetPoll(int pollset, long pollAddress, int numfds) + throws IOException; + + private static native void pollsetDestroy(int pollset); + + private static native void socketpair(int[] sv) throws IOException; + + private static native void interrupt(int fd) throws IOException; + + private static native void drain1(int fd) throws IOException; + + private static native void close0(int fd); +} diff --git a/jdk/src/aix/classes/sun/nio/ch/sctp/SctpChannelImpl.java b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpChannelImpl.java new file mode 100644 index 00000000000..8a147203402 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpChannelImpl.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2009, 2012, 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 sun.nio.ch.sctp; + +import java.net.SocketAddress; +import java.net.InetAddress; +import java.io.IOException; +import java.util.Set; +import java.nio.ByteBuffer; +import java.nio.channels.spi.SelectorProvider; +import com.sun.nio.sctp.Association; +import com.sun.nio.sctp.MessageInfo; +import com.sun.nio.sctp.NotificationHandler; +import com.sun.nio.sctp.SctpChannel; +import com.sun.nio.sctp.SctpSocketOption; + +/** + * Unimplemented. + */ +public class SctpChannelImpl extends SctpChannel +{ + private static final String message = "SCTP not supported on this platform"; + + public SctpChannelImpl(SelectorProvider provider) { + super(provider); + throw new UnsupportedOperationException(message); + } + + @Override + public Association association() { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel bind(SocketAddress local) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel bindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel unbindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public boolean connect(SocketAddress remote) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public boolean connect(SocketAddress remote, int maxOutStreams, + int maxInStreams) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public boolean isConnectionPending() { + throw new UnsupportedOperationException(message); + } + + @Override + public boolean finishConnect() throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getAllLocalAddresses() + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getRemoteAddresses() + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel shutdown() throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public T getOption(SctpSocketOption name) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel setOption(SctpSocketOption name, T value) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set> supportedOptions() { + throw new UnsupportedOperationException(message); + } + + @Override + public MessageInfo receive(ByteBuffer dst, T attachment, + NotificationHandler handler) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public int send(ByteBuffer src, MessageInfo messageInfo) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + protected void implConfigureBlocking(boolean block) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public void implCloseSelectableChannel() throws IOException { + throw new UnsupportedOperationException(message); + } +} diff --git a/jdk/src/aix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java new file mode 100644 index 00000000000..c2c1d968307 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2009, 2012, 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 sun.nio.ch.sctp; + +import java.net.SocketAddress; +import java.net.InetAddress; +import java.io.IOException; +import java.util.Set; +import java.nio.ByteBuffer; +import java.nio.channels.spi.SelectorProvider; +import com.sun.nio.sctp.Association; +import com.sun.nio.sctp.SctpChannel; +import com.sun.nio.sctp.MessageInfo; +import com.sun.nio.sctp.NotificationHandler; +import com.sun.nio.sctp.SctpMultiChannel; +import com.sun.nio.sctp.SctpSocketOption; + +/** + * Unimplemented. + */ +public class SctpMultiChannelImpl extends SctpMultiChannel +{ + private static final String message = "SCTP not supported on this platform"; + + public SctpMultiChannelImpl(SelectorProvider provider) { + super(provider); + throw new UnsupportedOperationException(message); + } + + @Override + public Set associations() { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel bind(SocketAddress local, + int backlog) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel bindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel unbindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getAllLocalAddresses() + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getRemoteAddresses + (Association association) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel shutdown(Association association) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public T getOption(SctpSocketOption name, + Association association) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel setOption(SctpSocketOption name, + T value, Association association) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set> supportedOptions() { + throw new UnsupportedOperationException(message); + } + + @Override + public MessageInfo receive(ByteBuffer buffer, T attachment, + NotificationHandler handler) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public int send(ByteBuffer buffer, MessageInfo messageInfo) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel branch(Association association) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + protected void implConfigureBlocking(boolean block) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public void implCloseSelectableChannel() throws IOException { + throw new UnsupportedOperationException(message); + } +} diff --git a/jdk/src/aix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java new file mode 100644 index 00000000000..1e224afd13f --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2009, 2012, 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 sun.nio.ch.sctp; + +import java.net.SocketAddress; +import java.net.InetAddress; +import java.io.IOException; +import java.util.Set; +import java.nio.channels.spi.SelectorProvider; +import com.sun.nio.sctp.SctpChannel; +import com.sun.nio.sctp.SctpServerChannel; +import com.sun.nio.sctp.SctpSocketOption; + +/** + * Unimplemented. + */ +public class SctpServerChannelImpl extends SctpServerChannel +{ + private static final String message = "SCTP not supported on this platform"; + + public SctpServerChannelImpl(SelectorProvider provider) { + super(provider); + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel accept() throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpServerChannel bind(SocketAddress local, + int backlog) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpServerChannel bindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpServerChannel unbindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getAllLocalAddresses() + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public T getOption(SctpSocketOption name) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpServerChannel setOption(SctpSocketOption name, + T value) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set> supportedOptions() { + throw new UnsupportedOperationException(message); + } + + @Override + protected void implConfigureBlocking(boolean block) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public void implCloseSelectableChannel() throws IOException { + throw new UnsupportedOperationException(message); + } +} diff --git a/jdk/src/aix/classes/sun/nio/fs/AixFileStore.java b/jdk/src/aix/classes/sun/nio/fs/AixFileStore.java new file mode 100644 index 00000000000..c38cb46a760 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/fs/AixFileStore.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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 sun.nio.fs; + +import java.nio.file.attribute.*; +import java.util.*; +import java.io.IOException; + +/** + * AIX implementation of FileStore + */ + +class AixFileStore + extends UnixFileStore +{ + + AixFileStore(UnixPath file) throws IOException { + super(file); + } + + AixFileStore(UnixFileSystem fs, UnixMountEntry entry) throws IOException { + super(fs, entry); + } + + /** + * Finds, and returns, the mount entry for the file system where the file + * resides. + */ + @Override + UnixMountEntry findMountEntry() throws IOException { + AixFileSystem fs = (AixFileSystem)file().getFileSystem(); + + // step 1: get realpath + UnixPath path = null; + try { + byte[] rp = UnixNativeDispatcher.realpath(file()); + path = new UnixPath(fs, rp); + } catch (UnixException x) { + x.rethrowAsIOException(file()); + } + + // step 2: find mount point + UnixPath parent = path.getParent(); + while (parent != null) { + UnixFileAttributes attrs = null; + try { + attrs = UnixFileAttributes.get(parent, true); + } catch (UnixException x) { + x.rethrowAsIOException(parent); + } + if (attrs.dev() != dev()) + break; + path = parent; + parent = parent.getParent(); + } + + // step 3: lookup mounted file systems + byte[] dir = path.asByteArray(); + for (UnixMountEntry entry: fs.getMountEntries()) { + if (Arrays.equals(dir, entry.dir())) + return entry; + } + + throw new IOException("Mount point not found"); + } + + // returns true if extended attributes enabled on file system where given + // file resides, returns false if disabled or unable to determine. + private boolean isExtendedAttributesEnabled(UnixPath path) { + return false; + } + + @Override + public boolean supportsFileAttributeView(Class type) { + return super.supportsFileAttributeView(type); + } + + @Override + public boolean supportsFileAttributeView(String name) { + return super.supportsFileAttributeView(name); + } +} diff --git a/jdk/src/aix/classes/sun/nio/fs/AixFileSystem.java b/jdk/src/aix/classes/sun/nio/fs/AixFileSystem.java new file mode 100644 index 00000000000..1169dd31606 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/fs/AixFileSystem.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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 sun.nio.fs; + +import java.nio.file.*; +import java.nio.file.attribute.*; +import java.io.IOException; +import java.util.*; +import static sun.nio.fs.AixNativeDispatcher.*; + +/** + * AIX implementation of FileSystem + */ + +class AixFileSystem extends UnixFileSystem { + + AixFileSystem(UnixFileSystemProvider provider, String dir) { + super(provider, dir); + } + + @Override + public WatchService newWatchService() + throws IOException + { + return new PollingWatchService(); + } + + // lazy initialization of the list of supported attribute views + private static class SupportedFileFileAttributeViewsHolder { + static final Set supportedFileAttributeViews = + supportedFileAttributeViews(); + private static Set supportedFileAttributeViews() { + Set result = new HashSet(); + result.addAll(UnixFileSystem.standardFileAttributeViews()); + return Collections.unmodifiableSet(result); + } + } + + @Override + public Set supportedFileAttributeViews() { + return SupportedFileFileAttributeViewsHolder.supportedFileAttributeViews; + } + + @Override + void copyNonPosixAttributes(int ofd, int nfd) { + // TODO: Implement if needed. + } + + /** + * Returns object to iterate over the mount entries returned by mntctl + */ + @Override + Iterable getMountEntries() { + UnixMountEntry[] entries = null; + try { + entries = getmntctl(); + } catch (UnixException x) { + // nothing we can do + } + if (entries == null) { + return Collections.emptyList(); + } + return Arrays.asList(entries); + } + + @Override + FileStore getFileStore(UnixMountEntry entry) throws IOException { + return new AixFileStore(this, entry); + } +} diff --git a/jdk/src/aix/classes/sun/nio/fs/AixFileSystemProvider.java b/jdk/src/aix/classes/sun/nio/fs/AixFileSystemProvider.java new file mode 100644 index 00000000000..5718d87b387 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/fs/AixFileSystemProvider.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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 sun.nio.fs; + +import java.io.IOException; + +/** + * AIX implementation of FileSystemProvider + */ + +public class AixFileSystemProvider extends UnixFileSystemProvider { + public AixFileSystemProvider() { + super(); + } + + @Override + AixFileSystem newFileSystem(String dir) { + return new AixFileSystem(this, dir); + } + + /** + * @see sun.nio.fs.UnixFileSystemProvider#getFileStore(sun.nio.fs.UnixPath) + */ + @Override + AixFileStore getFileStore(UnixPath path) throws IOException { + return new AixFileStore(path); + } +} diff --git a/jdk/src/aix/classes/sun/nio/fs/AixNativeDispatcher.java b/jdk/src/aix/classes/sun/nio/fs/AixNativeDispatcher.java new file mode 100644 index 00000000000..76e833ae19a --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/fs/AixNativeDispatcher.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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 sun.nio.fs; + +import java.security.AccessController; +import java.security.PrivilegedAction; + +/** + * AIX specific system calls. + */ + +class AixNativeDispatcher extends UnixNativeDispatcher { + private AixNativeDispatcher() { } + + /** + * Special implementation of 'getextmntent' (see SolarisNativeDispatcher) + * that returns all entries at once. + */ + static native UnixMountEntry[] getmntctl() throws UnixException; + + // initialize + private static native void init(); + + static { + AccessController.doPrivileged(new PrivilegedAction() { + public Void run() { + System.loadLibrary("nio"); + return null; + }}); + init(); + } +} diff --git a/jdk/src/aix/classes/sun/tools/attach/AixAttachProvider.java b/jdk/src/aix/classes/sun/tools/attach/AixAttachProvider.java new file mode 100644 index 00000000000..a78c6609720 --- /dev/null +++ b/jdk/src/aix/classes/sun/tools/attach/AixAttachProvider.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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 sun.tools.attach; + +import com.sun.tools.attach.VirtualMachine; +import com.sun.tools.attach.VirtualMachineDescriptor; +import com.sun.tools.attach.AttachNotSupportedException; +import com.sun.tools.attach.spi.AttachProvider; + +import java.io.IOException; + +// Based on 'LinuxAttachProvider.java'. All occurrences of the string +// "Linux" have been textually replaced by "Aix" to avoid confusion. + +/* + * An AttachProvider implementation for Aix that uses a UNIX domain + * socket. + */ +public class AixAttachProvider extends HotSpotAttachProvider { + + // perf counter for the JVM version + private static final String JVM_VERSION = "java.property.java.vm.version"; + + public AixAttachProvider() { + } + + public String name() { + return "sun"; + } + + public String type() { + return "socket"; + } + + public VirtualMachine attachVirtualMachine(String vmid) + throws AttachNotSupportedException, IOException + { + checkAttachPermission(); + + // AttachNotSupportedException will be thrown if the target VM can be determined + // to be not attachable. + testAttachable(vmid); + + return new AixVirtualMachine(this, vmid); + } + + public VirtualMachine attachVirtualMachine(VirtualMachineDescriptor vmd) + throws AttachNotSupportedException, IOException + { + if (vmd.provider() != this) { + throw new AttachNotSupportedException("provider mismatch"); + } + // To avoid re-checking if the VM if attachable, we check if the descriptor + // is for a hotspot VM - these descriptors are created by the listVirtualMachines + // implementation which only returns a list of attachable VMs. + if (vmd instanceof HotSpotVirtualMachineDescriptor) { + assert ((HotSpotVirtualMachineDescriptor)vmd).isAttachable(); + checkAttachPermission(); + return new AixVirtualMachine(this, vmd.id()); + } else { + return attachVirtualMachine(vmd.id()); + } + } + +} diff --git a/jdk/src/aix/classes/sun/tools/attach/AixVirtualMachine.java b/jdk/src/aix/classes/sun/tools/attach/AixVirtualMachine.java new file mode 100644 index 00000000000..714f5c0d570 --- /dev/null +++ b/jdk/src/aix/classes/sun/tools/attach/AixVirtualMachine.java @@ -0,0 +1,317 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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 sun.tools.attach; + +import com.sun.tools.attach.VirtualMachine; +import com.sun.tools.attach.AgentLoadException; +import com.sun.tools.attach.AttachNotSupportedException; +import com.sun.tools.attach.spi.AttachProvider; +import java.io.InputStream; +import java.io.IOException; +import java.io.File; +import java.util.Properties; + +// Based on 'LinuxVirtualMachine.java'. All occurrences of the string +// "Linux" have been textually replaced by "Aix" to avoid confusion. + +/* + * Aix implementation of HotSpotVirtualMachine + */ +public class AixVirtualMachine extends HotSpotVirtualMachine { + // "/tmp" is used as a global well-known location for the files + // .java_pid. and .attach_pid. It is important that this + // location is the same for all processes, otherwise the tools + // will not be able to find all Hotspot processes. + // Any changes to this needs to be synchronized with HotSpot. + private static final String tmpdir = "/tmp"; + + // The patch to the socket file created by the target VM + String path; + + /** + * Attaches to the target VM + */ + AixVirtualMachine(AttachProvider provider, String vmid) + throws AttachNotSupportedException, IOException + { + super(provider, vmid); + + // This provider only understands pids + int pid; + try { + pid = Integer.parseInt(vmid); + } catch (NumberFormatException x) { + throw new AttachNotSupportedException("Invalid process identifier"); + } + + // Find the socket file. If not found then we attempt to start the + // attach mechanism in the target VM by sending it a QUIT signal. + // Then we attempt to find the socket file again. + path = findSocketFile(pid); + if (path == null) { + File f = createAttachFile(pid); + try { + sendQuitTo(pid); + + // give the target VM time to start the attach mechanism + int i = 0; + long delay = 200; + int retries = (int)(attachTimeout() / delay); + do { + try { + Thread.sleep(delay); + } catch (InterruptedException x) { } + path = findSocketFile(pid); + i++; + } while (i <= retries && path == null); + if (path == null) { + throw new AttachNotSupportedException( + "Unable to open socket file: target process not responding " + + "or HotSpot VM not loaded"); + } + } finally { + f.delete(); + } + } + + // Check that the file owner/permission to avoid attaching to + // bogus process + checkPermissions(path); + + // Check that we can connect to the process + // - this ensures we throw the permission denied error now rather than + // later when we attempt to enqueue a command. + int s = socket(); + try { + connect(s, path); + } finally { + close(s); + } + } + + /** + * Detach from the target VM + */ + public void detach() throws IOException { + synchronized (this) { + if (this.path != null) { + this.path = null; + } + } + } + + // protocol version + private final static String PROTOCOL_VERSION = "1"; + + // known errors + private final static int ATTACH_ERROR_BADVERSION = 101; + + /** + * Execute the given command in the target VM. + */ + InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException { + assert args.length <= 3; // includes null + + // did we detach? + String p; + synchronized (this) { + if (this.path == null) { + throw new IOException("Detached from target VM"); + } + p = this.path; + } + + // create UNIX socket + int s = socket(); + + // connect to target VM + try { + connect(s, p); + } catch (IOException x) { + close(s); + throw x; + } + + IOException ioe = null; + + // connected - write request + // + try { + writeString(s, PROTOCOL_VERSION); + writeString(s, cmd); + + for (int i=0; i<3; i++) { + if (i < args.length && args[i] != null) { + writeString(s, (String)args[i]); + } else { + writeString(s, ""); + } + } + } catch (IOException x) { + ioe = x; + } + + + // Create an input stream to read reply + SocketInputStream sis = new SocketInputStream(s); + + // Read the command completion status + int completionStatus; + try { + completionStatus = readInt(sis); + } catch (IOException x) { + sis.close(); + if (ioe != null) { + throw ioe; + } else { + throw x; + } + } + + if (completionStatus != 0) { + sis.close(); + + // In the event of a protocol mismatch then the target VM + // returns a known error so that we can throw a reasonable + // error. + if (completionStatus == ATTACH_ERROR_BADVERSION) { + throw new IOException("Protocol mismatch with target VM"); + } + + // Special-case the "load" command so that the right exception is + // thrown. + if (cmd.equals("load")) { + throw new AgentLoadException("Failed to load agent library"); + } else { + throw new IOException("Command failed in target VM"); + } + } + + // Return the input stream so that the command output can be read + return sis; + } + + /* + * InputStream for the socket connection to get target VM + */ + private class SocketInputStream extends InputStream { + int s; + + public SocketInputStream(int s) { + this.s = s; + } + + public synchronized int read() throws IOException { + byte b[] = new byte[1]; + int n = this.read(b, 0, 1); + if (n == 1) { + return b[0] & 0xff; + } else { + return -1; + } + } + + public synchronized int read(byte[] bs, int off, int len) throws IOException { + if ((off < 0) || (off > bs.length) || (len < 0) || + ((off + len) > bs.length) || ((off + len) < 0)) { + throw new IndexOutOfBoundsException(); + } else if (len == 0) + return 0; + + return AixVirtualMachine.read(s, bs, off, len); + } + + public void close() throws IOException { + AixVirtualMachine.close(s); + } + } + + // Return the socket file for the given process. + private String findSocketFile(int pid) { + File f = new File(tmpdir, ".java_pid" + pid); + if (!f.exists()) { + return null; + } + return f.getPath(); + } + + // On Solaris/Linux/Aix a simple handshake is used to start the attach mechanism + // if not already started. The client creates a .attach_pid file in the + // target VM's working directory (or temp directory), and the SIGQUIT handler + // checks for the file. + private File createAttachFile(int pid) throws IOException { + String fn = ".attach_pid" + pid; + String path = "/proc/" + pid + "/cwd/" + fn; + File f = new File(path); + try { + f.createNewFile(); + } catch (IOException x) { + f = new File(tmpdir, fn); + f.createNewFile(); + } + return f; + } + + /* + * Write/sends the given to the target VM. String is transmitted in + * UTF-8 encoding. + */ + private void writeString(int fd, String s) throws IOException { + if (s.length() > 0) { + byte b[]; + try { + b = s.getBytes("UTF-8"); + } catch (java.io.UnsupportedEncodingException x) { + throw new InternalError(x); + } + AixVirtualMachine.write(fd, b, 0, b.length); + } + byte b[] = new byte[1]; + b[0] = 0; + write(fd, b, 0, 1); + } + + + //-- native methods + + static native void sendQuitTo(int pid) throws IOException; + + static native void checkPermissions(String path) throws IOException; + + static native int socket() throws IOException; + + static native void connect(int fd, String path) throws IOException; + + static native void close(int fd) throws IOException; + + static native int read(int fd, byte buf[], int off, int bufLen) throws IOException; + + static native void write(int fd, byte buf[], int off, int bufLen) throws IOException; + + static { + System.loadLibrary("attach"); + } +} diff --git a/jdk/src/aix/native/java/net/aix_close.c b/jdk/src/aix/native/java/net/aix_close.c new file mode 100644 index 00000000000..e6e64ff5e17 --- /dev/null +++ b/jdk/src/aix/native/java/net/aix_close.c @@ -0,0 +1,438 @@ +/* + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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. + */ + +/* + * This file contains implementations of NET_... functions. The NET_.. functions are + * wrappers for common file- and socket functions plus provisions for non-blocking IO. + * + * (basically, the layers remember all file descriptors waiting for a particular fd; + * all threads waiting on a certain fd can be woken up by sending them a signal; this + * is done e.g. when the fd is closed.) + * + * This was originally copied from the linux_close.c implementation. + * + * Side Note: This coding needs initialization. Under Linux this is done + * automatically via __attribute((constructor)), on AIX this is done manually + * (see aix_close_init). + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* + * Stack allocated by thread when doing blocking operation + */ +typedef struct threadEntry { + pthread_t thr; /* this thread */ + struct threadEntry *next; /* next thread */ + int intr; /* interrupted */ +} threadEntry_t; + +/* + * Heap allocated during initialized - one entry per fd + */ +typedef struct { + pthread_mutex_t lock; /* fd lock */ + threadEntry_t *threads; /* threads blocked on fd */ +} fdEntry_t; + +/* + * Signal to unblock thread + */ +static int sigWakeup = (SIGRTMAX - 1); + +/* + * The fd table and the number of file descriptors + */ +static fdEntry_t *fdTable = NULL; +static int fdCount = 0; + +/* + * Null signal handler + */ +static void sig_wakeup(int sig) { +} + +/* + * Initialization routine (executed when library is loaded) + * Allocate fd tables and sets up signal handler. + * + * On AIX we don't have __attribute((constructor)) so we need to initialize + * manually (from JNI_OnLoad() in 'src/share/native/java/net/net_util.c') + */ +void aix_close_init() { + struct rlimit nbr_files; + sigset_t sigset; + struct sigaction sa; + + /* Check already initialized */ + if (fdCount > 0 && fdTable != NULL) { + return; + } + + /* + * Allocate table based on the maximum number of + * file descriptors. + */ + if (-1 == getrlimit(RLIMIT_NOFILE, &nbr_files)) { + fprintf(stderr, "library initialization failed - " + "unable to get max # of allocated fds\n"); + abort(); + } + fdCount = nbr_files.rlim_max; + /* + * We have a conceptual problem here, when the number of files is + * unlimited. As a kind of workaround, we ensure the table is big + * enough for handle even a large number of files. Since SAP itself + * recommends a limit of 32000 files, we just use 64000 as 'infinity'. + */ + if (nbr_files.rlim_max == RLIM_INFINITY) { + fdCount = 64000; + } + fdTable = (fdEntry_t *)calloc(fdCount, sizeof(fdEntry_t)); + if (fdTable == NULL) { + fprintf(stderr, "library initialization failed - " + "unable to allocate file descriptor table - out of memory"); + abort(); + } + + { + int i; + for (i=0; i < fdCount; i++) { + pthread_mutex_init(&fdTable[i].lock, NULL); + } + } + + /* + * Setup the signal handler + */ + sa.sa_handler = sig_wakeup; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sigaction(sigWakeup, &sa, NULL); + + sigemptyset(&sigset); + sigaddset(&sigset, sigWakeup); + sigprocmask(SIG_UNBLOCK, &sigset, NULL); +} + +/* + * Return the fd table for this fd or NULL is fd out + * of range. + */ +static inline fdEntry_t *getFdEntry(int fd) +{ + if (fd < 0 || fd >= fdCount) { + return NULL; + } + return &fdTable[fd]; +} + +/* + * Start a blocking operation :- + * Insert thread onto thread list for the fd. + */ +static inline void startOp(fdEntry_t *fdEntry, threadEntry_t *self) +{ + self->thr = pthread_self(); + self->intr = 0; + + pthread_mutex_lock(&(fdEntry->lock)); + { + self->next = fdEntry->threads; + fdEntry->threads = self; + } + pthread_mutex_unlock(&(fdEntry->lock)); +} + +/* + * End a blocking operation :- + * Remove thread from thread list for the fd + * If fd has been interrupted then set errno to EBADF + */ +static inline void endOp + (fdEntry_t *fdEntry, threadEntry_t *self) +{ + int orig_errno = errno; + pthread_mutex_lock(&(fdEntry->lock)); + { + threadEntry_t *curr, *prev=NULL; + curr = fdEntry->threads; + while (curr != NULL) { + if (curr == self) { + if (curr->intr) { + orig_errno = EBADF; + } + if (prev == NULL) { + fdEntry->threads = curr->next; + } else { + prev->next = curr->next; + } + break; + } + prev = curr; + curr = curr->next; + } + } + pthread_mutex_unlock(&(fdEntry->lock)); + errno = orig_errno; +} + +/* + * Close or dup2 a file descriptor ensuring that all threads blocked on + * the file descriptor are notified via a wakeup signal. + * + * fd1 < 0 => close(fd2) + * fd1 >= 0 => dup2(fd1, fd2) + * + * Returns -1 with errno set if operation fails. + */ +static int closefd(int fd1, int fd2) { + int rv, orig_errno; + fdEntry_t *fdEntry = getFdEntry(fd2); + if (fdEntry == NULL) { + errno = EBADF; + return -1; + } + + /* + * Lock the fd to hold-off additional I/O on this fd. + */ + pthread_mutex_lock(&(fdEntry->lock)); + + { + /* On fast machines we see that we enter dup2 before the + * accepting thread had a chance to get and process the signal. + * So in case we woke a thread up, give it some time to cope. + * Also see https://bugs.openjdk.java.net/browse/JDK-8006395 */ + int num_woken = 0; + + /* + * Send a wakeup signal to all threads blocked on this + * file descriptor. + */ + threadEntry_t *curr = fdEntry->threads; + while (curr != NULL) { + curr->intr = 1; + pthread_kill( curr->thr, sigWakeup ); + num_woken ++; + curr = curr->next; + } + + if (num_woken > 0) { + usleep(num_woken * 50); + } + + /* + * And close/dup the file descriptor + * (restart if interrupted by signal) + */ + do { + if (fd1 < 0) { + rv = close(fd2); + } else { + rv = dup2(fd1, fd2); + } + } while (rv == -1 && errno == EINTR); + } + + /* + * Unlock without destroying errno + */ + orig_errno = errno; + pthread_mutex_unlock(&(fdEntry->lock)); + errno = orig_errno; + + return rv; +} + +/* + * Wrapper for dup2 - same semantics as dup2 system call except + * that any threads blocked in an I/O system call on fd2 will be + * preempted and return -1/EBADF; + */ +int NET_Dup2(int fd, int fd2) { + if (fd < 0) { + errno = EBADF; + return -1; + } + return closefd(fd, fd2); +} + +/* + * Wrapper for close - same semantics as close system call + * except that any threads blocked in an I/O on fd will be + * preempted and the I/O system call will return -1/EBADF. + */ +int NET_SocketClose(int fd) { + return closefd(-1, fd); +} + +/************** Basic I/O operations here ***************/ + +/* + * Macro to perform a blocking IO operation. Restarts + * automatically if interrupted by signal (other than + * our wakeup signal) + */ +#define BLOCKING_IO_RETURN_INT(FD, FUNC) { \ + int ret; \ + threadEntry_t self; \ + fdEntry_t *fdEntry = getFdEntry(FD); \ + if (fdEntry == NULL) { \ + errno = EBADF; \ + return -1; \ + } \ + do { \ + startOp(fdEntry, &self); \ + ret = FUNC; \ + endOp(fdEntry, &self); \ + } while (ret == -1 && errno == EINTR); \ + return ret; \ +} + +int NET_Read(int s, void* buf, size_t len) { + BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, 0) ); +} + +int NET_ReadV(int s, const struct iovec * vector, int count) { + BLOCKING_IO_RETURN_INT( s, readv(s, vector, count) ); +} + +int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, + struct sockaddr *from, int *fromlen) { + socklen_t socklen = *fromlen; + BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) ); + *fromlen = socklen; +} + +int NET_Send(int s, void *msg, int len, unsigned int flags) { + BLOCKING_IO_RETURN_INT( s, send(s, msg, len, flags) ); +} + +int NET_WriteV(int s, const struct iovec * vector, int count) { + BLOCKING_IO_RETURN_INT( s, writev(s, vector, count) ); +} + +int NET_SendTo(int s, const void *msg, int len, unsigned int + flags, const struct sockaddr *to, int tolen) { + BLOCKING_IO_RETURN_INT( s, sendto(s, msg, len, flags, to, tolen) ); +} + +int NET_Accept(int s, struct sockaddr *addr, int *addrlen) { + socklen_t socklen = *addrlen; + BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) ); + *addrlen = socklen; +} + +int NET_Connect(int s, struct sockaddr *addr, int addrlen) { + BLOCKING_IO_RETURN_INT( s, connect(s, addr, addrlen) ); +} + +#ifndef USE_SELECT +int NET_Poll(struct pollfd *ufds, unsigned int nfds, int timeout) { + BLOCKING_IO_RETURN_INT( ufds[0].fd, poll(ufds, nfds, timeout) ); +} +#else +int NET_Select(int s, fd_set *readfds, fd_set *writefds, + fd_set *exceptfds, struct timeval *timeout) { + BLOCKING_IO_RETURN_INT( s-1, + select(s, readfds, writefds, exceptfds, timeout) ); +} +#endif + +/* + * Wrapper for poll(s, timeout). + * Auto restarts with adjusted timeout if interrupted by + * signal other than our wakeup signal. + */ +int NET_Timeout(int s, long timeout) { + long prevtime = 0, newtime; + struct timeval t; + fdEntry_t *fdEntry = getFdEntry(s); + + /* + * Check that fd hasn't been closed. + */ + if (fdEntry == NULL) { + errno = EBADF; + return -1; + } + + /* + * Pick up current time as may need to adjust timeout + */ + if (timeout > 0) { + gettimeofday(&t, NULL); + prevtime = t.tv_sec * 1000 + t.tv_usec / 1000; + } + + for(;;) { + struct pollfd pfd; + int rv; + threadEntry_t self; + + /* + * Poll the fd. If interrupted by our wakeup signal + * errno will be set to EBADF. + */ + pfd.fd = s; + pfd.events = POLLIN | POLLERR; + + startOp(fdEntry, &self); + rv = poll(&pfd, 1, timeout); + endOp(fdEntry, &self); + + /* + * If interrupted then adjust timeout. If timeout + * has expired return 0 (indicating timeout expired). + */ + if (rv < 0 && errno == EINTR) { + if (timeout > 0) { + gettimeofday(&t, NULL); + newtime = t.tv_sec * 1000 + t.tv_usec / 1000; + timeout -= newtime - prevtime; + if (timeout <= 0) { + return 0; + } + prevtime = newtime; + } + } else { + return rv; + } + + } +} diff --git a/jdk/src/aix/native/sun/nio/ch/AixPollPort.c b/jdk/src/aix/native/sun/nio/ch/AixPollPort.c new file mode 100644 index 00000000000..70064b890ef --- /dev/null +++ b/jdk/src/aix/native/sun/nio/ch/AixPollPort.c @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 SAP AG. 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 "jni.h" +#include "jni_util.h" +#include "jvm.h" +#include "jlong.h" + +#include "sun_nio_ch_AixPollPort.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Initially copied from src/solaris/native/sun/nio/ch/nio_util.h */ +#define RESTARTABLE(_cmd, _result) do { \ + do { \ + _result = _cmd; \ + } while((_result == -1) && (errno == EINTR)); \ +} while(0) + +typedef pollset_t pollset_create_func(int maxfd); +typedef int pollset_destroy_func(pollset_t ps); +typedef int pollset_ctl_func(pollset_t ps, struct poll_ctl *pollctl_array, int array_length); +typedef int pollset_poll_func(pollset_t ps, struct pollfd *polldata_array, int array_length, int timeout); +static pollset_create_func* _pollset_create = NULL; +static pollset_destroy_func* _pollset_destroy = NULL; +static pollset_ctl_func* _pollset_ctl = NULL; +static pollset_poll_func* _pollset_poll = NULL; + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_init(JNIEnv* env, jclass this) { + _pollset_create = (pollset_create_func*) dlsym(RTLD_DEFAULT, "pollset_create"); + _pollset_destroy = (pollset_destroy_func*) dlsym(RTLD_DEFAULT, "pollset_destroy"); + _pollset_ctl = (pollset_ctl_func*) dlsym(RTLD_DEFAULT, "pollset_ctl"); + _pollset_poll = (pollset_poll_func*) dlsym(RTLD_DEFAULT, "pollset_poll"); + if (_pollset_create == NULL || _pollset_destroy == NULL || + _pollset_ctl == NULL || _pollset_poll == NULL) { + JNU_ThrowInternalError(env, "unable to get address of pollset functions"); + } +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_eventSize(JNIEnv* env, jclass this) { + return sizeof(struct pollfd); +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_eventsOffset(JNIEnv* env, jclass this) { + return offsetof(struct pollfd, events); +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_reventsOffset(JNIEnv* env, jclass this) { + return offsetof(struct pollfd, revents); +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_fdOffset(JNIEnv* env, jclass this) { + return offsetof(struct pollfd, fd); +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_pollsetCreate(JNIEnv *env, jclass c) { + /* pollset_create can take the maximum number of fds, but we + * cannot predict this number so we leave it at OPEN_MAX. */ + pollset_t ps = _pollset_create(-1); + if (ps < 0) { + JNU_ThrowIOExceptionWithLastError(env, "pollset_create failed"); + } + return (int)ps; +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_pollsetCtl(JNIEnv *env, jclass c, jint ps, + jint opcode, jint fd, jint events) { + struct poll_ctl event; + int res; + + event.cmd = opcode; + event.events = events; + event.fd = fd; + + RESTARTABLE(_pollset_ctl((pollset_t)ps, &event, 1 /* length */), res); + + return (res == 0) ? 0 : errno; +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_pollsetPoll(JNIEnv *env, jclass c, + jint ps, jlong address, jint numfds) { + struct pollfd *events = jlong_to_ptr(address); + int res; + + RESTARTABLE(_pollset_poll(ps, events, numfds, -1), res); + if (res < 0) { + JNU_ThrowIOExceptionWithLastError(env, "pollset_poll failed"); + } + return res; +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_pollsetDestroy(JNIEnv *env, jclass c, jint ps) { + int res; + RESTARTABLE(_pollset_destroy((pollset_t)ps), res); +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_socketpair(JNIEnv* env, jclass clazz, jintArray sv) { + int sp[2]; + if (socketpair(PF_UNIX, SOCK_STREAM, 0, sp) == -1) { + JNU_ThrowIOExceptionWithLastError(env, "socketpair failed"); + } else { + jint res[2]; + res[0] = (jint)sp[0]; + res[1] = (jint)sp[1]; + (*env)->SetIntArrayRegion(env, sv, 0, 2, &res[0]); + } +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_interrupt(JNIEnv *env, jclass c, jint fd) { + int res; + int buf[1]; + buf[0] = 1; + RESTARTABLE(write(fd, buf, 1), res); + if (res < 0) { + JNU_ThrowIOExceptionWithLastError(env, "write failed"); + } +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_drain1(JNIEnv *env, jclass cl, jint fd) { + int res; + char buf[1]; + RESTARTABLE(read(fd, buf, 1), res); + if (res < 0) { + JNU_ThrowIOExceptionWithLastError(env, "drain1 failed"); + } +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_close0(JNIEnv *env, jclass c, jint fd) { + int res; + RESTARTABLE(close(fd), res); +} diff --git a/jdk/src/aix/native/sun/nio/fs/AixNativeDispatcher.c b/jdk/src/aix/native/sun/nio/fs/AixNativeDispatcher.c new file mode 100644 index 00000000000..e7afb205280 --- /dev/null +++ b/jdk/src/aix/native/sun/nio/fs/AixNativeDispatcher.c @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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 +#include +#include +#include + +#include "jni.h" +#include "jni_util.h" + +#include "sun_nio_fs_AixNativeDispatcher.h" + +static jfieldID entry_name; +static jfieldID entry_dir; +static jfieldID entry_fstype; +static jfieldID entry_options; + +static jclass entry_cls; + +/** + * Call this to throw an internal UnixException when a system/library + * call fails + */ +static void throwUnixException(JNIEnv* env, int errnum) { + jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException", + "(I)V", errnum); + if (x != NULL) { + (*env)->Throw(env, x); + } +} + +/** + * Initialization + */ +JNIEXPORT void JNICALL +Java_sun_nio_fs_AixNativeDispatcher_init(JNIEnv* env, jclass this) +{ + jclass clazz; + + clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); + CHECK_NULL(clazz); + entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL(entry_name); + entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL(entry_dir); + entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL(entry_fstype); + entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL(entry_options); + entry_cls = (*env)->NewGlobalRef(env, clazz); + if (entry_cls == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } +} + +/** + * Special implementation of getextmntent (see SolarisNativeDispatcher.c) + * that returns all entries at once. + */ +JNIEXPORT jobjectArray JNICALL +Java_sun_nio_fs_AixNativeDispatcher_getmntctl(JNIEnv* env, jclass this) +{ + int must_free_buf = 0; + char stack_buf[1024]; + char* buffer = stack_buf; + size_t buffer_size = 1024; + int num_entries; + int i; + jobjectArray ret; + struct vmount * vm; + + for (i = 0; i < 5; i++) { + num_entries = mntctl(MCTL_QUERY, buffer_size, buffer); + if (num_entries != 0) { + break; + } + if (must_free_buf) { + free(buffer); + } + buffer_size *= 8; + buffer = malloc(buffer_size); + must_free_buf = 1; + } + /* Treat zero entries like errors. */ + if (num_entries <= 0) { + if (must_free_buf) { + free(buffer); + } + throwUnixException(env, errno); + return NULL; + } + ret = (*env)->NewObjectArray(env, num_entries, entry_cls, NULL); + if (ret == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + vm = (struct vmount*)buffer; + for (i = 0; i < num_entries; i++) { + jsize len; + jbyteArray bytes; + const char* fstype; + /* We set all relevant attributes so there is no need to call constructor. */ + jobject entry = (*env)->AllocObject(env, entry_cls); + if (entry == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetObjectArrayElement(env, ret, i, entry); + + /* vm->vmt_data[...].vmt_size is 32 bit aligned and also includes NULL byte. */ + /* Since we only need the characters, it is necessary to check string size manually. */ + len = strlen((char*)vm + vm->vmt_data[VMT_OBJECT].vmt_off); + bytes = (*env)->NewByteArray(env, len); + if (bytes == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_OBJECT].vmt_off)); + (*env)->SetObjectField(env, entry, entry_name, bytes); + + len = strlen((char*)vm + vm->vmt_data[VMT_STUB].vmt_off); + bytes = (*env)->NewByteArray(env, len); + if (bytes == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_STUB].vmt_off)); + (*env)->SetObjectField(env, entry, entry_dir, bytes); + + switch (vm->vmt_gfstype) { + case MNT_J2: + fstype = "jfs2"; + break; + case MNT_NAMEFS: + fstype = "namefs"; + break; + case MNT_NFS: + fstype = "nfs"; + break; + case MNT_JFS: + fstype = "jfs"; + break; + case MNT_CDROM: + fstype = "cdrom"; + break; + case MNT_PROCFS: + fstype = "procfs"; + break; + case MNT_NFS3: + fstype = "nfs3"; + break; + case MNT_AUTOFS: + fstype = "autofs"; + break; + case MNT_UDF: + fstype = "udfs"; + break; + case MNT_NFS4: + fstype = "nfs4"; + break; + case MNT_CIFS: + fstype = "smbfs"; + break; + default: + fstype = "unknown"; + } + len = strlen(fstype); + bytes = (*env)->NewByteArray(env, len); + if (bytes == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)fstype); + (*env)->SetObjectField(env, entry, entry_fstype, bytes); + + len = strlen((char*)vm + vm->vmt_data[VMT_ARGS].vmt_off); + bytes = (*env)->NewByteArray(env, len); + if (bytes == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_ARGS].vmt_off)); + (*env)->SetObjectField(env, entry, entry_options, bytes); + + /* goto the next vmount structure: */ + vm = (struct vmount *)((char *)vm + vm->vmt_length); + } + + if (must_free_buf) { + free(buffer); + } + return ret; +} diff --git a/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c b/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c new file mode 100644 index 00000000000..a5ba1605132 --- /dev/null +++ b/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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 "jni.h" +#include "jni_util.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Based on 'LinuxVirtualMachine.c'. Non-relevant code has been removed and all + * occurrences of the string "Linux" have been replaced by "Aix". + */ + +#include "sun_tools_attach_AixVirtualMachine.h" + +#define RESTARTABLE(_cmd, _result) do { \ + do { \ + _result = _cmd; \ + } while((_result == -1) && (errno == EINTR)); \ +} while(0) + + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: socket + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_sun_tools_attach_AixVirtualMachine_socket + (JNIEnv *env, jclass cls) +{ + int fd = socket(PF_UNIX, SOCK_STREAM, 0); + if (fd == -1) { + JNU_ThrowIOExceptionWithLastError(env, "socket"); + } + /* added time out values */ + else { + struct timeval tv; + tv.tv_sec = 2 * 60; + tv.tv_usec = 0; + + setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char*)&tv, sizeof(tv)); + setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (char*)&tv, sizeof(tv)); + } + return (jint)fd; +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: connect + * Signature: (ILjava/lang/String;)I + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_connect + (JNIEnv *env, jclass cls, jint fd, jstring path) +{ + jboolean isCopy; + const char* p = GetStringPlatformChars(env, path, &isCopy); + if (p != NULL) { + struct sockaddr_un addr; + int err = 0; + + /* added missing structure initialization */ + memset(&addr,0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strcpy(addr.sun_path, p); + /* We must call bind with the actual socketaddr length. This is obligatory for AS400. */ + if (connect(fd, (struct sockaddr*)&addr, SUN_LEN(&addr)) == -1) { + err = errno; + } + + if (isCopy) { + JNU_ReleaseStringPlatformChars(env, path, p); + } + + /* + * If the connect failed then we throw the appropriate exception + * here (can't throw it before releasing the string as can't call + * JNI with pending exception) + */ + if (err != 0) { + if (err == ENOENT) { + JNU_ThrowByName(env, "java/io/FileNotFoundException", NULL); + } else { + char* msg = strdup(strerror(err)); + JNU_ThrowIOException(env, msg); + if (msg != NULL) { + free(msg); + } + } + } + } +} + + +/* + * Structure and callback function used to send a QUIT signal to all + * children of a given process + */ +typedef struct { + pid_t ppid; +} SendQuitContext; + +static void SendQuitCallback(const pid_t pid, void* user_data) { + SendQuitContext* context = (SendQuitContext*)user_data; + pid_t parent = getParent(pid); + if (parent == context->ppid) { + kill(pid, SIGQUIT); + } +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: sendQuitTo + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_sendQuitTo + (JNIEnv *env, jclass cls, jint pid) +{ + if (kill((pid_t)pid, SIGQUIT)) { + JNU_ThrowIOExceptionWithLastError(env, "kill"); + } +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: checkPermissions + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_checkPermissions + (JNIEnv *env, jclass cls, jstring path) +{ + jboolean isCopy; + const char* p = GetStringPlatformChars(env, path, &isCopy); + if (p != NULL) { + struct stat64 sb; + uid_t uid, gid; + int res; + /* added missing initialization of the stat64 buffer */ + memset(&sb, 0, sizeof(struct stat64)); + + /* + * Check that the path is owned by the effective uid/gid of this + * process. Also check that group/other access is not allowed. + */ + uid = geteuid(); + gid = getegid(); + + res = stat64(p, &sb); + if (res != 0) { + /* save errno */ + res = errno; + } + + /* release p here before we throw an I/O exception */ + if (isCopy) { + JNU_ReleaseStringPlatformChars(env, path, p); + } + + if (res == 0) { + if ( (sb.st_uid != uid) || (sb.st_gid != gid) || + ((sb.st_mode & (S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)) != 0) ) { + JNU_ThrowIOException(env, "well-known file is not secure"); + } + } else { + char* msg = strdup(strerror(res)); + JNU_ThrowIOException(env, msg); + if (msg != NULL) { + free(msg); + } + } + } +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: close + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_close + (JNIEnv *env, jclass cls, jint fd) +{ + int res; + /* Fixed deadlock when this call of close by the client is not seen by the attach server + * which has accepted the (very short) connection already and is waiting for the request. But read don't get a byte, + * because the close is lost without shutdown. + */ + shutdown(fd, 2); + RESTARTABLE(close(fd), res); +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: read + * Signature: (I[BI)I + */ +JNIEXPORT jint JNICALL Java_sun_tools_attach_AixVirtualMachine_read + (JNIEnv *env, jclass cls, jint fd, jbyteArray ba, jint off, jint baLen) +{ + unsigned char buf[128]; + size_t len = sizeof(buf); + ssize_t n; + + size_t remaining = (size_t)(baLen - off); + if (len > remaining) { + len = remaining; + } + + RESTARTABLE(read(fd, buf+off, len), n); + if (n == -1) { + JNU_ThrowIOExceptionWithLastError(env, "read"); + } else { + if (n == 0) { + n = -1; // EOF + } else { + (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf+off)); + } + } + return n; +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: write + * Signature: (I[B)V + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_write + (JNIEnv *env, jclass cls, jint fd, jbyteArray ba, jint off, jint bufLen) +{ + size_t remaining = bufLen; + do { + unsigned char buf[128]; + size_t len = sizeof(buf); + int n; + + if (len > remaining) { + len = remaining; + } + (*env)->GetByteArrayRegion(env, ba, off, len, (jbyte *)buf); + + RESTARTABLE(write(fd, buf, len), n); + if (n > 0) { + off += n; + remaining -= n; + } else { + JNU_ThrowIOExceptionWithLastError(env, "write"); + return; + } + + } while (remaining > 0); +} diff --git a/jdk/src/aix/porting/porting_aix.c b/jdk/src/aix/porting/porting_aix.c new file mode 100644 index 00000000000..659d9c4c06b --- /dev/null +++ b/jdk/src/aix/porting/porting_aix.c @@ -0,0 +1,86 @@ +/* + * Copyright 2012, 2013 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include +#include +#include + +#include "porting_aix.h" + +static unsigned char dladdr_buffer[0x4000]; + +static void fill_dll_info(void) { + int rc = loadquery(L_GETINFO,dladdr_buffer, sizeof(dladdr_buffer)); + if (rc == -1) { + fprintf(stderr, "loadquery failed (%d %s)", errno, strerror(errno)); + fflush(stderr); + } +} + +static int dladdr_dont_reload(void* addr, Dl_info* info) { + const struct ld_info* p = (struct ld_info*) dladdr_buffer; + info->dli_fbase = 0; info->dli_fname = 0; + info->dli_sname = 0; info->dli_saddr = 0; + for (;;) { + if (addr >= p->ldinfo_textorg && + addr < (((char*)p->ldinfo_textorg) + p->ldinfo_textsize)) { + info->dli_fname = p->ldinfo_filename; + info->dli_fbase = p->ldinfo_textorg; + return 1; /* [sic] */ + } + if (!p->ldinfo_next) { + break; + } + p = (struct ld_info*)(((char*)p) + p->ldinfo_next); + } + return 0; /* [sic] */ +} + +#ifdef __cplusplus +extern "C" +#endif +int dladdr(void *addr, Dl_info *info) { + static int loaded = 0; + if (!loaded) { + fill_dll_info(); + loaded = 1; + } + if (!addr) { + return 0; /* [sic] */ + } + /* Address could be AIX function descriptor? */ + void* const addr0 = *( (void**) addr ); + int rc = dladdr_dont_reload(addr, info); + if (rc == 0) { + rc = dladdr_dont_reload(addr0, info); + if (rc == 0) { /* [sic] */ + fill_dll_info(); /* refill, maybe loadquery info is outdated */ + rc = dladdr_dont_reload(addr, info); + if (rc == 0) { + rc = dladdr_dont_reload(addr0, info); + } + } + } + return rc; +} diff --git a/jdk/src/aix/porting/porting_aix.h b/jdk/src/aix/porting/porting_aix.h new file mode 100644 index 00000000000..79d1062dd67 --- /dev/null +++ b/jdk/src/aix/porting/porting_aix.h @@ -0,0 +1,59 @@ +/* + * Copyright 2012, 2013 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * Header file to contain porting-relevant code which does not have a + * home anywhere else. + * This is intially based on hotspot/src/os/aix/vm/{loadlib,porting}_aix.{hpp,cpp} + */ + +/* + * Aix' own version of dladdr(). + * This function tries to mimick dladdr(3) on Linux + * (see http://linux.die.net/man/3/dladdr) + * dladdr(3) is not POSIX but a GNU extension, and is not available on AIX. + * + * Differences between AIX dladdr and Linux dladdr: + * + * 1) Dl_info.dli_fbase: can never work, is disabled. + * A loaded image on AIX is divided in multiple segments, at least two + * (text and data) but potentially also far more. This is because the loader may + * load each member into an own segment, as for instance happens with the libC.a + * 2) Dl_info.dli_sname: This only works for code symbols (functions); for data, a + * zero-length string is returned (""). + * 3) Dl_info.dli_saddr: For code, this will return the entry point of the function, + * not the function descriptor. + */ + +typedef struct { + const char *dli_fname; /* file path of loaded library */ + void *dli_fbase; /* doesn't make sence on AIX */ + const char *dli_sname; /* symbol name; "" if not known */ + void *dli_saddr; /* address of *entry* of function; not function descriptor; */ +} Dl_info; + +#ifdef __cplusplus +extern "C" +#endif +int dladdr(void *addr, Dl_info *info); diff --git a/jdk/src/macosx/classes/apple/security/KeychainStore.java b/jdk/src/macosx/classes/apple/security/KeychainStore.java index 2016c4811ab..8df45d7bea7 100644 --- a/jdk/src/macosx/classes/apple/security/KeychainStore.java +++ b/jdk/src/macosx/classes/apple/security/KeychainStore.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -248,7 +248,7 @@ public final class KeychainStore extends KeyStoreSpi { if (((KeyEntry)entry).chain == null) { return null; } else { - return (Certificate[])((KeyEntry)entry).chain.clone(); + return ((KeyEntry)entry).chain.clone(); } } else { return null; @@ -365,7 +365,7 @@ public final class KeychainStore extends KeyStoreSpi { throw new KeyStoreException("Certificate chain does not validate"); } - entry.chain = (Certificate[])chain.clone(); + entry.chain = chain.clone(); entry.chainRefs = new long[entry.chain.length]; } @@ -429,7 +429,7 @@ public final class KeychainStore extends KeyStoreSpi { if ((chain != null) && (chain.length != 0)) { - entry.chain = (Certificate[])chain.clone(); + entry.chain = chain.clone(); entry.chainRefs = new long[entry.chain.length]; } @@ -1122,7 +1122,7 @@ public final class KeychainStore extends KeyStoreSpi { throw uke; } - return ((byte[])key); + return key; } diff --git a/jdk/src/macosx/classes/sun/font/CFontManager.java b/jdk/src/macosx/classes/sun/font/CFontManager.java index e3e216e7a33..a5f36154d64 100644 --- a/jdk/src/macosx/classes/sun/font/CFontManager.java +++ b/jdk/src/macosx/classes/sun/font/CFontManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -76,7 +76,7 @@ public class CFontManager extends SunFontManager { // This is a way to register any kind of Font2D, not just files and composites. public static Font2D[] getGenericFonts() { - return (Font2D[])genericFonts.values().toArray(new Font2D[0]); + return genericFonts.values().toArray(new Font2D[0]); } public Font2D registerGenericFont(Font2D f) @@ -117,7 +117,7 @@ public class CFontManager extends SunFontManager { } return f; } else { - return (Font2D)genericFonts.get(fontName); + return genericFonts.get(fontName); } } diff --git a/jdk/src/macosx/classes/sun/java2d/CRenderer.java b/jdk/src/macosx/classes/sun/java2d/CRenderer.java index e26cdce6e69..b5570f6ce93 100644 --- a/jdk/src/macosx/classes/sun/java2d/CRenderer.java +++ b/jdk/src/macosx/classes/sun/java2d/CRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -457,7 +457,7 @@ public class CRenderer implements PixelDrawPipe, PixelFillPipe, ShapeDrawPipe, D protected boolean blitImage(SunGraphics2D sg2d, Image img, boolean fliph, boolean flipv, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, Color bgColor) { CPrinterSurfaceData surfaceData = (CPrinterSurfaceData)sg2d.getSurfaceData(); - OSXOffScreenSurfaceData imgSurfaceData = (OSXOffScreenSurfaceData) OSXOffScreenSurfaceData.createNewSurface((BufferedImage)img); + OSXOffScreenSurfaceData imgSurfaceData = OSXOffScreenSurfaceData.createNewSurface((BufferedImage)img); surfaceData.blitImage(this, sg2d, imgSurfaceData, fliph, flipv, sx, sy, sw, sh, dx, dy, dw, dh, bgColor); return true; } diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java index 0743c00ae63..80257a44c6c 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -640,7 +640,7 @@ public class CPrinterJob extends RasterPrinterJob { if (onEventThread) { try { EventQueue.invokeAndWait(r); } catch (java.lang.reflect.InvocationTargetException ite) { - Throwable te = (Throwable)ite.getTargetException(); + Throwable te = ite.getTargetException(); if (te instanceof PrinterException) throw (PrinterException)te; else te.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } diff --git a/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java b/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java index 5c82006000c..66e16e24ab7 100644 --- a/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java +++ b/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java @@ -53,10 +53,6 @@ import java.util.LinkedList; */ class KQueueArrayWrapper { - // Event masks - static final short POLLIN = AbstractPollArrayWrapper.POLLIN; - static final short POLLOUT = AbstractPollArrayWrapper.POLLOUT; - // kevent filters static short EVFILT_READ; static short EVFILT_WRITE; @@ -129,9 +125,9 @@ class KQueueArrayWrapper { // SinkChannelImpl, SourceChannelImpl, DatagramChannelImpl, // ServerSocketChannelImpl, SocketChannelImpl if (filter == EVFILT_READ) { - result |= POLLIN; + result |= Net.POLLIN; } else if (filter == EVFILT_WRITE) { - result |= POLLOUT; + result |= Net.POLLOUT; } return result; @@ -180,7 +176,7 @@ class KQueueArrayWrapper { if (!ch.isOpen()) continue; - register0(kq, ch.getFDVal(), u.events & POLLIN, u.events & POLLOUT); + register0(kq, ch.getFDVal(), u.events & Net.POLLIN, u.events & Net.POLLOUT); } } } diff --git a/jdk/src/share/bin/jli_util.h b/jdk/src/share/bin/jli_util.h index 388910407ff..d3c9f0ff8f2 100644 --- a/jdk/src/share/bin/jli_util.h +++ b/jdk/src/share/bin/jli_util.h @@ -85,6 +85,9 @@ void JLI_CmdToArgs(char *cmdline); #ifdef MACOSX #define JLI_Lseek lseek #endif +#ifdef _AIX +#define JLI_Lseek lseek +#endif #endif /* _WIN32 */ /* diff --git a/jdk/src/share/classes/com/oracle/net/Sdp.java b/jdk/src/share/classes/com/oracle/net/Sdp.java index 32316073828..d22a95ed120 100644 --- a/jdk/src/share/classes/com/oracle/net/Sdp.java +++ b/jdk/src/share/classes/com/oracle/net/Sdp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -56,7 +56,7 @@ public final class Sdp { private static final Constructor serverSocketCtor; static { try { - serverSocketCtor = (Constructor) + serverSocketCtor = ServerSocket.class.getDeclaredConstructor(SocketImpl.class); setAccessible(serverSocketCtor); } catch (NoSuchMethodException e) { diff --git a/jdk/src/share/classes/com/sun/beans/TypeResolver.java b/jdk/src/share/classes/com/sun/beans/TypeResolver.java index e4cb0f3fb2e..1cb27bd9dde 100644 --- a/jdk/src/share/classes/com/sun/beans/TypeResolver.java +++ b/jdk/src/share/classes/com/sun/beans/TypeResolver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -238,7 +238,7 @@ public final class TypeResolver { return (Class) pt.getRawType(); } if (type instanceof TypeVariable) { - TypeVariable tv = (TypeVariable)type; + TypeVariable tv = (TypeVariable)type; Type[] bounds = tv.getBounds(); return (0 < bounds.length) ? erase(bounds[0]) @@ -267,9 +267,9 @@ public final class TypeResolver { * * @see #erase(Type) */ - public static Class[] erase(Type[] types) { + public static Class[] erase(Type[] types) { int length = types.length; - Class[] classes = new Class[length]; + Class[] classes = new Class[length]; for (int i = 0; i < length; i++) { classes[i] = TypeResolver.erase(types[i]); } diff --git a/jdk/src/share/classes/com/sun/beans/editors/EnumEditor.java b/jdk/src/share/classes/com/sun/beans/editors/EnumEditor.java index 6275977d344..b7f5ada0d1f 100644 --- a/jdk/src/share/classes/com/sun/beans/editors/EnumEditor.java +++ b/jdk/src/share/classes/com/sun/beans/editors/EnumEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, 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 @@ -45,17 +45,18 @@ import java.util.List; public final class EnumEditor implements PropertyEditor { private final List listeners = new ArrayList(); - private final Class type; + @SuppressWarnings("rawtypes") + private final Class type; private final String[] tags; private Object value; - public EnumEditor( Class type ) { + public EnumEditor(Class type) { Object[] values = type.getEnumConstants(); if ( values == null ) { throw new IllegalArgumentException( "Unsupported " + type ); } - this.type = type; + this.type = type.asSubclass(java.lang.Enum.class); this.tags = new String[values.length]; for ( int i = 0; i < values.length; i++ ) { this.tags[i] = ( ( Enum )values[i] ).name(); @@ -98,9 +99,11 @@ public final class EnumEditor implements PropertyEditor { } public void setAsText( String text ) { - setValue( ( text != null ) - ? Enum.valueOf( this.type, text ) - : null ); + @SuppressWarnings("unchecked") + Object tmp = ( text != null ) + ? Enum.valueOf( (Class)this.type, text ) + : null; + setValue(tmp); } public String[] getTags() { diff --git a/jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java b/jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java index d21d1a48748..bc2e7529d4f 100644 --- a/jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java +++ b/jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, 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 @@ -44,7 +44,7 @@ import static sun.reflect.misc.ReflectUtil.isPackageAccessible; public final class ConstructorFinder extends AbstractFinder> { private static final Cache> CACHE = new Cache>(SOFT, SOFT) { @Override - public Constructor create(Signature signature) { + public Constructor create(Signature signature) { try { ConstructorFinder finder = new ConstructorFinder(signature.getArgs()); return finder.find(signature.getType().getConstructors()); diff --git a/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java b/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java index 5842af2bdad..7a46ed70ff9 100644 --- a/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java +++ b/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, 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 @@ -93,7 +93,9 @@ class InstanceFinder { type = ClassFinder.findClass(name, type.getClassLoader()); } if (this.type.isAssignableFrom(type)) { - return (T) type.newInstance(); + @SuppressWarnings("unchecked") + T tmp = (T) type.newInstance(); + return tmp; } } catch (Exception exception) { diff --git a/jdk/src/share/classes/com/sun/beans/finder/SignatureException.java b/jdk/src/share/classes/com/sun/beans/finder/SignatureException.java index 07307d596b0..7e5a35d452d 100644 --- a/jdk/src/share/classes/com/sun/beans/finder/SignatureException.java +++ b/jdk/src/share/classes/com/sun/beans/finder/SignatureException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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,8 @@ package com.sun.beans.finder; final class SignatureException extends RuntimeException { + private static final long serialVersionUID = 4536098341586118473L; + SignatureException(Throwable cause) { super(cause); } diff --git a/jdk/src/share/classes/com/sun/beans/util/Cache.java b/jdk/src/share/classes/com/sun/beans/util/Cache.java index 751da65a4f6..4f3f75571b0 100644 --- a/jdk/src/share/classes/com/sun/beans/util/Cache.java +++ b/jdk/src/share/classes/com/sun/beans/util/Cache.java @@ -244,7 +244,7 @@ public abstract class Cache { * @param size requested capacity MUST be a power of two * @return a new array for the cache entries */ - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) private CacheEntry[] newTable(int size) { return (CacheEntry[]) new CacheEntry[size]; } @@ -265,6 +265,7 @@ public abstract class Cache { synchronized (this.queue) { do { if (reference instanceof Ref) { + @SuppressWarnings("rawtypes") Ref ref = (Ref) reference; @SuppressWarnings("unchecked") CacheEntry owner = (CacheEntry) ref.getOwner(); diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java index b8c9a1e2b36..ae0fedf5b48 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -806,14 +806,11 @@ public class BMPImageReader extends ImageReader implements BMPConstants { // the sampleModel can be null in case of embedded image if (sampleModel != null) { if (sampleModel.getDataType() == DataBuffer.TYPE_BYTE) - bdata = (byte[]) - ((DataBufferByte)raster.getDataBuffer()).getData(); + bdata = ((DataBufferByte)raster.getDataBuffer()).getData(); else if (sampleModel.getDataType() == DataBuffer.TYPE_USHORT) - sdata = (short[]) - ((DataBufferUShort)raster.getDataBuffer()).getData(); + sdata = ((DataBufferUShort)raster.getDataBuffer()).getData(); else if (sampleModel.getDataType() == DataBuffer.TYPE_INT) - idata = (int[]) - ((DataBufferInt)raster.getDataBuffer()).getData(); + idata = ((DataBufferInt)raster.getDataBuffer()).getData(); } // There should only be one tile. diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriter.java b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriter.java index 5d1241ec53f..4eeb01c52e7 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriter.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -574,7 +574,7 @@ public class BMPImageWriter extends ImageWriter implements BMPConstants { imageSize = embedded_stream.size(); long endPos = stream.getStreamPosition(); - fileSize = (int)(offset + imageSize); + fileSize = offset + imageSize; stream.seek(headPos); writeSize(fileSize, 2); stream.seek(headPos); diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/common/BogusColorSpace.java b/jdk/src/share/classes/com/sun/imageio/plugins/common/BogusColorSpace.java index ea7fa4f0272..81924044610 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/common/BogusColorSpace.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/common/BogusColorSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -31,6 +31,7 @@ import java.awt.color.ColorSpace; * A dummy ColorSpace to enable ColorModel * for image data which do not have an innate color representation. */ +@SuppressWarnings("serial") // JDK-implementation class public class BogusColorSpace extends ColorSpace { /** * Return the type given the number of components. diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/common/ImageUtil.java b/jdk/src/share/classes/com/sun/imageio/plugins/common/ImageUtil.java index 2c27e56e637..d3a4ba4a6f9 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/common/ImageUtil.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/common/ImageUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -593,16 +593,15 @@ public class ImageUtil { int i = eltOffset; while(xRemaining > 24) { data[i++] = - (int)(((binaryDataArray[b++] & 0xFF) << 24) | - ((binaryDataArray[b++] & 0xFF) << 16) | - ((binaryDataArray[b++] & 0xFF) << 8) | - (binaryDataArray[b++] & 0xFF)); + (((binaryDataArray[b++] & 0xFF) << 24) | + ((binaryDataArray[b++] & 0xFF) << 16) | + ((binaryDataArray[b++] & 0xFF) << 8) | + (binaryDataArray[b++] & 0xFF)); xRemaining -= 32; } int shift = 24; while(xRemaining > 0) { - data[i] |= - (int)((binaryDataArray[b++] & 0xFF) << shift); + data[i] |= ((binaryDataArray[b++] & 0xFF) << shift); shift -= 8; xRemaining -= 8; } @@ -835,8 +834,7 @@ public class ImageUtil { for(int x = 0; x < rectWidth; x++) { if(bdata[k++] != (byte)0) { data[bOffset/32] |= - (int)(0x00000001 << - (31 - bOffset % 32)); + (0x00000001 << (31 - bOffset % 32)); } bOffset++; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/common/LZWStringTable.java b/jdk/src/share/classes/com/sun/imageio/plugins/common/LZWStringTable.java index cfed0f43c0d..7d1714630b9 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/common/LZWStringTable.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/common/LZWStringTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -143,7 +143,7 @@ public class LZWStringTable { } static public int hash(short index, byte lastbyte) { - return ((int)((short)(lastbyte << 8) ^ index) & 0xFFFF) % HASHSIZE; + return (((short)(lastbyte << 8) ^ index) & 0xFFFF) % HASHSIZE; } /* diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageMetadata.java b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageMetadata.java index 87a45c3cac4..45db3e64acd 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageMetadata.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -232,7 +232,7 @@ public class GIFImageMetadata extends GIFMetadata { appExtNode.setAttribute("authenticationCode", toISO8859(authenticationCode)); byte[] appData = (byte[])applicationData.get(i); - appExtNode.setUserObject((byte[])appData.clone()); + appExtNode.setUserObject(appData.clone()); node.appendChild(appExtNode); } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java index e62db31bfe5..63874ae9b24 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -357,7 +357,7 @@ public class GIFImageWriter extends ImageWriter { // Undo change to interlace flag if not MODE_COPY_FROM_METADATA. if (param != null && param.canWriteProgressive() && - param.getProgressiveMode() != param.MODE_COPY_FROM_METADATA) { + param.getProgressiveMode() != ImageWriteParam.MODE_COPY_FROM_METADATA) { im.interlaceFlag = isProgressive; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java index f619bb1d4f0..20d18072a06 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -211,10 +211,10 @@ class DHTMarkerSegment extends MarkerSegment { newGuy = (Htable) super.clone(); } catch (CloneNotSupportedException e) {} // won't happen if (numCodes != null) { - newGuy.numCodes = (short []) numCodes.clone(); + newGuy.numCodes = numCodes.clone(); } if (values != null) { - newGuy.values = (short []) values.clone(); + newGuy.values = values.clone(); } return newGuy; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java index 34fe0d2a811..fb78bc3a015 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -274,7 +274,7 @@ class DQTMarkerSegment extends MarkerSegment { newGuy = (Qtable) super.clone(); } catch (CloneNotSupportedException e) {} // won't happen if (data != null) { - newGuy.data = (int []) data.clone(); + newGuy.data = data.clone(); } return newGuy; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java index 5ae93b1b685..393548e5b14 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -558,6 +558,7 @@ class JFIFMarkerSegment extends MarkerSegment { // Could put reason codes in here to be parsed in writeJFXXSegment // in order to provide more meaningful warnings. + @SuppressWarnings("serial") // JDK-implementation class private class IllegalThumbException extends Exception {} /** @@ -1448,7 +1449,7 @@ class JFIFMarkerSegment extends MarkerSegment { protected Object clone () { ICCMarkerSegment newGuy = (ICCMarkerSegment) super.clone(); if (profile != null) { - newGuy.profile = (byte[]) profile.clone(); + newGuy.profile = profile.clone(); } return newGuy; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java index d9723e7ba20..7f190f679d0 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -319,7 +319,7 @@ public class JPEGImageWriter extends ImageWriter { IIOMetadata streamMetadata, IIOMetadata imageMetadata) { if (jfifOK(imageType, param, streamMetadata, imageMetadata)) { - return (Dimension [])preferredThumbSizes.clone(); + return preferredThumbSizes.clone(); } return null; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java index c7b8fd3d0e5..cff4f89b649 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -724,7 +724,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable { newGuy = (JPEGMetadata) super.clone(); } catch (CloneNotSupportedException e) {} // won't happen if (markerSequence != null) { - newGuy.markerSequence = (List) cloneSequence(); + newGuy.markerSequence = cloneSequence(); } newGuy.resetSequence = null; return newGuy; @@ -2016,14 +2016,14 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable { // First approximation int y = 1; - int x = (int) Math.round(value); + int x = Math.round(value); float ratio = (float) x; float delta = Math.abs(value - ratio); while (delta > epsilon) { // not close enough // Increment y and compute a new x y++; - x = (int) Math.round(y*value); + x = Math.round(y*value); ratio = (float)x/(float)y; delta = Math.abs(value - ratio); } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/MarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/MarkerSegment.java index f38e30f3ae8..2952635b7f2 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/MarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/MarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -119,7 +119,7 @@ class MarkerSegment implements Cloneable { newGuy = (MarkerSegment) super.clone(); } catch (CloneNotSupportedException e) {} // won't happen if (this.data != null) { - newGuy.data = (byte[]) data.clone(); + newGuy.data = data.clone(); } return newGuy; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java index 904fa73777c..ea625209cbd 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -98,7 +98,7 @@ class SOFMarkerSegment extends MarkerSegment { protected Object clone() { SOFMarkerSegment newGuy = (SOFMarkerSegment) super.clone(); if (componentSpecs != null) { - newGuy.componentSpecs = (ComponentSpec []) componentSpecs.clone(); + newGuy.componentSpecs = componentSpecs.clone(); for (int i = 0; i < componentSpecs.length; i++) { newGuy.componentSpecs[i] = (ComponentSpec) componentSpecs[i].clone(); diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java index afffa7bd74a..c8f223190fd 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -93,8 +93,7 @@ class SOSMarkerSegment extends MarkerSegment { protected Object clone () { SOSMarkerSegment newGuy = (SOSMarkerSegment) super.clone(); if (componentSpecs != null) { - newGuy.componentSpecs = - (ScanComponentSpec []) componentSpecs.clone(); + newGuy.componentSpecs = componentSpecs.clone(); for (int i = 0; i < componentSpecs.length; i++) { newGuy.componentSpecs[i] = (ScanComponentSpec) componentSpecs[i].clone(); diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java b/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java index 41392c53a1e..3ad3a8b6420 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -344,9 +344,9 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { IHDR_colorType = PNGImageReader.PNG_COLOR_PALETTE; PLTE_present = true; PLTE_order = null; - PLTE_red = (byte[])reds.clone(); - PLTE_green = (byte[])greens.clone(); - PLTE_blue = (byte[])blues.clone(); + PLTE_red = reds.clone(); + PLTE_green = greens.clone(); + PLTE_blue = blues.clone(); if (hasAlpha) { tRNS_present = true; @@ -430,7 +430,7 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { } else { ArrayList list = new ArrayList(in.size()); for (byte[] b: in) { - list.add((b == null) ? null : (byte[])b.clone()); + list.add((b == null) ? null : b.clone()); } return list; } @@ -703,8 +703,8 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { IIOMetadataNode tEXt_parent = new IIOMetadataNode("tEXt"); for (int i = 0; i < tEXt_keyword.size(); i++) { IIOMetadataNode tEXt_node = new IIOMetadataNode("tEXtEntry"); - tEXt_node.setAttribute("keyword" , (String)tEXt_keyword.get(i)); - tEXt_node.setAttribute("value" , (String)tEXt_text.get(i)); + tEXt_node.setAttribute("keyword" , tEXt_keyword.get(i)); + tEXt_node.setAttribute("value" , tEXt_text.get(i)); tEXt_parent.appendChild(tEXt_node); } @@ -759,13 +759,13 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { IIOMetadataNode zTXt_parent = new IIOMetadataNode("zTXt"); for (int i = 0; i < zTXt_keyword.size(); i++) { IIOMetadataNode zTXt_node = new IIOMetadataNode("zTXtEntry"); - zTXt_node.setAttribute("keyword", (String)zTXt_keyword.get(i)); + zTXt_node.setAttribute("keyword", zTXt_keyword.get(i)); - int cm = ((Integer)zTXt_compressionMethod.get(i)).intValue(); + int cm = (zTXt_compressionMethod.get(i)).intValue(); zTXt_node.setAttribute("compressionMethod", zTXt_compressionMethodNames[cm]); - zTXt_node.setAttribute("text", (String)zTXt_text.get(i)); + zTXt_node.setAttribute("text", zTXt_text.get(i)); zTXt_parent.appendChild(zTXt_node); } @@ -781,8 +781,8 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { IIOMetadataNode unknown_node = new IIOMetadataNode("UnknownChunk"); unknown_node.setAttribute("type", - (String)unknownChunkType.get(i)); - unknown_node.setUserObject((byte[])unknownChunkData.get(i)); + unknownChunkType.get(i)); + unknown_node.setUserObject(unknownChunkData.get(i)); unknown_parent.appendChild(unknown_node); } @@ -1016,8 +1016,8 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { for (int i = 0; i < tEXt_keyword.size(); i++) { node = new IIOMetadataNode("TextEntry"); - node.setAttribute("keyword", (String)tEXt_keyword.get(i)); - node.setAttribute("value", (String)tEXt_text.get(i)); + node.setAttribute("keyword", tEXt_keyword.get(i)); + node.setAttribute("value", tEXt_text.get(i)); node.setAttribute("encoding", "ISO-8859-1"); node.setAttribute("compression", "none"); @@ -1041,8 +1041,8 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { for (int i = 0; i < zTXt_keyword.size(); i++) { node = new IIOMetadataNode("TextEntry"); - node.setAttribute("keyword", (String)zTXt_keyword.get(i)); - node.setAttribute("value", (String)zTXt_text.get(i)); + node.setAttribute("keyword", zTXt_keyword.get(i)); + node.setAttribute("value", zTXt_text.get(i)); node.setAttribute("compression", "zip"); text_node.appendChild(node); @@ -1400,8 +1400,7 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { fatal(node, "User object not a byte array!"); } - iCCP_compressedProfile = - (byte[])((byte[])compressedProfile).clone(); + iCCP_compressedProfile = ((byte[])compressedProfile).clone(); iCCP_present = true; } else if (name.equals("iTXt")) { diff --git a/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java b/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java index 483fbf8280a..b30d618cd75 100644 --- a/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java +++ b/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -43,10 +43,10 @@ public abstract class DOMService { try { - String provider = (String) java.security.AccessController.doPrivileged( + String provider = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("com.sun.java.browser.dom.DOMServiceProvider")); - Class clazz = DOMService.class.forName("sun.plugin.dom.DOMService"); + Class clazz = Class.forName("sun.plugin.dom.DOMService"); return (DOMService) clazz.newInstance(); } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java index df2b7f7cc23..6bd21545554 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -433,7 +433,7 @@ class GTKFileChooserUI extends SynthFileChooserUI { if (objects.length == 1 && ((File)objects[0]).isDirectory() && chooser.isTraversable(((File)objects[0])) - && (chooser.getFileSelectionMode() != chooser.DIRECTORIES_ONLY + && (chooser.getFileSelectionMode() != JFileChooser.DIRECTORIES_ONLY || !chooser.getFileSystemView().isFileSystem(((File)objects[0])))) { setDirectorySelected(true); setDirectory(((File)objects[0])); @@ -458,7 +458,7 @@ class GTKFileChooserUI extends SynthFileChooserUI { if (file != null && file.isDirectory() && chooser.isTraversable(file) - && (chooser.getFileSelectionMode() == chooser.FILES_ONLY + && (chooser.getFileSelectionMode() == JFileChooser.FILES_ONLY || !chooser.getFileSystemView().isFileSystem(file))) { setDirectorySelected(true); diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java index 4794d83f7a7..fa94a57f2e3 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -61,7 +61,7 @@ class PangoFonts { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - if (!ge.isHeadless()) { + if (!GraphicsEnvironment.isHeadless()) { GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); AffineTransform at = gc.getNormalizingTransform(); diff --git a/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java b/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java index 96c70c7ff98..59a183b2582 100644 --- a/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java +++ b/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -283,7 +283,7 @@ public class MBeanServerFileAccessController public synchronized void refresh() throws IOException { Properties props; if (accessFileName == null) - props = (Properties) originalProps; + props = originalProps; else props = propertiesFromFile(accessFileName); parseProperties(props); diff --git a/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java b/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java index 874be7ddb05..4323970cafa 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java +++ b/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -667,7 +667,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice } else { if (TRACE_TRANSMITTER) Printer.println("Sending packed message to "+size+" transmitter's receivers"); for (int i = 0; i < size; i++) { - Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver(); + Receiver receiver = transmitters.get(i).getReceiver(); if (receiver != null) { if (optimizedReceiverCount > 0) { if (receiver instanceof MidiOutDevice.MidiOutReceiver) { @@ -693,7 +693,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice int size = transmitters.size(); if (TRACE_TRANSMITTER) Printer.println("Sending long message to "+size+" transmitter's receivers"); for (int i = 0; i < size; i++) { - Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver(); + Receiver receiver = transmitters.get(i).getReceiver(); if (receiver != null) { //$$fb 2002-04-02: SysexMessages are mutable, so // an application could change the contents of this object, @@ -729,7 +729,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice } else { if (TRACE_TRANSMITTER) Printer.println("Sending MIDI message to "+size+" transmitter's receivers"); for (int i = 0; i < size; i++) { - Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver(); + Receiver receiver = transmitters.get(i).getReceiver(); if (receiver != null) { //$$fb 2002-04-02: ShortMessages are mutable, so // an application could change the contents of this object, diff --git a/jdk/src/share/classes/com/sun/media/sound/AiffFileReader.java b/jdk/src/share/classes/com/sun/media/sound/AiffFileReader.java index 5a96effbbe8..6d91be4bf61 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AiffFileReader.java +++ b/jdk/src/share/classes/com/sun/media/sound/AiffFileReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -406,7 +406,7 @@ public final class AiffFileReader extends SunFileReader { int expon = 0; long hiMant = 0, loMant = 0; long t1, t2; - double HUGE = ((double)3.40282346638528860e+38); + double HUGE = 3.40282346638528860e+38; expon = dis.readUnsignedShort(); diff --git a/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java index 0f79728291e..b31871f3bb5 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -239,18 +239,18 @@ public final class AiffFileWriter extends SunFileWriter { while( (bytesRead = fileStream.read( buffer )) >= 0 ) { if (maxLength>0) { if( bytesRead < maxLength ) { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; maxLength -= bytesRead; } else { - out.write( buffer, 0, (int)maxLength ); + out.write( buffer, 0, maxLength ); bytesWritten += maxLength; maxLength = 0; break; } } else { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; } } diff --git a/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java b/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java index dc868b0b2cb..367f318b06a 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java +++ b/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -316,7 +316,7 @@ public final class AlawCodec extends SunCodec { // set the AudioInputStream length in frames if we know it if (stream instanceof AudioInputStream) { - frameLength = ((AudioInputStream)stream).getFrameLength(); + frameLength = stream.getFrameLength(); } // set framePos to zero @@ -346,7 +346,7 @@ public final class AlawCodec extends SunCodec { public int read() throws IOException { byte[] b = new byte[1]; - return (int)read(b, 0, b.length); + return read(b, 0, b.length); } @@ -432,8 +432,8 @@ public final class AlawCodec extends SunCodec { int readCount = super.read(b, readOffset, readLen); for (i = off; i < (off + (readCount*2)); i+=2) { - b[i] = (byte)tabByte1[b[readOffset] & 0xFF]; - b[i+1] = (byte)tabByte2[b[readOffset] & 0xFF]; + b[i] = tabByte1[b[readOffset] & 0xFF]; + b[i+1] = tabByte2[b[readOffset] & 0xFF]; readOffset++; } diff --git a/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java index 15a7a90decf..7a459158a30 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -308,17 +308,17 @@ public final class AuFileWriter extends SunFileWriter { while( (bytesRead = fileStream.read( buffer )) >= 0 ) { if (maxLength>0) { if( bytesRead < maxLength ) { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; maxLength -= bytesRead; } else { - out.write( buffer, 0, (int)maxLength ); + out.write( buffer, 0, maxLength ); bytesWritten += maxLength; maxLength = 0; break; } } else { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; } } diff --git a/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java b/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java index 87247ba686a..376521338c2 100644 --- a/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java +++ b/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -531,7 +531,7 @@ public final class DLSSoundbank implements Soundbank { chunk.read(); // Read Reserved byte instrument.bank = bank; - instrument.preset = (int) id; + instrument.preset = id; instrument.druminstrument = (drumins & 128) > 0; //System.out.println("bank="+bank+" drumkit="+drumkit // +" id="+id); diff --git a/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java b/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java index 698bac9f766..7c938bbb1c4 100644 --- a/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java +++ b/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -495,7 +495,7 @@ final class DirectAudioDevice extends AbstractMixer { } // align buffer to full frames - bufferSize = ((int) bufferSize / format.getFrameSize()) * format.getFrameSize(); + bufferSize = ( bufferSize / format.getFrameSize()) * format.getFrameSize(); id = nOpen(mixerIndex, deviceID, isSource, encoding, @@ -1381,7 +1381,7 @@ final class DirectAudioDevice extends AbstractMixer { if (toWriteBytes > getBufferSize()) { toWriteBytes = Toolkit.align(getBufferSize(), frameSize); } - int written = write(audioData, (int) clipBytePosition, toWriteBytes); // increases bytePosition + int written = write(audioData, clipBytePosition, toWriteBytes); // increases bytePosition clipBytePosition += written; // make sure nobody called setFramePosition, or stop() during the write() call if (doIO && newFramePosition < 0 && written >= 0) { diff --git a/jdk/src/share/classes/com/sun/media/sound/MidiInDeviceProvider.java b/jdk/src/share/classes/com/sun/media/sound/MidiInDeviceProvider.java index e15616f14f0..1f397724e3f 100644 --- a/jdk/src/share/classes/com/sun/media/sound/MidiInDeviceProvider.java +++ b/jdk/src/share/classes/com/sun/media/sound/MidiInDeviceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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,9 +88,9 @@ public final class MidiInDeviceProvider extends AbstractMidiDeviceProvider { } MidiDevice[] getDeviceCache() { return devices; } - void setDeviceCache(MidiDevice[] devices) { this.devices = devices; } + void setDeviceCache(MidiDevice[] devices) { MidiInDeviceProvider.devices = devices; } Info[] getInfoCache() { return infos; } - void setInfoCache(Info[] infos) { this.infos = infos; } + void setInfoCache(Info[] infos) { MidiInDeviceProvider.infos = infos; } // INNER CLASSES diff --git a/jdk/src/share/classes/com/sun/media/sound/MidiOutDeviceProvider.java b/jdk/src/share/classes/com/sun/media/sound/MidiOutDeviceProvider.java index ebe2880f026..75583ab1e65 100644 --- a/jdk/src/share/classes/com/sun/media/sound/MidiOutDeviceProvider.java +++ b/jdk/src/share/classes/com/sun/media/sound/MidiOutDeviceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -86,9 +86,9 @@ public final class MidiOutDeviceProvider extends AbstractMidiDeviceProvider { } MidiDevice[] getDeviceCache() { return devices; } - void setDeviceCache(MidiDevice[] devices) { this.devices = devices; } + void setDeviceCache(MidiDevice[] devices) { MidiOutDeviceProvider.devices = devices; } Info[] getInfoCache() { return infos; } - void setInfoCache(Info[] infos) { this.infos = infos; } + void setInfoCache(Info[] infos) { MidiOutDeviceProvider.infos = infos; } // INNER CLASSES diff --git a/jdk/src/share/classes/com/sun/media/sound/PortMixer.java b/jdk/src/share/classes/com/sun/media/sound/PortMixer.java index 2ef76cbf488..705648004ff 100644 --- a/jdk/src/share/classes/com/sun/media/sound/PortMixer.java +++ b/jdk/src/share/classes/com/sun/media/sound/PortMixer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -212,7 +212,7 @@ final class PortMixer extends AbstractMixer { ports = new PortMixerPort[portInfos.length]; } if (ports[index] == null) { - ports[index] = new PortMixerPort((Port.Info)portInfos[index], this, index); + ports[index] = new PortMixerPort(portInfos[index], this, index); return ports[index]; } // $$fb TODO: return (Port) (ports[index].clone()); diff --git a/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java b/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java index 168b1b3656d..6ea2ec4b3c6 100644 --- a/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java +++ b/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -386,7 +386,7 @@ final class RealTimeSequencer extends AbstractMidiDevice // last resort: return a standard tempo: 120bpm return (float) MidiUtils.DEFAULT_TEMPO_MPQ; } - return (float)getDataPump().getTempoMPQ(); + return getDataPump().getTempoMPQ(); } diff --git a/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java b/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java index 688ba1dafaa..83c8848b4f9 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java +++ b/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -617,8 +617,8 @@ public final class SF2Soundbank implements Soundbank { private void writeGenerators(RIFFWriter writer, Map generators) throws IOException { - Short keyrange = (Short) generators.get(SF2Region.GENERATOR_KEYRANGE); - Short velrange = (Short) generators.get(SF2Region.GENERATOR_VELRANGE); + Short keyrange = generators.get(SF2Region.GENERATOR_KEYRANGE); + Short velrange = generators.get(SF2Region.GENERATOR_VELRANGE); if (keyrange != null) { writer.writeUnsignedShort(SF2Region.GENERATOR_KEYRANGE); writer.writeShort(keyrange); @@ -706,7 +706,7 @@ public final class SF2Soundbank implements Soundbank { } for (SF2InstrumentRegion region : preset.getRegions()) { writeGenerators(pgen_chunk, region.getGenerators()); - int ix = (int) layers.indexOf(region.layer); + int ix = layers.indexOf(region.layer); if (ix != -1) { pgen_chunk.writeUnsignedShort(SF2Region.GENERATOR_INSTRUMENT); pgen_chunk.writeShort((short) ix); diff --git a/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java b/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java index 0423448743d..009867ca09b 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java +++ b/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -44,7 +44,7 @@ public final class SoftInstrument extends Instrument { ins.getDataClass()); data = ins.getData(); this.ins = ins; - initPerformers(((ModelInstrument)ins).getPerformers()); + initPerformers(ins.getPerformers()); } public SoftInstrument(ModelInstrument ins, diff --git a/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java index 97e0dc2928a..365fd9c6c28 100644 --- a/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -141,7 +141,7 @@ public final class StandardMidiFileWriter extends MidiFileWriter { buffer = new byte[bufferSize]; while( (bytesRead = fileStream.read( buffer )) >= 0 ) { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; } // Done....return bytesWritten diff --git a/jdk/src/share/classes/com/sun/media/sound/Toolkit.java b/jdk/src/share/classes/com/sun/media/sound/Toolkit.java index 5d52b8fe791..f1d5addce91 100644 --- a/jdk/src/share/classes/com/sun/media/sound/Toolkit.java +++ b/jdk/src/share/classes/com/sun/media/sound/Toolkit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -74,7 +74,7 @@ public final class Toolkit { */ static float linearToDB(float linear) { - float dB = (float) (Math.log((double)((linear==0.0)?0.0001:linear))/Math.log(10.0) * 20.0); + float dB = (float) (Math.log(((linear==0.0)?0.0001:linear))/Math.log(10.0) * 20.0); return dB; } diff --git a/jdk/src/share/classes/com/sun/media/sound/UlawCodec.java b/jdk/src/share/classes/com/sun/media/sound/UlawCodec.java index 04fa5197b14..7dda283a0da 100644 --- a/jdk/src/share/classes/com/sun/media/sound/UlawCodec.java +++ b/jdk/src/share/classes/com/sun/media/sound/UlawCodec.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -301,7 +301,7 @@ public final class UlawCodec extends SunCodec { // set the AudioInputStream length in frames if we know it if (stream instanceof AudioInputStream) { - frameLength = ((AudioInputStream)stream).getFrameLength(); + frameLength = stream.getFrameLength(); } // set framePos to zero framePos = 0; @@ -406,8 +406,8 @@ public final class UlawCodec extends SunCodec { return readCount; } for (i = off; i < (off + (readCount*2)); i+=2) { - b[i] = (byte)tabByte1[b[readOffset] & 0xFF]; - b[i+1] = (byte)tabByte2[b[readOffset] & 0xFF]; + b[i] = tabByte1[b[readOffset] & 0xFF]; + b[i+1] = tabByte2[b[readOffset] & 0xFF]; readOffset++; } return (i - off); diff --git a/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java index c5f17e1bc8d..b9becd23d5a 100644 --- a/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -240,17 +240,17 @@ public final class WaveFileWriter extends SunFileWriter { if (maxLength>0) { if( bytesRead < maxLength ) { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; maxLength -= bytesRead; } else { - out.write( buffer, 0, (int)maxLength ); + out.write( buffer, 0, maxLength ); bytesWritten += maxLength; maxLength = 0; break; } } else { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; } } @@ -272,7 +272,7 @@ public final class WaveFileWriter extends SunFileWriter { short channels = (short) audioFormat.getChannels(); short sampleSizeInBits = (short) audioFormat.getSampleSizeInBits(); int sampleRate = (int) audioFormat.getSampleRate(); - int frameSizeInBytes = (int) audioFormat.getFrameSize(); + int frameSizeInBytes = audioFormat.getFrameSize(); int frameRate = (int) audioFormat.getFrameRate(); int avgBytesPerSec = channels * sampleSizeInBits * sampleRate / 8;; short blockAlign = (short) ((sampleSizeInBits / 8) * channels); diff --git a/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java b/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java index b2f16f03e57..98cae0f5a96 100644 --- a/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java +++ b/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -1282,7 +1282,7 @@ private int jjMoveNfa_0(int startState, int curPos) } else { - int hiByte = (int)(curChar >> 8); + int hiByte = (curChar >> 8); int i1 = hiByte >> 6; long l1 = 1L << (hiByte & 077); int i2 = (curChar & 0xff) >> 6; diff --git a/jdk/src/share/classes/java/awt/AWTKeyStroke.java b/jdk/src/share/classes/java/awt/AWTKeyStroke.java index 2cf7a332774..c4e07b45530 100644 --- a/jdk/src/share/classes/java/awt/AWTKeyStroke.java +++ b/jdk/src/share/classes/java/awt/AWTKeyStroke.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -243,7 +243,7 @@ public class AWTKeyStroke implements Serializable { return null; } }); - return (Constructor)ctor; + return ctor; } private static synchronized AWTKeyStroke getCachedStroke @@ -275,7 +275,7 @@ public class AWTKeyStroke implements Serializable { cacheKey.modifiers = mapNewModifiers(mapOldModifiers(modifiers)); cacheKey.onKeyRelease = onKeyRelease; - AWTKeyStroke stroke = (AWTKeyStroke)cache.get(cacheKey); + AWTKeyStroke stroke = cache.get(cacheKey); if (stroke == null) { stroke = cacheKey; cache.put(stroke, stroke); @@ -581,7 +581,7 @@ public class AWTKeyStroke implements Serializable { continue; } - Integer tokenMask = (Integer)modifierKeywords.get(token); + Integer tokenMask = modifierKeywords.get(token); if (tokenMask != null) { mask |= tokenMask.intValue(); } else { @@ -879,11 +879,11 @@ class VKCollection { public synchronized Integer findCode(String name) { assert(name != null); - return (Integer)name2code.get(name); + return name2code.get(name); } public synchronized String findName(Integer code) { assert(code != null); - return (String)code2name.get(code); + return code2name.get(code); } } diff --git a/jdk/src/share/classes/java/awt/BasicStroke.java b/jdk/src/share/classes/java/awt/BasicStroke.java index 80b4a3d3eb3..21a4bba8f14 100644 --- a/jdk/src/share/classes/java/awt/BasicStroke.java +++ b/jdk/src/share/classes/java/awt/BasicStroke.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -225,7 +225,7 @@ public class BasicStroke implements Stroke { this.join = join; this.miterlimit = miterlimit; if (dash != null) { - this.dash = (float []) dash.clone(); + this.dash = dash.clone(); } this.dash_phase = dash_phase; } @@ -359,7 +359,7 @@ public class BasicStroke implements Stroke { return null; } - return (float[]) dash.clone(); + return dash.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/CardLayout.java b/jdk/src/share/classes/java/awt/CardLayout.java index 35ee3379267..3ffb19fbee7 100644 --- a/jdk/src/share/classes/java/awt/CardLayout.java +++ b/jdk/src/share/classes/java/awt/CardLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -223,8 +223,8 @@ public class CardLayout implements LayoutManager2, comp.setVisible(false); } for (int i=0; i < vector.size(); i++) { - if (((Card)vector.get(i)).name.equals(name)) { - ((Card)vector.get(i)).comp = comp; + if ((vector.get(i)).name.equals(name)) { + (vector.get(i)).comp = comp; return; } } @@ -242,7 +242,7 @@ public class CardLayout implements LayoutManager2, public void removeLayoutComponent(Component comp) { synchronized (comp.getTreeLock()) { for (int i = 0; i < vector.size(); i++) { - if (((Card)vector.get(i)).comp == comp) { + if ((vector.get(i)).comp == comp) { // if we remove current component we should show next one if (comp.isVisible() && (comp.getParent() != null)) { next(comp.getParent()); @@ -527,7 +527,7 @@ public class CardLayout implements LayoutManager2, Component next = null; int ncomponents = vector.size(); for (int i = 0; i < ncomponents; i++) { - Card card = (Card)vector.get(i); + Card card = vector.get(i); if (card.name.equals(name)) { next = card.comp; currentCard = i; @@ -574,8 +574,8 @@ public class CardLayout implements LayoutManager2, vector = new Vector<>(); if (tab != null && !tab.isEmpty()) { for (Enumeration e = tab.keys() ; e.hasMoreElements() ; ) { - String key = (String)e.nextElement(); - Component comp = (Component)tab.get(key); + String key = e.nextElement(); + Component comp = tab.get(key); vector.add(new Card(key, comp)); if (comp.isVisible()) { currentCard = vector.size() - 1; @@ -597,7 +597,7 @@ public class CardLayout implements LayoutManager2, Hashtable tab = new Hashtable<>(); int ncomponents = vector.size(); for (int i = 0; i < ncomponents; i++) { - Card card = (Card)vector.get(i); + Card card = vector.get(i); tab.put(card.name, card.comp); } diff --git a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java index 040e659289a..94ac5f8225d 100644 --- a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -578,7 +578,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { // newFocusOwner is not focus traversable. dequeueKeyEvents(-1, newFocusOwner); if (KeyboardFocusManager.isAutoFocusTransferEnabled()) { - restoreFocus(fe, (Window)newFocusedWindow); + restoreFocus(fe, newFocusedWindow); } break; } @@ -590,7 +590,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { // Focus change was rejected. Unlikely, but possible. dequeueKeyEvents(-1, newFocusOwner); if (KeyboardFocusManager.isAutoFocusTransferEnabled()) { - restoreFocus(fe, (Window)newFocusedWindow); + restoreFocus(fe, newFocusedWindow); } break; } diff --git a/jdk/src/share/classes/java/awt/GradientPaintContext.java b/jdk/src/share/classes/java/awt/GradientPaintContext.java index 2536fa2cf04..12b86e8521a 100644 --- a/jdk/src/share/classes/java/awt/GradientPaintContext.java +++ b/jdk/src/share/classes/java/awt/GradientPaintContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -46,7 +46,7 @@ class GradientPaintContext implements PaintContext { static synchronized Raster getCachedRaster(ColorModel cm, int w, int h) { if (cm == cachedModel) { if (cached != null) { - Raster ras = (Raster) cached.get(); + Raster ras = cached.get(); if (ras != null && ras.getWidth() >= w && ras.getHeight() >= h) @@ -61,7 +61,7 @@ class GradientPaintContext implements PaintContext { static synchronized void putCachedRaster(ColorModel cm, Raster ras) { if (cached != null) { - Raster cras = (Raster) cached.get(); + Raster cras = cached.get(); if (cras != null) { int cw = cras.getWidth(); int ch = cras.getHeight(); diff --git a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java index 0184083ec5c..b02bb5b0dba 100644 --- a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -1909,7 +1909,7 @@ public abstract class KeyboardFocusManager static synchronized Component getMostRecentFocusOwner(Window window) { WeakReference weakValue = (WeakReference)mostRecentFocusOwners.get(window); - return weakValue == null ? null : (Component)weakValue.get(); + return weakValue == null ? null : weakValue.get(); } /** @@ -2496,9 +2496,9 @@ public abstract class KeyboardFocusManager HeavyweightFocusRequest.CLEAR_GLOBAL_FOCUS_OWNER) { int size = heavyweightRequests.size(); - hwFocusRequest = (HeavyweightFocusRequest)((size >= 2) + hwFocusRequest = (size >= 2) ? heavyweightRequests.get(size - 2) - : null); + : null; } if (focusedWindowChanged(heavyweight, (hwFocusRequest != null) diff --git a/jdk/src/share/classes/java/awt/MultipleGradientPaintContext.java b/jdk/src/share/classes/java/awt/MultipleGradientPaintContext.java index cdff1907d95..f9bfe04c094 100644 --- a/jdk/src/share/classes/java/awt/MultipleGradientPaintContext.java +++ b/jdk/src/share/classes/java/awt/MultipleGradientPaintContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, 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 @@ -665,7 +665,7 @@ abstract class MultipleGradientPaintContext implements PaintContext { { if (cm == cachedModel) { if (cached != null) { - Raster ras = (Raster) cached.get(); + Raster ras = cached.get(); if (ras != null && ras.getWidth() >= w && ras.getHeight() >= h) @@ -687,7 +687,7 @@ abstract class MultipleGradientPaintContext implements PaintContext { Raster ras) { if (cached != null) { - Raster cras = (Raster) cached.get(); + Raster cras = cached.get(); if (cras != null) { int cw = cras.getWidth(); int ch = cras.getHeight(); diff --git a/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java b/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java index be3ad5fec6a..5f388960d8c 100644 --- a/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java +++ b/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -418,9 +418,8 @@ public class ScrollPaneAdjustable implements Adjustable, Serializable { * @since 1.4 */ public synchronized AdjustmentListener[] getAdjustmentListeners() { - return (AdjustmentListener[])(AWTEventMulticaster.getListeners( - adjustmentListener, - AdjustmentListener.class)); + return AWTEventMulticaster.getListeners(adjustmentListener, + AdjustmentListener.class); } /** diff --git a/jdk/src/share/classes/java/awt/SequencedEvent.java b/jdk/src/share/classes/java/awt/SequencedEvent.java index 0ae8dad64db..835c040c85c 100644 --- a/jdk/src/share/classes/java/awt/SequencedEvent.java +++ b/jdk/src/share/classes/java/awt/SequencedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -160,7 +160,7 @@ class SequencedEvent extends AWTEvent implements ActiveEvent { } private final synchronized static SequencedEvent getFirst() { - return (SequencedEvent)list.getFirst(); + return list.getFirst(); } /* Disposes all events from disposed AppContext @@ -211,7 +211,7 @@ class SequencedEvent extends AWTEvent implements ActiveEvent { list.removeFirst(); if (!list.isEmpty()) { - next = (SequencedEvent)list.getFirst(); + next = list.getFirst(); } } else { list.remove(this); diff --git a/jdk/src/share/classes/java/awt/SystemTray.java b/jdk/src/share/classes/java/awt/SystemTray.java index b8344eeee95..7f3a5c31893 100644 --- a/jdk/src/share/classes/java/awt/SystemTray.java +++ b/jdk/src/share/classes/java/awt/SystemTray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -337,7 +337,7 @@ public class SystemTray { public TrayIcon[] getTrayIcons() { Vector icons = (Vector)AppContext.getAppContext().get(TrayIcon.class); if (icons != null) { - return (TrayIcon[])icons.toArray(new TrayIcon[icons.size()]); + return icons.toArray(new TrayIcon[icons.size()]); } return EMPTY_TRAY_ARRAY; } diff --git a/jdk/src/share/classes/java/awt/color/CMMException.java b/jdk/src/share/classes/java/awt/color/CMMException.java index 04497f69cc4..c175bc38ebe 100644 --- a/jdk/src/share/classes/java/awt/color/CMMException.java +++ b/jdk/src/share/classes/java/awt/color/CMMException.java @@ -47,6 +47,7 @@ package java.awt.color; */ public class CMMException extends java.lang.RuntimeException { + private static final long serialVersionUID = 5775558044142994965L; /** * Constructs a CMMException with the specified detail message. diff --git a/jdk/src/share/classes/java/awt/color/ProfileDataException.java b/jdk/src/share/classes/java/awt/color/ProfileDataException.java index 829a92862f8..1a37014b89f 100644 --- a/jdk/src/share/classes/java/awt/color/ProfileDataException.java +++ b/jdk/src/share/classes/java/awt/color/ProfileDataException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -31,6 +31,7 @@ package java.awt.color; */ public class ProfileDataException extends java.lang.RuntimeException { + private static final long serialVersionUID = 7286140888240322498L; /** * Constructs a ProfileDataException with the specified detail message. diff --git a/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java b/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java index cbf172ba05c..1fb29ddd3b7 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java +++ b/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java @@ -730,9 +730,8 @@ public class DataFlavor implements Externalizable, Cloneable { textFlavorComparator = new TextFlavorComparator(); } - DataFlavor bestFlavor = - (DataFlavor)Collections.max(Arrays.asList(availableFlavors), - textFlavorComparator); + DataFlavor bestFlavor = Collections.max(Arrays.asList(availableFlavors), + textFlavorComparator); if (!bestFlavor.isFlavorTextType()) { return null; diff --git a/jdk/src/share/classes/java/awt/datatransfer/FlavorEvent.java b/jdk/src/share/classes/java/awt/datatransfer/FlavorEvent.java index 036ea9aef10..3e627e69603 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/FlavorEvent.java +++ b/jdk/src/share/classes/java/awt/datatransfer/FlavorEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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,6 +38,8 @@ import java.util.EventObject; * @since 1.5 */ public class FlavorEvent extends EventObject { + private static final long serialVersionUID = -5842664112252414548L; + /** * Constructs a FlavorEvent object. * diff --git a/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java b/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java index c65f04fbaa7..dfeb3bdfe9a 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java +++ b/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -76,7 +76,7 @@ public class StringSelection implements Transferable, ClipboardOwner { public DataFlavor[] getTransferDataFlavors() { // returning flavors itself would allow client code to modify // our internal behavior - return (DataFlavor[])flavors.clone(); + return flavors.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/geom/IllegalPathStateException.java b/jdk/src/share/classes/java/awt/geom/IllegalPathStateException.java index 629a46576ac..b07ea6af2aa 100644 --- a/jdk/src/share/classes/java/awt/geom/IllegalPathStateException.java +++ b/jdk/src/share/classes/java/awt/geom/IllegalPathStateException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -35,6 +35,8 @@ package java.awt.geom; */ public class IllegalPathStateException extends RuntimeException { + private static final long serialVersionUID = -5158084205220481094L; + /** * Constructs an IllegalPathStateException with no * detail message. diff --git a/jdk/src/share/classes/java/awt/geom/NoninvertibleTransformException.java b/jdk/src/share/classes/java/awt/geom/NoninvertibleTransformException.java index 72c1417ba77..8184f784b2b 100644 --- a/jdk/src/share/classes/java/awt/geom/NoninvertibleTransformException.java +++ b/jdk/src/share/classes/java/awt/geom/NoninvertibleTransformException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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,6 +33,8 @@ package java.awt.geom; */ public class NoninvertibleTransformException extends java.lang.Exception { + private static final long serialVersionUID = 6137225240503990466L; + /** * Constructs an instance of * NoninvertibleTransformException diff --git a/jdk/src/share/classes/java/awt/im/InputContext.java b/jdk/src/share/classes/java/awt/im/InputContext.java index 615029120dd..9d6122d2781 100644 --- a/jdk/src/share/classes/java/awt/im/InputContext.java +++ b/jdk/src/share/classes/java/awt/im/InputContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -87,6 +87,7 @@ public class InputContext { /** * Returns a new InputContext instance. + * @return a new InputContext instance */ public static InputContext getInstance() { return new sun.awt.im.InputMethodContext(); diff --git a/jdk/src/share/classes/java/awt/im/InputMethodHighlight.java b/jdk/src/share/classes/java/awt/im/InputMethodHighlight.java index 55905d97708..df09076410d 100644 --- a/jdk/src/share/classes/java/awt/im/InputMethodHighlight.java +++ b/jdk/src/share/classes/java/awt/im/InputMethodHighlight.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -157,6 +157,7 @@ public class InputMethodHighlight { /** * Returns whether the text range is selected. + * @return whether the text range is selected */ public boolean isSelected() { return selected; @@ -174,6 +175,7 @@ public class InputMethodHighlight { /** * Returns the variation of the text range. + * @return the variation of the text range */ public int getVariation() { return variation; @@ -181,6 +183,7 @@ public class InputMethodHighlight { /** * Returns the rendering style attributes for the text range, or null. + * @return the rendering style attributes for the text range, or null * @since 1.3 */ public Map getStyle() { diff --git a/jdk/src/share/classes/java/awt/im/spi/InputMethodContext.java b/jdk/src/share/classes/java/awt/im/spi/InputMethodContext.java index 8e06c39299b..45517c37b23 100644 --- a/jdk/src/share/classes/java/awt/im/spi/InputMethodContext.java +++ b/jdk/src/share/classes/java/awt/im/spi/InputMethodContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -52,6 +52,14 @@ public interface InputMethodContext extends InputMethodRequests { * Creates an input method event from the arguments given * and dispatches it to the client component. For arguments, * see {@link java.awt.event.InputMethodEvent#InputMethodEvent}. + * @param id the event type + * @param text the combined committed and composed text + * @param committedCharacterCount the number of committed characters in the text + * @param caret the caret (a.k.a. insertion point); null if + * there's no caret within current composed text + * @param visiblePosition the position that's most important to be + * visible; null if there's no recommendation for a visible + * position within current composed text */ public void dispatchInputMethodEvent(int id, AttributedCharacterIterator text, int committedCharacterCount, diff --git a/jdk/src/share/classes/java/awt/im/spi/InputMethodDescriptor.java b/jdk/src/share/classes/java/awt/im/spi/InputMethodDescriptor.java index d462095bb8f..885e7ad4e09 100644 --- a/jdk/src/share/classes/java/awt/im/spi/InputMethodDescriptor.java +++ b/jdk/src/share/classes/java/awt/im/spi/InputMethodDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -72,6 +72,8 @@ public interface InputMethodDescriptor { * Returns whether the list of available locales can change * at runtime. This may be the case, for example, for adapters * that access real input methods over the network. + * @return whether the list of available locales can change at + * runtime */ boolean hasDynamicLocaleList(); @@ -92,6 +94,9 @@ public interface InputMethodDescriptor { * * @param inputLocale the locale for which text input is supported, or null * @param displayLanguage the language in which the name will be displayed + * @return the user-visible name of the corresponding input method + * for the given input locale in the language in which the name + * will be displayed */ String getInputMethodDisplayName(Locale inputLocale, Locale displayLanguage); diff --git a/jdk/src/share/classes/java/awt/image/AffineTransformOp.java b/jdk/src/share/classes/java/awt/image/AffineTransformOp.java index 30819ba8897..9e6a66eea5c 100644 --- a/jdk/src/share/classes/java/awt/image/AffineTransformOp.java +++ b/jdk/src/share/classes/java/awt/image/AffineTransformOp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -110,23 +110,23 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { this.hints = hints; if (hints != null) { - Object value = hints.get(hints.KEY_INTERPOLATION); + Object value = hints.get(RenderingHints.KEY_INTERPOLATION); if (value == null) { - value = hints.get(hints.KEY_RENDERING); - if (value == hints.VALUE_RENDER_SPEED) { + value = hints.get(RenderingHints.KEY_RENDERING); + if (value == RenderingHints.VALUE_RENDER_SPEED) { interpolationType = TYPE_NEAREST_NEIGHBOR; } - else if (value == hints.VALUE_RENDER_QUALITY) { + else if (value == RenderingHints.VALUE_RENDER_QUALITY) { interpolationType = TYPE_BILINEAR; } } - else if (value == hints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR) { + else if (value == RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR) { interpolationType = TYPE_NEAREST_NEIGHBOR; } - else if (value == hints.VALUE_INTERPOLATION_BILINEAR) { + else if (value == RenderingHints.VALUE_INTERPOLATION_BILINEAR) { interpolationType = TYPE_BILINEAR; } - else if (value == hints.VALUE_INTERPOLATION_BICUBIC) { + else if (value == RenderingHints.VALUE_INTERPOLATION_BICUBIC) { interpolationType = TYPE_BICUBIC; } } @@ -235,10 +235,12 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { { int type = xform.getType(); boolean needTrans = ((type& - (xform.TYPE_MASK_ROTATION| - xform.TYPE_GENERAL_TRANSFORM)) + (AffineTransform.TYPE_MASK_ROTATION| + AffineTransform.TYPE_GENERAL_TRANSFORM)) != 0); - if (! needTrans && type != xform.TYPE_TRANSLATION && type != xform.TYPE_IDENTITY) + if (! needTrans && + type != AffineTransform.TYPE_TRANSLATION && + type != AffineTransform.TYPE_IDENTITY) { double[] mtx = new double[4]; xform.getMatrix(mtx); diff --git a/jdk/src/share/classes/java/awt/image/ComponentColorModel.java b/jdk/src/share/classes/java/awt/image/ComponentColorModel.java index 28e41a2bc27..e2fe5e13eb4 100644 --- a/jdk/src/share/classes/java/awt/image/ComponentColorModel.java +++ b/jdk/src/share/classes/java/awt/image/ComponentColorModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -1514,13 +1514,13 @@ public class ComponentColorModel extends ColorModel { intpixel[0] = (int) (red * factor * ((1<= 0"); @@ -211,8 +211,8 @@ public class ComponentSampleModel extends SampleModel this.dataType = dataType; this.pixelStride = pixelStride; this.scanlineStride = scanlineStride; - this.bandOffsets = (int[])bandOffsets.clone(); - this.bankIndices = (int[]) bankIndices.clone(); + this.bandOffsets = bandOffsets.clone(); + this.bankIndices = bankIndices.clone(); if (pixelStride < 0) { throw new IllegalArgumentException("Pixel stride must be >= 0"); } @@ -526,14 +526,14 @@ public class ComponentSampleModel extends SampleModel * @return the bank indices for all bands. */ public final int [] getBankIndices() { - return (int[]) bankIndices.clone(); + return bankIndices.clone(); } /** Returns the band offset for all bands. * @return the band offsets for all bands. */ public final int [] getBandOffsets() { - return (int[])bandOffsets.clone(); + return bandOffsets.clone(); } /** Returns the scanline stride of this ComponentSampleModel. diff --git a/jdk/src/share/classes/java/awt/image/DataBuffer.java b/jdk/src/share/classes/java/awt/image/DataBuffer.java index 5bf9652080c..b23813bab4f 100644 --- a/jdk/src/share/classes/java/awt/image/DataBuffer.java +++ b/jdk/src/share/classes/java/awt/image/DataBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -279,7 +279,7 @@ public abstract class DataBuffer { this.banks = numBanks; this.size = size; this.offset = offsets[0]; - this.offsets = (int[])offsets.clone(); + this.offsets = offsets.clone(); } /** Returns the data type of this DataBuffer. @@ -307,7 +307,7 @@ public abstract class DataBuffer { * @return the offsets of all banks. */ public int[] getOffsets() { - return (int[])offsets.clone(); + return offsets.clone(); } /** Returns the number of banks in this DataBuffer. diff --git a/jdk/src/share/classes/java/awt/image/DataBufferByte.java b/jdk/src/share/classes/java/awt/image/DataBufferByte.java index 7d35b47e0a3..f4e40cbc3a9 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferByte.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferByte.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -156,7 +156,7 @@ public final class DataBufferByte extends DataBuffer */ public DataBufferByte(byte dataArray[][], int size) { super(UNTRACKABLE, TYPE_BYTE, size, dataArray.length); - bankdata = (byte[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -181,7 +181,7 @@ public final class DataBufferByte extends DataBuffer */ public DataBufferByte(byte dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_BYTE, size, dataArray.length, offsets); - bankdata = (byte[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -228,7 +228,7 @@ public final class DataBufferByte extends DataBuffer */ public byte[][] getBankData() { theTrackable.setUntrackable(); - return (byte[][]) bankdata.clone(); + return bankdata.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/image/DataBufferDouble.java b/jdk/src/share/classes/java/awt/image/DataBufferDouble.java index 92143fa78c4..85c5c37862a 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferDouble.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferDouble.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -154,7 +154,7 @@ public final class DataBufferDouble extends DataBuffer { */ public DataBufferDouble(double dataArray[][], int size) { super(UNTRACKABLE, TYPE_DOUBLE, size, dataArray.length); - bankdata = (double[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -178,7 +178,7 @@ public final class DataBufferDouble extends DataBuffer { */ public DataBufferDouble(double dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_DOUBLE, size, dataArray.length, offsets); - bankdata = (double[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -225,7 +225,7 @@ public final class DataBufferDouble extends DataBuffer { */ public double[][] getBankData() { theTrackable.setUntrackable(); - return (double[][]) bankdata.clone(); + return bankdata.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/image/DataBufferFloat.java b/jdk/src/share/classes/java/awt/image/DataBufferFloat.java index c3fa5b2e2aa..12daeafe200 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferFloat.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferFloat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -156,7 +156,7 @@ public final class DataBufferFloat extends DataBuffer { */ public DataBufferFloat(float dataArray[][], int size) { super(UNTRACKABLE, TYPE_FLOAT, size, dataArray.length); - bankdata = (float[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -180,7 +180,7 @@ public final class DataBufferFloat extends DataBuffer { */ public DataBufferFloat(float dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_FLOAT, size,dataArray.length, offsets); - bankdata = (float[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -227,7 +227,7 @@ public final class DataBufferFloat extends DataBuffer { */ public float[][] getBankData() { theTrackable.setUntrackable(); - return (float[][]) bankdata.clone(); + return bankdata.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/image/DataBufferInt.java b/jdk/src/share/classes/java/awt/image/DataBufferInt.java index 2a3cf23a04b..afa60a11ee5 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferInt.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferInt.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -154,7 +154,7 @@ public final class DataBufferInt extends DataBuffer */ public DataBufferInt(int dataArray[][], int size) { super(UNTRACKABLE, TYPE_INT, size, dataArray.length); - bankdata = (int [][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -179,7 +179,7 @@ public final class DataBufferInt extends DataBuffer */ public DataBufferInt(int dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_INT, size, dataArray.length, offsets); - bankdata = (int [][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -226,7 +226,7 @@ public final class DataBufferInt extends DataBuffer */ public int[][] getBankData() { theTrackable.setUntrackable(); - return (int [][]) bankdata.clone(); + return bankdata.clone(); } /** @@ -278,7 +278,7 @@ public final class DataBufferInt extends DataBuffer * @see #getElem(int, int) */ public void setElem(int bank, int i, int val) { - bankdata[bank][i+offsets[bank]] = (int)val; + bankdata[bank][i+offsets[bank]] = val; theTrackable.markDirty(); } } diff --git a/jdk/src/share/classes/java/awt/image/DataBufferShort.java b/jdk/src/share/classes/java/awt/image/DataBufferShort.java index b95f6aae4a1..f8a9da2b3cb 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferShort.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferShort.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -153,7 +153,7 @@ public final class DataBufferShort extends DataBuffer */ public DataBufferShort(short dataArray[][], int size) { super(UNTRACKABLE, TYPE_SHORT, size, dataArray.length); - bankdata = (short[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -178,7 +178,7 @@ public final class DataBufferShort extends DataBuffer */ public DataBufferShort(short dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_SHORT, size, dataArray.length, offsets); - bankdata = (short[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -225,7 +225,7 @@ public final class DataBufferShort extends DataBuffer */ public short[][] getBankData() { theTrackable.setUntrackable(); - return (short[][]) bankdata.clone(); + return bankdata.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/image/DataBufferUShort.java b/jdk/src/share/classes/java/awt/image/DataBufferUShort.java index 65919a7f5d5..9020ba78e63 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferUShort.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferUShort.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -174,7 +174,7 @@ public final class DataBufferUShort extends DataBuffer } } - bankdata = (short[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -213,7 +213,7 @@ public final class DataBufferUShort extends DataBuffer } } - bankdata = (short[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -260,7 +260,7 @@ public final class DataBufferUShort extends DataBuffer */ public short[][] getBankData() { theTrackable.setUntrackable(); - return (short[][]) bankdata.clone(); + return bankdata.clone(); } /** @@ -272,7 +272,7 @@ public final class DataBufferUShort extends DataBuffer * @see #setElem(int, int, int) */ public int getElem(int i) { - return (int)(data[i+offset]&0xffff); + return data[i+offset]&0xffff; } /** @@ -285,7 +285,7 @@ public final class DataBufferUShort extends DataBuffer * @see #setElem(int, int, int) */ public int getElem(int bank, int i) { - return (int)(bankdata[bank][i+offsets[bank]]&0xffff); + return bankdata[bank][i+offsets[bank]]&0xffff; } /** diff --git a/jdk/src/share/classes/java/awt/image/ImagingOpException.java b/jdk/src/share/classes/java/awt/image/ImagingOpException.java index c139e47a521..ca12f18f371 100644 --- a/jdk/src/share/classes/java/awt/image/ImagingOpException.java +++ b/jdk/src/share/classes/java/awt/image/ImagingOpException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -32,6 +32,7 @@ package java.awt.image; * process the image. */ public class ImagingOpException extends java.lang.RuntimeException { + private static final long serialVersionUID = 8026288481846276658L; /** * Constructs an ImagingOpException object with the diff --git a/jdk/src/share/classes/java/awt/image/IndexColorModel.java b/jdk/src/share/classes/java/awt/image/IndexColorModel.java index 7e4317cd3ab..16431ebc8af 100644 --- a/jdk/src/share/classes/java/awt/image/IndexColorModel.java +++ b/jdk/src/share/classes/java/awt/image/IndexColorModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -909,7 +909,7 @@ public class IndexColorModel extends ColorModel { int minDist = 256; int d; - int gray = (int) (red*77 + green*150 + blue*29 + 128)/256; + int gray = (red*77 + green*150 + blue*29 + 128)/256; for (int i = 0; i < map_size; i++) { if (this.rgb[i] == 0x0) { diff --git a/jdk/src/share/classes/java/awt/image/LookupOp.java b/jdk/src/share/classes/java/awt/image/LookupOp.java index 288abaf8645..1b872ed9255 100644 --- a/jdk/src/share/classes/java/awt/image/LookupOp.java +++ b/jdk/src/share/classes/java/awt/image/LookupOp.java @@ -1,5 +1,6 @@ + /* - * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -373,11 +374,11 @@ public class LookupOp implements BufferedImageOp, RasterOp { int trans = cm.getTransparency(); int[] nbits = null; if (ltable instanceof ByteLookupTable) { - if (db.getDataType() == db.TYPE_USHORT) { + if (db.getDataType() == DataBuffer.TYPE_USHORT) { // Dst raster should be of type byte if (hasAlpha) { nbits = new int[2]; - if (trans == cm.BITMASK) { + if (trans == java.awt.Transparency.BITMASK) { nbits[1] = 1; } else { @@ -393,10 +394,10 @@ public class LookupOp implements BufferedImageOp, RasterOp { } else if (ltable instanceof ShortLookupTable) { transferType = DataBuffer.TYPE_USHORT; - if (db.getDataType() == db.TYPE_BYTE) { + if (db.getDataType() == DataBuffer.TYPE_BYTE) { if (hasAlpha) { nbits = new int[2]; - if (trans == cm.BITMASK) { + if (trans == java.awt.Transparency.BITMASK) { nbits[1] = 1; } else { diff --git a/jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.java b/jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.java index ebd41f61b25..c3c2b2a6c3d 100644 --- a/jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.java +++ b/jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -198,7 +198,7 @@ public class MultiPixelPackedSampleModel extends SampleModel public DataBuffer createDataBuffer() { DataBuffer dataBuffer = null; - int size = (int)scanlineStride*height; + int size = scanlineStride*height; switch (dataType) { case DataBuffer.TYPE_BYTE: dataBuffer = new DataBufferByte(size+(dataBitOffset+7)/8); diff --git a/jdk/src/share/classes/java/awt/image/PackedColorModel.java b/jdk/src/share/classes/java/awt/image/PackedColorModel.java index 3c910255aab..1ff6ecd0b10 100644 --- a/jdk/src/share/classes/java/awt/image/PackedColorModel.java +++ b/jdk/src/share/classes/java/awt/image/PackedColorModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -252,7 +252,7 @@ public abstract class PackedColorModel extends ColorModel { * representation contain the color or alpha samples. */ final public int[] getMasks() { - return (int[]) maskArray.clone(); + return maskArray.clone(); } /* diff --git a/jdk/src/share/classes/java/awt/image/RasterFormatException.java b/jdk/src/share/classes/java/awt/image/RasterFormatException.java index 59dd8959936..976eb782201 100644 --- a/jdk/src/share/classes/java/awt/image/RasterFormatException.java +++ b/jdk/src/share/classes/java/awt/image/RasterFormatException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -31,6 +31,7 @@ package java.awt.image; * invalid layout information in the {@link Raster}. */ public class RasterFormatException extends java.lang.RuntimeException { + private static final long serialVersionUID = 96598996116164315L; /** * Constructs a new RasterFormatException with the diff --git a/jdk/src/share/classes/java/awt/image/RescaleOp.java b/jdk/src/share/classes/java/awt/image/RescaleOp.java index c48b98ebb77..e8fa30ee947 100644 --- a/jdk/src/share/classes/java/awt/image/RescaleOp.java +++ b/jdk/src/share/classes/java/awt/image/RescaleOp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -144,7 +144,7 @@ public class RescaleOp implements BufferedImageOp, RasterOp { */ final public float[] getScaleFactors (float scaleFactors[]) { if (scaleFactors == null) { - return (float[]) this.scaleFactors.clone(); + return this.scaleFactors.clone(); } System.arraycopy (this.scaleFactors, 0, scaleFactors, 0, Math.min(this.scaleFactors.length, @@ -162,7 +162,7 @@ public class RescaleOp implements BufferedImageOp, RasterOp { */ final public float[] getOffsets(float offsets[]) { if (offsets == null) { - return (float[]) this.offsets.clone(); + return this.offsets.clone(); } System.arraycopy (this.offsets, 0, offsets, 0, diff --git a/jdk/src/share/classes/java/awt/image/SinglePixelPackedSampleModel.java b/jdk/src/share/classes/java/awt/image/SinglePixelPackedSampleModel.java index 58c1db0b726..ab01aef2a2a 100644 --- a/jdk/src/share/classes/java/awt/image/SinglePixelPackedSampleModel.java +++ b/jdk/src/share/classes/java/awt/image/SinglePixelPackedSampleModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -149,7 +149,7 @@ public class SinglePixelPackedSampleModel extends SampleModel dataType); } this.dataType = dataType; - this.bitMasks = (int[]) bitMasks.clone(); + this.bitMasks = bitMasks.clone(); this.scanlineStride = scanlineStride; this.bitOffsets = new int[numBands]; @@ -276,14 +276,14 @@ public class SinglePixelPackedSampleModel extends SampleModel * @return the bit offsets representing a pixel for all bands. */ public int [] getBitOffsets() { - return (int[])bitOffsets.clone(); + return bitOffsets.clone(); } /** Returns the bit masks for all bands. * @return the bit masks for all bands. */ public int [] getBitMasks() { - return (int[])bitMasks.clone(); + return bitMasks.clone(); } /** Returns the scanline stride of this SinglePixelPackedSampleModel. @@ -746,7 +746,7 @@ public class SinglePixelPackedSampleModel extends SampleModel int value = data.getElem(lineOffset+j); value &= ~bitMasks[b]; int sample = iArray[srcOffset++]; - value |= ((int)sample << bitOffsets[b]) & bitMasks[b]; + value |= (sample << bitOffsets[b]) & bitMasks[b]; data.setElem(lineOffset+j,value); } lineOffset += scanlineStride; diff --git a/jdk/src/share/classes/java/awt/image/renderable/ParameterBlock.java b/jdk/src/share/classes/java/awt/image/renderable/ParameterBlock.java index 9726020dd30..ca12bfc4c4b 100644 --- a/jdk/src/share/classes/java/awt/image/renderable/ParameterBlock.java +++ b/jdk/src/share/classes/java/awt/image/renderable/ParameterBlock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -93,6 +93,8 @@ import java.util.Vector; * * */ public class ParameterBlock implements Cloneable, Serializable { + private static final long serialVersionUID = -7577115551785240750L; + /** A Vector of sources, stored as arbitrary Objects. */ protected Vector sources = new Vector(); diff --git a/jdk/src/share/classes/java/awt/peer/CanvasPeer.java b/jdk/src/share/classes/java/awt/peer/CanvasPeer.java index ba17df0252c..da1c4c0fe5a 100644 --- a/jdk/src/share/classes/java/awt/peer/CanvasPeer.java +++ b/jdk/src/share/classes/java/awt/peer/CanvasPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -42,6 +42,8 @@ public interface CanvasPeer extends ComponentPeer { * from the requested GC passed as the argument to this method. This method * must return a non-null value (given the argument is non-null as well). * + * @param gc the requested graphics configuration + * @return a graphics configuration that best suits this Canvas * @since 1.7 */ GraphicsConfiguration getAppropriateGraphicsConfiguration( diff --git a/jdk/src/share/classes/java/awt/peer/ComponentPeer.java b/jdk/src/share/classes/java/awt/peer/ComponentPeer.java index b34f40f1cdd..8f0366711e5 100644 --- a/jdk/src/share/classes/java/awt/peer/ComponentPeer.java +++ b/jdk/src/share/classes/java/awt/peer/ComponentPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -516,6 +516,7 @@ public interface ComponentPeer { /** * Applies the shape to the native component window. + * @param shape the shape to apply * @since 1.7 * * @see Component#applyCompoundShape @@ -525,12 +526,13 @@ public interface ComponentPeer { /** * Lowers this component at the bottom of the above HW peer. If the above parameter * is null then the method places this component at the top of the Z-order. + * @param above the peer to lower this component with respect to */ void setZOrder(ComponentPeer above); /** * Updates internal data structures related to the component's GC. - * + * @param gc the reference graphics configuration * @return if the peer needs to be recreated for the changes to take effect * @since 1.7 */ diff --git a/jdk/src/share/classes/java/awt/peer/MouseInfoPeer.java b/jdk/src/share/classes/java/awt/peer/MouseInfoPeer.java index 0594bda78bb..9087810b37d 100644 --- a/jdk/src/share/classes/java/awt/peer/MouseInfoPeer.java +++ b/jdk/src/share/classes/java/awt/peer/MouseInfoPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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,6 +55,10 @@ public interface MouseInfoPeer { * is located. * See java.awt.GraphicsConfiguration documentation for more * details about virtual screen devices. + * @param point holder for the current coordinates of the mouse + * cursor + * @return the number of the screen device where the pointer is + * located */ int fillPointWithCoords(Point point); @@ -63,6 +67,9 @@ public interface MouseInfoPeer { * pointer. The window is considered to be under the mouse pointer * if it is showing on the screen, and the mouse pointer is above * the part of the window that is not obscured by any other windows. + * @param w the window to check + * @return whether or not the window is located under the mouse + * pointer */ boolean isWindowUnderMouse(Window w); diff --git a/jdk/src/share/classes/java/awt/peer/WindowPeer.java b/jdk/src/share/classes/java/awt/peer/WindowPeer.java index e181b5b3018..65346489990 100644 --- a/jdk/src/share/classes/java/awt/peer/WindowPeer.java +++ b/jdk/src/share/classes/java/awt/peer/WindowPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -94,14 +94,15 @@ public interface WindowPeer extends ContainerPeer { /** * Sets the level of opacity for the window. - * + * @param opacity the level of opacity * @see Window#setOpacity(float) */ void setOpacity(float opacity); /** * Enables the per-pixel alpha support for the window. - * + * @param isOpaque whether or not per-pixel alpha support is + * enabled * @see Window#setBackground(Color) */ void setOpaque(boolean isOpaque); diff --git a/jdk/src/share/classes/java/awt/print/PrinterAbortException.java b/jdk/src/share/classes/java/awt/print/PrinterAbortException.java index d775121dbf1..f421dae9bea 100644 --- a/jdk/src/share/classes/java/awt/print/PrinterAbortException.java +++ b/jdk/src/share/classes/java/awt/print/PrinterAbortException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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,6 +33,7 @@ package java.awt.print; */ public class PrinterAbortException extends PrinterException { + private static final long serialVersionUID = 4725169026278854136L; /** * Constructs a new PrinterAbortException with no diff --git a/jdk/src/share/classes/java/awt/print/PrinterException.java b/jdk/src/share/classes/java/awt/print/PrinterException.java index 6304b29c481..5ec275ec5f0 100644 --- a/jdk/src/share/classes/java/awt/print/PrinterException.java +++ b/jdk/src/share/classes/java/awt/print/PrinterException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -32,6 +32,7 @@ package java.awt.print; */ public class PrinterException extends Exception { + private static final long serialVersionUID = -3757589981158265819L; /** * Constructs a new PrinterException object diff --git a/jdk/src/share/classes/java/lang/Class.java b/jdk/src/share/classes/java/lang/Class.java index ea47cca2fca..a8aee7ffe62 100644 --- a/jdk/src/share/classes/java/lang/Class.java +++ b/jdk/src/share/classes/java/lang/Class.java @@ -1488,10 +1488,9 @@ public final class Class implements java.io.Serializable, List> list = new ArrayList<>(); Class currentClass = Class.this; while (currentClass != null) { - Class[] members = currentClass.getDeclaredClasses(); - for (int i = 0; i < members.length; i++) { - if (Modifier.isPublic(members[i].getModifiers())) { - list.add(members[i]); + for (Class m : currentClass.getDeclaredClasses()) { + if (Modifier.isPublic(m.getModifiers())) { + list.add(m); } } currentClass = currentClass.getSuperclass(); @@ -2626,8 +2625,8 @@ public final class Class implements java.io.Serializable, } private static void addAll(Collection c, Field[] o) { - for (int i = 0; i < o.length; i++) { - c.add(o[i]); + for (Field f : o) { + c.add(f); } } @@ -2713,8 +2712,8 @@ public final class Class implements java.io.Serializable, } void addAll(Method[] ma) { - for (int i = 0; i < ma.length; i++) { - add(ma[i]); + for (Method m : ma) { + add(m); } } @@ -2819,9 +2818,8 @@ public final class Class implements java.io.Serializable, // out concrete implementations inherited from superclasses at // the end. MethodArray inheritedMethods = new MethodArray(); - Class[] interfaces = getInterfaces(); - for (int i = 0; i < interfaces.length; i++) { - inheritedMethods.addAllNonStatic(interfaces[i].privateGetPublicMethods()); + for (Class i : getInterfaces()) { + inheritedMethods.addAllNonStatic(i.privateGetPublicMethods()); } if (!isInterface()) { Class c = getSuperclass(); @@ -2864,9 +2862,9 @@ public final class Class implements java.io.Serializable, private static Field searchFields(Field[] fields, String name) { String internedName = name.intern(); - for (int i = 0; i < fields.length; i++) { - if (fields[i].getName() == internedName) { - return getReflectionFactory().copyField(fields[i]); + for (Field field : fields) { + if (field.getName() == internedName) { + return getReflectionFactory().copyField(field); } } return null; @@ -2887,8 +2885,7 @@ public final class Class implements java.io.Serializable, } // Direct superinterfaces, recursively Class[] interfaces = getInterfaces(); - for (int i = 0; i < interfaces.length; i++) { - Class c = interfaces[i]; + for (Class c : interfaces) { if ((res = c.getField0(name)) != null) { return res; } @@ -2911,8 +2908,7 @@ public final class Class implements java.io.Serializable, { Method res = null; String internedName = name.intern(); - for (int i = 0; i < methods.length; i++) { - Method m = methods[i]; + for (Method m : methods) { if (m.getName() == internedName && arrayContentsEq(parameterTypes, m.getParameterTypes()) && (res == null diff --git a/jdk/src/share/classes/java/lang/ClassLoader.java b/jdk/src/share/classes/java/lang/ClassLoader.java index 875f5ec8e97..078c1502176 100644 --- a/jdk/src/share/classes/java/lang/ClassLoader.java +++ b/jdk/src/share/classes/java/lang/ClassLoader.java @@ -172,6 +172,10 @@ import sun.security.util.SecurityConstants; * "java.net.URLClassLoader$3$1" * * + * {@code Class} objects for array classes are not created by {@code ClassLoader}; + * use the {@link Class#forName} method instead. + * + * @jls 13.1 The Form of a Binary * @see #resolveClass(Class) * @since 1.0 */ @@ -195,8 +199,7 @@ public abstract class ClassLoader { // the set of parallel capable loader types private static final Set> loaderTypes = - Collections.newSetFromMap( - new WeakHashMap, Boolean>()); + Collections.newSetFromMap(new WeakHashMap<>()); static { synchronized (loaderTypes) { loaderTypes.add(ClassLoader.class); } } @@ -281,8 +284,7 @@ public abstract class ClassLoader { if (ParallelLoaders.isRegistered(this.getClass())) { parallelLockMap = new ConcurrentHashMap<>(); package2certs = new ConcurrentHashMap<>(); - domains = - Collections.synchronizedSet(new HashSet()); + domains = Collections.synchronizedSet(new HashSet<>()); assertionLock = new Object(); } else { // no finer-grained lock; lock on the classloader instance @@ -851,9 +853,6 @@ public abstract class ClassLoader { return c; } - private native Class defineClass0(String name, byte[] b, int off, int len, - ProtectionDomain pd); - private native Class defineClass1(String name, byte[] b, int off, int len, ProtectionDomain pd, String source); @@ -865,8 +864,7 @@ public abstract class ClassLoader { private boolean checkName(String name) { if ((name == null) || (name.length() == 0)) return true; - if ((name.indexOf('/') != -1) - || (!VM.allowArraySyntax() && (name.charAt(0) == '['))) + if ((name.indexOf('/') != -1) || (name.charAt(0) == '[')) return false; return true; } @@ -916,10 +914,10 @@ public abstract class ClassLoader { // go through and make sure all the certs in one array // are in the other and vice-versa. boolean match; - for (int i = 0; i < certs.length; i++) { + for (Certificate cert : certs) { match = false; - for (int j = 0; j < pcerts.length; j++) { - if (certs[i].equals(pcerts[j])) { + for (Certificate pcert : pcerts) { + if (cert.equals(pcert)) { match = true; break; } @@ -928,10 +926,10 @@ public abstract class ClassLoader { } // now do the same for pcerts - for (int i = 0; i < pcerts.length; i++) { + for (Certificate pcert : pcerts) { match = false; - for (int j = 0; j < certs.length; j++) { - if (pcerts[i].equals(certs[j])) { + for (Certificate cert : certs) { + if (pcert.equals(cert)) { match = true; break; } @@ -1648,10 +1646,10 @@ public abstract class ClassLoader { pkgs = Package.getSystemPackages(); } if (pkgs != null) { - for (int i = 0; i < pkgs.length; i++) { - String pkgName = pkgs[i].getName(); + for (Package pkg : pkgs) { + String pkgName = pkg.getName(); if (map.get(pkgName) == null) { - map.put(pkgName, pkgs[i]); + map.put(pkgName, pkg); } } } @@ -1830,8 +1828,8 @@ public abstract class ClassLoader { throw new UnsatisfiedLinkError("Can't load " + libfilename); } } - for (int i = 0 ; i < sys_paths.length ; i++) { - File libfile = new File(sys_paths[i], System.mapLibraryName(name)); + for (String sys_path : sys_paths) { + File libfile = new File(sys_path, System.mapLibraryName(name)); if (loadLibrary0(fromClass, libfile)) { return; } @@ -1841,9 +1839,8 @@ public abstract class ClassLoader { } } if (loader != null) { - for (int i = 0 ; i < usr_paths.length ; i++) { - File libfile = new File(usr_paths[i], - System.mapLibraryName(name)); + for (String usr_path : usr_paths) { + File libfile = new File(usr_path, System.mapLibraryName(name)); if (loadLibrary0(fromClass, libfile)) { return; } diff --git a/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java b/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java index d2ed9d91b50..bf5c7ae32fc 100644 --- a/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java +++ b/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java @@ -91,15 +91,14 @@ final class ConditionalSpecialCasing { static Hashtable> entryTable = new Hashtable<>(); static { // create hashtable from the entry - for (int i = 0; i < entry.length; i ++) { - Entry cur = entry[i]; - Integer cp = new Integer(cur.getCodePoint()); + for (Entry cur : entry) { + Integer cp = cur.getCodePoint(); HashSet set = entryTable.get(cp); if (set == null) { - set = new HashSet(); + set = new HashSet<>(); + entryTable.put(cp, set); } set.add(cur); - entryTable.put(cp, set); } } diff --git a/jdk/src/share/classes/java/lang/Double.java b/jdk/src/share/classes/java/lang/Double.java index 9ba150e7156..d76c934bc62 100644 --- a/jdk/src/share/classes/java/lang/Double.java +++ b/jdk/src/share/classes/java/lang/Double.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, 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,7 +26,6 @@ package java.lang; import sun.misc.FloatingDecimal; -import sun.misc.FpUtils; import sun.misc.DoubleConsts; /** diff --git a/jdk/src/share/classes/java/lang/Package.java b/jdk/src/share/classes/java/lang/Package.java index e55d72bc038..f59176f558e 100644 --- a/jdk/src/share/classes/java/lang/Package.java +++ b/jdk/src/share/classes/java/lang/Package.java @@ -557,8 +557,8 @@ public class Package implements java.lang.reflect.AnnotatedElement { // First, update the system package map with new package names String[] names = getSystemPackages0(); synchronized (pkgs) { - for (int i = 0; i < names.length; i++) { - defineSystemPackage(names[i], getSystemPackage0(names[i])); + for (String name : names) { + defineSystemPackage(name, getSystemPackage0(name)); } return pkgs.values().toArray(new Package[pkgs.size()]); } diff --git a/jdk/src/share/classes/java/lang/SecurityManager.java b/jdk/src/share/classes/java/lang/SecurityManager.java index 3797b86a1c3..e0aeb32de17 100644 --- a/jdk/src/share/classes/java/lang/SecurityManager.java +++ b/jdk/src/share/classes/java/lang/SecurityManager.java @@ -1476,10 +1476,10 @@ class SecurityManager { /* * Traverse the list of packages, check for any matches. */ - for (int i = 0; i < pkgs.length; i++) { - if (pkg.startsWith(pkgs[i]) || pkgs[i].equals(pkg + ".")) { + for (String restrictedPkg : pkgs) { + if (pkg.startsWith(restrictedPkg) || restrictedPkg.equals(pkg + ".")) { checkPermission( - new RuntimePermission("accessClassInPackage."+pkg)); + new RuntimePermission("accessClassInPackage." + pkg)); break; // No need to continue; only need to check this once } } @@ -1544,10 +1544,10 @@ class SecurityManager { /* * Traverse the list of packages, check for any matches. */ - for (int i = 0; i < pkgs.length; i++) { - if (pkg.startsWith(pkgs[i]) || pkgs[i].equals(pkg + ".")) { + for (String restrictedPkg : pkgs) { + if (pkg.startsWith(restrictedPkg) || restrictedPkg.equals(pkg + ".")) { checkPermission( - new RuntimePermission("defineClassInPackage."+pkg)); + new RuntimePermission("defineClassInPackage." + pkg)); break; // No need to continue; only need to check this once } } diff --git a/jdk/src/share/classes/java/lang/StringCoding.java b/jdk/src/share/classes/java/lang/StringCoding.java index 7a67ce77ab0..24ed0c06bbe 100644 --- a/jdk/src/share/classes/java/lang/StringCoding.java +++ b/jdk/src/share/classes/java/lang/StringCoding.java @@ -67,7 +67,7 @@ class StringCoding { } private static void set(ThreadLocal> tl, T ob) { - tl.set(new SoftReference(ob)); + tl.set(new SoftReference<>(ob)); } // Trim the given byte array to the given length diff --git a/jdk/src/share/classes/java/lang/ThreadLocal.java b/jdk/src/share/classes/java/lang/ThreadLocal.java index 91d3df940d6..f9f78c4ecd9 100644 --- a/jdk/src/share/classes/java/lang/ThreadLocal.java +++ b/jdk/src/share/classes/java/lang/ThreadLocal.java @@ -382,8 +382,7 @@ public class ThreadLocal { setThreshold(len); table = new Entry[len]; - for (int j = 0; j < len; j++) { - Entry e = parentTable[j]; + for (Entry e : parentTable) { if (e != null) { @SuppressWarnings("unchecked") ThreadLocal key = (ThreadLocal) e.get(); @@ -685,8 +684,7 @@ public class ThreadLocal { Entry[] newTab = new Entry[newLen]; int count = 0; - for (int j = 0; j < oldLen; ++j) { - Entry e = oldTab[j]; + for (Entry e : oldTab) { if (e != null) { ThreadLocal k = e.get(); if (k == null) { diff --git a/jdk/src/share/classes/java/lang/Throwable.java b/jdk/src/share/classes/java/lang/Throwable.java index 4b9e2ad0415..abdb3fc5734 100644 --- a/jdk/src/share/classes/java/lang/Throwable.java +++ b/jdk/src/share/classes/java/lang/Throwable.java @@ -646,8 +646,7 @@ public class Throwable implements Serializable { private void printStackTrace(PrintStreamOrWriter s) { // Guard against malicious overrides of Throwable.equals by // using a Set with identity equality semantics. - Set dejaVu = - Collections.newSetFromMap(new IdentityHashMap()); + Set dejaVu = Collections.newSetFromMap(new IdentityHashMap<>()); dejaVu.add(this); synchronized (s.lock()) { diff --git a/jdk/src/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java b/jdk/src/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java index e1c82d8f559..e8e36e1f323 100644 --- a/jdk/src/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java +++ b/jdk/src/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java @@ -114,6 +114,11 @@ import static sun.invoke.util.Wrapper.isWrapperType; Class[] markerInterfaces, MethodType[] additionalBridges) throws LambdaConversionException { + if ((caller.lookupModes() & MethodHandles.Lookup.PRIVATE) == 0) { + throw new LambdaConversionException(String.format( + "Invalid caller: %s", + caller.lookupClass().getName())); + } this.targetClass = caller.lookupClass(); this.invokedType = invokedType; @@ -221,6 +226,13 @@ import static sun.invoke.util.Wrapper.isWrapperType; String.format("Invalid receiver type %s; not a subtype of implementation type %s", receiverClass, implDefiningClass)); } + + Class implReceiverClass = implMethod.type().parameterType(0); + if (implReceiverClass != implDefiningClass && !implReceiverClass.isAssignableFrom(receiverClass)) { + throw new LambdaConversionException( + String.format("Invalid receiver type %s; not a subtype of implementation receiver type %s", + receiverClass, implReceiverClass)); + } } else { // no receiver capturedStart = 0; @@ -256,11 +268,17 @@ import static sun.invoke.util.Wrapper.isWrapperType; (implKind == MethodHandleInfo.REF_newInvokeSpecial) ? implDefiningClass : implMethodType.returnType(); + Class samReturnType = samMethodType.returnType(); if (!isAdaptableToAsReturn(actualReturnType, expectedType)) { throw new LambdaConversionException( String.format("Type mismatch for lambda return: %s is not convertible to %s", actualReturnType, expectedType)); } + if (!isAdaptableToAsReturn(expectedType, samReturnType)) { + throw new LambdaConversionException( + String.format("Type mismatch for lambda expected return: %s is not convertible to %s", + expectedType, samReturnType)); + } } /** diff --git a/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java b/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java index 13b1d21acd4..34ec2348099 100644 --- a/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java +++ b/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java @@ -303,7 +303,7 @@ public class MethodHandleProxies { private static Method[] getSingleNameMethods(Class intfc) { - ArrayList methods = new ArrayList(); + ArrayList methods = new ArrayList<>(); String uniqueName = null; for (Method m : intfc.getMethods()) { if (isObjectMethod(m)) continue; diff --git a/jdk/src/share/classes/java/lang/invoke/MutableCallSite.java b/jdk/src/share/classes/java/lang/invoke/MutableCallSite.java index 746c8d64e5c..68dabe82c33 100644 --- a/jdk/src/share/classes/java/lang/invoke/MutableCallSite.java +++ b/jdk/src/share/classes/java/lang/invoke/MutableCallSite.java @@ -274,8 +274,8 @@ public class MutableCallSite extends CallSite { public static void syncAll(MutableCallSite[] sites) { if (sites.length == 0) return; STORE_BARRIER.lazySet(0); - for (int i = 0; i < sites.length; i++) { - sites[i].getClass(); // trigger NPE on first null + for (MutableCallSite site : sites) { + site.getClass(); // trigger NPE on first null } // FIXME: NYI } diff --git a/jdk/src/share/classes/java/lang/management/MemoryUsage.java b/jdk/src/share/classes/java/lang/management/MemoryUsage.java index 6d11e323f6d..d20a5c78fa1 100644 --- a/jdk/src/share/classes/java/lang/management/MemoryUsage.java +++ b/jdk/src/share/classes/java/lang/management/MemoryUsage.java @@ -237,7 +237,7 @@ public class MemoryUsage { * Returns a descriptive representation of this memory usage. */ public String toString() { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); buf.append("init = " + init + "(" + (init >> 10) + "K) "); buf.append("used = " + used + "(" + (used >> 10) + "K) "); buf.append("committed = " + committed + "(" + diff --git a/jdk/src/share/classes/java/lang/ref/Reference.java b/jdk/src/share/classes/java/lang/ref/Reference.java index 42d2ba97814..49f68d145f4 100644 --- a/jdk/src/share/classes/java/lang/ref/Reference.java +++ b/jdk/src/share/classes/java/lang/ref/Reference.java @@ -111,7 +111,7 @@ public abstract class Reference { * therefore critical that any code holding this lock complete as quickly * as possible, allocate no new objects, and avoid calling user code. */ - static private class Lock { }; + static private class Lock { } private static Lock lock = new Lock(); @@ -126,6 +126,22 @@ public abstract class Reference { */ private static class ReferenceHandler extends Thread { + private static void ensureClassInitialized(Class clazz) { + try { + Class.forName(clazz.getName(), true, clazz.getClassLoader()); + } catch (ClassNotFoundException e) { + throw (Error) new NoClassDefFoundError(e.getMessage()).initCause(e); + } + } + + static { + // pre-load and initialize InterruptedException and Cleaner classes + // so that we don't get into trouble later in the run loop if there's + // memory shortage while loading/initializing them lazily. + ensureClassInitialized(InterruptedException.class); + ensureClassInitialized(Cleaner.class); + } + ReferenceHandler(ThreadGroup g, String name) { super(g, name); } @@ -133,37 +149,40 @@ public abstract class Reference { public void run() { for (;;) { Reference r; - synchronized (lock) { - if (pending != null) { - r = pending; - pending = r.discovered; - r.discovered = null; - } else { - // The waiting on the lock may cause an OOME because it may try to allocate - // exception objects, so also catch OOME here to avoid silent exit of the - // reference handler thread. - // - // Explicitly define the order of the two exceptions we catch here - // when waiting for the lock. - // - // We do not want to try to potentially load the InterruptedException class - // (which would be done if this was its first use, and InterruptedException - // were checked first) in this situation. - // - // This may lead to the VM not ever trying to load the InterruptedException - // class again. - try { - try { - lock.wait(); - } catch (OutOfMemoryError x) { } - } catch (InterruptedException x) { } - continue; + Cleaner c; + try { + synchronized (lock) { + if (pending != null) { + r = pending; + // 'instanceof' might throw OutOfMemoryError sometimes + // so do this before un-linking 'r' from the 'pending' chain... + c = r instanceof Cleaner ? (Cleaner) r : null; + // unlink 'r' from 'pending' chain + pending = r.discovered; + r.discovered = null; + } else { + // The waiting on the lock may cause an OutOfMemoryError + // because it may try to allocate exception objects. + lock.wait(); + continue; + } } + } catch (OutOfMemoryError x) { + // Give other threads CPU time so they hopefully drop some live references + // and GC reclaims some space. + // Also prevent CPU intensive spinning in case 'r instanceof Cleaner' above + // persistently throws OOME for some time... + Thread.yield(); + // retry + continue; + } catch (InterruptedException x) { + // retry + continue; } // Fast path for cleaners - if (r instanceof Cleaner) { - ((Cleaner)r).clean(); + if (c != null) { + c.clean(); continue; } diff --git a/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java b/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java index f98aed5db25..a5931e145a7 100644 --- a/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java +++ b/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java @@ -93,8 +93,8 @@ public class AccessibleObject implements AnnotatedElement { throws SecurityException { SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkPermission(ACCESS_PERMISSION); - for (int i = 0; i < array.length; i++) { - setAccessible0(array[i], flag); + for (AccessibleObject ao : array) { + setAccessible0(ao, flag); } } diff --git a/jdk/src/share/classes/java/lang/reflect/Parameter.java b/jdk/src/share/classes/java/lang/reflect/Parameter.java index d8c992c15bd..f035b8e5e73 100644 --- a/jdk/src/share/classes/java/lang/reflect/Parameter.java +++ b/jdk/src/share/classes/java/lang/reflect/Parameter.java @@ -337,11 +337,9 @@ public final class Parameter implements AnnotatedElement { private synchronized Map, Annotation> declaredAnnotations() { if(null == declaredAnnotations) { - declaredAnnotations = - new HashMap, Annotation>(); - Annotation[] ann = getDeclaredAnnotations(); - for(int i = 0; i < ann.length; i++) - declaredAnnotations.put(ann[i].annotationType(), ann[i]); + declaredAnnotations = new HashMap<>(); + for (Annotation a : getDeclaredAnnotations()) + declaredAnnotations.put(a.annotationType(), a); } return declaredAnnotations; } diff --git a/jdk/src/share/classes/java/lang/reflect/Proxy.java b/jdk/src/share/classes/java/lang/reflect/Proxy.java index 20e62b642ca..766bdf30116 100644 --- a/jdk/src/share/classes/java/lang/reflect/Proxy.java +++ b/jdk/src/share/classes/java/lang/reflect/Proxy.java @@ -465,7 +465,7 @@ public class Proxy implements java.io.Serializable { Key2(Class intf1, Class intf2) { super(intf1); hash = 31 * intf1.hashCode() + intf2.hashCode(); - ref2 = new WeakReference>(intf2); + ref2 = new WeakReference<>(intf2); } @Override @@ -725,7 +725,6 @@ public class Proxy implements java.io.Serializable { } final Constructor cons = cl.getConstructor(constructorParams); - final InvocationHandler ih = h; if (!Modifier.isPublic(cl.getModifiers())) { AccessController.doPrivileged(new PrivilegedAction() { public Void run() { @@ -735,7 +734,7 @@ public class Proxy implements java.io.Serializable { }); } return cons.newInstance(new Object[]{h}); - } catch (IllegalAccessException|InstantiationException e) { + } catch (IllegalAccessException | InstantiationException | NoSuchMethodException e) { throw new InternalError(e.toString(), e); } catch (InvocationTargetException e) { Throwable t = e.getCause(); @@ -744,8 +743,6 @@ public class Proxy implements java.io.Serializable { } else { throw new InternalError(t.toString(), t); } - } catch (NoSuchMethodException e) { - throw new InternalError(e.toString(), e); } } diff --git a/jdk/src/share/classes/java/net/SocketPermission.java b/jdk/src/share/classes/java/net/SocketPermission.java index 70b004af3bc..0f720c52283 100644 --- a/jdk/src/share/classes/java/net/SocketPermission.java +++ b/jdk/src/share/classes/java/net/SocketPermission.java @@ -235,13 +235,11 @@ public final class SocketPermission extends Permission private static Debug debug = null; private static boolean debugInit = false; - // ephemeral port range for this system - private static final int ephemeralLow = initEphemeralPorts( - "low", DEF_EPH_LOW - ); - private static final int ephemeralHigh = initEphemeralPorts( - "high", PORT_MAX - ); + // lazy initializer + private static class EphemeralRange { + static final int low = initEphemeralPorts("low", DEF_EPH_LOW); + static final int high = initEphemeralPorts("high", PORT_MAX); + }; static { Boolean tmp = java.security.AccessController.doPrivileged( @@ -1235,6 +1233,9 @@ public final class SocketPermission extends Permission int policyLow, int policyHigh, int targetLow, int targetHigh ) { + final int ephemeralLow = EphemeralRange.low; + final int ephemeralHigh = EphemeralRange.high; + if (targetLow == 0) { // check policy includes ephemeral range if (!inRange(policyLow, policyHigh, ephemeralLow, ephemeralHigh)) { diff --git a/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java b/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java index 54bfe085962..ab9281807fd 100644 --- a/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java +++ b/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java @@ -130,7 +130,7 @@ class CopyMoveHelper { // copy basic attributes to target if (opts.copyAttributes) { BasicFileAttributeView view = - Files.getFileAttributeView(target, BasicFileAttributeView.class, linkOptions); + Files.getFileAttributeView(target, BasicFileAttributeView.class); try { view.setTimes(attrs.lastModifiedTime(), attrs.lastAccessTime(), diff --git a/jdk/src/share/classes/java/time/Clock.java b/jdk/src/share/classes/java/time/Clock.java index cd90822925f..b1127848bed 100644 --- a/jdk/src/share/classes/java/time/Clock.java +++ b/jdk/src/share/classes/java/time/Clock.java @@ -104,7 +104,7 @@ import java.util.TimeZone; * resolution clock if one is available. * * @implSpec - * This abstract class must be implemented with care to ensure other operate correctly. + * This abstract class must be implemented with care to ensure other classes operate correctly. * All implementations that can be instantiated must be final, immutable and thread-safe. *

* The principal methods are defined to allow the throwing of an exception. diff --git a/jdk/src/share/classes/java/time/Duration.java b/jdk/src/share/classes/java/time/Duration.java index 02b882ca40e..c53afe3ebcb 100644 --- a/jdk/src/share/classes/java/time/Duration.java +++ b/jdk/src/share/classes/java/time/Duration.java @@ -1326,6 +1326,7 @@ public final class Duration /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/Instant.java b/jdk/src/share/classes/java/time/Instant.java index d91e1c86568..1b944a50c3d 100644 --- a/jdk/src/share/classes/java/time/Instant.java +++ b/jdk/src/share/classes/java/time/Instant.java @@ -100,11 +100,6 @@ import java.util.Objects; * This class models a single instantaneous point on the time-line. * This might be used to record event time-stamps in the application. *

- * For practicality, the instant is stored with some constraints. - * The measurable time-line is restricted to the number of seconds that can be held - * in a {@code long}. This is greater than the current estimated age of the universe. - * The instant is stored to nanosecond resolution. - *

* The range of an instant requires the storage of a number larger than a {@code long}. * To achieve this, the class stores a {@code long} representing epoch-seconds and an * {@code int} representing nanosecond-of-second, which will always be between 0 and 999,999,999. @@ -1348,6 +1343,7 @@ public final class Instant /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/LocalDate.java b/jdk/src/share/classes/java/time/LocalDate.java index c8ee89c87c5..17b3b24c0ea 100644 --- a/jdk/src/share/classes/java/time/LocalDate.java +++ b/jdk/src/share/classes/java/time/LocalDate.java @@ -2053,6 +2053,7 @@ public final class LocalDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/LocalDateTime.java b/jdk/src/share/classes/java/time/LocalDateTime.java index f9975d82329..86633b84165 100644 --- a/jdk/src/share/classes/java/time/LocalDateTime.java +++ b/jdk/src/share/classes/java/time/LocalDateTime.java @@ -1986,6 +1986,7 @@ public final class LocalDateTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/LocalTime.java b/jdk/src/share/classes/java/time/LocalTime.java index 08a06317413..4cc12f74dc3 100644 --- a/jdk/src/share/classes/java/time/LocalTime.java +++ b/jdk/src/share/classes/java/time/LocalTime.java @@ -1638,6 +1638,7 @@ public final class LocalTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/MonthDay.java b/jdk/src/share/classes/java/time/MonthDay.java index 2339cad5397..5b7844fd468 100644 --- a/jdk/src/share/classes/java/time/MonthDay.java +++ b/jdk/src/share/classes/java/time/MonthDay.java @@ -771,6 +771,7 @@ public final class MonthDay /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/OffsetDateTime.java b/jdk/src/share/classes/java/time/OffsetDateTime.java index caecddca0f4..cd0eff6e567 100644 --- a/jdk/src/share/classes/java/time/OffsetDateTime.java +++ b/jdk/src/share/classes/java/time/OffsetDateTime.java @@ -1925,6 +1925,7 @@ public final class OffsetDateTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/OffsetTime.java b/jdk/src/share/classes/java/time/OffsetTime.java index 466cf5ae639..32a7187d0f5 100644 --- a/jdk/src/share/classes/java/time/OffsetTime.java +++ b/jdk/src/share/classes/java/time/OffsetTime.java @@ -1396,6 +1396,7 @@ public final class OffsetTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/Period.java b/jdk/src/share/classes/java/time/Period.java index ff6db0885f0..6087618ef9c 100644 --- a/jdk/src/share/classes/java/time/Period.java +++ b/jdk/src/share/classes/java/time/Period.java @@ -1058,6 +1058,7 @@ public final class Period /** * Defend against malicious streams. * + * @param s the stream to read * @throws java.io.InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/Year.java b/jdk/src/share/classes/java/time/Year.java index cc68951351b..ff8528aef8f 100644 --- a/jdk/src/share/classes/java/time/Year.java +++ b/jdk/src/share/classes/java/time/Year.java @@ -1104,6 +1104,7 @@ public final class Year /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/YearMonth.java b/jdk/src/share/classes/java/time/YearMonth.java index e5f42100ac0..97f66de2903 100644 --- a/jdk/src/share/classes/java/time/YearMonth.java +++ b/jdk/src/share/classes/java/time/YearMonth.java @@ -1230,6 +1230,7 @@ public final class YearMonth /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/ZoneId.java b/jdk/src/share/classes/java/time/ZoneId.java index 9b8ebc7267a..16f8bf210c6 100644 --- a/jdk/src/share/classes/java/time/ZoneId.java +++ b/jdk/src/share/classes/java/time/ZoneId.java @@ -624,6 +624,7 @@ public abstract class ZoneId implements Serializable { /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/ZoneOffset.java b/jdk/src/share/classes/java/time/ZoneOffset.java index efbdec9a934..10bd5446e0b 100644 --- a/jdk/src/share/classes/java/time/ZoneOffset.java +++ b/jdk/src/share/classes/java/time/ZoneOffset.java @@ -769,6 +769,7 @@ public final class ZoneOffset /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/ZoneRegion.java b/jdk/src/share/classes/java/time/ZoneRegion.java index 5349b305ac7..83f0b43d775 100644 --- a/jdk/src/share/classes/java/time/ZoneRegion.java +++ b/jdk/src/share/classes/java/time/ZoneRegion.java @@ -196,6 +196,7 @@ final class ZoneRegion extends ZoneId implements Serializable { /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/ZonedDateTime.java b/jdk/src/share/classes/java/time/ZonedDateTime.java index b1342be5e47..752756bb78b 100644 --- a/jdk/src/share/classes/java/time/ZonedDateTime.java +++ b/jdk/src/share/classes/java/time/ZonedDateTime.java @@ -2225,6 +2225,7 @@ public final class ZonedDateTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/AbstractChronology.java b/jdk/src/share/classes/java/time/chrono/AbstractChronology.java index 8b3559135a5..c2e91d7f5f8 100644 --- a/jdk/src/share/classes/java/time/chrono/AbstractChronology.java +++ b/jdk/src/share/classes/java/time/chrono/AbstractChronology.java @@ -766,6 +766,7 @@ public abstract class AbstractChronology implements Chronology { /** * Defend against malicious streams. * + * @param s the stream to read * @throws java.io.InvalidObjectException always */ private void readObject(ObjectInputStream s) throws ObjectStreamException { diff --git a/jdk/src/share/classes/java/time/chrono/ChronoLocalDateTimeImpl.java b/jdk/src/share/classes/java/time/chrono/ChronoLocalDateTimeImpl.java index 21a8548115e..ac5f7b4bfe3 100644 --- a/jdk/src/share/classes/java/time/chrono/ChronoLocalDateTimeImpl.java +++ b/jdk/src/share/classes/java/time/chrono/ChronoLocalDateTimeImpl.java @@ -416,6 +416,7 @@ final class ChronoLocalDateTimeImpl /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/ChronoPeriodImpl.java b/jdk/src/share/classes/java/time/chrono/ChronoPeriodImpl.java index e0ee43400ed..911144d5b04 100644 --- a/jdk/src/share/classes/java/time/chrono/ChronoPeriodImpl.java +++ b/jdk/src/share/classes/java/time/chrono/ChronoPeriodImpl.java @@ -376,6 +376,7 @@ final class ChronoPeriodImpl /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws ObjectStreamException { diff --git a/jdk/src/share/classes/java/time/chrono/ChronoZonedDateTimeImpl.java b/jdk/src/share/classes/java/time/chrono/ChronoZonedDateTimeImpl.java index 79f3423c5b2..abd21eecaf0 100644 --- a/jdk/src/share/classes/java/time/chrono/ChronoZonedDateTimeImpl.java +++ b/jdk/src/share/classes/java/time/chrono/ChronoZonedDateTimeImpl.java @@ -340,6 +340,7 @@ final class ChronoZonedDateTimeImpl /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/HijrahChronology.java b/jdk/src/share/classes/java/time/chrono/HijrahChronology.java index 821ff9f5012..3be442cecb7 100644 --- a/jdk/src/share/classes/java/time/chrono/HijrahChronology.java +++ b/jdk/src/share/classes/java/time/chrono/HijrahChronology.java @@ -1096,6 +1096,7 @@ public final class HijrahChronology extends AbstractChronology implements Serial /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/HijrahDate.java b/jdk/src/share/classes/java/time/chrono/HijrahDate.java index 9ab791ce8e5..9d5059eba20 100644 --- a/jdk/src/share/classes/java/time/chrono/HijrahDate.java +++ b/jdk/src/share/classes/java/time/chrono/HijrahDate.java @@ -654,6 +654,7 @@ public final class HijrahDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/IsoChronology.java b/jdk/src/share/classes/java/time/chrono/IsoChronology.java index c0936b0f292..f84c1c87671 100644 --- a/jdk/src/share/classes/java/time/chrono/IsoChronology.java +++ b/jdk/src/share/classes/java/time/chrono/IsoChronology.java @@ -604,6 +604,7 @@ public final class IsoChronology extends AbstractChronology implements Serializa /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/JapaneseChronology.java b/jdk/src/share/classes/java/time/chrono/JapaneseChronology.java index b1dbf53de82..7845088eb7e 100644 --- a/jdk/src/share/classes/java/time/chrono/JapaneseChronology.java +++ b/jdk/src/share/classes/java/time/chrono/JapaneseChronology.java @@ -525,6 +525,7 @@ public final class JapaneseChronology extends AbstractChronology implements Seri /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/JapaneseDate.java b/jdk/src/share/classes/java/time/chrono/JapaneseDate.java index 5c7e545042a..0c1a876eae2 100644 --- a/jdk/src/share/classes/java/time/chrono/JapaneseDate.java +++ b/jdk/src/share/classes/java/time/chrono/JapaneseDate.java @@ -716,6 +716,7 @@ public final class JapaneseDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/JapaneseEra.java b/jdk/src/share/classes/java/time/chrono/JapaneseEra.java index f31597e02f9..0187565869f 100644 --- a/jdk/src/share/classes/java/time/chrono/JapaneseEra.java +++ b/jdk/src/share/classes/java/time/chrono/JapaneseEra.java @@ -357,6 +357,7 @@ public final class JapaneseEra /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/MinguoChronology.java b/jdk/src/share/classes/java/time/chrono/MinguoChronology.java index f7ee55789fd..1fda0e415d4 100644 --- a/jdk/src/share/classes/java/time/chrono/MinguoChronology.java +++ b/jdk/src/share/classes/java/time/chrono/MinguoChronology.java @@ -355,6 +355,7 @@ public final class MinguoChronology extends AbstractChronology implements Serial /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/MinguoDate.java b/jdk/src/share/classes/java/time/chrono/MinguoDate.java index 2cb49b6b600..ba25c8da018 100644 --- a/jdk/src/share/classes/java/time/chrono/MinguoDate.java +++ b/jdk/src/share/classes/java/time/chrono/MinguoDate.java @@ -478,6 +478,7 @@ public final class MinguoDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java b/jdk/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java index 057c3baaefb..87bc10047ec 100644 --- a/jdk/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java +++ b/jdk/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java @@ -391,6 +391,7 @@ public final class ThaiBuddhistChronology extends AbstractChronology implements /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/ThaiBuddhistDate.java b/jdk/src/share/classes/java/time/chrono/ThaiBuddhistDate.java index 9e8b88d3465..f403317b11e 100644 --- a/jdk/src/share/classes/java/time/chrono/ThaiBuddhistDate.java +++ b/jdk/src/share/classes/java/time/chrono/ThaiBuddhistDate.java @@ -478,6 +478,7 @@ public final class ThaiBuddhistDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/format/DateTimeFormatter.java b/jdk/src/share/classes/java/time/format/DateTimeFormatter.java index 4109d20e590..39d91986f86 100644 --- a/jdk/src/share/classes/java/time/format/DateTimeFormatter.java +++ b/jdk/src/share/classes/java/time/format/DateTimeFormatter.java @@ -344,10 +344,7 @@ import java.util.Set; * Fraction: Outputs the nano-of-second field as a fraction-of-second. * The nano-of-second value has nine digits, thus the count of pattern letters * is from 1 to 9. If it is less than 9, then the nano-of-second value is - * truncated, with only the most significant digits being output. When parsing - * in strict mode, the number of parsed digits must match the count of pattern - * letters. When parsing in lenient mode, the number of parsed digits must be at - * least the count of pattern letters, up to 9 digits. + * truncated, with only the most significant digits being output. *

* Year: The count of letters determines the minimum field width below * which padding is used. If the count of letters is two, then a diff --git a/jdk/src/share/classes/java/time/temporal/TemporalAccessor.java b/jdk/src/share/classes/java/time/temporal/TemporalAccessor.java index 081bbbaec32..a6133e18837 100644 --- a/jdk/src/share/classes/java/time/temporal/TemporalAccessor.java +++ b/jdk/src/share/classes/java/time/temporal/TemporalAccessor.java @@ -217,7 +217,7 @@ public interface TemporalAccessor { default int get(TemporalField field) { ValueRange range = range(field); if (range.isIntValue() == false) { - throw new UnsupportedTemporalTypeException("Invalid field " + field + " + for get() method, use getLong() instead"); + throw new UnsupportedTemporalTypeException("Invalid field " + field + " for get() method, use getLong() instead"); } long value = getLong(field); if (range.isValidValue(value) == false) { diff --git a/jdk/src/share/classes/java/time/temporal/ValueRange.java b/jdk/src/share/classes/java/time/temporal/ValueRange.java index 980203c6d1d..4e5c2fdb2f6 100644 --- a/jdk/src/share/classes/java/time/temporal/ValueRange.java +++ b/jdk/src/share/classes/java/time/temporal/ValueRange.java @@ -344,10 +344,13 @@ public final class ValueRange implements Serializable { /** * Restore the state of an ValueRange from the stream. * Check that the values are valid. + * + * @param s the stream to read * @throws InvalidObjectException if * the smallest minimum is greater than the smallest maximum, * or the smallest maximum is greater than the largest maximum * or the largest minimum is greater than the largest maximum + * @throws ClassNotFoundException if a class cannot be resolved */ private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException, InvalidObjectException diff --git a/jdk/src/share/classes/java/time/temporal/WeekFields.java b/jdk/src/share/classes/java/time/temporal/WeekFields.java index 7cf985e1a51..3aa362cea60 100644 --- a/jdk/src/share/classes/java/time/temporal/WeekFields.java +++ b/jdk/src/share/classes/java/time/temporal/WeekFields.java @@ -344,8 +344,11 @@ public final class WeekFields implements Serializable { /** * Restore the state of a WeekFields from the stream. * Check that the values are valid. + * + * @param s the stream to read * @throws InvalidObjectException if the serialized object has an invalid * value for firstDayOfWeek or minimalDays. + * @throws ClassNotFoundException if a class cannot be resolved */ private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException, InvalidObjectException diff --git a/jdk/src/share/classes/java/time/zone/ZoneOffsetTransition.java b/jdk/src/share/classes/java/time/zone/ZoneOffsetTransition.java index 263f40155cf..1df7c850b26 100644 --- a/jdk/src/share/classes/java/time/zone/ZoneOffsetTransition.java +++ b/jdk/src/share/classes/java/time/zone/ZoneOffsetTransition.java @@ -173,6 +173,8 @@ public final class ZoneOffsetTransition //----------------------------------------------------------------------- /** * Defend against malicious streams. + * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/zone/ZoneOffsetTransitionRule.java b/jdk/src/share/classes/java/time/zone/ZoneOffsetTransitionRule.java index f52953ca4c1..db1a055a8b0 100644 --- a/jdk/src/share/classes/java/time/zone/ZoneOffsetTransitionRule.java +++ b/jdk/src/share/classes/java/time/zone/ZoneOffsetTransitionRule.java @@ -235,6 +235,7 @@ public final class ZoneOffsetTransitionRule implements Serializable { /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/zone/ZoneRules.java b/jdk/src/share/classes/java/time/zone/ZoneRules.java index 179c006fe30..47190984db1 100644 --- a/jdk/src/share/classes/java/time/zone/ZoneRules.java +++ b/jdk/src/share/classes/java/time/zone/ZoneRules.java @@ -319,6 +319,7 @@ public final class ZoneRules implements Serializable { /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/util/Date.java b/jdk/src/share/classes/java/util/Date.java index 502daaefdbb..f16ea496604 100644 --- a/jdk/src/share/classes/java/util/Date.java +++ b/jdk/src/share/classes/java/util/Date.java @@ -41,20 +41,20 @@ import sun.util.calendar.Gregorian; import sun.util.calendar.ZoneInfo; /** - * The class Date represents a specific instant + * The class {@code Date} represents a specific instant * in time, with millisecond precision. *

- * Prior to JDK 1.1, the class Date had two additional + * Prior to JDK 1.1, the class {@code Date} had two additional * functions. It allowed the interpretation of dates as year, month, day, hour, * minute, and second values. It also allowed the formatting and parsing * of date strings. Unfortunately, the API for these functions was not * amenable to internationalization. As of JDK 1.1, the - * Calendar class should be used to convert between dates and time - * fields and the DateFormat class should be used to format and + * {@code Calendar} class should be used to convert between dates and time + * fields and the {@code DateFormat} class should be used to format and * parse date strings. - * The corresponding methods in Date are deprecated. + * The corresponding methods in {@code Date} are deprecated. *

- * Although the Date class is intended to reflect + * Although the {@code Date} class is intended to reflect * coordinated universal time (UTC), it may not do so exactly, * depending on the host environment of the Java Virtual Machine. * Nearly all modern operating systems assume that 1 day = @@ -93,12 +93,12 @@ import sun.util.calendar.ZoneInfo; * http://tycho.usno.navy.mil/systime.html * *

- * In all methods of class Date that accept or return + * In all methods of class {@code Date} that accept or return * year, month, date, hours, minutes, and seconds values, the * following representations are used: *

    *
  • A year y is represented by the integer - * y - 1900. + * y {@code - 1900}. *
  • A month is represented by an integer from 0 to 11; 0 is January, * 1 is February, and so forth; thus 11 is December. *
  • A date (day of month) is represented by an integer from 1 to 31 @@ -155,7 +155,7 @@ public class Date private static final long serialVersionUID = 7523967970034938905L; /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents the time at which it was allocated, measured to the * nearest millisecond. * @@ -166,7 +166,7 @@ public class Date } /** - * Allocates a Date object and initializes it to + * Allocates a {@code Date} object and initializes it to * represent the specified number of milliseconds since the * standard base time known as "the epoch", namely January 1, * 1970, 00:00:00 GMT. @@ -179,18 +179,18 @@ public class Date } /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents midnight, local time, at the beginning of the day - * specified by the year, month, and - * date arguments. + * specified by the {@code year}, {@code month}, and + * {@code date} arguments. * * @param year the year minus 1900. * @param month the month between 0-11. * @param date the day of the month between 1-31. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(year + 1900, month, date) - * or GregorianCalendar(year + 1900, month, date). + * replaced by {@code Calendar.set(year + 1900, month, date)} + * or {@code GregorianCalendar(year + 1900, month, date)}. */ @Deprecated public Date(int year, int month, int date) { @@ -198,10 +198,10 @@ public class Date } /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents the instant at the start of the minute specified by - * the year, month, date, - * hrs, and min arguments, in the local + * the {@code year}, {@code month}, {@code date}, + * {@code hrs}, and {@code min} arguments, in the local * time zone. * * @param year the year minus 1900. @@ -211,9 +211,8 @@ public class Date * @param min the minutes between 0-59. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(year + 1900, month, date, - * hrs, min) or GregorianCalendar(year + 1900, - * month, date, hrs, min). + * replaced by {@code Calendar.set(year + 1900, month, date, hrs, min)} + * or {@code GregorianCalendar(year + 1900, month, date, hrs, min)}. */ @Deprecated public Date(int year, int month, int date, int hrs, int min) { @@ -221,10 +220,10 @@ public class Date } /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents the instant at the start of the second specified - * by the year, month, date, - * hrs, min, and sec arguments, + * by the {@code year}, {@code month}, {@code date}, + * {@code hrs}, {@code min}, and {@code sec} arguments, * in the local time zone. * * @param year the year minus 1900. @@ -235,9 +234,8 @@ public class Date * @param sec the seconds between 0-59. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(year + 1900, month, date, - * hrs, min, sec) or GregorianCalendar(year + 1900, - * month, date, hrs, min, sec). + * replaced by {@code Calendar.set(year + 1900, month, date, hrs, min, sec)} + * or {@code GregorianCalendar(year + 1900, month, date, hrs, min, sec)}. */ @Deprecated public Date(int year, int month, int date, int hrs, int min, int sec) { @@ -258,16 +256,16 @@ public class Date } /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents the date and time indicated by the string - * s, which is interpreted as if by the + * {@code s}, which is interpreted as if by the * {@link Date#parse} method. * * @param s a string representation of the date. * @see java.text.DateFormat * @see java.util.Date#parse(java.lang.String) * @deprecated As of JDK version 1.1, - * replaced by DateFormat.parse(String s). + * replaced by {@code DateFormat.parse(String s)}. */ @Deprecated public Date(String s) { @@ -292,7 +290,7 @@ public class Date * Determines the date and time based on the arguments. The * arguments are interpreted as a year, month, day of the month, * hour of the day, minute within the hour, and second within the - * minute, exactly as for the Date constructor with six + * minute, exactly as for the {@code Date} constructor with six * arguments, except that the arguments are interpreted relative * to UTC rather than to the local time zone. The time indicated is * returned represented as the distance, measured in milliseconds, @@ -308,10 +306,9 @@ public class Date * the date and time specified by the arguments. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(year + 1900, month, date, - * hrs, min, sec) or GregorianCalendar(year + 1900, - * month, date, hrs, min, sec), using a UTC - * TimeZone, followed by Calendar.getTime().getTime(). + * replaced by {@code Calendar.set(year + 1900, month, date, hrs, min, sec)} + * or {@code GregorianCalendar(year + 1900, month, date, hrs, min, sec)}, using a UTC + * {@code TimeZone}, followed by {@code Calendar.getTime().getTime()}. */ @Deprecated public static long UTC(int year, int month, int date, @@ -338,12 +335,12 @@ public class Date } /** - * Attempts to interpret the string s as a representation + * Attempts to interpret the string {@code s} as a representation * of a date and time. If the attempt is successful, the time * indicated is returned represented as the distance, measured in * milliseconds, of that time from the epoch (00:00:00 GMT on * January 1, 1970). If the attempt fails, an - * IllegalArgumentException is thrown. + * {@code IllegalArgumentException} is thrown. *

    * It accepts many syntaxes; in particular, it recognizes the IETF * standard date syntax: "Sat, 12 Aug 1995 13:30:00 GMT". It also @@ -353,11 +350,11 @@ public class Date * meridian). If no time zone is specified, the local time zone is * assumed. GMT and UTC are considered equivalent. *

    - * The string s is processed from left to right, looking for - * data of interest. Any material in s that is within the - * ASCII parenthesis characters ( and ) is ignored. + * The string {@code s} is processed from left to right, looking for + * data of interest. Any material in {@code s} that is within the + * ASCII parenthesis characters {@code (} and {@code )} is ignored. * Parentheses may be nested. Otherwise, the only characters permitted - * within s are these ASCII characters: + * within {@code s} are these ASCII characters: *

          * abcdefghijklmnopqrstuvwxyz
          * ABCDEFGHIJKLMNOPQRSTUVWXYZ
    @@ -365,18 +362,18 @@ public class Date
          * and whitespace characters.

    * A consecutive sequence of decimal digits is treated as a decimal * number:

      - *
    • If a number is preceded by + or - and a year + *
    • If a number is preceded by {@code +} or {@code -} and a year * has already been recognized, then the number is a time-zone * offset. If the number is less than 24, it is an offset measured * in hours. Otherwise, it is regarded as an offset in minutes, * expressed in 24-hour time format without punctuation. A - * preceding - means a westward offset. Time zone offsets + * preceding {@code -} means a westward offset. Time zone offsets * are always relative to UTC (Greenwich). Thus, for example, - * -5 occurring in the string would mean "five hours west - * of Greenwich" and +0430 would mean "four hours and + * {@code -5} occurring in the string would mean "five hours west + * of Greenwich" and {@code +0430} would mean "four hours and * thirty minutes east of Greenwich." It is permitted for the - * string to specify GMT, UT, or UTC - * redundantly-for example, GMT-5 or utc+0430. + * string to specify {@code GMT}, {@code UT}, or {@code UTC} + * redundantly-for example, {@code GMT-5} or {@code utc+0430}. *
    • The number is regarded as a year number if one of the * following conditions is true: *
        @@ -399,8 +396,8 @@ public class Date * unless an hour has already been recognized, in which case it is * regarded as a minute. *
      • If the number is followed by a slash, it is regarded as a month - * (it is decreased by 1 to produce a number in the range 0 - * to 11), unless a month has already been recognized, in + * (it is decreased by 1 to produce a number in the range {@code 0} + * to {@code 11}), unless a month has already been recognized, in * which case it is regarded as a day of the month. *
      • If the number is followed by whitespace, a comma, a hyphen, or * end of string, then if an hour has been recognized but not a @@ -409,31 +406,31 @@ public class Date * otherwise, it is regarded as a day of the month.

      * A consecutive sequence of letters is regarded as a word and treated * as follows:

        - *
      • A word that matches AM, ignoring case, is ignored (but + *
      • A word that matches {@code AM}, ignoring case, is ignored (but * the parse fails if an hour has not been recognized or is less - * than 1 or greater than 12). - *
      • A word that matches PM, ignoring case, adds 12 + * than {@code 1} or greater than {@code 12}). + *
      • A word that matches {@code PM}, ignoring case, adds {@code 12} * to the hour (but the parse fails if an hour has not been - * recognized or is less than 1 or greater than 12). - *
      • Any word that matches any prefix of SUNDAY, MONDAY, TUESDAY, - * WEDNESDAY, THURSDAY, FRIDAY, or SATURDAY, ignoring - * case, is ignored. For example, sat, Friday, TUE, and - * Thurs are ignored. - *
      • Otherwise, any word that matches any prefix of JANUARY, + * recognized or is less than {@code 1} or greater than {@code 12}). + *
      • Any word that matches any prefix of {@code SUNDAY, MONDAY, TUESDAY, + * WEDNESDAY, THURSDAY, FRIDAY}, or {@code SATURDAY}, ignoring + * case, is ignored. For example, {@code sat, Friday, TUE}, and + * {@code Thurs} are ignored. + *
      • Otherwise, any word that matches any prefix of {@code JANUARY, * FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, - * OCTOBER, NOVEMBER, or DECEMBER, ignoring case, and + * OCTOBER, NOVEMBER}, or {@code DECEMBER}, ignoring case, and * considering them in the order given here, is recognized as - * specifying a month and is converted to a number (0 to - * 11). For example, aug, Sept, april, and - * NOV are recognized as months. So is Ma, which - * is recognized as MARCH, not MAY. - *
      • Any word that matches GMT, UT, or UTC, ignoring + * specifying a month and is converted to a number ({@code 0} to + * {@code 11}). For example, {@code aug, Sept, april}, and + * {@code NOV} are recognized as months. So is {@code Ma}, which + * is recognized as {@code MARCH}, not {@code MAY}. + *
      • Any word that matches {@code GMT, UT}, or {@code UTC}, ignoring * case, is treated as referring to UTC. - *
      • Any word that matches EST, CST, MST, or PST, + *
      • Any word that matches {@code EST, CST, MST}, or {@code PST}, * ignoring case, is recognized as referring to the time zone in * North America that is five, six, seven, or eight hours west of - * Greenwich, respectively. Any word that matches EDT, CDT, - * MDT, or PDT, ignoring case, is recognized as + * Greenwich, respectively. Any word that matches {@code EDT, CDT, + * MDT}, or {@code PDT}, ignoring case, is recognized as * referring to the same time zone, respectively, during daylight * saving time.

      * Once the entire string s has been scanned, it is converted to a time @@ -448,7 +445,7 @@ public class Date * represented by the string argument. * @see java.text.DateFormat * @deprecated As of JDK version 1.1, - * replaced by DateFormat.parse(String s). + * replaced by {@code DateFormat.parse(String s)}. */ @Deprecated public static long parse(String s) { @@ -638,13 +635,13 @@ public class Date /** * Returns a value that is the result of subtracting 1900 from the * year that contains or begins with the instant in time represented - * by this Date object, as interpreted in the local + * by this {@code Date} object, as interpreted in the local * time zone. * * @return the year represented by this date, minus 1900. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.YEAR) - 1900. + * replaced by {@code Calendar.get(Calendar.YEAR) - 1900}. */ @Deprecated public int getYear() { @@ -652,8 +649,8 @@ public class Date } /** - * Sets the year of this Date object to be the specified - * value plus 1900. This Date object is modified so + * Sets the year of this {@code Date} object to be the specified + * value plus 1900. This {@code Date} object is modified so * that it represents a point in time within the specified year, * with the month, date, hour, minute, and second the same as * before, as interpreted in the local time zone. (Of course, if @@ -664,7 +661,7 @@ public class Date * @param year the year value. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.YEAR, year + 1900). + * replaced by {@code Calendar.set(Calendar.YEAR, year + 1900)}. */ @Deprecated public void setYear(int year) { @@ -673,14 +670,14 @@ public class Date /** * Returns a number representing the month that contains or begins - * with the instant in time represented by this Date object. - * The value returned is between 0 and 11, - * with the value 0 representing January. + * with the instant in time represented by this {@code Date} object. + * The value returned is between {@code 0} and {@code 11}, + * with the value {@code 0} representing January. * * @return the month represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.MONTH). + * replaced by {@code Calendar.get(Calendar.MONTH)}. */ @Deprecated public int getMonth() { @@ -689,7 +686,7 @@ public class Date /** * Sets the month of this date to the specified value. This - * Date object is modified so that it represents a point + * {@code Date} object is modified so that it represents a point * in time within the specified month, with the year, date, hour, * minute, and second the same as before, as interpreted in the * local time zone. If the date was October 31, for example, and @@ -699,7 +696,7 @@ public class Date * @param month the month value between 0-11. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.MONTH, int month). + * replaced by {@code Calendar.set(Calendar.MONTH, int month)}. */ @Deprecated public void setMonth(int month) { @@ -719,16 +716,16 @@ public class Date } /** - * Returns the day of the month represented by this Date object. - * The value returned is between 1 and 31 + * Returns the day of the month represented by this {@code Date} object. + * The value returned is between {@code 1} and {@code 31} * representing the day of the month that contains or begins with the - * instant in time represented by this Date object, as + * instant in time represented by this {@code Date} object, as * interpreted in the local time zone. * * @return the day of the month represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.DAY_OF_MONTH). + * replaced by {@code Calendar.get(Calendar.DAY_OF_MONTH)}. * @deprecated */ @Deprecated @@ -737,8 +734,8 @@ public class Date } /** - * Sets the day of the month of this Date object to the - * specified value. This Date object is modified so that + * Sets the day of the month of this {@code Date} object to the + * specified value. This {@code Date} object is modified so that * it represents a point in time within the specified day of the * month, with the year, month, hour, minute, and second the same * as before, as interpreted in the local time zone. If the date @@ -749,7 +746,7 @@ public class Date * @param date the day of the month value between 1-31. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.DAY_OF_MONTH, int date). + * replaced by {@code Calendar.set(Calendar.DAY_OF_MONTH, int date)}. */ @Deprecated public void setDate(int date) { @@ -758,17 +755,17 @@ public class Date /** * Returns the day of the week represented by this date. The - * returned value (0 = Sunday, 1 = Monday, - * 2 = Tuesday, 3 = Wednesday, 4 = - * Thursday, 5 = Friday, 6 = Saturday) + * returned value ({@code 0} = Sunday, {@code 1} = Monday, + * {@code 2} = Tuesday, {@code 3} = Wednesday, {@code 4} = + * Thursday, {@code 5} = Friday, {@code 6} = Saturday) * represents the day of the week that contains or begins with - * the instant in time represented by this Date object, + * the instant in time represented by this {@code Date} object, * as interpreted in the local time zone. * * @return the day of the week represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.DAY_OF_WEEK). + * replaced by {@code Calendar.get(Calendar.DAY_OF_WEEK)}. */ @Deprecated public int getDay() { @@ -776,16 +773,16 @@ public class Date } /** - * Returns the hour represented by this Date object. The - * returned value is a number (0 through 23) + * Returns the hour represented by this {@code Date} object. The + * returned value is a number ({@code 0} through {@code 23}) * representing the hour within the day that contains or begins - * with the instant in time represented by this Date + * with the instant in time represented by this {@code Date} * object, as interpreted in the local time zone. * * @return the hour represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.HOUR_OF_DAY). + * replaced by {@code Calendar.get(Calendar.HOUR_OF_DAY)}. */ @Deprecated public int getHours() { @@ -793,8 +790,8 @@ public class Date } /** - * Sets the hour of this Date object to the specified value. - * This Date object is modified so that it represents a point + * Sets the hour of this {@code Date} object to the specified value. + * This {@code Date} object is modified so that it represents a point * in time within the specified hour of the day, with the year, month, * date, minute, and second the same as before, as interpreted in the * local time zone. @@ -802,7 +799,7 @@ public class Date * @param hours the hour value. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.HOUR_OF_DAY, int hours). + * replaced by {@code Calendar.set(Calendar.HOUR_OF_DAY, int hours)}. */ @Deprecated public void setHours(int hours) { @@ -812,12 +809,12 @@ public class Date /** * Returns the number of minutes past the hour represented by this date, * as interpreted in the local time zone. - * The value returned is between 0 and 59. + * The value returned is between {@code 0} and {@code 59}. * * @return the number of minutes past the hour represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.MINUTE). + * replaced by {@code Calendar.get(Calendar.MINUTE)}. */ @Deprecated public int getMinutes() { @@ -825,8 +822,8 @@ public class Date } /** - * Sets the minutes of this Date object to the specified value. - * This Date object is modified so that it represents a point + * Sets the minutes of this {@code Date} object to the specified value. + * This {@code Date} object is modified so that it represents a point * in time within the specified minute of the hour, with the year, month, * date, hour, and second the same as before, as interpreted in the * local time zone. @@ -834,7 +831,7 @@ public class Date * @param minutes the value of the minutes. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.MINUTE, int minutes). + * replaced by {@code Calendar.set(Calendar.MINUTE, int minutes)}. */ @Deprecated public void setMinutes(int minutes) { @@ -843,14 +840,14 @@ public class Date /** * Returns the number of seconds past the minute represented by this date. - * The value returned is between 0 and 61. The - * values 60 and 61 can only occur on those + * The value returned is between {@code 0} and {@code 61}. The + * values {@code 60} and {@code 61} can only occur on those * Java Virtual Machines that take leap seconds into account. * * @return the number of seconds past the minute represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.SECOND). + * replaced by {@code Calendar.get(Calendar.SECOND)}. */ @Deprecated public int getSeconds() { @@ -858,8 +855,8 @@ public class Date } /** - * Sets the seconds of this Date to the specified value. - * This Date object is modified so that it represents a + * Sets the seconds of this {@code Date} to the specified value. + * This {@code Date} object is modified so that it represents a * point in time within the specified second of the minute, with * the year, month, date, hour, and minute the same as before, as * interpreted in the local time zone. @@ -867,7 +864,7 @@ public class Date * @param seconds the seconds value. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.SECOND, int seconds). + * replaced by {@code Calendar.set(Calendar.SECOND, int seconds)}. */ @Deprecated public void setSeconds(int seconds) { @@ -876,7 +873,7 @@ public class Date /** * Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT - * represented by this Date object. + * represented by this {@code Date} object. * * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT * represented by this date. @@ -893,8 +890,8 @@ public class Date } /** - * Sets this Date object to represent a point in time that is - * time milliseconds after January 1, 1970 00:00:00 GMT. + * Sets this {@code Date} object to represent a point in time that is + * {@code time} milliseconds after January 1, 1970 00:00:00 GMT. * * @param time the number of milliseconds. */ @@ -907,11 +904,11 @@ public class Date * Tests if this date is before the specified date. * * @param when a date. - * @return true if and only if the instant of time - * represented by this Date object is strictly - * earlier than the instant represented by when; - * false otherwise. - * @exception NullPointerException if when is null. + * @return {@code true} if and only if the instant of time + * represented by this {@code Date} object is strictly + * earlier than the instant represented by {@code when}; + * {@code false} otherwise. + * @exception NullPointerException if {@code when} is null. */ public boolean before(Date when) { return getMillisOf(this) < getMillisOf(when); @@ -921,11 +918,11 @@ public class Date * Tests if this date is after the specified date. * * @param when a date. - * @return true if and only if the instant represented - * by this Date object is strictly later than the - * instant represented by when; - * false otherwise. - * @exception NullPointerException if when is null. + * @return {@code true} if and only if the instant represented + * by this {@code Date} object is strictly later than the + * instant represented by {@code when}; + * {@code false} otherwise. + * @exception NullPointerException if {@code when} is null. */ public boolean after(Date when) { return getMillisOf(this) > getMillisOf(when); @@ -933,17 +930,17 @@ public class Date /** * Compares two dates for equality. - * The result is true if and only if the argument is - * not null and is a Date object that + * The result is {@code true} if and only if the argument is + * not {@code null} and is a {@code Date} object that * represents the same point in time, to the millisecond, as this object. *

      - * Thus, two Date objects are equal if and only if the - * getTime method returns the same long + * Thus, two {@code Date} objects are equal if and only if the + * {@code getTime} method returns the same {@code long} * value for both. * * @param obj the object to compare with. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.util.Date#getTime() */ public boolean equals(Object obj) { @@ -951,7 +948,7 @@ public class Date } /** - * Returns the millisecond value of this Date object + * Returns the millisecond value of this {@code Date} object * without affecting its internal state. */ static final long getMillisOf(Date date) { @@ -965,13 +962,13 @@ public class Date /** * Compares two Dates for ordering. * - * @param anotherDate the Date to be compared. - * @return the value 0 if the argument Date is equal to - * this Date; a value less than 0 if this Date + * @param anotherDate the {@code Date} to be compared. + * @return the value {@code 0} if the argument Date is equal to + * this Date; a value less than {@code 0} if this Date * is before the Date argument; and a value greater than - * 0 if this Date is after the Date argument. + * {@code 0} if this Date is after the Date argument. * @since 1.2 - * @exception NullPointerException if anotherDate is null. + * @exception NullPointerException if {@code anotherDate} is null. */ public int compareTo(Date anotherDate) { long thisTime = getMillisOf(this); @@ -981,7 +978,7 @@ public class Date /** * Returns a hash code value for this object. The result is the - * exclusive OR of the two halves of the primitive long + * exclusive OR of the two halves of the primitive {@code long} * value returned by the {@link Date#getTime} * method. That is, the hash code is the value of the expression: *

      {@code
      @@ -996,29 +993,29 @@ public class Date
           }
       
           /**
      -     * Converts this Date object to a String
      +     * Converts this {@code Date} object to a {@code String}
            * of the form:
            * 
            * dow mon dd hh:mm:ss zzz yyyy
      * where:
        - *
      • dow is the day of the week (Sun, Mon, Tue, Wed, - * Thu, Fri, Sat). - *
      • mon is the month (Jan, Feb, Mar, Apr, May, Jun, - * Jul, Aug, Sep, Oct, Nov, Dec). - *
      • dd is the day of the month (01 through - * 31), as two decimal digits. - *
      • hh is the hour of the day (00 through - * 23), as two decimal digits. - *
      • mm is the minute within the hour (00 through - * 59), as two decimal digits. - *
      • ss is the second within the minute (00 through - * 61, as two decimal digits. - *
      • zzz is the time zone (and may reflect daylight saving + *
      • {@code dow} is the day of the week ({@code Sun, Mon, Tue, Wed, + * Thu, Fri, Sat}). + *
      • {@code mon} is the month ({@code Jan, Feb, Mar, Apr, May, Jun, + * Jul, Aug, Sep, Oct, Nov, Dec}). + *
      • {@code dd} is the day of the month ({@code 01} through + * {@code 31}), as two decimal digits. + *
      • {@code hh} is the hour of the day ({@code 00} through + * {@code 23}), as two decimal digits. + *
      • {@code mm} is the minute within the hour ({@code 00} through + * {@code 59}), as two decimal digits. + *
      • {@code ss} is the second within the minute ({@code 00} through + * {@code 61}, as two decimal digits. + *
      • {@code zzz} is the time zone (and may reflect daylight saving * time). Standard time zone abbreviations include those - * recognized by the method parse. If time zone - * information is not available, then zzz is empty - + * recognized by the method {@code parse}. If time zone + * information is not available, then {@code zzz} is empty - * that is, it consists of no characters at all. - *
      • yyyy is the year, as four decimal digits. + *
      • {@code yyyy} is the year, as four decimal digits. *
      * * @return a string representation of this date. @@ -1053,7 +1050,7 @@ public class Date /** * Converts the given name to its 3-letter abbreviation (e.g., * "monday" -> "Mon") and stored the abbreviation in the given - * StringBuilder. + * {@code StringBuilder}. */ private static final StringBuilder convertToAbbr(StringBuilder sb, String name) { sb.append(Character.toUpperCase(name.charAt(0))); @@ -1062,11 +1059,11 @@ public class Date } /** - * Creates a string representation of this Date object in an + * Creates a string representation of this {@code Date} object in an * implementation-dependent form. The intent is that the form should * be familiar to the user of the Java application, wherever it may * happen to be running. The intent is comparable to that of the - * "%c" format supported by the strftime() + * "{@code %c}" format supported by the {@code strftime()} * function of ISO C. * * @return a string representation of this date, using the locale @@ -1075,7 +1072,7 @@ public class Date * @see java.util.Date#toString() * @see java.util.Date#toGMTString() * @deprecated As of JDK version 1.1, - * replaced by DateFormat.format(Date date). + * replaced by {@code DateFormat.format(Date date)}. */ @Deprecated public String toLocaleString() { @@ -1084,23 +1081,23 @@ public class Date } /** - * Creates a string representation of this Date object of + * Creates a string representation of this {@code Date} object of * the form: *
            * d mon yyyy hh:mm:ss GMT
      * where:
        - *
      • d is the day of the month (1 through 31), + *
      • d is the day of the month ({@code 1} through {@code 31}), * as one or two decimal digits. - *
      • mon is the month (Jan, Feb, Mar, Apr, May, Jun, Jul, - * Aug, Sep, Oct, Nov, Dec). + *
      • mon is the month ({@code Jan, Feb, Mar, Apr, May, Jun, Jul, + * Aug, Sep, Oct, Nov, Dec}). *
      • yyyy is the year, as four decimal digits. - *
      • hh is the hour of the day (00 through 23), + *
      • hh is the hour of the day ({@code 00} through {@code 23}), * as two decimal digits. - *
      • mm is the minute within the hour (00 through - * 59), as two decimal digits. - *
      • ss is the second within the minute (00 through - * 61), as two decimal digits. - *
      • GMT is exactly the ASCII letters "GMT" to indicate + *
      • mm is the minute within the hour ({@code 00} through + * {@code 59}), as two decimal digits. + *
      • ss is the second within the minute ({@code 00} through + * {@code 61}), as two decimal digits. + *
      • GMT is exactly the ASCII letters "{@code GMT}" to indicate * Greenwich Mean Time. *

      * The result does not depend on the local time zone. @@ -1111,8 +1108,8 @@ public class Date * @see java.util.Date#toString() * @see java.util.Date#toLocaleString() * @deprecated As of JDK version 1.1, - * replaced by DateFormat.format(Date date), using a - * GMT TimeZone. + * replaced by {@code DateFormat.format(Date date)}, using a + * GMT {@code TimeZone}. */ @Deprecated public String toGMTString() { @@ -1135,7 +1132,7 @@ public class Date /** * Returns the offset, measured in minutes, for the local time zone * relative to UTC that is appropriate for the time represented by - * this Date object. + * this {@code Date} object. *

      * For example, in Massachusetts, five time zones west of Greenwich: *

      @@ -1161,8 +1158,8 @@ public class Date
            * @see     java.util.Calendar#DST_OFFSET
            * @see     java.util.TimeZone#getDefault
            * @deprecated As of JDK version 1.1,
      -     * replaced by -(Calendar.get(Calendar.ZONE_OFFSET) +
      -     * Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000).
      +     * replaced by {@code -(Calendar.get(Calendar.ZONE_OFFSET) +
      +     * Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000)}.
            */
           @Deprecated
           public int getTimezoneOffset() {
      @@ -1313,7 +1310,7 @@ public class Date
           /**
            * Save the state of this object to a stream (i.e., serialize it).
            *
      -     * @serialData The value returned by getTime()
      +     * @serialData The value returned by {@code getTime()}
            *             is emitted (long).  This represents the offset from
            *             January 1, 1970, 00:00:00 GMT in milliseconds.
            */
      @@ -1336,7 +1333,7 @@ public class Date
            * Obtains an instance of {@code Date} from an {@code Instant} object.
            * 

      * {@code Instant} uses a precision of nanoseconds, whereas {@code Date} - * uses a precision of milliseconds. The conversion will trancate any + * uses a precision of milliseconds. The conversion will truncate any * excess precision information as though the amount in nanoseconds was * subject to integer division by one million. *

      diff --git a/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java b/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java index fae67b2b2d0..162ad3b51d1 100644 --- a/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java +++ b/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java @@ -1400,7 +1400,7 @@ public class CopyOnWriteArrayList lock.lock(); try { checkForComodification(); - if (fromIndex < 0 || toIndex > size) + if (fromIndex < 0 || toIndex > size || fromIndex > toIndex) throw new IndexOutOfBoundsException(); return new COWSubList(l, fromIndex + offset, toIndex + offset); diff --git a/jdk/src/share/classes/java/util/jar/JarFile.java b/jdk/src/share/classes/java/util/jar/JarFile.java index 6e917e0ae26..946c4ae2bc2 100644 --- a/jdk/src/share/classes/java/util/jar/JarFile.java +++ b/jdk/src/share/classes/java/util/jar/JarFile.java @@ -40,6 +40,7 @@ import sun.misc.IOUtils; import sun.security.action.GetPropertyAction; import sun.security.util.ManifestEntryVerifier; import sun.misc.SharedSecrets; +import sun.security.util.SignatureFileVerifier; /** * The JarFile class is used to read the contents of a jar file @@ -364,11 +365,13 @@ class JarFile extends ZipFile { String[] names = getMetaInfEntryNames(); if (names != null) { for (String name : names) { - JarEntry e = getJarEntry(name); - if (e == null) { - throw new JarException("corrupted jar file"); - } - if (!e.isDirectory()) { + String uname = name.toUpperCase(Locale.ENGLISH); + if (MANIFEST_NAME.equals(uname) + || SignatureFileVerifier.isBlockOrSF(uname)) { + JarEntry e = getJarEntry(name); + if (e == null) { + throw new JarException("corrupted jar file"); + } if (mev == null) { mev = new ManifestEntryVerifier (getManifestFromReference()); diff --git a/jdk/src/share/classes/javax/accessibility/AccessibleRelationSet.java b/jdk/src/share/classes/javax/accessibility/AccessibleRelationSet.java index e1409089fb9..37f38aa8a40 100644 --- a/jdk/src/share/classes/javax/accessibility/AccessibleRelationSet.java +++ b/jdk/src/share/classes/javax/accessibility/AccessibleRelationSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -195,8 +195,7 @@ public class AccessibleRelationSet { } else { int len = relations.size(); for (int i = 0; i < len; i++) { - AccessibleRelation relation = - (AccessibleRelation)relations.elementAt(i); + AccessibleRelation relation = relations.elementAt(i); if (relation != null && relation.getKey().equals(key)) { return relation; } @@ -216,7 +215,7 @@ public class AccessibleRelationSet { AccessibleRelation[] relationArray = new AccessibleRelation[relations.size()]; for (int i = 0; i < relationArray.length; i++) { - relationArray[i] = (AccessibleRelation) relations.elementAt(i); + relationArray[i] = relations.elementAt(i); } return relationArray; } @@ -232,11 +231,10 @@ public class AccessibleRelationSet { public String toString() { String ret = ""; if ((relations != null) && (relations.size() > 0)) { - ret = ((AccessibleRelation) (relations.elementAt(0))).toDisplayString(); + ret = (relations.elementAt(0)).toDisplayString(); for (int i = 1; i < relations.size(); i++) { ret = ret + "," - + ((AccessibleRelation) (relations.elementAt(i))). - toDisplayString(); + + (relations.elementAt(i)).toDisplayString(); } } return ret; diff --git a/jdk/src/share/classes/javax/accessibility/AccessibleStateSet.java b/jdk/src/share/classes/javax/accessibility/AccessibleStateSet.java index 5d667b346e8..5eb4f05e3b9 100644 --- a/jdk/src/share/classes/javax/accessibility/AccessibleStateSet.java +++ b/jdk/src/share/classes/javax/accessibility/AccessibleStateSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -171,7 +171,7 @@ public class AccessibleStateSet { } else { AccessibleState[] stateArray = new AccessibleState[states.size()]; for (int i = 0; i < stateArray.length; i++) { - stateArray[i] = (AccessibleState) states.elementAt(i); + stateArray[i] = states.elementAt(i); } return stateArray; } @@ -187,11 +187,10 @@ public class AccessibleStateSet { public String toString() { String ret = null; if ((states != null) && (states.size() > 0)) { - ret = ((AccessibleState) (states.elementAt(0))).toDisplayString(); + ret = states.elementAt(0).toDisplayString(); for (int i = 1; i < states.size(); i++) { ret = ret + "," - + ((AccessibleState) (states.elementAt(i))). - toDisplayString(); + + states.elementAt(i).toDisplayString(); } } return ret; diff --git a/jdk/src/share/classes/javax/imageio/IIOException.java b/jdk/src/share/classes/javax/imageio/IIOException.java index 6a1c4d9ac5f..1b3cb8e6a96 100644 --- a/jdk/src/share/classes/javax/imageio/IIOException.java +++ b/jdk/src/share/classes/javax/imageio/IIOException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -40,6 +40,7 @@ import java.io.IOException; * */ public class IIOException extends IOException { + private static final long serialVersionUID = -3216210718638985251L; /** * Constructs an IIOException with a given message diff --git a/jdk/src/share/classes/javax/imageio/IIOParam.java b/jdk/src/share/classes/javax/imageio/IIOParam.java index 33bede6cdb6..ca73f6acbd9 100644 --- a/jdk/src/share/classes/javax/imageio/IIOParam.java +++ b/jdk/src/share/classes/javax/imageio/IIOParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -437,7 +437,7 @@ public abstract class IIOParam { } } - this.sourceBands = (int[])(sourceBands.clone()); + this.sourceBands = (sourceBands.clone()); } } @@ -460,7 +460,7 @@ public abstract class IIOParam { if (sourceBands == null) { return null; } - return (int[])(sourceBands.clone()); + return (sourceBands.clone()); } /** diff --git a/jdk/src/share/classes/javax/imageio/ImageIO.java b/jdk/src/share/classes/javax/imageio/ImageIO.java index e6345322301..1ad84b4a204 100644 --- a/jdk/src/share/classes/javax/imageio/ImageIO.java +++ b/jdk/src/share/classes/javax/imageio/ImageIO.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -169,7 +169,7 @@ public final class ImageIO { */ private static String getTempDir() { GetPropertyAction a = new GetPropertyAction("java.io.tmpdir"); - return (String)AccessController.doPrivileged(a); + return AccessController.doPrivileged(a); } /** diff --git a/jdk/src/share/classes/javax/imageio/ImageReadParam.java b/jdk/src/share/classes/javax/imageio/ImageReadParam.java index 6053348d100..4e9ac1e06a6 100644 --- a/jdk/src/share/classes/javax/imageio/ImageReadParam.java +++ b/jdk/src/share/classes/javax/imageio/ImageReadParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -294,7 +294,7 @@ public class ImageReadParam extends IIOParam { } } } - this.destinationBands = (int[])destinationBands.clone(); + this.destinationBands = destinationBands.clone(); } } @@ -312,7 +312,7 @@ public class ImageReadParam extends IIOParam { if (destinationBands == null) { return null; } else { - return (int[])(destinationBands.clone()); + return destinationBands.clone(); } } diff --git a/jdk/src/share/classes/javax/imageio/ImageReader.java b/jdk/src/share/classes/javax/imageio/ImageReader.java index b6b70216902..97dd57d3a13 100644 --- a/jdk/src/share/classes/javax/imageio/ImageReader.java +++ b/jdk/src/share/classes/javax/imageio/ImageReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -457,7 +457,7 @@ public abstract class ImageReader { if (availableLocales == null) { return null; } else { - return (Locale[])availableLocales.clone(); + return availableLocales.clone(); } } @@ -678,7 +678,7 @@ public abstract class ImageReader { */ public ImageTypeSpecifier getRawImageType(int imageIndex) throws IOException { - return (ImageTypeSpecifier)getImageTypes(imageIndex).next(); + return getImageTypes(imageIndex).next(); } /** @@ -2012,7 +2012,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.sequenceStarted(this, minIndex); } } @@ -2030,7 +2030,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.sequenceComplete(this); } } @@ -2050,7 +2050,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageStarted(this, imageIndex); } } @@ -2071,7 +2071,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageProgress(this, percentageDone); } } @@ -2089,7 +2089,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageComplete(this); } } @@ -2112,7 +2112,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailStarted(this, imageIndex, thumbnailIndex); } } @@ -2133,7 +2133,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailProgress(this, percentageDone); } } @@ -2151,7 +2151,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailComplete(this); } } @@ -2169,7 +2169,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.readAborted(this); } } @@ -2205,7 +2205,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.passStarted(this, theImage, pass, minPass, maxPass, @@ -2246,7 +2246,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.imageUpdate(this, theImage, minX, minY, @@ -2271,7 +2271,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.passComplete(this, theImage); } } @@ -2308,7 +2308,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.thumbnailPassStarted(this, theThumbnail, pass, minPass, maxPass, @@ -2350,7 +2350,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.thumbnailUpdate(this, theThumbnail, minX, minY, @@ -2376,7 +2376,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.thumbnailPassComplete(this, theThumbnail); } } @@ -2402,7 +2402,7 @@ public abstract class ImageReader { int numListeners = warningListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadWarningListener listener = - (IIOReadWarningListener)warningListeners.get(i); + warningListeners.get(i); listener.warningOccurred(this, warning); } @@ -2447,8 +2447,8 @@ public abstract class ImageReader { int numListeners = warningListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadWarningListener listener = - (IIOReadWarningListener)warningListeners.get(i); - Locale locale = (Locale)warningLocales.get(i); + warningListeners.get(i); + Locale locale = warningLocales.get(i); if (locale == null) { locale = Locale.getDefault(); } @@ -2864,7 +2864,7 @@ public abstract class ImageReader { boolean foundIt = false; while (imageTypes.hasNext()) { ImageTypeSpecifier type = - (ImageTypeSpecifier)imageTypes.next(); + imageTypes.next(); if (type.equals(imageType)) { foundIt = true; break; diff --git a/jdk/src/share/classes/javax/imageio/ImageTypeSpecifier.java b/jdk/src/share/classes/javax/imageio/ImageTypeSpecifier.java index c9c17dfe4c1..4c3295b5a4c 100644 --- a/jdk/src/share/classes/javax/imageio/ImageTypeSpecifier.java +++ b/jdk/src/share/classes/javax/imageio/ImageTypeSpecifier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -296,7 +296,7 @@ public class ImageTypeSpecifier { ("Bad value for dataType!"); } this.colorSpace = colorSpace; - this.bandOffsets = (int[])bandOffsets.clone(); + this.bandOffsets = bandOffsets.clone(); this.dataType = dataType; this.hasAlpha = hasAlpha; this.isAlphaPremultiplied = isAlphaPremultiplied; @@ -449,8 +449,8 @@ public class ImageTypeSpecifier { } this.colorSpace = colorSpace; - this.bankIndices = (int[])bankIndices.clone(); - this.bandOffsets = (int[])bandOffsets.clone(); + this.bankIndices = bankIndices.clone(); + this.bandOffsets = bandOffsets.clone(); this.dataType = dataType; this.hasAlpha = hasAlpha; this.isAlphaPremultiplied = isAlphaPremultiplied; @@ -769,11 +769,11 @@ public class ImageTypeSpecifier { (alphaLUT != null && alphaLUT.length != len)) { throw new IllegalArgumentException("LUT has improper length!"); } - this.redLUT = (byte[])redLUT.clone(); - this.greenLUT = (byte[])greenLUT.clone(); - this.blueLUT = (byte[])blueLUT.clone(); + this.redLUT = redLUT.clone(); + this.greenLUT = greenLUT.clone(); + this.blueLUT = blueLUT.clone(); if (alphaLUT != null) { - this.alphaLUT = (byte[])alphaLUT.clone(); + this.alphaLUT = alphaLUT.clone(); } this.bits = bits; this.dataType = dataType; diff --git a/jdk/src/share/classes/javax/imageio/ImageWriteParam.java b/jdk/src/share/classes/javax/imageio/ImageWriteParam.java index f903dd6f917..1823b0eb672 100644 --- a/jdk/src/share/classes/javax/imageio/ImageWriteParam.java +++ b/jdk/src/share/classes/javax/imageio/ImageWriteParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -976,7 +976,7 @@ public class ImageWriteParam extends IIOParam { if (compressionTypes == null) { return null; } - return (String[])compressionTypes.clone(); + return compressionTypes.clone(); } /** diff --git a/jdk/src/share/classes/javax/imageio/ImageWriter.java b/jdk/src/share/classes/javax/imageio/ImageWriter.java index acb328d4215..78761150507 100644 --- a/jdk/src/share/classes/javax/imageio/ImageWriter.java +++ b/jdk/src/share/classes/javax/imageio/ImageWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -257,7 +257,7 @@ public abstract class ImageWriter implements ImageTranscoder { */ public Locale[] getAvailableLocales() { return (availableLocales == null) ? - null : (Locale[])availableLocales.clone(); + null : availableLocales.clone(); } /** @@ -1754,7 +1754,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageStarted(this, imageIndex); } } @@ -1775,7 +1775,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageProgress(this, percentageDone); } } @@ -1793,7 +1793,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageComplete(this); } } @@ -1816,7 +1816,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailStarted(this, imageIndex, thumbnailIndex); } } @@ -1837,7 +1837,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailProgress(this, percentageDone); } } @@ -1855,7 +1855,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailComplete(this); } } @@ -1873,7 +1873,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.writeAborted(this); } } @@ -1902,7 +1902,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = warningListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteWarningListener listener = - (IIOWriteWarningListener)warningListeners.get(i); + warningListeners.get(i); listener.warningOccurred(this, imageIndex, warning); } @@ -1950,8 +1950,8 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = warningListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteWarningListener listener = - (IIOWriteWarningListener)warningListeners.get(i); - Locale locale = (Locale)warningLocales.get(i); + warningListeners.get(i); + Locale locale = warningLocales.get(i); if (locale == null) { locale = Locale.getDefault(); } diff --git a/jdk/src/share/classes/javax/imageio/metadata/IIOInvalidTreeException.java b/jdk/src/share/classes/javax/imageio/metadata/IIOInvalidTreeException.java index 7f50cc80a85..9bec7c90eb4 100644 --- a/jdk/src/share/classes/javax/imageio/metadata/IIOInvalidTreeException.java +++ b/jdk/src/share/classes/javax/imageio/metadata/IIOInvalidTreeException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -44,6 +44,7 @@ import org.w3c.dom.Node; * */ public class IIOInvalidTreeException extends IIOException { + private static final long serialVersionUID = -1314083172544132777L; /** * The Node that led to the parsing error, or diff --git a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadata.java b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadata.java index 3040d64f7bd..c5f21249df6 100644 --- a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadata.java +++ b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -191,10 +191,8 @@ public abstract class IIOMetadata { throw new IllegalArgumentException ("extraMetadataFormatClassNames.length != extraMetadataFormatNames.length!"); } - this.extraMetadataFormatNames = - (String[]) extraMetadataFormatNames.clone(); - this.extraMetadataFormatClassNames = - (String[]) extraMetadataFormatClassNames.clone(); + this.extraMetadataFormatNames = extraMetadataFormatNames.clone(); + this.extraMetadataFormatClassNames = extraMetadataFormatClassNames.clone(); } else { if (extraMetadataFormatClassNames != null) { throw new IllegalArgumentException @@ -285,7 +283,7 @@ public abstract class IIOMetadata { if (extraMetadataFormatNames == null) { return null; } - return (String[])extraMetadataFormatNames.clone(); + return extraMetadataFormatNames.clone(); } /** diff --git a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataFormatImpl.java b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataFormatImpl.java index ef7caf3313e..a10de18ee94 100644 --- a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataFormatImpl.java +++ b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataFormatImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -1181,7 +1181,7 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { private ObjectValue getObjectValue(String elementName) { Element element = getElement(elementName); - ObjectValue objv = (ObjectValue)element.objectValue; + ObjectValue objv = element.objectValue; if (objv == null) { throw new IllegalArgumentException("No object within element " + elementName + "!"); @@ -1191,7 +1191,7 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { public int getObjectValueType(String elementName) { Element element = getElement(elementName); - ObjectValue objv = (ObjectValue)element.objectValue; + ObjectValue objv = element.objectValue; if (objv == null) { return VALUE_NONE; } diff --git a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataNode.java b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataNode.java index bb5833a0a2f..1f3fd25f131 100644 --- a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataNode.java +++ b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -41,6 +41,7 @@ import org.w3c.dom.UserDataHandler; class IIODOMException extends DOMException { + private static final long serialVersionUID = -4369510142067447468L; public IIODOMException(short code, String message) { super(code, message); diff --git a/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageReadParam.java b/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageReadParam.java index 720aa600129..f12e1e6ec3e 100644 --- a/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageReadParam.java +++ b/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageReadParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -132,9 +132,9 @@ public class JPEGImageReadParam extends ImageReadParam { throw new IllegalArgumentException ("Invalid JPEG table arrays"); } - this.qTables = (JPEGQTable[])qTables.clone(); - this.DCHuffmanTables = (JPEGHuffmanTable[])DCHuffmanTables.clone(); - this.ACHuffmanTables = (JPEGHuffmanTable[])ACHuffmanTables.clone(); + this.qTables = qTables.clone(); + this.DCHuffmanTables = DCHuffmanTables.clone(); + this.ACHuffmanTables = ACHuffmanTables.clone(); } /** @@ -160,7 +160,7 @@ public class JPEGImageReadParam extends ImageReadParam { * @see #setDecodeTables */ public JPEGQTable[] getQTables() { - return (qTables != null) ? (JPEGQTable[])qTables.clone() : null; + return (qTables != null) ? qTables.clone() : null; } /** @@ -175,7 +175,7 @@ public class JPEGImageReadParam extends ImageReadParam { */ public JPEGHuffmanTable[] getDCHuffmanTables() { return (DCHuffmanTables != null) - ? (JPEGHuffmanTable[])DCHuffmanTables.clone() + ? DCHuffmanTables.clone() : null; } @@ -191,7 +191,7 @@ public class JPEGImageReadParam extends ImageReadParam { */ public JPEGHuffmanTable[] getACHuffmanTables() { return (ACHuffmanTables != null) - ? (JPEGHuffmanTable[])ACHuffmanTables.clone() + ? ACHuffmanTables.clone() : null; } } diff --git a/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java b/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java index b4df14e99c6..a445bf20a8a 100644 --- a/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java +++ b/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -167,7 +167,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { (getCompressionType() == null)) { throw new IllegalStateException("No compression type set!"); } - return (String[])qualityDescs.clone(); + return qualityDescs.clone(); } public float[] getCompressionQualityValues() { @@ -179,7 +179,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { (getCompressionType() == null)) { throw new IllegalStateException("No compression type set!"); } - return (float[])qualityVals.clone(); + return qualityVals.clone(); } /** * Returns true if tables are currently set. @@ -222,9 +222,9 @@ public class JPEGImageWriteParam extends ImageWriteParam { (DCHuffmanTables.length != ACHuffmanTables.length)) { throw new IllegalArgumentException("Invalid JPEG table arrays"); } - this.qTables = (JPEGQTable[])qTables.clone(); - this.DCHuffmanTables = (JPEGHuffmanTable[])DCHuffmanTables.clone(); - this.ACHuffmanTables = (JPEGHuffmanTable[])ACHuffmanTables.clone(); + this.qTables = qTables.clone(); + this.DCHuffmanTables = DCHuffmanTables.clone(); + this.ACHuffmanTables = ACHuffmanTables.clone(); } /** @@ -250,7 +250,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { * @see #setEncodeTables */ public JPEGQTable[] getQTables() { - return (qTables != null) ? (JPEGQTable[])qTables.clone() : null; + return (qTables != null) ? qTables.clone() : null; } /** @@ -265,7 +265,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { */ public JPEGHuffmanTable[] getDCHuffmanTables() { return (DCHuffmanTables != null) - ? (JPEGHuffmanTable[])DCHuffmanTables.clone() + ? DCHuffmanTables.clone() : null; } @@ -281,7 +281,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { */ public JPEGHuffmanTable[] getACHuffmanTables() { return (ACHuffmanTables != null) - ? (JPEGHuffmanTable[])ACHuffmanTables.clone() + ? ACHuffmanTables.clone() : null; } diff --git a/jdk/src/share/classes/javax/imageio/spi/DigraphNode.java b/jdk/src/share/classes/javax/imageio/spi/DigraphNode.java index 9473ced32fc..b133c29db9a 100644 --- a/jdk/src/share/classes/javax/imageio/spi/DigraphNode.java +++ b/jdk/src/share/classes/javax/imageio/spi/DigraphNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -40,6 +40,7 @@ import java.util.Set; * */ class DigraphNode implements Cloneable, Serializable { + private static final long serialVersionUID = 5308261378582246841L; /** The data associated with this node. */ protected Object data; diff --git a/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java b/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java index 36d08e6cfdb..9ce6de36c66 100644 --- a/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java +++ b/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -237,7 +237,7 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { // If length == 0, leave it null if (writerSpiNames != null && writerSpiNames.length > 0) { - this.writerSpiNames = (String[])writerSpiNames.clone(); + this.writerSpiNames = writerSpiNames.clone(); } } @@ -255,7 +255,7 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { * Classobjects of length at least 1. */ public Class[] getInputTypes() { - return (Class[])inputTypes.clone(); + return inputTypes.clone(); } /** @@ -408,6 +408,6 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { */ public String[] getImageWriterSpiNames() { return writerSpiNames == null ? - null : (String[])writerSpiNames.clone(); + null : writerSpiNames.clone(); } } diff --git a/jdk/src/share/classes/javax/imageio/spi/ImageReaderWriterSpi.java b/jdk/src/share/classes/javax/imageio/spi/ImageReaderWriterSpi.java index 60c049d1eb4..4a5dd1416f4 100644 --- a/jdk/src/share/classes/javax/imageio/spi/ImageReaderWriterSpi.java +++ b/jdk/src/share/classes/javax/imageio/spi/ImageReaderWriterSpi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -239,14 +239,14 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { throw new IllegalArgumentException("pluginClassName == null!"); } - this.names = (String[])names.clone(); + this.names = names.clone(); // If length == 0, leave it null if (suffixes != null && suffixes.length > 0) { - this.suffixes = (String[])suffixes.clone(); + this.suffixes = suffixes.clone(); } // If length == 0, leave it null if (MIMETypes != null && MIMETypes.length > 0) { - this.MIMETypes = (String[])MIMETypes.clone(); + this.MIMETypes = MIMETypes.clone(); } this.pluginClassName = pluginClassName; @@ -259,13 +259,13 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { if (extraStreamMetadataFormatNames != null && extraStreamMetadataFormatNames.length > 0) { this.extraStreamMetadataFormatNames = - (String[])extraStreamMetadataFormatNames.clone(); + extraStreamMetadataFormatNames.clone(); } // If length == 0, leave it null if (extraStreamMetadataFormatClassNames != null && extraStreamMetadataFormatClassNames.length > 0) { this.extraStreamMetadataFormatClassNames = - (String[])extraStreamMetadataFormatClassNames.clone(); + extraStreamMetadataFormatClassNames.clone(); } this.supportsStandardImageMetadataFormat = supportsStandardImageMetadataFormat; @@ -276,13 +276,13 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { if (extraImageMetadataFormatNames != null && extraImageMetadataFormatNames.length > 0) { this.extraImageMetadataFormatNames = - (String[])extraImageMetadataFormatNames.clone(); + extraImageMetadataFormatNames.clone(); } // If length == 0, leave it null if (extraImageMetadataFormatClassNames != null && extraImageMetadataFormatClassNames.length > 0) { this.extraImageMetadataFormatClassNames = - (String[])extraImageMetadataFormatClassNames.clone(); + extraImageMetadataFormatClassNames.clone(); } } @@ -308,7 +308,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { * associated with this reader or writer. */ public String[] getFormatNames() { - return (String[])names.clone(); + return names.clone(); } /** @@ -332,7 +332,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { * writer, or null. */ public String[] getFileSuffixes() { - return suffixes == null ? null : (String[])suffixes.clone(); + return suffixes == null ? null : suffixes.clone(); } /** @@ -367,7 +367,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { * null. */ public String[] getMIMETypes() { - return MIMETypes == null ? null : (String[])MIMETypes.clone(); + return MIMETypes == null ? null : MIMETypes.clone(); } /** @@ -443,7 +443,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { */ public String[] getExtraStreamMetadataFormatNames() { return extraStreamMetadataFormatNames == null ? - null : (String[])extraStreamMetadataFormatNames.clone(); + null : extraStreamMetadataFormatNames.clone(); } /** @@ -507,7 +507,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { */ public String[] getExtraImageMetadataFormatNames() { return extraImageMetadataFormatNames == null ? - null : (String[])extraImageMetadataFormatNames.clone(); + null : extraImageMetadataFormatNames.clone(); } /** diff --git a/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java b/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java index 7fc1a334a9f..19d17145452 100644 --- a/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java +++ b/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -238,7 +238,7 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { // If length == 0, leave it null if (readerSpiNames != null && readerSpiNames.length > 0) { - this.readerSpiNames = (String[])readerSpiNames.clone(); + this.readerSpiNames = readerSpiNames.clone(); } } @@ -268,7 +268,7 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { * Classobjects of length at least 1. */ public Class[] getOutputTypes() { - return (Class[])outputTypes.clone(); + return outputTypes.clone(); } /** @@ -435,6 +435,6 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { */ public String[] getImageReaderSpiNames() { return readerSpiNames == null ? - null : (String[])readerSpiNames.clone(); + null : readerSpiNames.clone(); } } diff --git a/jdk/src/share/classes/javax/management/remote/JMXServiceURL.java b/jdk/src/share/classes/javax/management/remote/JMXServiceURL.java index 4b1c376eda1..4f9c36e9509 100644 --- a/jdk/src/share/classes/javax/management/remote/JMXServiceURL.java +++ b/jdk/src/share/classes/javax/management/remote/JMXServiceURL.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -344,7 +344,7 @@ public class JMXServiceURL implements Serializable { private void readObject(ObjectInputStream inputStream) throws IOException, ClassNotFoundException { ObjectInputStream.GetField gf = inputStream.readFields(); String h = (String)gf.get("host", null); - int p = (int)gf.get("port", -1); + int p = gf.get("port", -1); String proto = (String)gf.get("protocol", null); String url = (String)gf.get("urlPath", null); diff --git a/jdk/src/share/classes/javax/print/DocFlavor.java b/jdk/src/share/classes/javax/print/DocFlavor.java index 1d5464edb10..3c94623c222 100644 --- a/jdk/src/share/classes/javax/print/DocFlavor.java +++ b/jdk/src/share/classes/javax/print/DocFlavor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -460,7 +460,7 @@ public class DocFlavor implements Serializable, Cloneable { static { hostEncoding = - (String)java.security.AccessController.doPrivileged( + java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("file.encoding")); } diff --git a/jdk/src/share/classes/javax/print/attribute/HashAttributeSet.java b/jdk/src/share/classes/javax/print/attribute/HashAttributeSet.java index f8d9aa99298..a1995014525 100644 --- a/jdk/src/share/classes/javax/print/attribute/HashAttributeSet.java +++ b/jdk/src/share/classes/javax/print/attribute/HashAttributeSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -382,7 +382,7 @@ public class HashAttributeSet implements AttributeSet, Serializable { return attribute != null && attribute instanceof Attribute && - attribute.equals(attrMap.get(((Attribute)attribute).getCategory())); + attribute.equals(attrMap.get(attribute.getCategory())); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/Compression.java b/jdk/src/share/classes/javax/print/attribute/standard/Compression.java index 5679a73f850..8dbbfaf8aa1 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/Compression.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/Compression.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -94,7 +94,7 @@ public class Compression extends EnumSyntax implements DocAttribute { * Returns the string table for class Compression. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/Finishings.java b/jdk/src/share/classes/javax/print/attribute/standard/Finishings.java index 413bc7d1f47..cc21389cbaf 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/Finishings.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/Finishings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -430,7 +430,7 @@ public class Finishings extends EnumSyntax * Returns the string table for class Finishings. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/JobSheets.java b/jdk/src/share/classes/javax/print/attribute/standard/JobSheets.java index 7919000ad97..a9811135325 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/JobSheets.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/JobSheets.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -94,7 +94,7 @@ public class JobSheets extends EnumSyntax * Returns the string table for class JobSheets. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/JobStateReason.java b/jdk/src/share/classes/javax/print/attribute/standard/JobStateReason.java index f835666d884..a3de1c5c9ff 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/JobStateReason.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/JobStateReason.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -420,7 +420,7 @@ public class JobStateReason extends EnumSyntax implements Attribute { * Returns the string table for class JobStateReason. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/JobStateReasons.java b/jdk/src/share/classes/javax/print/attribute/standard/JobStateReasons.java index d9e225f621f..19ea46f2367 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/JobStateReasons.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/JobStateReasons.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -149,7 +149,7 @@ public final class JobStateReasons if (o == null) { throw new NullPointerException(); } - return super.add ((JobStateReason) o); + return super.add(o); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/MediaName.java b/jdk/src/share/classes/javax/print/attribute/standard/MediaName.java index 78ae6a82d0a..28772c1ae83 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/MediaName.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/MediaName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -98,7 +98,7 @@ public class MediaName extends Media implements Attribute { */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/MediaSizeName.java b/jdk/src/share/classes/javax/print/attribute/standard/MediaSizeName.java index 8dae36f9783..bbb266ba891 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/MediaSizeName.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/MediaSizeName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -550,7 +550,7 @@ public class MediaSizeName extends Media { */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/MediaTray.java b/jdk/src/share/classes/javax/print/attribute/standard/MediaTray.java index 318a2e7c778..9a4da0a408e 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/MediaTray.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/MediaTray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -124,7 +124,7 @@ public class MediaTray extends Media implements Attribute { */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java b/jdk/src/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java index 0ddbbe5d296..c7f5f5e7664 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -228,7 +228,7 @@ public class MultipleDocumentHandling extends EnumSyntax * Returns the string table for class MultipleDocumentHandling. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java b/jdk/src/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java index a362da86656..8f1ce4eda9a 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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,7 +88,7 @@ public class PDLOverrideSupported extends EnumSyntax * Returns the string table for class PDLOverrideSupported. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/PrintQuality.java b/jdk/src/share/classes/javax/print/attribute/standard/PrintQuality.java index 3a644cff6c9..1ed3caf8254 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/PrintQuality.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/PrintQuality.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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,7 +88,7 @@ public class PrintQuality extends EnumSyntax * Returns the string table for class PrintQuality. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/PrinterStateReason.java b/jdk/src/share/classes/javax/print/attribute/standard/PrinterStateReason.java index b461a5d0dad..5c4f48f8853 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/PrinterStateReason.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/PrinterStateReason.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -403,7 +403,7 @@ public class PrinterStateReason extends EnumSyntax implements Attribute { * Returns the string table for class PrinterStateReason. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/sound/midi/MidiFileFormat.java b/jdk/src/share/classes/javax/sound/midi/MidiFileFormat.java index 1d4669a2458..0d496490dd0 100644 --- a/jdk/src/share/classes/javax/sound/midi/MidiFileFormat.java +++ b/jdk/src/share/classes/javax/sound/midi/MidiFileFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -273,7 +273,7 @@ public class MidiFileFormat { } else { ret = (Map) (properties.clone()); } - return (Map) Collections.unmodifiableMap(ret); + return Collections.unmodifiableMap(ret); } diff --git a/jdk/src/share/classes/javax/sound/midi/MidiSystem.java b/jdk/src/share/classes/javax/sound/midi/MidiSystem.java index ac13aa58a86..d0eab92865e 100644 --- a/jdk/src/share/classes/javax/sound/midi/MidiSystem.java +++ b/jdk/src/share/classes/javax/sound/midi/MidiSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -472,7 +472,7 @@ public class MidiSystem { } catch (MidiUnavailableException e) { // something went wrong with synth if (e instanceof MidiUnavailableException) { - mue = (MidiUnavailableException) e; + mue = e; } } if (rec == null) { diff --git a/jdk/src/share/classes/javax/sound/midi/Sequence.java b/jdk/src/share/classes/javax/sound/midi/Sequence.java index 7fb0778beda..14cb66110ed 100644 --- a/jdk/src/share/classes/javax/sound/midi/Sequence.java +++ b/jdk/src/share/classes/javax/sound/midi/Sequence.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -284,7 +284,7 @@ public class Sequence { */ public Track[] getTracks() { - return (Track[]) tracks.toArray(new Track[tracks.size()]); + return tracks.toArray(new Track[tracks.size()]); } @@ -312,7 +312,7 @@ public class Sequence { synchronized(tracks) { for(int i=0; ilength ) { length = temp; } diff --git a/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java b/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java index 659399e616f..63f43dcc160 100644 --- a/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java +++ b/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -251,7 +251,7 @@ public class AudioFileFormat { } else { ret = (Map) (properties.clone()); } - return (Map) Collections.unmodifiableMap(ret); + return Collections.unmodifiableMap(ret); } diff --git a/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java b/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java index 775331f6ba6..cd084fcd32d 100644 --- a/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java +++ b/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -403,7 +403,7 @@ public class AudioFormat { } else { ret = (Map) (properties.clone()); } - return (Map) Collections.unmodifiableMap(ret); + return Collections.unmodifiableMap(ret); } diff --git a/jdk/src/share/classes/javax/sound/sampled/AudioSystem.java b/jdk/src/share/classes/javax/sound/sampled/AudioSystem.java index 97e7af39c7e..17c0f26d6fb 100644 --- a/jdk/src/share/classes/javax/sound/sampled/AudioSystem.java +++ b/jdk/src/share/classes/javax/sound/sampled/AudioSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -1609,8 +1609,7 @@ public class AudioSystem { Mixer.Info[] allInfos; // for all mixers for(int i = 0; i < providers.size(); i++ ) { - someInfos = (Mixer.Info[]) - ((MixerProvider)providers.get(i)).getMixerInfo(); + someInfos = ((MixerProvider)providers.get(i)).getMixerInfo(); for (int j = 0; j < someInfos.length; j++) { infos.add(someInfos[j]); diff --git a/jdk/src/share/classes/javax/swing/AbstractAction.java b/jdk/src/share/classes/javax/swing/AbstractAction.java index 5b49dd92c91..f8f15f4f992 100644 --- a/jdk/src/share/classes/javax/swing/AbstractAction.java +++ b/jdk/src/share/classes/javax/swing/AbstractAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -56,6 +56,7 @@ import sun.security.action.GetPropertyAction; * @author Georges Saab * @see Action */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractAction implements Action, Cloneable, Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/AbstractButton.java b/jdk/src/share/classes/javax/swing/AbstractButton.java index 6f75be948e9..f7eec138451 100644 --- a/jdk/src/share/classes/javax/swing/AbstractButton.java +++ b/jdk/src/share/classes/javax/swing/AbstractButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -72,6 +72,7 @@ import java.util.*; * * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractButton extends JComponent implements ItemSelectable, SwingConstants { // ********************************* @@ -370,7 +371,7 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl model.setPressed(true); paintImmediately(new Rectangle(0,0, size.width, size.height)); try { - Thread.currentThread().sleep(pressTime); + Thread.sleep(pressTime); } catch(InterruptedException ie) { } model.setPressed(false); @@ -2384,6 +2385,7 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl * Please see {@link java.beans.XMLEncoder}. * @since 1.4 */ + @SuppressWarnings("serial") // Same-version serialization only protected abstract class AccessibleAbstractButton extends AccessibleJComponent implements AccessibleAction, AccessibleValue, AccessibleText, AccessibleExtendedComponent { diff --git a/jdk/src/share/classes/javax/swing/AbstractCellEditor.java b/jdk/src/share/classes/javax/swing/AbstractCellEditor.java index f9efea555dc..7523c64e85f 100644 --- a/jdk/src/share/classes/javax/swing/AbstractCellEditor.java +++ b/jdk/src/share/classes/javax/swing/AbstractCellEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -50,7 +50,7 @@ import java.io.Serializable; * @author Philip Milne * @since 1.3 */ - +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractCellEditor implements CellEditor, Serializable { protected EventListenerList listenerList = new EventListenerList(); diff --git a/jdk/src/share/classes/javax/swing/AbstractListModel.java b/jdk/src/share/classes/javax/swing/AbstractListModel.java index 7270c8f222c..33145a51e8e 100644 --- a/jdk/src/share/classes/javax/swing/AbstractListModel.java +++ b/jdk/src/share/classes/javax/swing/AbstractListModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -46,6 +46,7 @@ import java.util.EventListener; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractListModel implements ListModel, Serializable { protected EventListenerList listenerList = new EventListenerList(); diff --git a/jdk/src/share/classes/javax/swing/CellRendererPane.java b/jdk/src/share/classes/javax/swing/CellRendererPane.java index 3e43b80d9ea..33539284e2d 100644 --- a/jdk/src/share/classes/javax/swing/CellRendererPane.java +++ b/jdk/src/share/classes/javax/swing/CellRendererPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -63,6 +63,7 @@ import javax.accessibility.*; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class CellRendererPane extends Container implements Accessible { /** diff --git a/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java b/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java index fb250acbcda..8d316ce28ac 100644 --- a/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -45,6 +45,7 @@ import java.util.EventListener; * @author Hans Muller * @see BoundedRangeModel */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultBoundedRangeModel implements BoundedRangeModel, Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/DefaultButtonModel.java b/jdk/src/share/classes/javax/swing/DefaultButtonModel.java index 7c0fa3d2181..2b0f150e42c 100644 --- a/jdk/src/share/classes/javax/swing/DefaultButtonModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultButtonModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -45,6 +45,7 @@ import javax.swing.event.*; * * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultButtonModel implements ButtonModel, Serializable { /** The bitmask used to store the state of the button. */ diff --git a/jdk/src/share/classes/javax/swing/DefaultCellEditor.java b/jdk/src/share/classes/javax/swing/DefaultCellEditor.java index 60042a378ef..1eea9e1fb3f 100644 --- a/jdk/src/share/classes/javax/swing/DefaultCellEditor.java +++ b/jdk/src/share/classes/javax/swing/DefaultCellEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,7 +50,7 @@ import java.io.Serializable; * @author Alan Chung * @author Philip Milne */ - +@SuppressWarnings("serial") // Same-version serialization only public class DefaultCellEditor extends AbstractCellEditor implements TableCellEditor, TreeCellEditor { diff --git a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java index 806ec342172..ed62d77b97c 100644 --- a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java +++ b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -185,8 +185,8 @@ public class DefaultDesktopManager implements DesktopManager, java.io.Serializab if (c instanceof JLayeredPane) { JLayeredPane lp = (JLayeredPane)c; - int layer = lp.getLayer(f); - lp.putLayer(desktopIcon, layer); + int layer = JLayeredPane.getLayer(f); + JLayeredPane.putLayer(desktopIcon, layer); } // If we are maximized we already have the normal bounds recorded diff --git a/jdk/src/share/classes/javax/swing/DefaultListCellRenderer.java b/jdk/src/share/classes/javax/swing/DefaultListCellRenderer.java index 4d7a64909e1..e4968364cc0 100644 --- a/jdk/src/share/classes/javax/swing/DefaultListCellRenderer.java +++ b/jdk/src/share/classes/javax/swing/DefaultListCellRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -70,6 +70,7 @@ import sun.swing.DefaultLookup; * @author Philip Milne * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultListCellRenderer extends JLabel implements ListCellRenderer, Serializable { @@ -341,6 +342,7 @@ public class DefaultListCellRenderer extends JLabel * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends DefaultListCellRenderer implements javax.swing.plaf.UIResource { diff --git a/jdk/src/share/classes/javax/swing/DefaultListModel.java b/jdk/src/share/classes/javax/swing/DefaultListModel.java index 33efc4abe32..063c18e2716 100644 --- a/jdk/src/share/classes/javax/swing/DefaultListModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultListModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -52,6 +52,7 @@ import javax.swing.event.*; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultListModel extends AbstractListModel { private Vector delegate = new Vector(); diff --git a/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java b/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java index 388a5a59a81..f7b00bee086 100644 --- a/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -49,7 +49,7 @@ import javax.swing.event.*; * @author Hans Muller * @see ListSelectionModel */ - +@SuppressWarnings("serial") // Same-version serialization only public class DefaultListSelectionModel implements ListSelectionModel, Cloneable, Serializable { private static final int MIN = -1; diff --git a/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java b/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java index 1d5ad7ccac0..d5e5ab81e1d 100644 --- a/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -43,6 +43,7 @@ import java.util.EventListener; * * @author Dave Moore */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultSingleSelectionModel implements SingleSelectionModel, Serializable { /* Only one ModelChangeEvent is needed per model instance since the diff --git a/jdk/src/share/classes/javax/swing/ImageIcon.java b/jdk/src/share/classes/javax/swing/ImageIcon.java index b744d5aa5c5..e286e936f11 100644 --- a/jdk/src/share/classes/javax/swing/ImageIcon.java +++ b/jdk/src/share/classes/javax/swing/ImageIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,6 +66,7 @@ import java.security.*; * @author Jeff Dinkins * @author Lynn Monsanto */ +@SuppressWarnings("serial") // Same-version serialization only public class ImageIcon implements Icon, Serializable, Accessible { /* Keep references to the filename and location so that * alternate persistence schemes have the option to archive @@ -572,6 +573,7 @@ public class ImageIcon implements Icon, Serializable, Accessible { * Please see {@link java.beans.XMLEncoder}. * @since 1.3 */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleImageIcon extends AccessibleContext implements AccessibleIcon, Serializable { diff --git a/jdk/src/share/classes/javax/swing/JApplet.java b/jdk/src/share/classes/javax/swing/JApplet.java index a97b3e96d75..539458979d4 100644 --- a/jdk/src/share/classes/javax/swing/JApplet.java +++ b/jdk/src/share/classes/javax/swing/JApplet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -90,6 +90,7 @@ import javax.accessibility.*; * * @author Arnaud Weber */ +@SuppressWarnings("serial") // Same-version serialization only public class JApplet extends Applet implements Accessible, RootPaneContainer, TransferHandler.HasGetTransferHandler diff --git a/jdk/src/share/classes/javax/swing/JCheckBox.java b/jdk/src/share/classes/javax/swing/JCheckBox.java index 8fdbd17fa04..53502645c72 100644 --- a/jdk/src/share/classes/javax/swing/JCheckBox.java +++ b/jdk/src/share/classes/javax/swing/JCheckBox.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -75,6 +75,7 @@ import java.io.IOException; * * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class JCheckBox extends JToggleButton implements Accessible { /** Identifies a change to the flat property. */ @@ -334,6 +335,7 @@ public class JCheckBox extends JToggleButton implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJCheckBox extends AccessibleJToggleButton { /** diff --git a/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java b/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java index 3d924d38536..08eb53864c4 100644 --- a/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java +++ b/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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,6 +88,7 @@ import javax.accessibility.*; * @author Georges Saab * @author David Karlton */ +@SuppressWarnings("serial") // Same-version serialization only public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants, Accessible { @@ -293,6 +294,7 @@ public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants, * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJCheckBoxMenuItem extends AccessibleJMenuItem { /** * Get the role of this object. diff --git a/jdk/src/share/classes/javax/swing/JColorChooser.java b/jdk/src/share/classes/javax/swing/JColorChooser.java index 9fb2a35a778..88f91c00ca7 100644 --- a/jdk/src/share/classes/javax/swing/JColorChooser.java +++ b/jdk/src/share/classes/javax/swing/JColorChooser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -83,6 +83,7 @@ import sun.swing.SwingUtilities2; * @author Amy Fowler * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class JColorChooser extends JComponent implements Accessible { /** diff --git a/jdk/src/share/classes/javax/swing/JComboBox.java b/jdk/src/share/classes/javax/swing/JComboBox.java index 11081f959df..6416f5036a8 100644 --- a/jdk/src/share/classes/javax/swing/JComboBox.java +++ b/jdk/src/share/classes/javax/swing/JComboBox.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -78,6 +78,7 @@ import javax.accessibility.*; * @author Arnaud Weber * @author Mark Davidson */ +@SuppressWarnings("serial") // Same-version serialization only public class JComboBox extends JComponent implements ItemSelectable,ListDataListener,ActionListener, Accessible { /** @@ -1612,6 +1613,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJComboBox extends AccessibleJComponent implements AccessibleAction, AccessibleSelection { diff --git a/jdk/src/share/classes/javax/swing/JComponent.java b/jdk/src/share/classes/javax/swing/JComponent.java index d6f35ac3fea..98c4d7fb5dd 100644 --- a/jdk/src/share/classes/javax/swing/JComponent.java +++ b/jdk/src/share/classes/javax/swing/JComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -179,6 +179,7 @@ import sun.swing.UIClientPropertyKey; * @author Hans Muller * @author Arnaud Weber */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class JComponent extends Container implements Serializable, TransferHandler.HasGetTransferHandler { @@ -3657,6 +3658,7 @@ public abstract class JComponent extends Container implements Serializable, * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public abstract class AccessibleJComponent extends AccessibleAWTContainer implements AccessibleExtendedComponent { diff --git a/jdk/src/share/classes/javax/swing/JDesktopPane.java b/jdk/src/share/classes/javax/swing/JDesktopPane.java index 6ba0bc82bf2..94f7db248e1 100644 --- a/jdk/src/share/classes/javax/swing/JDesktopPane.java +++ b/jdk/src/share/classes/javax/swing/JDesktopPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -86,6 +86,7 @@ import java.util.TreeSet; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class JDesktopPane extends JLayeredPane implements Accessible { /** @@ -616,6 +617,7 @@ public class JDesktopPane extends JLayeredPane implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJDesktopPane extends AccessibleJComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JDialog.java b/jdk/src/share/classes/javax/swing/JDialog.java index 2d8980e3056..12b978dbf46 100644 --- a/jdk/src/share/classes/javax/swing/JDialog.java +++ b/jdk/src/share/classes/javax/swing/JDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -95,6 +95,7 @@ import javax.accessibility.*; * @author James Gosling * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class JDialog extends Dialog implements WindowConstants, Accessible, RootPaneContainer, diff --git a/jdk/src/share/classes/javax/swing/JEditorPane.java b/jdk/src/share/classes/javax/swing/JEditorPane.java index cbb888c3a88..c1382125237 100644 --- a/jdk/src/share/classes/javax/swing/JEditorPane.java +++ b/jdk/src/share/classes/javax/swing/JEditorPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -189,6 +189,7 @@ import javax.accessibility.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class JEditorPane extends JTextComponent { /** @@ -1640,6 +1641,7 @@ public class JEditorPane extends JTextComponent { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJEditorPane extends AccessibleJTextComponent { /** @@ -1694,6 +1696,7 @@ public class JEditorPane extends JTextComponent { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJEditorPaneHTML extends AccessibleJEditorPane { private AccessibleContext accessibleContext; diff --git a/jdk/src/share/classes/javax/swing/JFormattedTextField.java b/jdk/src/share/classes/javax/swing/JFormattedTextField.java index 36e637727ea..5be75ff295a 100644 --- a/jdk/src/share/classes/javax/swing/JFormattedTextField.java +++ b/jdk/src/share/classes/javax/swing/JFormattedTextField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -177,6 +177,7 @@ import javax.swing.text.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class JFormattedTextField extends JTextField { private static final String uiClassID = "FormattedTextFieldUI"; private static final Action[] defaultActions = @@ -651,7 +652,7 @@ public class JFormattedTextField extends JTextField { JFormattedTextField.this.setValue( JFormattedTextField.this.getValue(), true, true); } catch (ParseException pe) { - if (fb == JFormattedTextField.this.COMMIT_OR_REVERT) { + if (fb == JFormattedTextField.COMMIT_OR_REVERT) { JFormattedTextField.this.setValue( JFormattedTextField.this.getValue(), true, true); } diff --git a/jdk/src/share/classes/javax/swing/JFrame.java b/jdk/src/share/classes/javax/swing/JFrame.java index 308320c8ecc..2077eb76249 100644 --- a/jdk/src/share/classes/javax/swing/JFrame.java +++ b/jdk/src/share/classes/javax/swing/JFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -112,6 +112,7 @@ import javax.accessibility.*; * @author Georges Saab * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class JFrame extends Frame implements WindowConstants, Accessible, RootPaneContainer, diff --git a/jdk/src/share/classes/javax/swing/JInternalFrame.java b/jdk/src/share/classes/javax/swing/JInternalFrame.java index 3183d5c4e90..e94854f9f12 100644 --- a/jdk/src/share/classes/javax/swing/JInternalFrame.java +++ b/jdk/src/share/classes/javax/swing/JInternalFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -110,6 +110,7 @@ import sun.swing.SwingUtilities2; * description: A frame container which is contained within * another window. */ +@SuppressWarnings("serial") // Same-version serialization only public class JInternalFrame extends JComponent implements Accessible, WindowConstants, RootPaneContainer @@ -2034,6 +2035,7 @@ public class JInternalFrame extends JComponent implements * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJInternalFrame extends AccessibleJComponent implements AccessibleValue { @@ -2151,6 +2153,7 @@ public class JInternalFrame extends JComponent implements * * @author David Kloba */ + @SuppressWarnings("serial") // Same-version serialization only static public class JDesktopIcon extends JComponent implements Accessible { JInternalFrame internalFrame; @@ -2323,6 +2326,7 @@ public class JInternalFrame extends JComponent implements * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJDesktopIcon extends AccessibleJComponent implements AccessibleValue { diff --git a/jdk/src/share/classes/javax/swing/JLabel.java b/jdk/src/share/classes/javax/swing/JLabel.java index c5d527b808d..af080be9564 100644 --- a/jdk/src/share/classes/javax/swing/JLabel.java +++ b/jdk/src/share/classes/javax/swing/JLabel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 diff --git a/jdk/src/share/classes/javax/swing/JList.java b/jdk/src/share/classes/javax/swing/JList.java index 1aae62e861f..6503887247e 100644 --- a/jdk/src/share/classes/javax/swing/JList.java +++ b/jdk/src/share/classes/javax/swing/JList.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -277,6 +277,7 @@ import static sun.swing.SwingUtilities2.Section.*; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class JList extends JComponent implements Scrollable, Accessible { /** @@ -2881,6 +2882,7 @@ public class JList extends JComponent implements Scrollable, Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJList extends AccessibleJComponent implements AccessibleSelection, PropertyChangeListener, ListSelectionListener, ListDataListener { diff --git a/jdk/src/share/classes/javax/swing/JOptionPane.java b/jdk/src/share/classes/javax/swing/JOptionPane.java index dcb991947e1..58d38669e9c 100644 --- a/jdk/src/share/classes/javax/swing/JOptionPane.java +++ b/jdk/src/share/classes/javax/swing/JOptionPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -310,6 +310,7 @@ import static javax.swing.ClientPropertyKey.PopupFactory_FORCE_HEAVYWEIGHT_POPUP * @author James Gosling * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class JOptionPane extends JComponent implements Accessible { /** @@ -2576,6 +2577,7 @@ public class JOptionPane extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJOptionPane extends AccessibleJComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JPanel.java b/jdk/src/share/classes/javax/swing/JPanel.java index 8ebfcb1cbfb..6211c8bcd29 100644 --- a/jdk/src/share/classes/javax/swing/JPanel.java +++ b/jdk/src/share/classes/javax/swing/JPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -62,6 +62,7 @@ import java.io.IOException; * @author Arnaud Weber * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class JPanel extends JComponent implements Accessible { /** @@ -233,6 +234,7 @@ public class JPanel extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJPanel extends AccessibleJComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JPasswordField.java b/jdk/src/share/classes/javax/swing/JPasswordField.java index 05a113b2ca4..a869d80c1f0 100644 --- a/jdk/src/share/classes/javax/swing/JPasswordField.java +++ b/jdk/src/share/classes/javax/swing/JPasswordField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -74,6 +74,7 @@ import java.util.Arrays; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class JPasswordField extends JTextField { /** diff --git a/jdk/src/share/classes/javax/swing/JProgressBar.java b/jdk/src/share/classes/javax/swing/JProgressBar.java index 606ff13c2ca..b839018b1fd 100644 --- a/jdk/src/share/classes/javax/swing/JProgressBar.java +++ b/jdk/src/share/classes/javax/swing/JProgressBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -129,6 +129,7 @@ import javax.swing.plaf.ProgressBarUI; * @author Michael C. Albers * @author Kathy Walrath */ +@SuppressWarnings("serial") // Same-version serialization only public class JProgressBar extends JComponent implements SwingConstants, Accessible { /** @@ -647,6 +648,7 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only private class ModelListener implements ChangeListener, Serializable { public void stateChanged(ChangeEvent e) { fireStateChanged(); @@ -1035,6 +1037,7 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJProgressBar extends AccessibleJComponent implements AccessibleValue { diff --git a/jdk/src/share/classes/javax/swing/JRadioButton.java b/jdk/src/share/classes/javax/swing/JRadioButton.java index ad7a3abf8b9..41197072266 100644 --- a/jdk/src/share/classes/javax/swing/JRadioButton.java +++ b/jdk/src/share/classes/javax/swing/JRadioButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -86,6 +86,7 @@ import java.io.IOException; * @see JCheckBox * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class JRadioButton extends JToggleButton implements Accessible { /** @@ -284,6 +285,7 @@ public class JRadioButton extends JToggleButton implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJRadioButton extends AccessibleJToggleButton { /** diff --git a/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java b/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java index 897ba97c760..5d49c6f464f 100644 --- a/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java +++ b/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -83,6 +83,7 @@ import javax.accessibility.*; * @author David Karlton * @see ButtonGroup */ +@SuppressWarnings("serial") // Same-version serialization only public class JRadioButtonMenuItem extends JMenuItem implements Accessible { /** * @see #getUIClassID @@ -266,6 +267,7 @@ public class JRadioButtonMenuItem extends JMenuItem implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJRadioButtonMenuItem extends AccessibleJMenuItem { /** * Get the role of this object. diff --git a/jdk/src/share/classes/javax/swing/JScrollBar.java b/jdk/src/share/classes/javax/swing/JScrollBar.java index 1c0eac1af7f..bdcee342e1f 100644 --- a/jdk/src/share/classes/javax/swing/JScrollBar.java +++ b/jdk/src/share/classes/javax/swing/JScrollBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -78,6 +78,7 @@ import java.io.IOException; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class JScrollBar extends JComponent implements Adjustable, Accessible { /** @@ -842,6 +843,7 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJScrollBar extends AccessibleJComponent implements AccessibleValue { diff --git a/jdk/src/share/classes/javax/swing/JScrollPane.java b/jdk/src/share/classes/javax/swing/JScrollPane.java index ecb3d8f34d9..444a1c22526 100644 --- a/jdk/src/share/classes/javax/swing/JScrollPane.java +++ b/jdk/src/share/classes/javax/swing/JScrollPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -168,6 +168,7 @@ import java.beans.Transient; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class JScrollPane extends JComponent implements ScrollPaneConstants, Accessible { private Border viewportBorder; @@ -685,6 +686,7 @@ public class JScrollPane extends JComponent implements ScrollPaneConstants, Acce * @see JScrollPane#createVerticalScrollBar * @see JScrollPane#createHorizontalScrollBar */ + @SuppressWarnings("serial") // Same-version serialization only protected class ScrollBar extends JScrollBar implements UIResource { /** @@ -1441,6 +1443,7 @@ public class JScrollPane extends JComponent implements ScrollPaneConstants, Acce * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJScrollPane extends AccessibleJComponent implements ChangeListener, PropertyChangeListener { diff --git a/jdk/src/share/classes/javax/swing/JSlider.java b/jdk/src/share/classes/javax/swing/JSlider.java index 88fe7129b2b..d75e1030634 100644 --- a/jdk/src/share/classes/javax/swing/JSlider.java +++ b/jdk/src/share/classes/javax/swing/JSlider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -78,6 +78,7 @@ import java.beans.*; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class JSlider extends JComponent implements SwingConstants, Accessible { /** * @see #getUIClassID @@ -1429,6 +1430,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJSlider extends AccessibleJComponent implements AccessibleValue { diff --git a/jdk/src/share/classes/javax/swing/JSpinner.java b/jdk/src/share/classes/javax/swing/JSpinner.java index d2dac526518..f999fd3f987 100644 --- a/jdk/src/share/classes/javax/swing/JSpinner.java +++ b/jdk/src/share/classes/javax/swing/JSpinner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -126,6 +126,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool; * @author Lynn Monsanto (accessibility) * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class JSpinner extends JComponent implements Accessible { /** diff --git a/jdk/src/share/classes/javax/swing/JSplitPane.java b/jdk/src/share/classes/javax/swing/JSplitPane.java index d403dde928c..533d9a971af 100644 --- a/jdk/src/share/classes/javax/swing/JSplitPane.java +++ b/jdk/src/share/classes/javax/swing/JSplitPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -98,6 +98,7 @@ import java.io.IOException; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class JSplitPane extends JComponent implements Accessible { /** @@ -1156,6 +1157,7 @@ public class JSplitPane extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJSplitPane extends AccessibleJComponent implements AccessibleValue { /** diff --git a/jdk/src/share/classes/javax/swing/JTabbedPane.java b/jdk/src/share/classes/javax/swing/JTabbedPane.java index e6c0951bdae..e5c303489c6 100644 --- a/jdk/src/share/classes/javax/swing/JTabbedPane.java +++ b/jdk/src/share/classes/javax/swing/JTabbedPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -106,6 +106,7 @@ import java.io.IOException; * * @see SingleSelectionModel */ +@SuppressWarnings("serial") // Same-version serialization only public class JTabbedPane extends JComponent implements Serializable, Accessible, SwingConstants { @@ -1889,6 +1890,7 @@ public class JTabbedPane extends JComponent * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTabbedPane extends AccessibleJComponent implements AccessibleSelection, ChangeListener { diff --git a/jdk/src/share/classes/javax/swing/JTable.java b/jdk/src/share/classes/javax/swing/JTable.java index 526afcf66bf..f16888c8f8b 100644 --- a/jdk/src/share/classes/javax/swing/JTable.java +++ b/jdk/src/share/classes/javax/swing/JTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -218,6 +218,7 @@ import sun.swing.SwingLazyValue; /* The first versions of the JTable, contained in Swing-0.1 through * Swing-0.4, were written by Alan Chung. */ +@SuppressWarnings("serial") // Same-version serialization only public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible, RowSorterListener @@ -6583,6 +6584,7 @@ public class JTable extends JComponent implements TableModelListener, Scrollable * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTable extends AccessibleJComponent implements AccessibleSelection, ListSelectionListener, TableModelListener, TableColumnModelListener, CellEditorListener, PropertyChangeListener, diff --git a/jdk/src/share/classes/javax/swing/JTextArea.java b/jdk/src/share/classes/javax/swing/JTextArea.java index 570819f9df9..a6af9e241fa 100644 --- a/jdk/src/share/classes/javax/swing/JTextArea.java +++ b/jdk/src/share/classes/javax/swing/JTextArea.java @@ -124,6 +124,7 @@ import java.io.IOException; * @see JTextPane * @see JEditorPane */ +@SuppressWarnings("serial") // Same-version serialization only public class JTextArea extends JTextComponent { /** @@ -787,6 +788,7 @@ public class JTextArea extends JTextComponent { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTextArea extends AccessibleJTextComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JTextField.java b/jdk/src/share/classes/javax/swing/JTextField.java index d4bc1aa0f6b..f50f6aa9be9 100644 --- a/jdk/src/share/classes/javax/swing/JTextField.java +++ b/jdk/src/share/classes/javax/swing/JTextField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -161,6 +161,7 @@ import java.io.Serializable; * @see JPasswordField * @see #addActionListener */ +@SuppressWarnings("serial") // Same-version serialization only public class JTextField extends JTextComponent implements SwingConstants { /** @@ -943,6 +944,7 @@ public class JTextField extends JTextComponent implements SwingConstants { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTextField extends AccessibleJTextComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JTextPane.java b/jdk/src/share/classes/javax/swing/JTextPane.java index 0cb9ff8d722..017f897177c 100644 --- a/jdk/src/share/classes/javax/swing/JTextPane.java +++ b/jdk/src/share/classes/javax/swing/JTextPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -79,6 +79,7 @@ import javax.swing.plaf.*; * @author Timothy Prinzing * @see javax.swing.text.StyledEditorKit */ +@SuppressWarnings("serial") // Same-version serialization only public class JTextPane extends JEditorPane { /** diff --git a/jdk/src/share/classes/javax/swing/JToggleButton.java b/jdk/src/share/classes/javax/swing/JToggleButton.java index 3489a07e803..f2f9a0601e0 100644 --- a/jdk/src/share/classes/javax/swing/JToggleButton.java +++ b/jdk/src/share/classes/javax/swing/JToggleButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -76,6 +76,7 @@ import java.io.IOException; * @see JCheckBox * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class JToggleButton extends AbstractButton implements Accessible { /** @@ -222,6 +223,7 @@ public class JToggleButton extends AbstractButton implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class ToggleButtonModel extends DefaultButtonModel { /** @@ -384,6 +386,7 @@ public class JToggleButton extends AbstractButton implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJToggleButton extends AccessibleAbstractButton implements ItemListener { diff --git a/jdk/src/share/classes/javax/swing/JToolBar.java b/jdk/src/share/classes/javax/swing/JToolBar.java index a47e86127c0..0557e4b93f2 100644 --- a/jdk/src/share/classes/javax/swing/JToolBar.java +++ b/jdk/src/share/classes/javax/swing/JToolBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -86,6 +86,7 @@ import java.util.Hashtable; * @author Jeff Shapiro * @see Action */ +@SuppressWarnings("serial") // Same-version serialization only public class JToolBar extends JComponent implements SwingConstants, Accessible { /** diff --git a/jdk/src/share/classes/javax/swing/JViewport.java b/jdk/src/share/classes/javax/swing/JViewport.java index 5df23b9b0ab..5cc25a71ad0 100644 --- a/jdk/src/share/classes/javax/swing/JViewport.java +++ b/jdk/src/share/classes/javax/swing/JViewport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -102,6 +102,7 @@ import java.io.Serializable; * @author Philip Milne * @see JScrollPane */ +@SuppressWarnings("serial") // Same-version serialization only public class JViewport extends JComponent implements Accessible { /** @@ -1296,6 +1297,7 @@ public class JViewport extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class ViewListener extends ComponentAdapter implements Serializable { public void componentResized(ComponentEvent e) { @@ -1765,6 +1767,7 @@ public class JViewport extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJViewport extends AccessibleJComponent { /** * Get the role of this object. diff --git a/jdk/src/share/classes/javax/swing/KeyStroke.java b/jdk/src/share/classes/javax/swing/KeyStroke.java index 774eeb692f1..e9f846c3d9c 100644 --- a/jdk/src/share/classes/javax/swing/KeyStroke.java +++ b/jdk/src/share/classes/javax/swing/KeyStroke.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -61,6 +61,7 @@ import java.awt.event.KeyEvent; * @author Arnaud Weber * @author David Mendenhall */ +@SuppressWarnings("serial") // Same-version serialization only public class KeyStroke extends AWTKeyStroke { /** diff --git a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java index 4de2ac804ad..8bde555e018 100644 --- a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java +++ b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -246,7 +246,7 @@ public class MenuSelectionManager { selectionSize = tmp.size(); boolean success = false; for (i=selectionSize - 1;i >= 0 && success == false; i--) { - menuElement = (MenuElement) tmp.elementAt(i); + menuElement = tmp.elementAt(i); subElements = menuElement.getSubElements(); path = null; @@ -277,7 +277,7 @@ public class MenuSelectionManager { if(path == null) { path = new MenuElement[i+2]; for(k=0;k<=i;k++) - path[k] = (MenuElement)tmp.elementAt(k); + path[k] = tmp.elementAt(k); } path[i+1] = subElements[j]; MenuElement currentSelection[] = getSelectedPath(); @@ -388,7 +388,7 @@ public class MenuSelectionManager { tmp = (Vector)selection.clone(); selectionSize = tmp.size(); for(i=selectionSize - 1 ; i >= 0 ; i--) { - menuElement = (MenuElement) tmp.elementAt(i); + menuElement = tmp.elementAt(i); subElements = menuElement.getSubElements(); for(j = 0, d = subElements.length ; j < d ; j++) { diff --git a/jdk/src/share/classes/javax/swing/OverlayLayout.java b/jdk/src/share/classes/javax/swing/OverlayLayout.java index 6ea88c2e386..6f3735cd50f 100644 --- a/jdk/src/share/classes/javax/swing/OverlayLayout.java +++ b/jdk/src/share/classes/javax/swing/OverlayLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -51,6 +51,7 @@ import java.io.Serializable; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class OverlayLayout implements LayoutManager2,Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java index 9aa581af867..71eda4b9c9a 100644 --- a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java +++ b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -57,6 +57,7 @@ import java.io.Serializable; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class ScrollPaneLayout implements LayoutManager, ScrollPaneConstants, Serializable { diff --git a/jdk/src/share/classes/javax/swing/SizeRequirements.java b/jdk/src/share/classes/javax/swing/SizeRequirements.java index aa03f551423..d4a590bfd0f 100644 --- a/jdk/src/share/classes/javax/swing/SizeRequirements.java +++ b/jdk/src/share/classes/javax/swing/SizeRequirements.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -93,6 +93,7 @@ import java.io.Serializable; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class SizeRequirements implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/Spring.java b/jdk/src/share/classes/javax/swing/Spring.java index 40320734219..e0cb0157fdf 100644 --- a/jdk/src/share/classes/javax/swing/Spring.java +++ b/jdk/src/share/classes/javax/swing/Spring.java @@ -127,6 +127,7 @@ import java.awt.Component; * @author Philip Milne * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class Spring { /** diff --git a/jdk/src/share/classes/javax/swing/SpringLayout.java b/jdk/src/share/classes/javax/swing/SpringLayout.java index 95444bfed59..fdaa55cf339 100644 --- a/jdk/src/share/classes/javax/swing/SpringLayout.java +++ b/jdk/src/share/classes/javax/swing/SpringLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -184,6 +184,7 @@ import java.util.*; * @author Joe Winchester * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class SpringLayout implements LayoutManager2 { private Map componentConstraints = new HashMap(); diff --git a/jdk/src/share/classes/javax/swing/UIDefaults.java b/jdk/src/share/classes/javax/swing/UIDefaults.java index a560b2d03d7..b6797bd232f 100644 --- a/jdk/src/share/classes/javax/swing/UIDefaults.java +++ b/jdk/src/share/classes/javax/swing/UIDefaults.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -72,6 +72,7 @@ import sun.util.CoreResourceBundleControl; * @see UIManager * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class UIDefaults extends Hashtable { private static final Object PENDING = "Pending"; diff --git a/jdk/src/share/classes/javax/swing/UIManager.java b/jdk/src/share/classes/javax/swing/UIManager.java index c7a3c8291bf..026f8a7b80f 100644 --- a/jdk/src/share/classes/javax/swing/UIManager.java +++ b/jdk/src/share/classes/javax/swing/UIManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -174,6 +174,7 @@ import sun.awt.AWTAccessor; * @author Thomas Ball * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class UIManager implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java b/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java index 0ff32966131..07b8e18c6ff 100644 --- a/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java +++ b/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -39,6 +39,7 @@ package javax.swing; * * @author unattributed */ +@SuppressWarnings("serial") // Same-version serialization only public class UnsupportedLookAndFeelException extends Exception { /** diff --git a/jdk/src/share/classes/javax/swing/ViewportLayout.java b/jdk/src/share/classes/javax/swing/ViewportLayout.java index aeac64276d6..2aa83bede3e 100644 --- a/jdk/src/share/classes/javax/swing/ViewportLayout.java +++ b/jdk/src/share/classes/javax/swing/ViewportLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -56,6 +56,7 @@ import java.io.Serializable; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class ViewportLayout implements LayoutManager, Serializable { // Single instance used by JViewport. diff --git a/jdk/src/share/classes/javax/swing/border/BevelBorder.java b/jdk/src/share/classes/javax/swing/border/BevelBorder.java index 659bd7f6966..dd18a88245d 100644 --- a/jdk/src/share/classes/javax/swing/border/BevelBorder.java +++ b/jdk/src/share/classes/javax/swing/border/BevelBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -44,6 +44,7 @@ import java.beans.ConstructorProperties; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class BevelBorder extends AbstractBorder { /** Raised bevel type. */ diff --git a/jdk/src/share/classes/javax/swing/border/EtchedBorder.java b/jdk/src/share/classes/javax/swing/border/EtchedBorder.java index 3bb5c7e0686..2850b60db7b 100644 --- a/jdk/src/share/classes/javax/swing/border/EtchedBorder.java +++ b/jdk/src/share/classes/javax/swing/border/EtchedBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -51,6 +51,7 @@ import java.beans.ConstructorProperties; * @author David Kloba * @author Amy Fowler */ +@SuppressWarnings("serial") // Same-version serialization only public class EtchedBorder extends AbstractBorder { /** Raised etched type. */ diff --git a/jdk/src/share/classes/javax/swing/border/LineBorder.java b/jdk/src/share/classes/javax/swing/border/LineBorder.java index 8d7abb99ac9..1e083c1164f 100644 --- a/jdk/src/share/classes/javax/swing/border/LineBorder.java +++ b/jdk/src/share/classes/javax/swing/border/LineBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import java.beans.ConstructorProperties; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class LineBorder extends AbstractBorder { private static Border blackLine; diff --git a/jdk/src/share/classes/javax/swing/border/SoftBevelBorder.java b/jdk/src/share/classes/javax/swing/border/SoftBevelBorder.java index d11b4202af8..8cd3afdd799 100644 --- a/jdk/src/share/classes/javax/swing/border/SoftBevelBorder.java +++ b/jdk/src/share/classes/javax/swing/border/SoftBevelBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -47,6 +47,7 @@ import java.beans.ConstructorProperties; * @author Amy Fowler * @author Chester Rose */ +@SuppressWarnings("serial") // Same-version serialization only public class SoftBevelBorder extends BevelBorder { diff --git a/jdk/src/share/classes/javax/swing/border/StrokeBorder.java b/jdk/src/share/classes/javax/swing/border/StrokeBorder.java index f09ae254e90..447779ac85c 100644 --- a/jdk/src/share/classes/javax/swing/border/StrokeBorder.java +++ b/jdk/src/share/classes/javax/swing/border/StrokeBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -50,6 +50,7 @@ import java.beans.ConstructorProperties; * * @since 1.7 */ +@SuppressWarnings("serial") // Same-version serialization only public class StrokeBorder extends AbstractBorder { private final BasicStroke stroke; private final Paint paint; diff --git a/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java b/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java index 58b5946aaaa..c75d08b89ff 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -47,6 +47,7 @@ import javax.swing.*; * @author Tom Santos * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractColorChooserPanel extends JPanel { private final PropertyChangeListener enabledListener = new PropertyChangeListener() { diff --git a/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java b/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java index ef3f4012984..84386433350 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -43,6 +43,7 @@ import javax.swing.JComponent; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class ColorChooserComponentFactory { private ColorChooserComponentFactory() { } // can't instantiate diff --git a/jdk/src/share/classes/javax/swing/colorchooser/DefaultPreviewPanel.java b/jdk/src/share/classes/javax/swing/colorchooser/DefaultPreviewPanel.java index 55bdf41ee4a..2abba55060b 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/DefaultPreviewPanel.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/DefaultPreviewPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -53,6 +53,7 @@ import sun.swing.SwingUtilities2; * @author Steve Wilson * @see JColorChooser */ +@SuppressWarnings("serial") // Same-version serialization only class DefaultPreviewPanel extends JPanel { private int squareSize = 25; diff --git a/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java b/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java index 6fdcf42c827..e56b95f2ddf 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -51,6 +51,7 @@ import javax.accessibility.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only class DefaultSwatchChooserPanel extends AbstractColorChooserPanel { SwatchPanel swatchPanel; diff --git a/jdk/src/share/classes/javax/swing/event/CaretEvent.java b/jdk/src/share/classes/javax/swing/event/CaretEvent.java index 049ec5be649..55c50da3809 100644 --- a/jdk/src/share/classes/javax/swing/event/CaretEvent.java +++ b/jdk/src/share/classes/javax/swing/event/CaretEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -42,6 +42,7 @@ import java.util.EventObject; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class CaretEvent extends EventObject { /** diff --git a/jdk/src/share/classes/javax/swing/event/HyperlinkEvent.java b/jdk/src/share/classes/javax/swing/event/HyperlinkEvent.java index b3262e6f0fd..848910188e9 100644 --- a/jdk/src/share/classes/javax/swing/event/HyperlinkEvent.java +++ b/jdk/src/share/classes/javax/swing/event/HyperlinkEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -45,6 +45,7 @@ import javax.swing.text.Element; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class HyperlinkEvent extends EventObject { /** diff --git a/jdk/src/share/classes/javax/swing/event/InternalFrameEvent.java b/jdk/src/share/classes/javax/swing/event/InternalFrameEvent.java index f061581cbb9..29247682f1d 100644 --- a/jdk/src/share/classes/javax/swing/event/InternalFrameEvent.java +++ b/jdk/src/share/classes/javax/swing/event/InternalFrameEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -53,6 +53,7 @@ import javax.swing.JInternalFrame; * * @author Thomas Ball */ +@SuppressWarnings("serial") // Same-version serialization only public class InternalFrameEvent extends AWTEvent { /** diff --git a/jdk/src/share/classes/javax/swing/event/ListSelectionEvent.java b/jdk/src/share/classes/javax/swing/event/ListSelectionEvent.java index adbb2c87ed7..a5128f1e47c 100644 --- a/jdk/src/share/classes/javax/swing/event/ListSelectionEvent.java +++ b/jdk/src/share/classes/javax/swing/event/ListSelectionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.*; * @author Ray Ryan * @see ListSelectionModel */ +@SuppressWarnings("serial") // Same-version serialization only public class ListSelectionEvent extends EventObject { private int firstIndex; diff --git a/jdk/src/share/classes/javax/swing/event/TableColumnModelEvent.java b/jdk/src/share/classes/javax/swing/event/TableColumnModelEvent.java index 18f72a0839d..1958ded5e39 100644 --- a/jdk/src/share/classes/javax/swing/event/TableColumnModelEvent.java +++ b/jdk/src/share/classes/javax/swing/event/TableColumnModelEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -45,6 +45,7 @@ import javax.swing.table.*; * @author Alan Chung * @see TableColumnModelListener */ +@SuppressWarnings("serial") // Same-version serialization only public class TableColumnModelEvent extends java.util.EventObject { // diff --git a/jdk/src/share/classes/javax/swing/event/TableModelEvent.java b/jdk/src/share/classes/javax/swing/event/TableModelEvent.java index ab450cbd72d..0247f992a4d 100644 --- a/jdk/src/share/classes/javax/swing/event/TableModelEvent.java +++ b/jdk/src/share/classes/javax/swing/event/TableModelEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -65,6 +65,7 @@ import javax.swing.table.*; * @author Philip Milne * @see TableModel */ +@SuppressWarnings("serial") // Same-version serialization only public class TableModelEvent extends java.util.EventObject { /** Identifies the addition of new rows or columns. */ diff --git a/jdk/src/share/classes/javax/swing/event/TreeExpansionEvent.java b/jdk/src/share/classes/javax/swing/event/TreeExpansionEvent.java index c91d7cdb106..1e70200b2e7 100644 --- a/jdk/src/share/classes/javax/swing/event/TreeExpansionEvent.java +++ b/jdk/src/share/classes/javax/swing/event/TreeExpansionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -48,6 +48,7 @@ import javax.swing.tree.TreePath; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class TreeExpansionEvent extends EventObject { /** diff --git a/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java b/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java index 9b3bc05f331..8dbdfcb8d3c 100644 --- a/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java +++ b/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.tree.TreePath; * @author Ray Ryan * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class TreeModelEvent extends EventObject { /** Path to the parent of the nodes that have changed. */ protected TreePath path; diff --git a/jdk/src/share/classes/javax/swing/event/UndoableEditEvent.java b/jdk/src/share/classes/javax/swing/event/UndoableEditEvent.java index 85d4c28c40c..bc81d9a721c 100644 --- a/jdk/src/share/classes/javax/swing/event/UndoableEditEvent.java +++ b/jdk/src/share/classes/javax/swing/event/UndoableEditEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -41,6 +41,7 @@ import javax.swing.undo.*; * * @author Ray Ryan */ +@SuppressWarnings("serial") // Same-version serialization only public class UndoableEditEvent extends java.util.EventObject { private UndoableEdit myEdit; diff --git a/jdk/src/share/classes/javax/swing/plaf/BorderUIResource.java b/jdk/src/share/classes/javax/swing/plaf/BorderUIResource.java index 0e549348ef9..18fab84cd05 100644 --- a/jdk/src/share/classes/javax/swing/plaf/BorderUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/BorderUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -59,6 +59,7 @@ import javax.swing.plaf.UIResource; * @author Amy Fowler * */ +@SuppressWarnings("serial") // Same-version serialization only public class BorderUIResource implements Border, UIResource, Serializable { static Border etched; diff --git a/jdk/src/share/classes/javax/swing/plaf/ColorUIResource.java b/jdk/src/share/classes/javax/swing/plaf/ColorUIResource.java index 79eba0477a5..11a5e6bccae 100644 --- a/jdk/src/share/classes/javax/swing/plaf/ColorUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/ColorUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -45,6 +45,7 @@ import java.beans.ConstructorProperties; * @author Hans Muller * */ +@SuppressWarnings("serial") // Same-version serialization only public class ColorUIResource extends Color implements UIResource { @ConstructorProperties({"red", "green", "blue"}) diff --git a/jdk/src/share/classes/javax/swing/plaf/DimensionUIResource.java b/jdk/src/share/classes/javax/swing/plaf/DimensionUIResource.java index 49828dc3550..1489352633c 100644 --- a/jdk/src/share/classes/javax/swing/plaf/DimensionUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/DimensionUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -48,6 +48,7 @@ import javax.swing.plaf.UIResource; * @author Amy Fowler * */ +@SuppressWarnings("serial") // Same-version serialization only public class DimensionUIResource extends Dimension implements UIResource { public DimensionUIResource(int width, int height) { diff --git a/jdk/src/share/classes/javax/swing/plaf/FontUIResource.java b/jdk/src/share/classes/javax/swing/plaf/FontUIResource.java index f8966e8719a..f39fa8d7afa 100644 --- a/jdk/src/share/classes/javax/swing/plaf/FontUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/FontUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -47,6 +47,7 @@ import javax.swing.plaf.UIResource; * @author Hans Muller * */ +@SuppressWarnings("serial") // Same-version serialization only public class FontUIResource extends Font implements UIResource { public FontUIResource(String name, int style, int size) { diff --git a/jdk/src/share/classes/javax/swing/plaf/IconUIResource.java b/jdk/src/share/classes/javax/swing/plaf/IconUIResource.java index 2fd10327a3f..5a25f5e8c4c 100644 --- a/jdk/src/share/classes/javax/swing/plaf/IconUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/IconUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -52,6 +52,7 @@ import javax.swing.plaf.UIResource; * @author Amy Fowler * */ +@SuppressWarnings("serial") // Same-version serialization only public class IconUIResource implements Icon, UIResource, Serializable { private Icon delegate; diff --git a/jdk/src/share/classes/javax/swing/plaf/InsetsUIResource.java b/jdk/src/share/classes/javax/swing/plaf/InsetsUIResource.java index 5da2498b4f5..9cf0ba4afed 100644 --- a/jdk/src/share/classes/javax/swing/plaf/InsetsUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/InsetsUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -47,6 +47,7 @@ import javax.swing.plaf.UIResource; * @author Amy Fowler * */ +@SuppressWarnings("serial") // Same-version serialization only public class InsetsUIResource extends Insets implements UIResource { public InsetsUIResource(int top, int left, int bottom, int right) { diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicArrowButton.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicArrowButton.java index 73b79263129..750fe60c235 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicArrowButton.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicArrowButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -45,6 +45,7 @@ import javax.swing.plaf.UIResource; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicArrowButton extends JButton implements SwingConstants { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicCheckBoxUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicCheckBoxUI.java index 4c1d5c399d8..256a3afbfcf 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicCheckBoxUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicCheckBoxUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -49,6 +49,7 @@ import java.io.Serializable; * * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicCheckBoxUI extends BasicRadioButtonUI { private static final Object BASIC_CHECK_BOX_UI_KEY = new Object(); diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxEditor.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxEditor.java index 07e0a0f56e8..6aa49dda179 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxEditor.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -164,6 +164,7 @@ public class BasicComboBoxEditor implements ComboBoxEditor,FocusListener { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends BasicComboBoxEditor implements javax.swing.plaf.UIResource { } diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxRenderer.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxRenderer.java index f98be00b12c..963e180d381 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxRenderer.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -47,6 +47,7 @@ import java.io.Serializable; * * @author Arnaud Weber */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicComboBoxRenderer extends JLabel implements ListCellRenderer, Serializable { @@ -139,6 +140,7 @@ implements ListCellRenderer, Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends BasicComboBoxRenderer implements javax.swing.plaf.UIResource { } } diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboPopup.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboPopup.java index e3ed947d732..dbc35e980e8 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboPopup.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboPopup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -60,6 +60,7 @@ import java.io.Serializable; * @author Tom Santos * @author Mark Davidson */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicComboPopup extends JPopupMenu implements ComboPopup { // An empty ListMode, this is used when the UI changes to allow // the JList to be gc'ed. diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicEditorPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicEditorPaneUI.java index 32bace0cc43..7445d79c2dc 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicEditorPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicEditorPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.border.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicEditorPaneUI extends BasicTextUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java index 6ea1cbcccf4..ec27f18dac1 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -49,6 +49,7 @@ import java.io.Serializable; * @author David Kloba * @author Georges Saab */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicIconFactory implements Serializable { private static Icon frame_icon; diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java index 22eb7951066..33b38623425 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -57,6 +57,7 @@ import sun.swing.UIAction; * @author David Kloba * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicInternalFrameTitlePane extends JComponent { protected JMenuBar menuBar; diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java index eb8df7bb774..f8a91437dde 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -1496,6 +1496,7 @@ public class BasicListUI extends ListUI * @see #installKeyboardActions * @see #installUI */ + @SuppressWarnings("serial") // Same-version serialization only public class MouseInputHandler implements MouseInputListener { public void mouseClicked(MouseEvent e) { @@ -1600,6 +1601,7 @@ public class BasicListUI extends ListUI * @see #getCellBounds * @see #installUI */ + @SuppressWarnings("serial") // Same-version serialization only public class ListSelectionHandler implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) @@ -1659,6 +1661,7 @@ public class BasicListUI extends ListUI * @see #createListDataListener * @see #installUI */ + @SuppressWarnings("serial") // Same-version serialization only public class ListDataHandler implements ListDataListener { public void intervalAdded(ListDataEvent e) { @@ -1725,6 +1728,7 @@ public class BasicListUI extends ListUI * @see #createPropertyChangeListener * @see #installUI */ + @SuppressWarnings("serial") // Same-version serialization only public class PropertyChangeHandler implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent e) diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java index 4ad134756e9..1bcf5fa93e0 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -102,6 +102,7 @@ import java.beans.PropertyChangeEvent; * * @author unattributed */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class BasicLookAndFeel extends LookAndFeel implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java index 9704705b2f5..36b4129598c 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -59,6 +59,7 @@ import sun.swing.DefaultLookup; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicSplitPaneDivider extends Container implements PropertyChangeListener { @@ -675,6 +676,7 @@ public class BasicSplitPaneDivider extends Container * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class DragController { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextAreaUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextAreaUI.java index 4a34184bdb1..85793b0a590 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextAreaUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextAreaUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -49,6 +49,7 @@ import javax.swing.plaf.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicTextAreaUI extends BasicTextUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextFieldUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextFieldUI.java index 0083c34b74f..379a2ef9864 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextFieldUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextFieldUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -51,6 +51,7 @@ import sun.swing.DefaultLookup; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicTextFieldUI extends BasicTextUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextPaneUI.java index 1e460c41584..1d94e9c5651 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -47,6 +47,7 @@ import javax.swing.border.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicTextPaneUI extends BasicEditorPaneUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java index e3a2fb66ac3..0965c77789f 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -100,6 +100,7 @@ import javax.swing.plaf.basic.DragRecognitionSupport.BeforeDrag; * @author Timothy Prinzing * @author Shannon Hickey (drag and drop) */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class BasicTextUI extends TextUI implements ViewFactory { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/ComboPopup.java b/jdk/src/share/classes/javax/swing/plaf/basic/ComboPopup.java index c2a4fa25006..75850fe7273 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/ComboPopup.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/ComboPopup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -46,6 +46,7 @@ import javax.swing.JList; * * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public interface ComboPopup { /** * Shows the popup diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/DefaultMetalTheme.java b/jdk/src/share/classes/javax/swing/plaf/metal/DefaultMetalTheme.java index 5527815d5b6..dae37d5e7be 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/DefaultMetalTheme.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/DefaultMetalTheme.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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,6 +88,7 @@ import sun.swing.SwingUtilities2; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultMetalTheme extends MetalTheme { /** * Whether or not fonts should be plain. This is only used if diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalButtonUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalButtonUI.java index 3d02f9c5138..233949e3df1 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalButtonUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalButtonUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.plaf.*; * * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalButtonUI extends BasicButtonUI { // NOTE: These are not really needed, but at this point we can't pull // them. Their values are updated purely for historical reasons. diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxIcon.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxIcon.java index b32157144ef..0962c8e943a 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxIcon.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -46,6 +46,7 @@ import javax.swing.plaf.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalCheckBoxIcon implements Icon, UIResource, Serializable { protected int getControlSize() { return 13; } diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxUI.java index 95ef177105c..b80ec636ac2 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -51,6 +51,7 @@ import java.io.Serializable; * @author Michael C. Albers * */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalCheckBoxUI extends MetalRadioButtonUI { // NOTE: MetalCheckBoxUI inherts from MetalRadioButtonUI instead diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxButton.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxButton.java index 63a53bf1a6a..6a6d1ed860e 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxButton.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -48,6 +48,7 @@ import java.io.Serializable; * @see MetalComboBoxButton * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalComboBoxButton extends JButton { protected JComboBox comboBox; protected JList listBox; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxEditor.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxEditor.java index aa375fbb6be..4c95250013b 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxEditor.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -47,6 +47,7 @@ import javax.swing.plaf.basic.BasicComboBoxEditor; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalComboBoxEditor extends BasicComboBoxEditor { public MetalComboBoxEditor() { @@ -133,6 +134,7 @@ public class MetalComboBoxEditor extends BasicComboBoxEditor { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends MetalComboBoxEditor implements javax.swing.plaf.UIResource { } diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java index 74f8830f30c..eb9afb93439 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -51,6 +51,7 @@ import java.beans.*; * @see MetalComboBoxButton * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalComboBoxUI extends BasicComboBoxUI { public static ComponentUI createUI(JComponent c) { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java index 5b81f17624f..e74882523d0 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -58,6 +58,7 @@ import sun.swing.CachedPainter; * * @author Michael C. Albers */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalIconFactory implements Serializable { // List of code-drawn Icons @@ -1554,6 +1555,7 @@ public class MetalIconFactory implements Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class FolderIcon16 implements Icon, Serializable { ImageCacher imageCacher; @@ -1636,6 +1638,7 @@ public class MetalIconFactory implements Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class TreeFolderIcon extends FolderIcon16 { public int getShift() { return -1; } public int getAdditionalHeight() { return 2; } @@ -1655,6 +1658,7 @@ public class MetalIconFactory implements Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class FileIcon16 implements Icon, Serializable { ImageCacher imageCacher; @@ -1740,6 +1744,7 @@ public class MetalIconFactory implements Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class TreeControlIcon implements Icon, Serializable { // This data member should not have been exposed. It's called // isLight, but now it really means isCollapsed. Since we can't change diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java index 7318815e691..a51603608e6 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -82,6 +82,7 @@ import sun.swing.SwingUtilities2; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalLookAndFeel extends BasicLookAndFeel { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalProgressBarUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalProgressBarUI.java index a2918b0e9b1..aedede36688 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalProgressBarUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalProgressBarUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -44,6 +44,7 @@ import java.awt.*; * * @author Michael C. Albers */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalProgressBarUI extends BasicProgressBarUI { private Rectangle innards; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalRadioButtonUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalRadioButtonUI.java index 274335580c6..9b7beeacf98 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalRadioButtonUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalRadioButtonUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -53,6 +53,7 @@ import javax.swing.text.View; * @author Michael C. Albers (Metal modifications) * @author Jeff Dinkins (original BasicRadioButtonCode) */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalRadioButtonUI extends BasicRadioButtonUI { private static final Object METAL_RADIO_BUTTON_UI_KEY = new Object(); diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalRootPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalRootPaneUI.java index e40721dddb5..2d2c4b20ce2 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalRootPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalRootPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -63,6 +63,7 @@ import java.security.*; * @author Terry Kellerman * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalRootPaneUI extends BasicRootPaneUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollButton.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollButton.java index 61616d47041..edd40950ec4 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollButton.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.plaf.basic.BasicArrowButton; * @author Tom Santos * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalScrollButton extends BasicArrowButton { private static Color shadowColor; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java index d1f5b7abb19..ffc5fc4df1c 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,6 +50,7 @@ import java.awt.event.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalScrollPaneUI extends BasicScrollPaneUI { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java index 17ac847c703..9de133b902d 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,7 +50,7 @@ import javax.swing.plaf.basic.BasicSeparatorUI; * * @author Jeff Shapiro */ - +@SuppressWarnings("serial") // Same-version serialization only public class MetalSeparatorUI extends BasicSeparatorUI { public static ComponentUI createUI( JComponent c ) diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java index 3fbfb3fa55f..6e629938a65 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.plaf.*; * * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalSliderUI extends BasicSliderUI { protected final int TICK_BUFFER = 4; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneDivider.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneDivider.java index 33ef49d6ad5..8ba134e48f6 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneDivider.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneDivider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -46,6 +46,7 @@ import javax.swing.plaf.basic.*; * @author Steve Wilson * @author Ralph kar */ +@SuppressWarnings("serial") // Same-version serialization only class MetalSplitPaneDivider extends BasicSplitPaneDivider { private MetalBumps bumps = new MetalBumps(10, 10, @@ -391,11 +392,11 @@ class MetalSplitPaneDivider extends BasicSplitPaneDivider */ int getOneTouchSizeFromSuper() { - return super.ONE_TOUCH_SIZE; + return BasicSplitPaneDivider.ONE_TOUCH_SIZE; } int getOneTouchOffsetFromSuper() { - return super.ONE_TOUCH_OFFSET; + return BasicSplitPaneDivider.ONE_TOUCH_OFFSET; } int getOrientationFromSuper() { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneUI.java index 8aaa40942a0..d27ea2e4828 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -43,6 +43,7 @@ import javax.swing.plaf.basic.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalSplitPaneUI extends BasicSplitPaneUI { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java index 23ead51d4d9..75dc959ca3d 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -47,7 +47,7 @@ import javax.swing.plaf.basic.BasicTabbedPaneUI; * * @author Tom Santos */ - +@SuppressWarnings("serial") // Same-version serialization only public class MetalTabbedPaneUI extends BasicTabbedPaneUI { protected int minTabWidth = 40; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTextFieldUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTextFieldUI.java index 8fe89f3fd33..1eca55ed7d2 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTextFieldUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTextFieldUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -47,6 +47,7 @@ import javax.swing.plaf.basic.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalTextFieldUI extends BasicTextFieldUI { public static ComponentUI createUI(JComponent c) { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToggleButtonUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToggleButtonUI.java index d207cbbb1d5..d0d902eecee 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToggleButtonUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToggleButtonUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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,6 +55,7 @@ import java.io.Serializable; * * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalToggleButtonUI extends BasicToggleButtonUI { private static final Object METAL_TOGGLE_BUTTON_UI_KEY = new Object(); diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java index 38a39a06746..2a7a1b1e571 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -51,6 +51,7 @@ import javax.swing.text.View; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalToolTipUI extends BasicToolTipUI { static MetalToolTipUI sharedInstance = new MetalToolTipUI(); diff --git a/jdk/src/share/classes/javax/swing/plaf/multi/MultiLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/multi/MultiLookAndFeel.java index 0e6c8e8de96..65828883fdd 100644 --- a/jdk/src/share/classes/javax/swing/plaf/multi/MultiLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/multi/MultiLookAndFeel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -56,6 +56,7 @@ import javax.swing.plaf.*; * * @author Willie Walker */ +@SuppressWarnings("serial") // Same-version serialization only public class MultiLookAndFeel extends LookAndFeel { ////////////////////////////// diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java index 09b33ec95e7..441698ce0a9 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -51,6 +51,7 @@ import java.beans.PropertyChangeEvent; * @author Shannon Hickey * @since 1.7 */ +@SuppressWarnings("serial") // Same-version serialization only public class SynthTextAreaUI extends BasicTextAreaUI implements SynthUI { private Handler handler = new Handler(); private SynthStyle style; diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java index 9a1ae3ef6d9..7028a5a5999 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -50,6 +50,7 @@ import java.beans.PropertyChangeEvent; * @author Shannon Hickey * @since 1.7 */ +@SuppressWarnings("serial") // Same-version serialization only public class SynthTextFieldUI extends BasicTextFieldUI implements SynthUI { private Handler handler = new Handler(); private SynthStyle style; diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java index 8b21b4ba7c6..d4f8aaca373 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -47,6 +47,7 @@ import java.awt.*; * @author Shannon Hickey * @since 1.7 */ +@SuppressWarnings("serial") // Same-version serialization only public class SynthTextPaneUI extends SynthEditorPaneUI { /** diff --git a/jdk/src/share/classes/javax/swing/table/AbstractTableModel.java b/jdk/src/share/classes/javax/swing/table/AbstractTableModel.java index c9ea60271dc..d7c63bce05a 100644 --- a/jdk/src/share/classes/javax/swing/table/AbstractTableModel.java +++ b/jdk/src/share/classes/javax/swing/table/AbstractTableModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -57,6 +57,7 @@ import java.util.EventListener; * @author Alan Chung * @author Philip Milne */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractTableModel implements TableModel, Serializable { // diff --git a/jdk/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java b/jdk/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java index 61c6c9f732e..123ac8d5e64 100644 --- a/jdk/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java +++ b/jdk/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -82,6 +82,7 @@ import sun.swing.DefaultLookup; * @author Philip Milne * @see JTable */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTableCellRenderer extends JLabel implements TableCellRenderer, Serializable { @@ -391,6 +392,7 @@ public class DefaultTableCellRenderer extends JLabel * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends DefaultTableCellRenderer implements javax.swing.plaf.UIResource { diff --git a/jdk/src/share/classes/javax/swing/table/DefaultTableColumnModel.java b/jdk/src/share/classes/javax/swing/table/DefaultTableColumnModel.java index b5bbd077a2b..96193cb35fd 100644 --- a/jdk/src/share/classes/javax/swing/table/DefaultTableColumnModel.java +++ b/jdk/src/share/classes/javax/swing/table/DefaultTableColumnModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -52,6 +52,7 @@ import sun.swing.SwingUtilities2; * @author Philip Milne * @see JTable */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTableColumnModel implements TableColumnModel, PropertyChangeListener, ListSelectionListener, Serializable { diff --git a/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java b/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java index 6bf39981d3d..74b88c1160d 100644 --- a/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java +++ b/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -59,6 +59,7 @@ import javax.swing.event.TableModelEvent; * @see TableModel * @see #getDataVector */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTableModel extends AbstractTableModel implements Serializable { // diff --git a/jdk/src/share/classes/javax/swing/table/JTableHeader.java b/jdk/src/share/classes/javax/swing/table/JTableHeader.java index e096e338cc4..3995cccc288 100644 --- a/jdk/src/share/classes/javax/swing/table/JTableHeader.java +++ b/jdk/src/share/classes/javax/swing/table/JTableHeader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -60,6 +60,7 @@ import java.io.IOException; * @author Philip Milne * @see javax.swing.JTable */ +@SuppressWarnings("serial") // Same-version serialization only public class JTableHeader extends JComponent implements TableColumnModelListener, Accessible { /** @@ -780,6 +781,7 @@ public class JTableHeader extends JComponent implements TableColumnModelListener * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTableHeader extends AccessibleJComponent { /** diff --git a/jdk/src/share/classes/javax/swing/table/TableColumn.java b/jdk/src/share/classes/javax/swing/table/TableColumn.java index 42d722aa958..713bf5483dc 100644 --- a/jdk/src/share/classes/javax/swing/table/TableColumn.java +++ b/jdk/src/share/classes/javax/swing/table/TableColumn.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,6 +82,7 @@ import java.beans.PropertyChangeListener; * @see JTable#getCellRenderer(int, int) * @see JTable#getCellEditor(int, int) */ +@SuppressWarnings("serial") // Same-version serialization only public class TableColumn extends Object implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/AbstractDocument.java b/jdk/src/share/classes/javax/swing/text/AbstractDocument.java index f8a4332a839..6332cb3d3b7 100644 --- a/jdk/src/share/classes/javax/swing/text/AbstractDocument.java +++ b/jdk/src/share/classes/javax/swing/text/AbstractDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -96,6 +96,7 @@ import sun.swing.SwingUtilities2; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractDocument implements Document, Serializable { /** @@ -1782,6 +1783,7 @@ public abstract class AbstractDocument implements Document, Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractElement implements Element, MutableAttributeSet, Serializable, TreeNode { /** @@ -2251,6 +2253,7 @@ public abstract class AbstractDocument implements Document, Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public class BranchElement extends AbstractElement { /** @@ -2507,6 +2510,7 @@ public abstract class AbstractDocument implements Document, Serializable { * * @see Element */ + @SuppressWarnings("serial") // Same-version serialization only public class LeafElement extends AbstractElement { /** diff --git a/jdk/src/share/classes/javax/swing/text/DateFormatter.java b/jdk/src/share/classes/javax/swing/text/DateFormatter.java index b301bf97aaa..e935053bfc8 100644 --- a/jdk/src/share/classes/javax/swing/text/DateFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/DateFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -47,6 +47,7 @@ import javax.swing.text.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class DateFormatter extends InternationalFormatter { /** * This is shorthand for diff --git a/jdk/src/share/classes/javax/swing/text/DefaultCaret.java b/jdk/src/share/classes/javax/swing/text/DefaultCaret.java index 7b06fb3f1c9..5eb0b2b10fe 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultCaret.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultCaret.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -105,6 +105,7 @@ import sun.swing.SwingUtilities2; * @author Timothy Prinzing * @see Caret */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener { /** diff --git a/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java b/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java index ec5a04f3780..55d75fb7364 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -849,6 +849,7 @@ public class DefaultEditorKit extends EditorKit { * @see Keymap#setDefaultAction * @see Keymap#getDefaultAction */ + @SuppressWarnings("serial") // Same-version serialization only public static class DefaultKeyTypedAction extends TextAction { /** @@ -906,6 +907,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#insertContentAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class InsertContentAction extends TextAction { /** @@ -954,6 +956,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#insertBreakAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class InsertBreakAction extends TextAction { /** @@ -996,6 +999,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#insertTabAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class InsertTabAction extends TextAction { /** @@ -1272,6 +1276,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#cutAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class CutAction extends TextAction { /** Create this object with the appropriate identifier. */ @@ -1308,6 +1313,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#copyAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class CopyAction extends TextAction { /** Create this object with the appropriate identifier. */ @@ -1345,6 +1351,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#pasteAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class PasteAction extends TextAction { /** Create this object with the appropriate identifier. */ @@ -1380,6 +1387,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#beepAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class BeepAction extends TextAction { /** Create this object with the appropriate identifier. */ diff --git a/jdk/src/share/classes/javax/swing/text/DefaultFormatter.java b/jdk/src/share/classes/javax/swing/text/DefaultFormatter.java index 5fa3ad9fbbd..0a4df2c0a1d 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -59,6 +59,7 @@ import javax.swing.text.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultFormatter extends JFormattedTextField.AbstractFormatter implements Cloneable, Serializable { /** Indicates if the value being edited must match the mask. */ diff --git a/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java b/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java index 7474dcbc205..ff52dde9803 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -72,6 +72,7 @@ import javax.swing.JFormattedTextField; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultFormatterFactory extends JFormattedTextField.AbstractFormatterFactory implements Serializable { /** * Default AbstractFormatter to use if a more specific one has diff --git a/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java b/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java index 85c9fe5e308..a5ce0633f74 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -69,6 +69,7 @@ import static sun.swing.SwingUtilities2.IMPLIED_CR; * @see Document * @see AbstractDocument */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultStyledDocument extends AbstractDocument implements StyledDocument { /** @@ -1128,6 +1129,7 @@ public class DefaultStyledDocument extends AbstractDocument implements StyledDoc * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class SectionElement extends BranchElement { /** @@ -1159,6 +1161,7 @@ public class DefaultStyledDocument extends AbstractDocument implements StyledDoc * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class ElementSpec { /** @@ -1394,6 +1397,7 @@ public class DefaultStyledDocument extends AbstractDocument implements StyledDoc * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public class ElementBuffer implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/InternationalFormatter.java b/jdk/src/share/classes/javax/swing/text/InternationalFormatter.java index dc3e046b024..8c91658167d 100644 --- a/jdk/src/share/classes/javax/swing/text/InternationalFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/InternationalFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -92,6 +92,7 @@ import javax.swing.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class InternationalFormatter extends DefaultFormatter { /** * Used by getFields. diff --git a/jdk/src/share/classes/javax/swing/text/JTextComponent.java b/jdk/src/share/classes/javax/swing/text/JTextComponent.java index 42c2a2e1764..714b3381619 100644 --- a/jdk/src/share/classes/javax/swing/text/JTextComponent.java +++ b/jdk/src/share/classes/javax/swing/text/JTextComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -292,6 +292,7 @@ import sun.swing.SwingAccessor; * @see View * @see ViewFactory */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class JTextComponent extends JComponent implements Scrollable, Accessible { /** @@ -1118,6 +1119,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class KeyBinding { /** @@ -2535,6 +2537,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public class AccessibleJTextComponent extends AccessibleJComponent implements AccessibleText, CaretListener, DocumentListener, AccessibleAction, AccessibleEditableText, diff --git a/jdk/src/share/classes/javax/swing/text/MaskFormatter.java b/jdk/src/share/classes/javax/swing/text/MaskFormatter.java index 2285e4ef1d1..1c37ed9180f 100644 --- a/jdk/src/share/classes/javax/swing/text/MaskFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/MaskFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -149,6 +149,7 @@ import javax.swing.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class MaskFormatter extends DefaultFormatter { // Potential values in mask. private static final char DIGIT_KEY = '#'; diff --git a/jdk/src/share/classes/javax/swing/text/NumberFormatter.java b/jdk/src/share/classes/javax/swing/text/NumberFormatter.java index f170b9aa967..bcc518ce39e 100644 --- a/jdk/src/share/classes/javax/swing/text/NumberFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/NumberFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -91,6 +91,7 @@ import sun.swing.SwingUtilities2; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class NumberFormatter extends InternationalFormatter { /** The special characters from the Format instance. */ private String specialChars; diff --git a/jdk/src/share/classes/javax/swing/text/PlainDocument.java b/jdk/src/share/classes/javax/swing/text/PlainDocument.java index 8c731da6f61..e1adc38faf8 100644 --- a/jdk/src/share/classes/javax/swing/text/PlainDocument.java +++ b/jdk/src/share/classes/javax/swing/text/PlainDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -56,6 +56,7 @@ import java.util.Vector; * @see Document * @see AbstractDocument */ +@SuppressWarnings("serial") // Same-version serialization only public class PlainDocument extends AbstractDocument { /** diff --git a/jdk/src/share/classes/javax/swing/text/SimpleAttributeSet.java b/jdk/src/share/classes/javax/swing/text/SimpleAttributeSet.java index f6505b46a9a..e7646368290 100644 --- a/jdk/src/share/classes/javax/swing/text/SimpleAttributeSet.java +++ b/jdk/src/share/classes/javax/swing/text/SimpleAttributeSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -48,6 +48,7 @@ import java.util.LinkedHashMap; * * @author Tim Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class SimpleAttributeSet implements MutableAttributeSet, Serializable, Cloneable { private static final long serialVersionUID = -6631553454711782652L; diff --git a/jdk/src/share/classes/javax/swing/text/StringContent.java b/jdk/src/share/classes/javax/swing/text/StringContent.java index a62fcc4ba84..99b8d5d3eb8 100644 --- a/jdk/src/share/classes/javax/swing/text/StringContent.java +++ b/jdk/src/share/classes/javax/swing/text/StringContent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.SwingUtilities; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public final class StringContent implements AbstractDocument.Content, Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/StyleContext.java b/jdk/src/share/classes/javax/swing/text/StyleContext.java index c7942eaccd0..8d7975b1395 100644 --- a/jdk/src/share/classes/javax/swing/text/StyleContext.java +++ b/jdk/src/share/classes/javax/swing/text/StyleContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -62,6 +62,7 @@ import sun.font.FontUtilities; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class StyleContext implements Serializable, AbstractDocument.AttributeContext { /** @@ -1244,6 +1245,7 @@ public class StyleContext implements Serializable, AbstractDocument.AttributeCon * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public class NamedStyle implements Style, Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java b/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java index 57b8ac00044..b62be0f7ef3 100644 --- a/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java +++ b/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -90,7 +90,7 @@ public class StyledEditorKit extends DefaultEditorKit { * @return the command list */ public Action[] getActions() { - return TextAction.augmentList(super.getActions(), this.defaultActions); + return TextAction.augmentList(super.getActions(), defaultActions); } /** @@ -375,6 +375,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public abstract static class StyledTextAction extends TextAction { /** @@ -494,6 +495,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class FontFamilyAction extends StyledTextAction { /** @@ -550,6 +552,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class FontSizeAction extends StyledTextAction { /** @@ -617,6 +620,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class ForegroundAction extends StyledTextAction { /** @@ -683,6 +687,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class AlignmentAction extends StyledTextAction { /** @@ -733,6 +738,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class BoldAction extends StyledTextAction { /** @@ -772,6 +778,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class ItalicAction extends StyledTextAction { /** @@ -811,6 +818,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UnderlineAction extends StyledTextAction { /** diff --git a/jdk/src/share/classes/javax/swing/text/TabSet.java b/jdk/src/share/classes/javax/swing/text/TabSet.java index 2a5351607c2..6464125fbab 100644 --- a/jdk/src/share/classes/javax/swing/text/TabSet.java +++ b/jdk/src/share/classes/javax/swing/text/TabSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -43,6 +43,7 @@ import java.io.Serializable; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class TabSet implements Serializable { /** TabStops this TabSet contains. */ diff --git a/jdk/src/share/classes/javax/swing/text/TabStop.java b/jdk/src/share/classes/javax/swing/text/TabStop.java index a78ea24b0c7..27112103dd2 100644 --- a/jdk/src/share/classes/javax/swing/text/TabStop.java +++ b/jdk/src/share/classes/javax/swing/text/TabStop.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -42,6 +42,7 @@ import java.io.Serializable; * Please see {@link java.beans.XMLEncoder}. * */ +@SuppressWarnings("serial") // Same-version serialization only public class TabStop implements Serializable { /** Character following tab is positioned at location. */ diff --git a/jdk/src/share/classes/javax/swing/text/TextAction.java b/jdk/src/share/classes/javax/swing/text/TextAction.java index bcfa7c39043..9f0c43d861e 100644 --- a/jdk/src/share/classes/javax/swing/text/TextAction.java +++ b/jdk/src/share/classes/javax/swing/text/TextAction.java @@ -58,6 +58,7 @@ import javax.swing.KeyStroke; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class TextAction extends AbstractAction { /** diff --git a/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java b/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java index 254d6156b9f..5aa989411cd 100644 --- a/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java +++ b/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -270,6 +270,7 @@ import static sun.swing.SwingUtilities2.IMPLIED_CR; * @author Scott Violet * @author Sunita Mani */ +@SuppressWarnings("serial") // Same-version serialization only public class HTMLDocument extends DefaultStyledDocument { /** * Constructs an HTML document using the default buffer size diff --git a/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java b/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java index 468f8626d2f..5ec27c0f5c1 100644 --- a/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java +++ b/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -433,7 +433,7 @@ public class HTMLEditorKit extends StyledEditorKit implements Accessible { * @return the command list */ public Action[] getActions() { - return TextAction.augmentList(super.getActions(), this.defaultActions); + return TextAction.augmentList(super.getActions(), defaultActions); } /** diff --git a/jdk/src/share/classes/javax/swing/text/html/Option.java b/jdk/src/share/classes/javax/swing/text/html/Option.java index 181b87cde5c..011b28a49f4 100644 --- a/jdk/src/share/classes/javax/swing/text/html/Option.java +++ b/jdk/src/share/classes/javax/swing/text/html/Option.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -44,6 +44,7 @@ import javax.swing.text.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class Option implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java b/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java index 2e7998a6670..645327cb809 100644 --- a/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java +++ b/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -2079,8 +2079,8 @@ public class StyleSheet extends StyleContext { // Parent view. View v = childView.getParent(); HTMLDocument doc = (HTMLDocument)v.getDocument(); - if (doc.matchNameAttribute(v.getElement().getAttributes(), - HTML.Tag.OL)) { + if (HTMLDocument.matchNameAttribute(v.getElement().getAttributes(), + HTML.Tag.OL)) { childtype = CSS.Value.DECIMAL; } else { childtype = CSS.Value.DISC; @@ -2473,13 +2473,13 @@ public class StyleSheet extends StyleContext { flags |= 4; } else if (pos.isHorizontalPositionRelativeToSize()) { - hPosition *= css.getFontSize(a, 12, ss); + hPosition *= CSS.getFontSize(a, 12, ss); } if (pos.isVerticalPositionRelativeToSize()) { flags |= 8; } else if (pos.isVerticalPositionRelativeToFontSize()) { - vPosition *= css.getFontSize(a, 12, ss); + vPosition *= CSS.getFontSize(a, 12, ss); } } // Determine any repeating values. diff --git a/jdk/src/share/classes/javax/swing/text/html/parser/ParserDelegator.java b/jdk/src/share/classes/javax/swing/text/html/parser/ParserDelegator.java index cdea9579fe6..81f7bb2cace 100644 --- a/jdk/src/share/classes/javax/swing/text/html/parser/ParserDelegator.java +++ b/jdk/src/share/classes/javax/swing/text/html/parser/ParserDelegator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -84,7 +84,7 @@ public class ParserDelegator extends HTMLEditorKit.Parser implements Serializabl in = getResourceAsStream(path); if (in != null) { dtd.read(new DataInputStream(new BufferedInputStream(in))); - dtd.putDTDHash(name, dtd); + DTD.putDTDHash(name, dtd); } } catch (Exception e) { System.out.println(e); diff --git a/jdk/src/share/classes/javax/swing/text/rtf/RTFReader.java b/jdk/src/share/classes/javax/swing/text/rtf/RTFReader.java index 5fd48246be8..2e58e6b95b8 100644 --- a/jdk/src/share/classes/javax/swing/text/rtf/RTFReader.java +++ b/jdk/src/share/classes/javax/swing/text/rtf/RTFReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -599,7 +599,7 @@ static char[] readCharset(InputStream strm) } catch (Exception e) { throw new IOException("Unable to read from character set file (" + e + ")"); } - if (ttype != in.TT_NUMBER) { + if (ttype != StreamTokenizer.TT_NUMBER) { // System.out.println("Bad token: type=" + ttype + " tok=" + in.sval); throw new IOException("Unexpected token in character set file"); // continue; diff --git a/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java b/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java index f44637c9c36..c0e474e26cd 100644 --- a/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java +++ b/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -42,7 +42,7 @@ import java.util.Enumeration; * * @author Scott Violet */ - +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractLayoutCache implements RowMapper { /** Object responsible for getting the size of a node. */ protected NodeDimensions nodeDimensions; diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java b/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java index 17840426075..c33599064e2 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -85,6 +85,7 @@ import java.util.*; * * @author Rob Davis */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultMutableTreeNode implements Cloneable, MutableTreeNode, Serializable { diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java index bc28d5dcfd3..05a6145c598 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java @@ -60,6 +60,7 @@ import java.util.Vector; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTreeCellEditor implements ActionListener, TreeCellEditor, TreeSelectionListener { /** Editor handling the editing. */ diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java index ad2a86bad29..3cc8bd238e5 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -103,6 +103,7 @@ import sun.swing.DefaultLookup; * @author Ray Ryan * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTreeCellRenderer extends JLabel implements TreeCellRenderer { /** Last tree the renderer was painted in. */ diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java index 5503481a5f7..c3b9de2d698 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -49,6 +49,7 @@ import javax.swing.event.*; * @author Ray Ryan * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTreeModel implements Serializable, TreeModel { /** Root of the tree. */ protected TreeNode root; diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java index 1f730192455..73054ad0046 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 diff --git a/jdk/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java b/jdk/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java index 0cd55cb843d..fe2ad0b263c 100644 --- a/jdk/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java +++ b/jdk/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -48,7 +48,7 @@ import sun.swing.SwingUtilities2; * * @author Scott Violet */ - +@SuppressWarnings("serial") // Same-version serialization only public class FixedHeightLayoutCache extends AbstractLayoutCache { /** Root node. */ private FHTreeStateNode root; diff --git a/jdk/src/share/classes/javax/swing/tree/TreePath.java b/jdk/src/share/classes/javax/swing/tree/TreePath.java index 53e285e9538..4ed1dbafd09 100644 --- a/jdk/src/share/classes/javax/swing/tree/TreePath.java +++ b/jdk/src/share/classes/javax/swing/tree/TreePath.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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,6 +81,7 @@ import java.beans.ConstructorProperties; * @author Scott Violet * @author Philip Milne */ +@SuppressWarnings("serial") // Same-version serialization only public class TreePath extends Object implements Serializable { /** Path representing the parent, null if lastPathComponent represents * the root. */ diff --git a/jdk/src/share/classes/javax/swing/tree/VariableHeightLayoutCache.java b/jdk/src/share/classes/javax/swing/tree/VariableHeightLayoutCache.java index 460f5b77966..770b383b716 100644 --- a/jdk/src/share/classes/javax/swing/tree/VariableHeightLayoutCache.java +++ b/jdk/src/share/classes/javax/swing/tree/VariableHeightLayoutCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -51,7 +51,7 @@ import sun.swing.SwingUtilities2; * @author Ray Ryan * @author Scott Violet */ - +@SuppressWarnings("serial") // Same-version serialization only public class VariableHeightLayoutCache extends AbstractLayoutCache { /** * The array of nodes that are currently visible, in the order they diff --git a/jdk/src/share/classes/javax/swing/undo/CannotRedoException.java b/jdk/src/share/classes/javax/swing/undo/CannotRedoException.java index e59e3f5eb14..15ed0c1b4b4 100644 --- a/jdk/src/share/classes/javax/swing/undo/CannotRedoException.java +++ b/jdk/src/share/classes/javax/swing/undo/CannotRedoException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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,5 +38,6 @@ package javax.swing.undo; * * @author Ray Ryan */ +@SuppressWarnings("serial") // Same-version serialization only public class CannotRedoException extends RuntimeException { } diff --git a/jdk/src/share/classes/javax/swing/undo/CannotUndoException.java b/jdk/src/share/classes/javax/swing/undo/CannotUndoException.java index 2779eaa8b54..35606df3f69 100644 --- a/jdk/src/share/classes/javax/swing/undo/CannotUndoException.java +++ b/jdk/src/share/classes/javax/swing/undo/CannotUndoException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -39,5 +39,6 @@ package javax.swing.undo; * * @author Ray Ryan */ +@SuppressWarnings("serial") // Same-version serialization only public class CannotUndoException extends RuntimeException { } diff --git a/jdk/src/share/classes/javax/swing/undo/UndoManager.java b/jdk/src/share/classes/javax/swing/undo/UndoManager.java index 23dc9b5884e..a95ebf25ce8 100644 --- a/jdk/src/share/classes/javax/swing/undo/UndoManager.java +++ b/jdk/src/share/classes/javax/swing/undo/UndoManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -132,6 +132,7 @@ import java.util.*; * * @author Ray Ryan */ +@SuppressWarnings("serial") // Same-version serialization only public class UndoManager extends CompoundEdit implements UndoableEditListener { int indexOfNextAdd; int limit; diff --git a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java index d37cb62880c..bf3109c49d9 100644 --- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java +++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java @@ -85,7 +85,7 @@ public final class DOMPGPData extends DOMStructure implements PGPData { } } } - this.keyPacket = (byte[])keyPacket.clone(); + this.keyPacket = keyPacket.clone(); checkKeyPacket(keyPacket); this.keyId = null; } @@ -132,9 +132,9 @@ public final class DOMPGPData extends DOMStructure implements PGPData { } } } - this.keyId = (byte[])keyId.clone(); + this.keyId = keyId.clone(); this.keyPacket = keyPacket == null ? null - : (byte[])keyPacket.clone(); + : keyPacket.clone(); if (keyPacket != null) { checkKeyPacket(keyPacket); } @@ -177,11 +177,11 @@ public final class DOMPGPData extends DOMStructure implements PGPData { } public byte[] getKeyId() { - return (keyId == null ? null : (byte[])keyId.clone()); + return (keyId == null ? null : keyId.clone()); } public byte[] getKeyPacket() { - return (keyPacket == null ? null : (byte[])keyPacket.clone()); + return (keyPacket == null ? null : keyPacket.clone()); } public List getExternalElements() { diff --git a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java index f80df4dac42..de4f9f833d1 100644 --- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java +++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java @@ -182,7 +182,7 @@ public final class DOMReference extends DOMStructure this.type = type; this.id = id; if (digestValue != null) { - this.digestValue = (byte[])digestValue.clone(); + this.digestValue = digestValue.clone(); this.digested = true; } this.appliedTransformData = result; @@ -298,12 +298,12 @@ public final class DOMReference extends DOMStructure } public byte[] getDigestValue() { - return (digestValue == null ? null : (byte[])digestValue.clone()); + return (digestValue == null ? null : digestValue.clone()); } public byte[] getCalculatedDigestValue() { return (calcDigestValue == null ? null - : (byte[])calcDigestValue.clone()); + : calcDigestValue.clone()); } public void marshal(Node parent, String dsPrefix, DOMCryptoContext context) diff --git a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java index 32c1dcf06c0..e2cbf656993 100644 --- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java +++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java @@ -535,7 +535,7 @@ public final class DOMXMLSignature extends DOMStructure } public byte[] getValue() { - return (value == null) ? null : (byte[])value.clone(); + return (value == null) ? null : value.clone(); } public boolean validate(XMLValidateContext validateContext) diff --git a/jdk/src/share/classes/sun/applet/AppletImageRef.java b/jdk/src/share/classes/sun/applet/AppletImageRef.java index fa9b2d73009..f264e890351 100644 --- a/jdk/src/share/classes/sun/applet/AppletImageRef.java +++ b/jdk/src/share/classes/sun/applet/AppletImageRef.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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,12 +27,32 @@ package sun.applet; import java.awt.Toolkit; import java.awt.Image; +import java.lang.ref.SoftReference; import sun.awt.image.URLImageSource; import java.net.URL; -class AppletImageRef extends sun.misc.Ref { +class AppletImageRef { + private SoftReference soft = null; + URL url; + /** + * Returns a pointer to the object referenced by this Ref. If the object + * has been thrown away by the garbage collector, it will be + * reconstituted. This method does everything necessary to ensure that the garbage + * collector throws things away in Least Recently Used(LRU) order. Applications should + * never override this method. The get() method effectively caches calls to + * reconstitute(). + */ + public synchronized Image get() { + Image t = check(); + if (t == null) { + t = reconstitute(); + setThing(t); + } + return t; + } + /** * Create the Ref */ @@ -40,14 +60,38 @@ class AppletImageRef extends sun.misc.Ref { this.url = url; } - public void flush() { - super.flush(); + /** + * Flushes the cached object. Forces the next invocation of get() to + * invoke reconstitute(). + */ + public synchronized void flush() { + SoftReference s = soft; + if (s != null) s.clear(); + soft = null; + } + + /** + * Sets the thing to the specified object. + * @param thing the specified object + */ + public synchronized void setThing(Object thing) { + flush(); + soft = new SoftReference(thing); + } + + /** + * Checks to see what object is being pointed at by this Ref and returns it. + */ + public synchronized Image check() { + SoftReference s = soft; + if (s == null) return null; + return s.get(); } /** * Reconsitute the image. Only called when the ref has been flushed. */ - public Object reconstitute() { + public Image reconstitute() { Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url)); return img; } diff --git a/jdk/src/share/classes/sun/applet/AppletMessageHandler.java b/jdk/src/share/classes/sun/applet/AppletMessageHandler.java index 44e208c626f..d05dc0bfc19 100644 --- a/jdk/src/share/classes/sun/applet/AppletMessageHandler.java +++ b/jdk/src/share/classes/sun/applet/AppletMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1997, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -53,11 +53,11 @@ class AppletMessageHandler { } String getMessage(String key) { - return (String)rb.getString(getQualifiedKey(key)); + return rb.getString(getQualifiedKey(key)); } String getMessage(String key, Object arg){ - String basemsgfmt = (String)rb.getString(getQualifiedKey(key)); + String basemsgfmt = rb.getString(getQualifiedKey(key)); MessageFormat msgfmt = new MessageFormat(basemsgfmt); Object msgobj[] = new Object[1]; if (arg == null) { @@ -68,7 +68,7 @@ class AppletMessageHandler { } String getMessage(String key, Object arg1, Object arg2) { - String basemsgfmt = (String)rb.getString(getQualifiedKey(key)); + String basemsgfmt = rb.getString(getQualifiedKey(key)); MessageFormat msgfmt = new MessageFormat(basemsgfmt); Object msgobj[] = new Object[2]; if (arg1 == null) { @@ -83,7 +83,7 @@ class AppletMessageHandler { } String getMessage(String key, Object arg1, Object arg2, Object arg3) { - String basemsgfmt = (String)rb.getString(getQualifiedKey(key)); + String basemsgfmt = rb.getString(getQualifiedKey(key)); MessageFormat msgfmt = new MessageFormat(basemsgfmt); Object msgobj[] = new Object[3]; if (arg1 == null) { @@ -102,7 +102,7 @@ class AppletMessageHandler { } String getMessage(String key, Object arg[]) { - String basemsgfmt = (String)rb.getString(getQualifiedKey(key)); + String basemsgfmt = rb.getString(getQualifiedKey(key)); MessageFormat msgfmt = new MessageFormat(basemsgfmt); return msgfmt.format(arg); } diff --git a/jdk/src/share/classes/sun/applet/AppletPanel.java b/jdk/src/share/classes/sun/applet/AppletPanel.java index 2d1da2cdac0..52ddab9e5db 100644 --- a/jdk/src/share/classes/sun/applet/AppletPanel.java +++ b/jdk/src/share/classes/sun/applet/AppletPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -1215,8 +1215,8 @@ abstract class AppletPanel extends Panel implements AppletStub, Runnable { synchronized(appletClass) { // Determine if the JDK level of an applet has been // checked before. - Boolean jdk11Target = (Boolean) loader.isJDK11Target(appletClass); - Boolean jdk12Target = (Boolean) loader.isJDK12Target(appletClass); + Boolean jdk11Target = loader.isJDK11Target(appletClass); + Boolean jdk12Target = loader.isJDK12Target(appletClass); // if applet JDK level has been checked before, retrieve // value and return. diff --git a/jdk/src/share/classes/sun/applet/AppletProps.java b/jdk/src/share/classes/sun/applet/AppletProps.java index 429afdcc41c..38a76a4afc2 100644 --- a/jdk/src/share/classes/sun/applet/AppletProps.java +++ b/jdk/src/share/classes/sun/applet/AppletProps.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -75,12 +75,12 @@ class AppletProps extends Frame { if (security != null) security.reset(); - String proxyhost = (String) AccessController.doPrivileged( + String proxyhost = AccessController.doPrivileged( new GetPropertyAction("http.proxyHost")); - String proxyport = (String) AccessController.doPrivileged( + String proxyport = AccessController.doPrivileged( new GetPropertyAction("http.proxyPort")); - Boolean tmp = (Boolean) AccessController.doPrivileged( + Boolean tmp = AccessController.doPrivileged( new GetBooleanAction("package.restrict.access.sun")); boolean packageRestrict = tmp.booleanValue(); diff --git a/jdk/src/share/classes/sun/applet/AppletResourceLoader.java b/jdk/src/share/classes/sun/applet/AppletResourceLoader.java index 3470557cf6b..f0d84671e11 100644 --- a/jdk/src/share/classes/sun/applet/AppletResourceLoader.java +++ b/jdk/src/share/classes/sun/applet/AppletResourceLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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,21 +27,17 @@ package sun.applet; import java.net.URL; import java.awt.Image; -import sun.misc.Ref; /** * Part of this class still remains only to support legacy, 100%-impure * applications such as HotJava 1.0.1. */ +@Deprecated public class AppletResourceLoader { public static Image getImage(URL url) { return AppletViewer.getCachedImage(url); } - public static Ref getImageRef(URL url) { - return AppletViewer.getCachedImageRef(url); - } - public static void flushImages() { AppletViewer.flushImageCache(); } diff --git a/jdk/src/share/classes/sun/applet/AppletViewer.java b/jdk/src/share/classes/sun/applet/AppletViewer.java index 03335e83ab9..a97ac33bbe0 100644 --- a/jdk/src/share/classes/sun/applet/AppletViewer.java +++ b/jdk/src/share/classes/sun/applet/AppletViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -35,7 +35,6 @@ import java.applet.*; import java.net.URL; import java.net.MalformedURLException; import java.net.SocketPermission; -import sun.misc.Ref; import java.security.AccessController; import java.security.PrivilegedAction; import java.lang.reflect.InvocationTargetException; @@ -390,22 +389,18 @@ public class AppletViewer extends Frame implements AppletContext, return getCachedImage(url); } + /** + * Get an image. + */ static Image getCachedImage(URL url) { // System.getSecurityManager().checkConnection(url.getHost(), url.getPort()); - return (Image)getCachedImageRef(url).get(); - } - - /** - * Get an image ref. - */ - static Ref getCachedImageRef(URL url) { synchronized (imageRefs) { AppletImageRef ref = (AppletImageRef)imageRefs.get(url); if (ref == null) { ref = new AppletImageRef(url); imageRefs.put(url, ref); } - return ref; + return ref.get(); } } diff --git a/jdk/src/share/classes/sun/applet/Main.java b/jdk/src/share/classes/sun/applet/Main.java index 23670743740..0ce2c129b75 100644 --- a/jdk/src/share/classes/sun/applet/Main.java +++ b/jdk/src/share/classes/sun/applet/Main.java @@ -369,7 +369,7 @@ public class Main { Properties sysProps = System.getProperties(); for (Enumeration e = sysProps.propertyNames(); e.hasMoreElements(); ) { String key = (String) e.nextElement(); - String val = (String) sysProps.getProperty(key); + String val = sysProps.getProperty(key); String oldVal; if ((oldVal = (String) avProps.setProperty(key, val)) != null) System.err.println(lookup("main.warn.prop.overwrite", key, diff --git a/jdk/src/share/classes/sun/audio/AudioStream.java b/jdk/src/share/classes/sun/audio/AudioStream.java index 7fdf2559b97..266f5eb88ef 100644 --- a/jdk/src/share/classes/sun/audio/AudioStream.java +++ b/jdk/src/share/classes/sun/audio/AudioStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -133,7 +133,7 @@ public final class AudioStream extends FilterInputStream { ais.getFormat().getFrameSize() ); } else if ( midiformat != null ) { - return (int) midiformat.getByteLength(); + return midiformat.getByteLength(); } else { return -1; diff --git a/jdk/src/share/classes/sun/awt/CustomCursor.java b/jdk/src/share/classes/sun/awt/CustomCursor.java index a3863e9b6bd..6dad03c8c71 100644 --- a/jdk/src/share/classes/sun/awt/CustomCursor.java +++ b/jdk/src/share/classes/sun/awt/CustomCursor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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,6 +33,7 @@ import java.awt.image.*; * * @author ThomasBall */ +@SuppressWarnings("serial") // JDK-implementation class public abstract class CustomCursor extends Cursor { protected Image image; diff --git a/jdk/src/share/classes/sun/awt/FontConfiguration.java b/jdk/src/share/classes/sun/awt/FontConfiguration.java index e779316cb91..4cdc3d80c94 100644 --- a/jdk/src/share/classes/sun/awt/FontConfiguration.java +++ b/jdk/src/share/classes/sun/awt/FontConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -1504,10 +1504,10 @@ public abstract class FontConfiguration { printTable(table_elcIDs, 0); System.out.println("\n----sequences-------------"); for (int ii = 0; ii< table_elcIDs.length; ii++) { - System.out.println(" " + ii + "/" + getString((short)table_elcIDs[ii])); + System.out.println(" " + ii + "/" + getString(table_elcIDs[ii])); short[] ss = getShortArray(table_sequences[ii * NUM_FONTS + 0]); for (int jj = 0; jj < ss.length; jj++) { - System.out.println(" " + getString((short)table_scriptIDs[ss[jj]])); + System.out.println(" " + getString(table_scriptIDs[ss[jj]])); } } System.out.println("\n----fontfileNameIDs-------"); @@ -1533,9 +1533,9 @@ public abstract class FontConfiguration { System.out.println("\n----proportionals--------"); for (int ii = 0; ii < table_proportionals.length; ii++) { System.out.println(" " - + getString((short)table_componentFontNameIDs[table_proportionals[ii++]]) + + getString(table_componentFontNameIDs[table_proportionals[ii++]]) + " -> " - + getString((short)table_componentFontNameIDs[table_proportionals[ii]])); + + getString(table_componentFontNameIDs[table_proportionals[ii]])); } int i = 0; System.out.println("\n----alphabeticSuffix----"); @@ -2109,6 +2109,7 @@ public abstract class FontConfiguration { return ret; } + @SuppressWarnings("serial") // JDK-implementation class class FontProperties extends Properties { public synchronized Object put(Object k, Object v) { parseProperty((String)k, (String)v); diff --git a/jdk/src/share/classes/sun/awt/FontDescriptor.java b/jdk/src/share/classes/sun/awt/FontDescriptor.java index fc1df5a2a50..0a4f0045906 100644 --- a/jdk/src/share/classes/sun/awt/FontDescriptor.java +++ b/jdk/src/share/classes/sun/awt/FontDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -113,7 +113,7 @@ public class FontDescriptor implements Cloneable { } static boolean isLE; static { - String enc = (String) java.security.AccessController.doPrivileged( + String enc = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.io.unicode.encoding", "UnicodeBig")); isLE = !"UnicodeBig".equals(enc); diff --git a/jdk/src/share/classes/sun/awt/IconInfo.java b/jdk/src/share/classes/sun/awt/IconInfo.java index 0ae1f733e05..8473fdee764 100644 --- a/jdk/src/share/classes/sun/awt/IconInfo.java +++ b/jdk/src/share/classes/sun/awt/IconInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, 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 @@ -182,7 +182,7 @@ public class IconInfo { private static long[] intArrayToLongArray(int[] intData) { long[] longData = new long[intData.length]; for (int i = 0; i < intData.length; i++) { - longData[i] = (int)intData[i]; + longData[i] = intData[i]; } return longData; } diff --git a/jdk/src/share/classes/sun/awt/PlatformFont.java b/jdk/src/share/classes/sun/awt/PlatformFont.java index 74e75ac8496..f88b192715f 100644 --- a/jdk/src/share/classes/sun/awt/PlatformFont.java +++ b/jdk/src/share/classes/sun/awt/PlatformFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -270,7 +270,7 @@ public abstract class PlatformFont implements FontPeer { currentDefaultChar = data[stringIndex]; // Note that cache sizes must be a power of two! - cacheIndex = (int)(currentDefaultChar & this.FONTCACHEMASK); + cacheIndex = (currentDefaultChar & PlatformFont.FONTCACHEMASK); theChar = (PlatformFontCache)getFontCache()[cacheIndex]; @@ -280,7 +280,7 @@ public abstract class PlatformFont implements FontPeer { /* find a converter that can convert the current character */ currentFontDescriptor = defaultFont; currentDefaultChar = defaultChar; - char ch = (char)data[stringIndex]; + char ch = data[stringIndex]; int componentCount = componentFonts.length; for (int j = 0; j < componentCount; j++) { @@ -309,7 +309,7 @@ public abstract class PlatformFont implements FontPeer { theChar.bb, true); */ - if (currentFontDescriptor.isLE) { + if (FontDescriptor.isLE) { theChar.bb.put((byte)(input[0] & 0xff)); theChar.bb.put((byte)(input[0] >>8)); } else { @@ -420,7 +420,7 @@ public abstract class PlatformFont implements FontPeer { // twice or return an array which will be dereferenced and gced // right away. if (fontCache == null) { - fontCache = new Object[this.FONTCACHESIZE]; + fontCache = new Object[PlatformFont.FONTCACHESIZE]; } return fontCache; diff --git a/jdk/src/share/classes/sun/awt/TimedWindowEvent.java b/jdk/src/share/classes/sun/awt/TimedWindowEvent.java index 21353f789d7..780b3d572e6 100644 --- a/jdk/src/share/classes/sun/awt/TimedWindowEvent.java +++ b/jdk/src/share/classes/sun/awt/TimedWindowEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -28,6 +28,7 @@ package sun.awt; import java.awt.event.WindowEvent; import java.awt.Window; +@SuppressWarnings("serial") // JDK-implementation class public class TimedWindowEvent extends WindowEvent { private long time; diff --git a/jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java b/jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java index 9439ec569b4..110d7bd532f 100644 --- a/jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java +++ b/jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -97,8 +97,7 @@ public class ClipboardTransferable implements Transferable { fetchOneFlavor(clipboard, flavor, lFormat, cached_data); } - flavors = DataTransferer.getInstance(). - setToSortedDataFlavorArray(flavorsToData.keySet()); + flavors = DataTransferer.setToSortedDataFlavorArray(flavorsToData.keySet()); } } finally { clipboard.closeClipboard(); @@ -145,7 +144,7 @@ public class ClipboardTransferable implements Transferable { } public DataFlavor[] getTransferDataFlavors() { - return (DataFlavor[])flavors.clone(); + return flavors.clone(); } public boolean isDataFlavorSupported(DataFlavor flavor) { diff --git a/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java b/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java index 67c9cb4f516..ae0a642dcb2 100644 --- a/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java +++ b/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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,8 +130,7 @@ public abstract class SunDragSourceContextPeer implements DragSourceContextPeer SortedMap formatMap = DataTransferer.getInstance(). getFormatsForTransferable(transferable, DataTransferer.adaptFlavorMap (getTrigger().getDragSource().getFlavorMap())); - long[] formats = DataTransferer.getInstance(). - keysToLongArray(formatMap); + long[] formats = DataTransferer.keysToLongArray(formatMap); startDrag(transferable, formats, formatMap); /* diff --git a/jdk/src/share/classes/sun/awt/dnd/SunDropTargetEvent.java b/jdk/src/share/classes/sun/awt/dnd/SunDropTargetEvent.java index aff7b8a80d6..64685e571a2 100644 --- a/jdk/src/share/classes/sun/awt/dnd/SunDropTargetEvent.java +++ b/jdk/src/share/classes/sun/awt/dnd/SunDropTargetEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -29,6 +29,7 @@ import java.awt.Component; import java.awt.dnd.InvalidDnDOperationException; import java.awt.event.MouseEvent; +@SuppressWarnings("serial") // JDK-implementation class public class SunDropTargetEvent extends MouseEvent { public static final int MOUSE_DROPPED = MouseEvent.MOUSE_RELEASED; diff --git a/jdk/src/share/classes/sun/awt/event/IgnorePaintEvent.java b/jdk/src/share/classes/sun/awt/event/IgnorePaintEvent.java index c0d38694381..1f59869027d 100644 --- a/jdk/src/share/classes/sun/awt/event/IgnorePaintEvent.java +++ b/jdk/src/share/classes/sun/awt/event/IgnorePaintEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -35,6 +35,7 @@ import java.awt.event.PaintEvent; * Look at javax.swing.SwingPaintEventDispatcher for more. * */ +@SuppressWarnings("serial") // JDK-implementation class public class IgnorePaintEvent extends PaintEvent { public IgnorePaintEvent(Component source, int id, Rectangle updateRect) { super(source, id, updateRect); diff --git a/jdk/src/share/classes/sun/awt/geom/Crossings.java b/jdk/src/share/classes/sun/awt/geom/Crossings.java index 6275c4dfeba..7ab97bce80c 100644 --- a/jdk/src/share/classes/sun/awt/geom/Crossings.java +++ b/jdk/src/share/classes/sun/awt/geom/Crossings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -100,7 +100,7 @@ public abstract class Crossings { double xhi, double yhi) { Crossings cross; - if (pi.getWindingRule() == pi.WIND_EVEN_ODD) { + if (pi.getWindingRule() == PathIterator.WIND_EVEN_ODD) { cross = new EvenOdd(xlo, ylo, xhi, yhi); } else { cross = new NonZero(xlo, ylo, xhi, yhi); diff --git a/jdk/src/share/classes/sun/awt/image/BadDepthException.java b/jdk/src/share/classes/sun/awt/image/BadDepthException.java index 19adf69fbe6..f9d264f22fb 100644 --- a/jdk/src/share/classes/sun/awt/image/BadDepthException.java +++ b/jdk/src/share/classes/sun/awt/image/BadDepthException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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,7 @@ package sun.awt.image; +@SuppressWarnings("serial") // JDK-implementation class public class BadDepthException extends Exception { public BadDepthException() { } diff --git a/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java b/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java index e3277160b70..78903979d6f 100644 --- a/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -169,7 +169,7 @@ public class ByteBandedRaster extends SunWritableRaster { * of the band. */ public int[] getDataOffsets() { - return (int[])dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java b/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java index 13954f3a364..9695d3a0df8 100644 --- a/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -207,7 +207,7 @@ public class ByteComponentRaster extends SunWritableRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java b/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java index 4279ce1f90a..ec0fef12623 100644 --- a/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -259,7 +259,7 @@ public class ByteInterleavedRaster extends ByteComponentRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/ImageAccessException.java b/jdk/src/share/classes/sun/awt/image/ImageAccessException.java index 43602f64b66..402e2a26caa 100644 --- a/jdk/src/share/classes/sun/awt/image/ImageAccessException.java +++ b/jdk/src/share/classes/sun/awt/image/ImageAccessException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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,7 @@ package sun.awt.image; +@SuppressWarnings("serial") // JDK-implementation class public class ImageAccessException extends Exception { public ImageAccessException(String s) { super(s); diff --git a/jdk/src/share/classes/sun/awt/image/ImageFetcher.java b/jdk/src/share/classes/sun/awt/image/ImageFetcher.java index 6f9501301cf..a5af63512c7 100644 --- a/jdk/src/share/classes/sun/awt/image/ImageFetcher.java +++ b/jdk/src/share/classes/sun/awt/image/ImageFetcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -195,7 +195,7 @@ class ImageFetcher extends Thread { // the fetcher was interrupted, as we used to, // because there may be other images waiting // to be fetched (see 4789067) - me.interrupted(); + Thread.interrupted(); me.setPriority(HIGH_PRIORITY); ImageFetchable src = nextImage(); if (src == null) { diff --git a/jdk/src/share/classes/sun/awt/image/ImageFormatException.java b/jdk/src/share/classes/sun/awt/image/ImageFormatException.java index 4812efe37c2..6a70d728f8f 100644 --- a/jdk/src/share/classes/sun/awt/image/ImageFormatException.java +++ b/jdk/src/share/classes/sun/awt/image/ImageFormatException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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,7 @@ package sun.awt.image; +@SuppressWarnings("serial") // JDK-implementation class public class ImageFormatException extends Exception { public ImageFormatException(String s) { super(s); diff --git a/jdk/src/share/classes/sun/awt/image/ImageRepresentation.java b/jdk/src/share/classes/sun/awt/image/ImageRepresentation.java index 18fb13ed69b..77ee7339a59 100644 --- a/jdk/src/share/classes/sun/awt/image/ImageRepresentation.java +++ b/jdk/src/share/classes/sun/awt/image/ImageRepresentation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -209,7 +209,7 @@ public class ImageRepresentation extends ImageWatched implements ImageConsumer // Check to see if model is INT_RGB if (model instanceof IndexColorModel) { - if (model.getTransparency() == model.TRANSLUCENT) { + if (model.getTransparency() == Transparency.TRANSLUCENT) { // REMIND: // Probably need to composite anyway so force ARGB cmodel = ColorModel.getRGBdefault(); @@ -586,8 +586,8 @@ public class ImageRepresentation extends ImageWatched implements ImageConsumer } } else { - if (model.getTransparency() != model.OPAQUE && - cmodel.getTransparency() == cmodel.OPAQUE) { + if (model.getTransparency() != Transparency.OPAQUE && + cmodel.getTransparency() == Transparency.OPAQUE) { convertToRGB(); } diff --git a/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java b/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java index 2f495971cf4..a95ce0d015d 100644 --- a/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java +++ b/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -218,7 +218,7 @@ public class IntegerComponentRaster extends SunWritableRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java b/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java index 2d0d22ec59c..b226f07efcb 100644 --- a/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -161,7 +161,7 @@ public class IntegerInterleavedRaster extends IntegerComponentRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java b/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java index 69bb984c514..adbdb766da1 100644 --- a/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java +++ b/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -231,6 +231,7 @@ public class PNGImageDecoder extends ImageDecoder } return true; } + @SuppressWarnings("serial") // JDK-implementation class public class PNGException extends IOException { PNGException(String s) { super(s); } } diff --git a/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java b/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java index 058a2573c09..45ef9eb21f3 100644 --- a/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -165,7 +165,7 @@ public class ShortBandedRaster extends SunWritableRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java b/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java index a84da635599..53f3ff3e3e6 100644 --- a/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -207,7 +207,7 @@ public class ShortComponentRaster extends SunWritableRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** @@ -470,7 +470,7 @@ public class ShortComponentRaster extends SunWritableRaster { int off = (y-minY)*scanlineStride + (x-minX)*pixelStride; for (int i = 0; i < numDataElements; i++) { - data[dataOffsets[i] + off] = (short) inData[i]; + data[dataOffsets[i] + off] = inData[i]; } markDirty(); @@ -576,7 +576,7 @@ public class ShortComponentRaster extends SunWritableRaster { xoff = yoff; for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = (short) inData[off++]; + data[dataOffsets[c] + xoff] = inData[off++]; } } } diff --git a/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java b/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java index c55d111d7fd..4602c19aab0 100644 --- a/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -180,7 +180,7 @@ public class ShortInterleavedRaster extends ShortComponentRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** @@ -443,7 +443,7 @@ public class ShortInterleavedRaster extends ShortComponentRaster { int off = (y-minY)*scanlineStride + (x-minX)*pixelStride; for (int i = 0; i < numDataElements; i++) { - data[dataOffsets[i] + off] = (short) inData[i]; + data[dataOffsets[i] + off] = inData[i]; } markDirty(); } @@ -548,7 +548,7 @@ public class ShortInterleavedRaster extends ShortComponentRaster { xoff = yoff; for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = (short) inData[off++]; + data[dataOffsets[c] + xoff] = inData[off++]; } } } diff --git a/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java b/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java index 91cb0684244..1445795abe7 100644 --- a/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java +++ b/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ public abstract class VSyncedBSManager { private static VSyncedBSManager theInstance; private static final boolean vSyncLimit = - Boolean.valueOf((String)java.security.AccessController.doPrivileged( + Boolean.valueOf(java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction( "sun.java2d.vsynclimit", "true"))); diff --git a/jdk/src/share/classes/sun/awt/shell/DefaultShellFolder.java b/jdk/src/share/classes/sun/awt/shell/DefaultShellFolder.java index 860c980d6aa..b44776228d8 100644 --- a/jdk/src/share/classes/sun/awt/shell/DefaultShellFolder.java +++ b/jdk/src/share/classes/sun/awt/shell/DefaultShellFolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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,7 +34,7 @@ import sun.security.action.GetPropertyAction; * @author Michael Martak * @since 1.4 */ - +@SuppressWarnings("serial") // JDK-implementation class class DefaultShellFolder extends ShellFolder { /** diff --git a/jdk/src/share/classes/sun/awt/shell/ShellFolder.java b/jdk/src/share/classes/sun/awt/shell/ShellFolder.java index 630d4faa9cd..cb9459f1d41 100644 --- a/jdk/src/share/classes/sun/awt/shell/ShellFolder.java +++ b/jdk/src/share/classes/sun/awt/shell/ShellFolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -37,7 +37,7 @@ import java.util.concurrent.Callable; * @author Michael Martak * @since 1.4 */ - +@SuppressWarnings("serial") // JDK-implementation class public abstract class ShellFolder extends File { private static final String COLUMN_NAME = "FileChooser.fileNameHeaderText"; private static final String COLUMN_SIZE = "FileChooser.fileSizeHeaderText"; diff --git a/jdk/src/share/classes/sun/font/CompositeFont.java b/jdk/src/share/classes/sun/font/CompositeFont.java index 43b392b5ff2..54329695d49 100644 --- a/jdk/src/share/classes/sun/font/CompositeFont.java +++ b/jdk/src/share/classes/sun/font/CompositeFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -447,7 +447,7 @@ public final class CompositeFont extends Font2D { } public String toString() { - String ls = (String)java.security.AccessController.doPrivileged( + String ls = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); String componentsStr = ""; for (int i=0; i result.x) { result.x += 1; result.width -=1; @@ -912,7 +912,7 @@ public class FileFontStrike extends PhysicalStrike { if (outlineMapRef != null) { outlineMap = outlineMapRef.get(); if (outlineMap != null) { - gp = (GeneralPath)outlineMap.get(glyphCode); + gp = outlineMap.get(glyphCode); } } diff --git a/jdk/src/share/classes/sun/font/FontLineMetrics.java b/jdk/src/share/classes/sun/font/FontLineMetrics.java index 57e1ffa279b..9053ff07265 100644 --- a/jdk/src/share/classes/sun/font/FontLineMetrics.java +++ b/jdk/src/share/classes/sun/font/FontLineMetrics.java @@ -75,7 +75,7 @@ public final class FontLineMetrics extends LineMetrics implements Cloneable { } public final float[] getBaselineOffsets() { - return (float[])cm.baselineOffsets.clone(); + return cm.baselineOffsets.clone(); } public final float getStrikethroughOffset() { diff --git a/jdk/src/share/classes/sun/font/FontScalerException.java b/jdk/src/share/classes/sun/font/FontScalerException.java index 32db6d80679..b88aed62773 100644 --- a/jdk/src/share/classes/sun/font/FontScalerException.java +++ b/jdk/src/share/classes/sun/font/FontScalerException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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,7 @@ package sun.font; +@SuppressWarnings("serial") // JDK-implementation class public class FontScalerException extends Exception { public FontScalerException() { super("Font scaler encountered runtime problem."); diff --git a/jdk/src/share/classes/sun/font/StandardGlyphVector.java b/jdk/src/share/classes/sun/font/StandardGlyphVector.java index 66001682dff..75951ac451e 100644 --- a/jdk/src/share/classes/sun/font/StandardGlyphVector.java +++ b/jdk/src/share/classes/sun/font/StandardGlyphVector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -727,7 +727,7 @@ public class StandardGlyphVector extends GlyphVector { result.clearCaches(); if (positions != null) { - result.positions = (float[])positions.clone(); + result.positions = positions.clone(); } if (gti != null) { @@ -775,7 +775,7 @@ public class StandardGlyphVector extends GlyphVector { throw new IllegalArgumentException("srcPositions.length != " + requiredLength); } - positions = (float[])srcPositions.clone(); + positions = srcPositions.clone(); clearCaches(); addFlags(FLAG_HAS_POSITION_ADJUSTMENTS); @@ -1391,8 +1391,8 @@ public class StandardGlyphVector extends GlyphVector { GlyphTransformInfo(StandardGlyphVector sgv, GlyphTransformInfo rhs) { this.sgv = sgv; - this.indices = rhs.indices == null ? null : (int[])rhs.indices.clone(); - this.transforms = rhs.transforms == null ? null : (double[])rhs.transforms.clone(); + this.indices = rhs.indices == null ? null : rhs.indices.clone(); + this.transforms = rhs.transforms == null ? null : rhs.transforms.clone(); this.strikesRef = null; // can't share cache, so rather than clone, we just null out } diff --git a/jdk/src/share/classes/sun/font/StrikeCache.java b/jdk/src/share/classes/sun/font/StrikeCache.java index 2651a7fef94..eeda70c7132 100644 --- a/jdk/src/share/classes/sun/font/StrikeCache.java +++ b/jdk/src/share/classes/sun/font/StrikeCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -280,7 +280,7 @@ public final class StrikeCache { RenderQueue rq = null; GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - if (!ge.isHeadless()) { + if (!GraphicsEnvironment.isHeadless()) { GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); if (gc instanceof AccelGraphicsConfig) { @@ -351,7 +351,7 @@ public final class StrikeCache { if (gids == null) { gids = new ArrayList(); } - gids.add((long) glyphPtrs[i]); + gids.add(glyphPtrs[i]); } } diff --git a/jdk/src/share/classes/sun/font/SunFontManager.java b/jdk/src/share/classes/sun/font/SunFontManager.java index d9f073345e9..cd366f0c96d 100644 --- a/jdk/src/share/classes/sun/font/SunFontManager.java +++ b/jdk/src/share/classes/sun/font/SunFontManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, 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 @@ -683,8 +683,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { * no effect - this is typically the case only when using the Windows * L&F where these APIs would conflict with that L&F anyway. */ - Font2D oldFont = (Font2D) - altNameCache.get(compositeName.toLowerCase(Locale.ENGLISH)); + Font2D oldFont =altNameCache.get(compositeName.toLowerCase(Locale.ENGLISH)); if (oldFont instanceof CompositeFont) { oldFont.handle.font2D = cf; } @@ -1992,7 +1991,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { if (family == null || familyName == null) { return null; } - String [] fontList = (String[])family.toArray(STR_ARRAY); + String [] fontList = family.toArray(STR_ARRAY); if (fontList.length == 0) { return null; } @@ -2085,7 +2084,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { (ConcurrentHashMap) AppContext.getAppContext().get(CompositeFont.class); if (altNameCache != null) { - font = (Font2D)altNameCache.get(mapName); + font = altNameCache.get(mapName); } else { font = null; } @@ -2628,8 +2627,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { fullNameToFont.remove(oldFont.fullName.toLowerCase(Locale.ENGLISH)); FontFamily.remove(oldFont); if (localeFullNamesToFont != null) { - Map.Entry[] mapEntries = - (Map.Entry[])localeFullNamesToFont.entrySet(). + Map.Entry[] mapEntries = localeFullNamesToFont.entrySet(). toArray(new Map.Entry[0]); /* Should I be replacing these, or just I just remove * the names from the map? @@ -3100,7 +3098,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { if (font == null) { return; } - String[] keys = (String[])(fontNameCache.keySet().toArray(STR_ARRAY)); + String[] keys = fontNameCache.keySet().toArray(STR_ARRAY); for (int k=0; k value; + + public CacheEntry() { + value = null; + } + + public CacheEntry(Object o) { + value = new SoftReference<>(o); + } + + public Object get() { + return value.get(); + } + + public void setThing(Object thing) { + value = new SoftReference<>(thing); } } @@ -72,7 +87,6 @@ class CacheEntry extends Ref { * * @see java.lang.Object#hashCode * @see java.lang.Object#equals - * @see sun.misc.Ref * @deprecated Consider {@link java.util.LinkedHashMap} for LRU caches. */ @Deprecated @@ -192,7 +206,7 @@ public int index = (hash & 0x7FFFFFFF) % tab.length; for (CacheEntry e = tab[index]; e != null; e = e.next) { if ((e.hash == hash) && e.key.equals(key)) { - return e.check(); + return e.get(); } } return null; @@ -220,7 +234,7 @@ public for (CacheEntry old = oldTable[i]; old != null;) { CacheEntry e = old; old = old.next; - if (e.check() != null) { + if (e.get() != null) { int index = (e.hash & 0x7FFFFFFF) % newCapacity; e.next = newTable[index]; newTable[index] = e; @@ -253,10 +267,10 @@ public CacheEntry ne = null; for (CacheEntry e = tab[index]; e != null; e = e.next) { if ((e.hash == hash) && e.key.equals(key)) { - Object old = e.check(); + Object old = e.get(); e.setThing(value); return old; - } else if (e.check() == null) + } else if (e.get() == null) ne = e; /* reuse old flushed value */ } @@ -296,7 +310,7 @@ public tab[index] = e.next; } count--; - return e.check(); + return e.get(); } } return null; @@ -322,7 +336,7 @@ class CacheEnumerator implements Enumeration { public boolean hasMoreElements() { while (index >= 0) { while (entry != null) - if (entry.check() != null) + if (entry.get() != null) return true; else entry = entry.next; @@ -338,8 +352,8 @@ class CacheEnumerator implements Enumeration { if (entry != null) { CacheEntry e = entry; entry = e.next; - if (e.check() != null) - return keys ? e.key : e.check(); + if (e.get() != null) + return keys ? e.key : e.get(); } } throw new NoSuchElementException("CacheEnumerator"); diff --git a/jdk/src/share/classes/sun/misc/DoubleConsts.java b/jdk/src/share/classes/sun/misc/DoubleConsts.java index 2c5964b7885..6ee80490102 100644 --- a/jdk/src/share/classes/sun/misc/DoubleConsts.java +++ b/jdk/src/share/classes/sun/misc/DoubleConsts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -77,9 +77,7 @@ public class DoubleConsts { /** * The exponent the smallest positive double - * subnormal value would have if it could be normalized. It is - * equal to the value returned by - * FpUtils.ilogb(Double.MIN_VALUE). + * subnormal value would have if it could be normalized.. */ public static final int MIN_SUB_EXPONENT = MIN_EXPONENT - (SIGNIFICAND_WIDTH - 1); diff --git a/jdk/src/share/classes/sun/misc/FloatConsts.java b/jdk/src/share/classes/sun/misc/FloatConsts.java index 4345c19fcf3..07396f8bca9 100644 --- a/jdk/src/share/classes/sun/misc/FloatConsts.java +++ b/jdk/src/share/classes/sun/misc/FloatConsts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -73,8 +73,7 @@ public class FloatConsts { /** * The exponent the smallest positive float subnormal - * value would have if it could be normalized. It is equal to the - * value returned by FpUtils.ilogb(Float.MIN_VALUE). + * value would have if it could be normalized. */ public static final int MIN_SUB_EXPONENT = MIN_EXPONENT - (SIGNIFICAND_WIDTH - 1); diff --git a/jdk/src/share/classes/sun/misc/FpUtils.java b/jdk/src/share/classes/sun/misc/FpUtils.java deleted file mode 100644 index a874c80f628..00000000000 --- a/jdk/src/share/classes/sun/misc/FpUtils.java +++ /dev/null @@ -1,931 +0,0 @@ -/* - * Copyright (c) 2003, 2011, 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 sun.misc; - -import sun.misc.FloatConsts; -import sun.misc.DoubleConsts; - -/** - * The class {@code FpUtils} contains static utility methods for - * manipulating and inspecting {@code float} and - * {@code double} floating-point numbers. These methods include - * functionality recommended or required by the IEEE 754 - * floating-point standard. - * - * @author Joseph D. Darcy - */ - -public class FpUtils { - /* - * The methods in this class are reasonably implemented using - * direct or indirect bit-level manipulation of floating-point - * values. However, having access to the IEEE 754 recommended - * functions would obviate the need for most programmers to engage - * in floating-point bit-twiddling. - * - * An IEEE 754 number has three fields, from most significant bit - * to to least significant, sign, exponent, and significand. - * - * msb lsb - * [sign|exponent| fractional_significand] - * - * Using some encoding cleverness, explained below, the high order - * bit of the logical significand does not need to be explicitly - * stored, thus "fractional_significand" instead of simply - * "significand" in the figure above. - * - * For finite normal numbers, the numerical value encoded is - * - * (-1)^sign * 2^(exponent)*(1.fractional_significand) - * - * Most finite floating-point numbers are normalized; the exponent - * value is reduced until the leading significand bit is 1. - * Therefore, the leading 1 is redundant and is not explicitly - * stored. If a numerical value is so small it cannot be - * normalized, it has a subnormal representation. Subnormal - * numbers don't have a leading 1 in their significand; subnormals - * are encoding using a special exponent value. In other words, - * the high-order bit of the logical significand can be elided in - * from the representation in either case since the bit's value is - * implicit from the exponent value. - * - * The exponent field uses a biased representation; if the bits of - * the exponent are interpreted as a unsigned integer E, the - * exponent represented is E - E_bias where E_bias depends on the - * floating-point format. E can range between E_min and E_max, - * constants which depend on the floating-point format. E_min and - * E_max are -126 and +127 for float, -1022 and +1023 for double. - * - * The 32-bit float format has 1 sign bit, 8 exponent bits, and 23 - * bits for the significand (which is logically 24 bits wide - * because of the implicit bit). The 64-bit double format has 1 - * sign bit, 11 exponent bits, and 52 bits for the significand - * (logically 53 bits). - * - * Subnormal numbers and zero have the special exponent value - * E_min -1; the numerical value represented by a subnormal is: - * - * (-1)^sign * 2^(E_min)*(0.fractional_significand) - * - * Zero is represented by all zero bits in the exponent and all - * zero bits in the significand; zero can have either sign. - * - * Infinity and NaN are encoded using the exponent value E_max + - * 1. Signed infinities have all significand bits zero; NaNs have - * at least one non-zero significand bit. - * - * The details of IEEE 754 floating-point encoding will be used in - * the methods below without further comment. For further - * exposition on IEEE 754 numbers, see "IEEE Standard for Binary - * Floating-Point Arithmetic" ANSI/IEEE Std 754-1985 or William - * Kahan's "Lecture Notes on the Status of IEEE Standard 754 for - * Binary Floating-Point Arithmetic", - * http://www.cs.berkeley.edu/~wkahan/ieee754status/ieee754.ps. - * - * Many of this class's methods are members of the set of IEEE 754 - * recommended functions or similar functions recommended or - * required by IEEE 754R. Discussion of various implementation - * techniques for these functions have occurred in: - * - * W.J. Cody and Jerome T. Coonen, "Algorithm 772 Functions to - * Support the IEEE Standard for Binary Floating-Point - * Arithmetic," ACM Transactions on Mathematical Software, - * vol. 19, no. 4, December 1993, pp. 443-451. - * - * Joseph D. Darcy, "Writing robust IEEE recommended functions in - * ``100% Pure Java''(TM)," University of California, Berkeley - * technical report UCB//CSD-98-1009. - */ - - /** - * Don't let anyone instantiate this class. - */ - private FpUtils() {} - - // Helper Methods - - // The following helper methods are used in the implementation of - // the public recommended functions; they generally omit certain - // tests for exception cases. - - /** - * Returns unbiased exponent of a {@code double}. - * @deprecated Use Math.getExponent. - */ - @Deprecated - public static int getExponent(double d){ - return Math.getExponent(d); - } - - /** - * Returns unbiased exponent of a {@code float}. - * @deprecated Use Math.getExponent. - */ - @Deprecated - public static int getExponent(float f){ - return Math.getExponent(f); - } - - - /** - * Returns the first floating-point argument with the sign of the - * second floating-point argument. Note that unlike the {@link - * FpUtils#copySign(double, double) copySign} method, this method - * does not require NaN {@code sign} arguments to be treated - * as positive values; implementations are permitted to treat some - * NaN arguments as positive and other NaN arguments as negative - * to allow greater performance. - * - * @param magnitude the parameter providing the magnitude of the result - * @param sign the parameter providing the sign of the result - * @return a value with the magnitude of {@code magnitude} - * and the sign of {@code sign}. - * @author Joseph D. Darcy - * @deprecated Use Math.copySign. - */ - @Deprecated - public static double rawCopySign(double magnitude, double sign) { - return Math.copySign(magnitude, sign); - } - - /** - * Returns the first floating-point argument with the sign of the - * second floating-point argument. Note that unlike the {@link - * FpUtils#copySign(float, float) copySign} method, this method - * does not require NaN {@code sign} arguments to be treated - * as positive values; implementations are permitted to treat some - * NaN arguments as positive and other NaN arguments as negative - * to allow greater performance. - * - * @param magnitude the parameter providing the magnitude of the result - * @param sign the parameter providing the sign of the result - * @return a value with the magnitude of {@code magnitude} - * and the sign of {@code sign}. - * @author Joseph D. Darcy - * @deprecated Use Math.copySign. - */ - @Deprecated - public static float rawCopySign(float magnitude, float sign) { - return Math.copySign(magnitude, sign); - } - - /* ***************************************************************** */ - - /** - * Returns {@code true} if the argument is a finite - * floating-point value; returns {@code false} otherwise (for - * NaN and infinity arguments). - * - * @param d the {@code double} value to be tested - * @return {@code true} if the argument is a finite - * floating-point value, {@code false} otherwise. - * @deprecated Use Double.isFinite. - */ - @Deprecated - public static boolean isFinite(double d) { - return Double.isFinite(d); - } - - /** - * Returns {@code true} if the argument is a finite - * floating-point value; returns {@code false} otherwise (for - * NaN and infinity arguments). - * - * @param f the {@code float} value to be tested - * @return {@code true} if the argument is a finite - * floating-point value, {@code false} otherwise. - * @deprecated Use Float.isFinite. - */ - @Deprecated - public static boolean isFinite(float f) { - return Float.isFinite(f); - } - - /** - * Returns {@code true} if the specified number is infinitely - * large in magnitude, {@code false} otherwise. - * - *

      Note that this method is equivalent to the {@link - * Double#isInfinite(double) Double.isInfinite} method; the - * functionality is included in this class for convenience. - * - * @param d the value to be tested. - * @return {@code true} if the value of the argument is positive - * infinity or negative infinity; {@code false} otherwise. - */ - public static boolean isInfinite(double d) { - return Double.isInfinite(d); - } - - /** - * Returns {@code true} if the specified number is infinitely - * large in magnitude, {@code false} otherwise. - * - *

      Note that this method is equivalent to the {@link - * Float#isInfinite(float) Float.isInfinite} method; the - * functionality is included in this class for convenience. - * - * @param f the value to be tested. - * @return {@code true} if the argument is positive infinity or - * negative infinity; {@code false} otherwise. - */ - public static boolean isInfinite(float f) { - return Float.isInfinite(f); - } - - /** - * Returns {@code true} if the specified number is a - * Not-a-Number (NaN) value, {@code false} otherwise. - * - *

      Note that this method is equivalent to the {@link - * Double#isNaN(double) Double.isNaN} method; the functionality is - * included in this class for convenience. - * - * @param d the value to be tested. - * @return {@code true} if the value of the argument is NaN; - * {@code false} otherwise. - */ - public static boolean isNaN(double d) { - return Double.isNaN(d); - } - - /** - * Returns {@code true} if the specified number is a - * Not-a-Number (NaN) value, {@code false} otherwise. - * - *

      Note that this method is equivalent to the {@link - * Float#isNaN(float) Float.isNaN} method; the functionality is - * included in this class for convenience. - * - * @param f the value to be tested. - * @return {@code true} if the argument is NaN; - * {@code false} otherwise. - */ - public static boolean isNaN(float f) { - return Float.isNaN(f); - } - - /** - * Returns {@code true} if the unordered relation holds - * between the two arguments. When two floating-point values are - * unordered, one value is neither less than, equal to, nor - * greater than the other. For the unordered relation to be true, - * at least one argument must be a {@code NaN}. - * - * @param arg1 the first argument - * @param arg2 the second argument - * @return {@code true} if at least one argument is a NaN, - * {@code false} otherwise. - */ - public static boolean isUnordered(double arg1, double arg2) { - return isNaN(arg1) || isNaN(arg2); - } - - /** - * Returns {@code true} if the unordered relation holds - * between the two arguments. When two floating-point values are - * unordered, one value is neither less than, equal to, nor - * greater than the other. For the unordered relation to be true, - * at least one argument must be a {@code NaN}. - * - * @param arg1 the first argument - * @param arg2 the second argument - * @return {@code true} if at least one argument is a NaN, - * {@code false} otherwise. - */ - public static boolean isUnordered(float arg1, float arg2) { - return isNaN(arg1) || isNaN(arg2); - } - - /** - * Returns unbiased exponent of a {@code double}; for - * subnormal values, the number is treated as if it were - * normalized. That is for all finite, non-zero, positive numbers - * x, scalb(x, -ilogb(x)) is - * always in the range [1, 2). - *

      - * Special cases: - *

        - *
      • If the argument is NaN, then the result is 230. - *
      • If the argument is infinite, then the result is 228. - *
      • If the argument is zero, then the result is -(228). - *
      - * - * @param d floating-point number whose exponent is to be extracted - * @return unbiased exponent of the argument. - * @author Joseph D. Darcy - */ - public static int ilogb(double d) { - int exponent = getExponent(d); - - switch (exponent) { - case DoubleConsts.MAX_EXPONENT+1: // NaN or infinity - if( isNaN(d) ) - return (1<<30); // 2^30 - else // infinite value - return (1<<28); // 2^28 - - case DoubleConsts.MIN_EXPONENT-1: // zero or subnormal - if(d == 0.0) { - return -(1<<28); // -(2^28) - } - else { - long transducer = Double.doubleToRawLongBits(d); - - /* - * To avoid causing slow arithmetic on subnormals, - * the scaling to determine when d's significand - * is normalized is done in integer arithmetic. - * (there must be at least one "1" bit in the - * significand since zero has been screened out. - */ - - // isolate significand bits - transducer &= DoubleConsts.SIGNIF_BIT_MASK; - assert(transducer != 0L); - - // This loop is simple and functional. We might be - // able to do something more clever that was faster; - // e.g. number of leading zero detection on - // (transducer << (# exponent and sign bits). - while (transducer < - (1L << (DoubleConsts.SIGNIFICAND_WIDTH - 1))) { - transducer *= 2; - exponent--; - } - exponent++; - assert( exponent >= - DoubleConsts.MIN_EXPONENT - (DoubleConsts.SIGNIFICAND_WIDTH-1) && - exponent < DoubleConsts.MIN_EXPONENT); - return exponent; - } - - default: - assert( exponent >= DoubleConsts.MIN_EXPONENT && - exponent <= DoubleConsts.MAX_EXPONENT); - return exponent; - } - } - - /** - * Returns unbiased exponent of a {@code float}; for - * subnormal values, the number is treated as if it were - * normalized. That is for all finite, non-zero, positive numbers - * x, scalb(x, -ilogb(x)) is - * always in the range [1, 2). - *

      - * Special cases: - *

        - *
      • If the argument is NaN, then the result is 230. - *
      • If the argument is infinite, then the result is 228. - *
      • If the argument is zero, then the result is -(228). - *
      - * - * @param f floating-point number whose exponent is to be extracted - * @return unbiased exponent of the argument. - * @author Joseph D. Darcy - */ - public static int ilogb(float f) { - int exponent = getExponent(f); - - switch (exponent) { - case FloatConsts.MAX_EXPONENT+1: // NaN or infinity - if( isNaN(f) ) - return (1<<30); // 2^30 - else // infinite value - return (1<<28); // 2^28 - - case FloatConsts.MIN_EXPONENT-1: // zero or subnormal - if(f == 0.0f) { - return -(1<<28); // -(2^28) - } - else { - int transducer = Float.floatToRawIntBits(f); - - /* - * To avoid causing slow arithmetic on subnormals, - * the scaling to determine when f's significand - * is normalized is done in integer arithmetic. - * (there must be at least one "1" bit in the - * significand since zero has been screened out. - */ - - // isolate significand bits - transducer &= FloatConsts.SIGNIF_BIT_MASK; - assert(transducer != 0); - - // This loop is simple and functional. We might be - // able to do something more clever that was faster; - // e.g. number of leading zero detection on - // (transducer << (# exponent and sign bits). - while (transducer < - (1 << (FloatConsts.SIGNIFICAND_WIDTH - 1))) { - transducer *= 2; - exponent--; - } - exponent++; - assert( exponent >= - FloatConsts.MIN_EXPONENT - (FloatConsts.SIGNIFICAND_WIDTH-1) && - exponent < FloatConsts.MIN_EXPONENT); - return exponent; - } - - default: - assert( exponent >= FloatConsts.MIN_EXPONENT && - exponent <= FloatConsts.MAX_EXPONENT); - return exponent; - } - } - - - /* - * The scalb operation should be reasonably fast; however, there - * are tradeoffs in writing a method to minimize the worst case - * performance and writing a method to minimize the time for - * expected common inputs. Some processors operate very slowly on - * subnormal operands, taking hundreds or thousands of cycles for - * one floating-point add or multiply as opposed to, say, four - * cycles for normal operands. For processors with very slow - * subnormal execution, scalb would be fastest if written entirely - * with integer operations; in other words, scalb would need to - * include the logic of performing correct rounding of subnormal - * values. This could be reasonably done in at most a few hundred - * cycles. However, this approach may penalize normal operations - * since at least the exponent of the floating-point argument must - * be examined. - * - * The approach taken in this implementation is a compromise. - * Floating-point multiplication is used to do most of the work; - * but knowingly multiplying by a subnormal scaling factor is - * avoided. However, the floating-point argument is not examined - * to see whether or not it is subnormal since subnormal inputs - * are assumed to be rare. At most three multiplies are needed to - * scale from the largest to smallest exponent ranges (scaling - * down, at most two multiplies are needed if subnormal scaling - * factors are allowed). However, in this implementation an - * expensive integer remainder operation is avoided at the cost of - * requiring five floating-point multiplies in the worst case, - * which should still be a performance win. - * - * If scaling of entire arrays is a concern, it would probably be - * more efficient to provide a double[] scalb(double[], int) - * version of scalb to avoid having to recompute the needed - * scaling factors for each floating-point value. - */ - - /** - * Return {@code d} × - * 2{@code scale_factor} rounded as if performed - * by a single correctly rounded floating-point multiply to a - * member of the double value set. See section 4.2.3 of - * The Java™ Language Specification - * for a discussion of floating-point - * value sets. If the exponent of the result is between the - * {@code double}'s minimum exponent and maximum exponent, - * the answer is calculated exactly. If the exponent of the - * result would be larger than {@code doubles}'s maximum - * exponent, an infinity is returned. Note that if the result is - * subnormal, precision may be lost; that is, when {@code scalb(x, - * n)} is subnormal, {@code scalb(scalb(x, n), -n)} may - * not equal x. When the result is non-NaN, the result has - * the same sign as {@code d}. - * - *

      - * Special cases: - *

        - *
      • If the first argument is NaN, NaN is returned. - *
      • If the first argument is infinite, then an infinity of the - * same sign is returned. - *
      • If the first argument is zero, then a zero of the same - * sign is returned. - *
      - * - * @param d number to be scaled by a power of two. - * @param scale_factor power of 2 used to scale {@code d} - * @return {@code d * }2{@code scale_factor} - * @author Joseph D. Darcy - * @deprecated Use Math.scalb. - */ - @Deprecated - public static double scalb(double d, int scale_factor) { - return Math.scalb(d, scale_factor); - } - - /** - * Return {@code f} × - * 2{@code scale_factor} rounded as if performed - * by a single correctly rounded floating-point multiply to a - * member of the float value set. See section 4.2.3 of - * The Java™ Language Specification - * for a discussion of floating-point - * value sets. If the exponent of the result is between the - * {@code float}'s minimum exponent and maximum exponent, the - * answer is calculated exactly. If the exponent of the result - * would be larger than {@code float}'s maximum exponent, an - * infinity is returned. Note that if the result is subnormal, - * precision may be lost; that is, when {@code scalb(x, n)} - * is subnormal, {@code scalb(scalb(x, n), -n)} may not equal - * x. When the result is non-NaN, the result has the same - * sign as {@code f}. - * - *

      - * Special cases: - *

        - *
      • If the first argument is NaN, NaN is returned. - *
      • If the first argument is infinite, then an infinity of the - * same sign is returned. - *
      • If the first argument is zero, then a zero of the same - * sign is returned. - *
      - * - * @param f number to be scaled by a power of two. - * @param scale_factor power of 2 used to scale {@code f} - * @return {@code f * }2{@code scale_factor} - * @author Joseph D. Darcy - * @deprecated Use Math.scalb. - */ - @Deprecated - public static float scalb(float f, int scale_factor) { - return Math.scalb(f, scale_factor); - } - - /** - * Returns the floating-point number adjacent to the first - * argument in the direction of the second argument. If both - * arguments compare as equal the second argument is returned. - * - *

      - * Special cases: - *

        - *
      • If either argument is a NaN, then NaN is returned. - * - *
      • If both arguments are signed zeros, {@code direction} - * is returned unchanged (as implied by the requirement of - * returning the second argument if the arguments compare as - * equal). - * - *
      • If {@code start} is - * ±{@code Double.MIN_VALUE} and {@code direction} - * has a value such that the result should have a smaller - * magnitude, then a zero with the same sign as {@code start} - * is returned. - * - *
      • If {@code start} is infinite and - * {@code direction} has a value such that the result should - * have a smaller magnitude, {@code Double.MAX_VALUE} with the - * same sign as {@code start} is returned. - * - *
      • If {@code start} is equal to ± - * {@code Double.MAX_VALUE} and {@code direction} has a - * value such that the result should have a larger magnitude, an - * infinity with same sign as {@code start} is returned. - *
      - * - * @param start starting floating-point value - * @param direction value indicating which of - * {@code start}'s neighbors or {@code start} should - * be returned - * @return The floating-point number adjacent to {@code start} in the - * direction of {@code direction}. - * @author Joseph D. Darcy - * @deprecated Use Math.nextAfter - */ - @Deprecated - public static double nextAfter(double start, double direction) { - return Math.nextAfter(start, direction); - } - - /** - * Returns the floating-point number adjacent to the first - * argument in the direction of the second argument. If both - * arguments compare as equal, the second argument is returned. - * - *

      - * Special cases: - *

        - *
      • If either argument is a NaN, then NaN is returned. - * - *
      • If both arguments are signed zeros, a {@code float} - * zero with the same sign as {@code direction} is returned - * (as implied by the requirement of returning the second argument - * if the arguments compare as equal). - * - *
      • If {@code start} is - * ±{@code Float.MIN_VALUE} and {@code direction} - * has a value such that the result should have a smaller - * magnitude, then a zero with the same sign as {@code start} - * is returned. - * - *
      • If {@code start} is infinite and - * {@code direction} has a value such that the result should - * have a smaller magnitude, {@code Float.MAX_VALUE} with the - * same sign as {@code start} is returned. - * - *
      • If {@code start} is equal to ± - * {@code Float.MAX_VALUE} and {@code direction} has a - * value such that the result should have a larger magnitude, an - * infinity with same sign as {@code start} is returned. - *
      - * - * @param start starting floating-point value - * @param direction value indicating which of - * {@code start}'s neighbors or {@code start} should - * be returned - * @return The floating-point number adjacent to {@code start} in the - * direction of {@code direction}. - * @author Joseph D. Darcy - * @deprecated Use Math.nextAfter. - */ - @Deprecated - public static float nextAfter(float start, double direction) { - return Math.nextAfter(start, direction); - } - - /** - * Returns the floating-point value adjacent to {@code d} in - * the direction of positive infinity. This method is - * semantically equivalent to {@code nextAfter(d, - * Double.POSITIVE_INFINITY)}; however, a {@code nextUp} - * implementation may run faster than its equivalent - * {@code nextAfter} call. - * - *

      Special Cases: - *

        - *
      • If the argument is NaN, the result is NaN. - * - *
      • If the argument is positive infinity, the result is - * positive infinity. - * - *
      • If the argument is zero, the result is - * {@code Double.MIN_VALUE} - * - *
      - * - * @param d starting floating-point value - * @return The adjacent floating-point value closer to positive - * infinity. - * @author Joseph D. Darcy - * @deprecated use Math.nextUp. - */ - @Deprecated - public static double nextUp(double d) { - return Math.nextUp(d); - } - - /** - * Returns the floating-point value adjacent to {@code f} in - * the direction of positive infinity. This method is - * semantically equivalent to {@code nextAfter(f, - * Double.POSITIVE_INFINITY)}; however, a {@code nextUp} - * implementation may run faster than its equivalent - * {@code nextAfter} call. - * - *

      Special Cases: - *

        - *
      • If the argument is NaN, the result is NaN. - * - *
      • If the argument is positive infinity, the result is - * positive infinity. - * - *
      • If the argument is zero, the result is - * {@code Float.MIN_VALUE} - * - *
      - * - * @param f starting floating-point value - * @return The adjacent floating-point value closer to positive - * infinity. - * @author Joseph D. Darcy - * @deprecated Use Math.nextUp. - */ - @Deprecated - public static float nextUp(float f) { - return Math.nextUp(f); - } - - /** - * Returns the floating-point value adjacent to {@code d} in - * the direction of negative infinity. This method is - * semantically equivalent to {@code nextAfter(d, - * Double.NEGATIVE_INFINITY)}; however, a - * {@code nextDown} implementation may run faster than its - * equivalent {@code nextAfter} call. - * - *

      Special Cases: - *

        - *
      • If the argument is NaN, the result is NaN. - * - *
      • If the argument is negative infinity, the result is - * negative infinity. - * - *
      • If the argument is zero, the result is - * {@code -Double.MIN_VALUE} - * - *
      - * - * @param d starting floating-point value - * @return The adjacent floating-point value closer to negative - * infinity. - * @author Joseph D. Darcy - * @deprecated Use Math.nextDown. - */ - @Deprecated - public static double nextDown(double d) { - return Math.nextDown(d); - } - - /** - * Returns the floating-point value adjacent to {@code f} in - * the direction of negative infinity. This method is - * semantically equivalent to {@code nextAfter(f, - * Float.NEGATIVE_INFINITY)}; however, a - * {@code nextDown} implementation may run faster than its - * equivalent {@code nextAfter} call. - * - *

      Special Cases: - *

        - *
      • If the argument is NaN, the result is NaN. - * - *
      • If the argument is negative infinity, the result is - * negative infinity. - * - *
      • If the argument is zero, the result is - * {@code -Float.MIN_VALUE} - * - *
      - * - * @param f starting floating-point value - * @return The adjacent floating-point value closer to negative - * infinity. - * @author Joseph D. Darcy - * @deprecated Use Math.nextDown. - */ - @Deprecated - public static double nextDown(float f) { - return Math.nextDown(f); - } - - /** - * Returns the first floating-point argument with the sign of the - * second floating-point argument. For this method, a NaN - * {@code sign} argument is always treated as if it were - * positive. - * - * @param magnitude the parameter providing the magnitude of the result - * @param sign the parameter providing the sign of the result - * @return a value with the magnitude of {@code magnitude} - * and the sign of {@code sign}. - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use StrictMath.copySign. - */ - @Deprecated - public static double copySign(double magnitude, double sign) { - return StrictMath.copySign(magnitude, sign); - } - - /** - * Returns the first floating-point argument with the sign of the - * second floating-point argument. For this method, a NaN - * {@code sign} argument is always treated as if it were - * positive. - * - * @param magnitude the parameter providing the magnitude of the result - * @param sign the parameter providing the sign of the result - * @return a value with the magnitude of {@code magnitude} - * and the sign of {@code sign}. - * @author Joseph D. Darcy - * @deprecated Use StrictMath.copySign. - */ - @Deprecated - public static float copySign(float magnitude, float sign) { - return StrictMath.copySign(magnitude, sign); - } - - /** - * Returns the size of an ulp of the argument. An ulp of a - * {@code double} value is the positive distance between this - * floating-point value and the {@code double} value next - * larger in magnitude. Note that for non-NaN x, - * ulp(-x) == ulp(x). - * - *

      Special Cases: - *

        - *
      • If the argument is NaN, then the result is NaN. - *
      • If the argument is positive or negative infinity, then the - * result is positive infinity. - *
      • If the argument is positive or negative zero, then the result is - * {@code Double.MIN_VALUE}. - *
      • If the argument is ±{@code Double.MAX_VALUE}, then - * the result is equal to 2971. - *
      - * - * @param d the floating-point value whose ulp is to be returned - * @return the size of an ulp of the argument - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use Math.ulp. - */ - @Deprecated - public static double ulp(double d) { - return Math.ulp(d); - } - - /** - * Returns the size of an ulp of the argument. An ulp of a - * {@code float} value is the positive distance between this - * floating-point value and the {@code float} value next - * larger in magnitude. Note that for non-NaN x, - * ulp(-x) == ulp(x). - * - *

      Special Cases: - *

        - *
      • If the argument is NaN, then the result is NaN. - *
      • If the argument is positive or negative infinity, then the - * result is positive infinity. - *
      • If the argument is positive or negative zero, then the result is - * {@code Float.MIN_VALUE}. - *
      • If the argument is ±{@code Float.MAX_VALUE}, then - * the result is equal to 2104. - *
      - * - * @param f the floating-point value whose ulp is to be returned - * @return the size of an ulp of the argument - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use Math.ulp. - */ - @Deprecated - public static float ulp(float f) { - return Math.ulp(f); - } - - /** - * Returns the signum function of the argument; zero if the argument - * is zero, 1.0 if the argument is greater than zero, -1.0 if the - * argument is less than zero. - * - *

      Special Cases: - *

        - *
      • If the argument is NaN, then the result is NaN. - *
      • If the argument is positive zero or negative zero, then the - * result is the same as the argument. - *
      - * - * @param d the floating-point value whose signum is to be returned - * @return the signum function of the argument - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use Math.signum. - */ - @Deprecated - public static double signum(double d) { - return Math.signum(d); - } - - /** - * Returns the signum function of the argument; zero if the argument - * is zero, 1.0f if the argument is greater than zero, -1.0f if the - * argument is less than zero. - * - *

      Special Cases: - *

        - *
      • If the argument is NaN, then the result is NaN. - *
      • If the argument is positive zero or negative zero, then the - * result is the same as the argument. - *
      - * - * @param f the floating-point value whose signum is to be returned - * @return the signum function of the argument - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use Math.signum. - */ - @Deprecated - public static float signum(float f) { - return Math.signum(f); - } -} diff --git a/jdk/src/share/classes/sun/misc/Launcher.java b/jdk/src/share/classes/sun/misc/Launcher.java index 71b3d3bbce8..89557f711b4 100644 --- a/jdk/src/share/classes/sun/misc/Launcher.java +++ b/jdk/src/share/classes/sun/misc/Launcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -266,7 +266,7 @@ public class Launcher { throws IOException { final String s = System.getProperty("java.class.path"); - final File[] path = (s == null) ? new File[0] : getClassPath(s); + final File[] path = (s == null) ? new File[0] : getClassPath(s, true); // Note: on bugid 4256530 // Prior implementations of this doPrivileged() block supplied @@ -322,7 +322,7 @@ public class Launcher { * This class loader supports dynamic additions to the class path * at runtime. * - * @see java.lang.instrument.Instrumentation#appendToSystemClassPathSearch + * @see java.lang.instrument.Instrumentation#appendToSystemClassLoaderSearch */ private void appendToClassPathForInstrumentation(String path) { assert(Thread.holdsLock(this)); @@ -364,7 +364,8 @@ public class Launcher { urls = AccessController.doPrivileged( new PrivilegedAction() { public URL[] run() { - File[] classPath = getClassPath(bootClassPath); + // Skip empty path in boot class path i.e. not default to use CWD + File[] classPath = getClassPath(bootClassPath, false); int len = classPath.length; Set seenDirs = new HashSet(); for (int i = 0; i < len; i++) { @@ -405,7 +406,7 @@ public class Launcher { return urls; } - private static File[] getClassPath(String cp) { + private static File[] getClassPath(String cp, boolean defaultToCwd) { File[] path; if (cp != null) { int count = 0, maxCount = 1; @@ -419,9 +420,9 @@ public class Launcher { lastPos = pos = 0; // Now scan for each path component while ((pos = cp.indexOf(File.pathSeparator, lastPos)) != -1) { - if (pos - lastPos > 0) { + if (pos > lastPos) { path[count++] = new File(cp.substring(lastPos, pos)); - } else { + } else if (defaultToCwd) { // empty path component translates to "." path[count++] = new File("."); } @@ -430,7 +431,7 @@ public class Launcher { // Make sure we include the last path component if (lastPos < cp.length()) { path[count++] = new File(cp.substring(lastPos)); - } else { + } else if (defaultToCwd) { path[count++] = new File("."); } // Trim array to correct size diff --git a/jdk/src/share/classes/sun/misc/Ref.java b/jdk/src/share/classes/sun/misc/Ref.java deleted file mode 100644 index 770cb3d42b8..00000000000 --- a/jdk/src/share/classes/sun/misc/Ref.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 1995, 2004, 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 sun.misc; -import java.lang.ref.SoftReference; - - -/** - * A "Ref" is an indirect reference to an object that the garbage collector - * knows about. An application should override the reconstitute() method with one - * that will construct the object based on information in the Ref, often by - * reading from a file. The get() method retains a cache of the result of the last call to - * reconstitute() in the Ref. When space gets tight, the garbage collector - * will clear old Ref cache entries when there are no other pointers to the - * object. In normal usage, Ref will always be subclassed. The subclass will add the - * instance variables necessary for the reconstitute() method to work. It will also add a - * constructor to set them up, and write a version of reconstitute(). - * - * @deprecated This class has been replaced by - * java.util.SoftReference. - * - * @see java.util.SoftReference - * - */ -@Deprecated - -public abstract class Ref { - - private SoftReference soft = null; - - /** - * Returns a pointer to the object referenced by this Ref. If the object - * has been thrown away by the garbage collector, it will be - * reconstituted. This method does everything necessary to ensure that the garbage - * collector throws things away in Least Recently Used(LRU) order. Applications should - * never override this method. The get() method effectively caches calls to - * reconstitute(). - */ - public synchronized Object get() { - Object t = check(); - if (t == null) { - t = reconstitute(); - setThing(t); - } - return t; - } - - /** - * Returns a pointer to the object referenced by this Ref by - * reconstituting it from some external source (such as a file). This method should not - * bother with caching since the method get() will deal with that. - *

      - * In normal usage, Ref will always be subclassed. The subclass will add - * the instance variables necessary for reconstitute() to work. It will - * also add a constructor to set them up, and write a version of - * reconstitute(). - */ - public abstract Object reconstitute(); - - /** - * Flushes the cached object. Forces the next invocation of get() to - * invoke reconstitute(). - */ - public synchronized void flush() { - SoftReference s = soft; - if (s != null) s.clear(); - soft = null; - } - - /** - * Sets the thing to the specified object. - * @param thing the specified object - */ - public synchronized void setThing(Object thing) { - flush(); - soft = new SoftReference(thing); - } - - /** - * Checks to see what object is being pointed at by this Ref and returns it. - */ - public synchronized Object check() { - SoftReference s = soft; - if (s == null) return null; - return s.get(); - } - - /** - * Constructs a new Ref. - */ - public Ref() { } - - /** - * Constructs a new Ref that initially points to thing. - */ - public Ref(Object thing) { - setThing(thing); - } - -} diff --git a/jdk/src/share/classes/sun/misc/VM.java b/jdk/src/share/classes/sun/misc/VM.java index a464305a201..8b77e2297fa 100644 --- a/jdk/src/share/classes/sun/misc/VM.java +++ b/jdk/src/share/classes/sun/misc/VM.java @@ -206,32 +206,6 @@ public class VM { return pageAlignDirectMemory; } - // A user-settable boolean to determine whether ClassLoader.loadClass should - // accept array syntax. This value may be changed during VM initialization - // via the system property "sun.lang.ClassLoader.allowArraySyntax". - // - // The default for 1.5 is "true", array syntax is allowed. In 1.6, the - // default will be "false". The presence of this system property to - // control array syntax allows applications the ability to preview this new - // behaviour. - // - private static boolean defaultAllowArraySyntax = false; - private static boolean allowArraySyntax = defaultAllowArraySyntax; - - // The allowArraySyntax boolean is initialized during system initialization - // in the saveAndRemoveProperties method. - // - // It is initialized based on the value of the system property - // "sun.lang.ClassLoader.allowArraySyntax". If the system property is not - // provided, the default for 1.5 is "true". In 1.6, the default will be - // "false". If the system property is provided, then the value of - // allowArraySyntax will be equal to "true" if Boolean.parseBoolean() - // returns "true". Otherwise, the field will be set to "false". - // - public static boolean allowArraySyntax() { - return allowArraySyntax; - } - /** * Returns true if the given class loader is in the system domain * in which all permissions are granted. @@ -296,14 +270,6 @@ public class VM { if ("true".equals(s)) pageAlignDirectMemory = true; - // Set a boolean to determine whether ClassLoader.loadClass accepts - // array syntax. This value is controlled by the system property - // "sun.lang.ClassLoader.allowArraySyntax". - s = props.getProperty("sun.lang.ClassLoader.allowArraySyntax"); - allowArraySyntax = (s == null - ? defaultAllowArraySyntax - : Boolean.parseBoolean(s)); - // Remove other private system properties // used by java.lang.Integer.IntegerCache props.remove("java.lang.Integer.IntegerCache.high"); diff --git a/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java b/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java index 32a8a8b93b5..0f1c594fd7f 100644 --- a/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java +++ b/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java @@ -37,14 +37,6 @@ import sun.misc.*; public abstract class AbstractPollArrayWrapper { - // Event masks - public static final short POLLIN = 0x0001; - public static final short POLLOUT = 0x0004; - public static final short POLLERR = 0x0008; - public static final short POLLHUP = 0x0010; - public static final short POLLNVAL = 0x0020; - public static final short POLLREMOVE = 0x0800; - // Miscellaneous constants static final short SIZE_POLLFD = 8; static final short FD_OFFSET = 0; diff --git a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java index 2cda6fa1527..c151afe570b 100644 --- a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java @@ -1042,25 +1042,24 @@ class DatagramChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { // This should only happen if this channel is pre-closed while a // selection operation is in progress // ## Throw an error if this channel has not been pre-closed return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0)) newOps |= SelectionKey.OP_READ; - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0)) newOps |= SelectionKey.OP_WRITE; @@ -1105,11 +1104,11 @@ class DatagramChannelImpl int newOps = 0; if ((ops & SelectionKey.OP_READ) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; if ((ops & SelectionKey.OP_WRITE) != 0) - newOps |= PollArrayWrapper.POLLOUT; + newOps |= Net.POLLOUT; if ((ops & SelectionKey.OP_CONNECT) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java b/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java index 15e1a0ebde9..fe2ed230002 100644 --- a/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java +++ b/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java @@ -187,9 +187,9 @@ public class DatagramSocketAdaptor if (!dc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int result = dc.poll(PollArrayWrapper.POLLIN, to); + int result = dc.poll(Net.POLLIN, to); if (result > 0 && - ((result & PollArrayWrapper.POLLIN) != 0)) { + ((result & Net.POLLIN) != 0)) { if ((sender = dc.receive(bb)) != null) return sender; } diff --git a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java index 3c4ddaacd6d..2fcd0c89fe0 100644 --- a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java @@ -110,7 +110,7 @@ public class FileChannelImpl } } - nd.preClose(fd); + // signal any threads blocked on this channel threads.signalAndWait(); if (parent != null) { diff --git a/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java b/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java index d6d4c5c9aef..5eb90af879e 100644 --- a/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java +++ b/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java @@ -82,8 +82,9 @@ class NativeThreadSet { // Signals all threads in this set. // - void signalAndWait() { - synchronized (this) { + synchronized void signalAndWait() { + boolean interrupted = false; + while (used > 0) { int u = used; int n = elts.length; for (int i = 0; i < n; i++) { @@ -96,16 +97,15 @@ class NativeThreadSet { break; } waitingToEmpty = true; - boolean interrupted = false; - while (used > 0) { - try { - wait(); - } catch (InterruptedException e) { - interrupted = true; - } + try { + wait(50); + } catch (InterruptedException e) { + interrupted = true; + } finally { + waitingToEmpty = false; } - if (interrupted) - Thread.currentThread().interrupt(); } + if (interrupted) + Thread.currentThread().interrupt(); } } diff --git a/jdk/src/share/classes/sun/nio/ch/Net.java b/jdk/src/share/classes/sun/nio/ch/Net.java index 2e2640290c6..a25111c056e 100644 --- a/jdk/src/share/classes/sun/nio/ch/Net.java +++ b/jdk/src/share/classes/sun/nio/ch/Net.java @@ -581,9 +581,34 @@ public class Net { private static native void initIDs(); + /** + * Event masks for the various poll system calls. + * They will be set platform dependant in the static initializer below. + */ + public static final short POLLIN; + public static final short POLLOUT; + public static final short POLLERR; + public static final short POLLHUP; + public static final short POLLNVAL; + public static final short POLLCONN; + + static native short pollinValue(); + static native short polloutValue(); + static native short pollerrValue(); + static native short pollhupValue(); + static native short pollnvalValue(); + static native short pollconnValue(); + static { IOUtil.load(); initIDs(); + + POLLIN = pollinValue(); + POLLOUT = polloutValue(); + POLLERR = pollerrValue(); + POLLHUP = pollhupValue(); + POLLNVAL = pollnvalValue(); + POLLCONN = pollconnValue(); } } diff --git a/jdk/src/share/classes/sun/nio/ch/Reflect.java b/jdk/src/share/classes/sun/nio/ch/Reflect.java index 3ef3d9309f0..fc5276c53c4 100644 --- a/jdk/src/share/classes/sun/nio/ch/Reflect.java +++ b/jdk/src/share/classes/sun/nio/ch/Reflect.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -75,7 +75,7 @@ class Reflect { // package-private static Method lookupMethod(String className, String methodName, - Class... paramTypes) + Class... paramTypes) { try { Class cl = Class.forName(className); diff --git a/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java b/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java index 776592db412..d6f2bcd5bd6 100644 --- a/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java +++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java @@ -113,7 +113,7 @@ public class ServerSocketAdaptor // package-private if (!ssc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int result = ssc.poll(PollArrayWrapper.POLLIN, to); + int result = ssc.poll(Net.POLLIN, to); if (result > 0 && ((sc = ssc.accept()) != null)) return sc.socket(); to -= System.currentTimeMillis() - st; diff --git a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java index 8429442356a..dc15547a225 100644 --- a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java @@ -309,21 +309,20 @@ class ServerSocketChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { // This should only happen if this channel is pre-closed while a // selection operation is in progress // ## Throw an error if this channel has not been pre-closed return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_ACCEPT) != 0)) newOps |= SelectionKey.OP_ACCEPT; @@ -369,7 +368,7 @@ class ServerSocketChannelImpl // Translate ops if ((ops & SelectionKey.OP_ACCEPT) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; // Place ops into pollfd array sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java index 741abf733fd..8d891b6ec34 100644 --- a/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java @@ -88,7 +88,6 @@ public class SimpleAsynchronousFileChannelImpl invalidateAllLocks(); // signal any threads blocked on this channel - nd.preClose(fdObj); threads.signalAndWait(); // wait until all async I/O operations have completely gracefully diff --git a/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java b/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java index 2fd00ca2222..9ca284e54e8 100644 --- a/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java +++ b/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java @@ -107,7 +107,7 @@ public class SocketAdaptor throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int result = sc.poll(PollArrayWrapper.POLLCONN, to); + int result = sc.poll(Net.POLLCONN, to); if (result > 0 && sc.finishConnect()) break; to -= System.currentTimeMillis() - st; @@ -201,7 +201,7 @@ public class SocketAdaptor if (!sc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int result = sc.poll(PollArrayWrapper.POLLIN, to); + int result = sc.poll(Net.POLLIN, to); if (result > 0) { if ((n = sc.read(bb)) != 0) return n; diff --git a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java index 28f3fc0c3be..535e73cf47e 100644 --- a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java @@ -888,15 +888,14 @@ class SocketChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { // This should only happen if this channel is pre-closed while a // selection operation is in progress // ## Throw an error if this channel has not been pre-closed return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); // No need to poll again in checkConnect, @@ -905,19 +904,19 @@ class SocketChannelImpl return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0) && (state == ST_CONNECTED)) newOps |= SelectionKey.OP_READ; - if (((ops & PollArrayWrapper.POLLCONN) != 0) && + if (((ops & Net.POLLCONN) != 0) && ((intOps & SelectionKey.OP_CONNECT) != 0) && ((state == ST_UNCONNECTED) || (state == ST_PENDING))) { newOps |= SelectionKey.OP_CONNECT; readyToConnect = true; } - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0) && (state == ST_CONNECTED)) newOps |= SelectionKey.OP_WRITE; @@ -962,11 +961,11 @@ class SocketChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { int newOps = 0; if ((ops & SelectionKey.OP_READ) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; if ((ops & SelectionKey.OP_WRITE) != 0) - newOps |= PollArrayWrapper.POLLOUT; + newOps |= Net.POLLOUT; if ((ops & SelectionKey.OP_CONNECT) != 0) - newOps |= PollArrayWrapper.POLLCONN; + newOps |= Net.POLLCONN; sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/share/classes/sun/nio/cs/StandardCharsets.java.template b/jdk/src/share/classes/sun/nio/cs/StandardCharsets.java.template new file mode 100644 index 00000000000..468934b017a --- /dev/null +++ b/jdk/src/share/classes/sun/nio/cs/StandardCharsets.java.template @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2000, 2014, 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. + * + */ + +// -- This file was mechanically generated: Do not edit! -- // + +package sun.nio.cs; + +import java.nio.charset.*; + + +public class StandardCharsets + extends FastCharsetProvider +{ + + _INCLUDE_ALIASES_TABLES_ + _INCLUDE_ALIASES_MAP_ + _INCLUDE_CLASSES_MAP_ + _INCLUDE_CACHE_MAP_ + + public StandardCharsets() { + super("sun.nio.cs", new Aliases(), new Classes(), new Cache()); + } + +} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java b/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java index d1c07e2e07c..98ec88166ef 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java @@ -1297,7 +1297,7 @@ public class ExtendedCharsets } String osName = AccessController.doPrivileged( new GetPropertyAction("os.name")); - if ("SunOS".equals(osName) || "Linux".equals(osName) + if ("SunOS".equals(osName) || "Linux".equals(osName) || "AIX".equals(osName) || osName.contains("OS X")) { charset("x-COMPOUND_TEXT", "COMPOUND_TEXT", new String[] { diff --git a/jdk/src/share/classes/sun/print/PSPrinterJob.java b/jdk/src/share/classes/sun/print/PSPrinterJob.java index b074b7f1604..fdaeb349992 100644 --- a/jdk/src/share/classes/sun/print/PSPrinterJob.java +++ b/jdk/src/share/classes/sun/print/PSPrinterJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -900,7 +900,7 @@ public class PSPrinterJob extends RasterPrinterJob { /* Create a PS string big enough to hold a row of pixels. */ - int psBytesPerRow = 3 * (int) intSrcWidth; + int psBytesPerRow = 3 * intSrcWidth; while (psBytesPerRow > MAX_PSSTR) { psBytesPerRow /= 2; } diff --git a/jdk/src/share/classes/sun/print/RasterPrinterJob.java b/jdk/src/share/classes/sun/print/RasterPrinterJob.java index 0f81a4ff13b..dae42e789d9 100644 --- a/jdk/src/share/classes/sun/print/RasterPrinterJob.java +++ b/jdk/src/share/classes/sun/print/RasterPrinterJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -181,8 +181,7 @@ public abstract class RasterPrinterJob extends PrinterJob { * use a particular pipeline. Either the raster * pipeline or the pdl pipeline can be forced. */ - String forceStr = - (String)java.security.AccessController.doPrivileged( + String forceStr = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction(FORCE_PIPE_PROP)); if (forceStr != null) { @@ -193,8 +192,7 @@ public abstract class RasterPrinterJob extends PrinterJob { } } - String shapeTextStr = - (String)java.security.AccessController.doPrivileged( + String shapeTextStr =java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction(SHAPE_TEXT_PROP)); if (shapeTextStr != null) { @@ -512,12 +510,10 @@ public abstract class RasterPrinterJob extends PrinterJob { } else { // Check the list of services. This service may have been // deleted already - PrinterState prnState = (PrinterState)service.getAttribute( - PrinterState.class); + PrinterState prnState = service.getAttribute(PrinterState.class); if (prnState == PrinterState.STOPPED) { PrinterStateReasons prnStateReasons = - (PrinterStateReasons)service.getAttribute( - PrinterStateReasons.class); + service.getAttribute(PrinterStateReasons.class); if ((prnStateReasons != null) && (prnStateReasons.containsKey(PrinterStateReason.SHUTDOWN))) { @@ -1353,12 +1349,10 @@ public abstract class RasterPrinterJob extends PrinterJob { // Check the list of services. This service may have been // deleted already - PrinterState prnState = (PrinterState)psvc.getAttribute( - PrinterState.class); + PrinterState prnState = psvc.getAttribute(PrinterState.class); if (prnState == PrinterState.STOPPED) { PrinterStateReasons prnStateReasons = - (PrinterStateReasons)psvc.getAttribute( - PrinterStateReasons.class); + psvc.getAttribute(PrinterStateReasons.class); if ((prnStateReasons != null) && (prnStateReasons.containsKey(PrinterStateReason.SHUTDOWN))) { @@ -1366,8 +1360,7 @@ public abstract class RasterPrinterJob extends PrinterJob { } } - if ((PrinterIsAcceptingJobs)(psvc.getAttribute( - PrinterIsAcceptingJobs.class)) == + if ((psvc.getAttribute(PrinterIsAcceptingJobs.class)) == PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS) { throw new PrinterException("Printer is not accepting job."); } @@ -2035,7 +2028,7 @@ public abstract class RasterPrinterJob extends PrinterJob { * fact that we can only create 24 bit per pixel 3 byte BGR * BufferedImages. FIX. */ - int bandHeight = (int)(MAX_BAND_SIZE / bandWidth / 3); + int bandHeight = (MAX_BAND_SIZE / bandWidth / 3); int deviceLeft = (int)Math.rint(paper.getImageableX() * xScale); int deviceTop = (int)Math.rint(paper.getImageableY() * yScale); diff --git a/jdk/src/share/classes/sun/rmi/server/Activation.java b/jdk/src/share/classes/sun/rmi/server/Activation.java index 3098bb0562c..1cd509f2c0e 100644 --- a/jdk/src/share/classes/sun/rmi/server/Activation.java +++ b/jdk/src/share/classes/sun/rmi/server/Activation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -299,7 +299,7 @@ public class Activation implements Serializable { private static final String NAME = ActivationSystem.class.getName(); private static final long serialVersionUID = 4877330021609408794L; - private final ActivationSystem systemStub; + private ActivationSystem systemStub = null; SystemRegistryImpl(int port, RMIClientSocketFactory csf, @@ -308,7 +308,39 @@ public class Activation implements Serializable { throws RemoteException { super(port, csf, ssf); - this.systemStub = systemStub; + assert systemStub != null; + synchronized (this) { + this.systemStub = systemStub; + notifyAll(); + } + } + + /** + * Waits for systemStub to be initialized and returns its + * initialized value. Any remote call that uses systemStub must + * call this method to get it instead of using direct field + * access. This is necessary because the super() call in the + * constructor exports this object before systemStub is initialized + * (see JDK-8023541), allowing remote calls to come in during this + * time. We can't use checkShutdown() like other nested classes + * because this is a static class. + */ + private synchronized ActivationSystem getSystemStub() { + boolean interrupted = false; + + while (systemStub == null) { + try { + wait(); + } catch (InterruptedException ie) { + interrupted = true; + } + } + + if (interrupted) { + Thread.currentThread().interrupt(); + } + + return systemStub; } /** @@ -321,7 +353,7 @@ public class Activation implements Serializable { throws RemoteException, NotBoundException { if (name.equals(NAME)) { - return systemStub; + return getSystemStub(); } else { return super.lookup(name); } diff --git a/jdk/src/share/classes/sun/security/util/DerValue.java b/jdk/src/share/classes/sun/security/util/DerValue.java index beb51c19ae3..abb45cc6558 100644 --- a/jdk/src/share/classes/sun/security/util/DerValue.java +++ b/jdk/src/share/classes/sun/security/util/DerValue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -745,19 +745,6 @@ public class DerValue { return buffer.getGeneralizedTime(data.available()); } - /** - * Returns true iff the other object is a DER value which - * is bitwise equal to this one. - * - * @param other the object being compared with this one - */ - public boolean equals(Object other) { - if (other instanceof DerValue) - return equals((DerValue)other); - else - return false; - } - /** * Bitwise equality comparison. DER encoded values have a single * encoding, so that bitwise equality of the encoded values is an @@ -765,10 +752,15 @@ public class DerValue { * * @param other the object being compared with this one */ - public boolean equals(DerValue other) { - if (this == other) { + @Override + public boolean equals(Object o) { + if (this == o) { return true; } + if (!(o instanceof DerValue)) { + return false; + } + DerValue other = (DerValue) o; if (tag != other.tag) { return false; } @@ -801,6 +793,7 @@ public class DerValue { * * @return printable representation of the value */ + @Override public String toString() { try { @@ -928,6 +921,7 @@ public class DerValue { * * @return a hashcode for this DerValue. */ + @Override public int hashCode() { return toString().hashCode(); } diff --git a/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java b/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java index 355d3ca89db..fb7c9d100b2 100644 --- a/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java +++ b/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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.beans.PropertyChangeListener; /** * Data model for a type-face selection combo-box. */ +@SuppressWarnings("serial") // JDK-implementation class public abstract class AbstractFilterComboBoxModel extends AbstractListModel implements ComboBoxModel, PropertyChangeListener { diff --git a/jdk/src/share/classes/sun/swing/BakedArrayList.java b/jdk/src/share/classes/sun/swing/BakedArrayList.java index f689104b716..8f9377b81fe 100644 --- a/jdk/src/share/classes/sun/swing/BakedArrayList.java +++ b/jdk/src/share/classes/sun/swing/BakedArrayList.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -43,7 +43,8 @@ import java.util.*; * * @author Scott Violet */ -public class BakedArrayList extends ArrayList { +@SuppressWarnings("serial") // JDK-implementation class +public class BakedArrayList extends ArrayList { /** * The cached hashCode. */ @@ -53,7 +54,7 @@ public class BakedArrayList extends ArrayList { super(size); } - public BakedArrayList(java.util.List data) { + public BakedArrayList(java.util.List data) { this(data.size()); for (int counter = 0, max = data.size(); counter < max; counter++){ add(data.get(counter)); diff --git a/jdk/src/share/classes/sun/swing/FilePane.java b/jdk/src/share/classes/sun/swing/FilePane.java index 44aedab3d28..763c027a2ab 100644 --- a/jdk/src/share/classes/sun/swing/FilePane.java +++ b/jdk/src/share/classes/sun/swing/FilePane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -58,6 +58,7 @@ import sun.awt.shell.*; * * @author Leif Samuelsson */ +@SuppressWarnings("serial") // JDK-implementation class public class FilePane extends JPanel implements PropertyChangeListener { // Constants for actions. These are used for the actions' ACTION_COMMAND_KEY // and as keys in the action maps for FilePane and the corresponding UI classes @@ -239,7 +240,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { } } - private void repaintListSelection(JList list) { + private void repaintListSelection(JList list) { int[] indices = list.getSelectedIndices(); for (int i : indices) { Rectangle bounds = list.getCellBounds(i, i); @@ -271,7 +272,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { private boolean fullRowSelection = false; private ListSelectionModel listSelectionModel; - private JList list; + private JList list; private JTable detailsTable; private static final int COLUMN_FILENAME = 0; @@ -331,7 +332,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { createdViewPanel = createList(); } - list = (JList) findChildComponent(createdViewPanel, JList.class); + list = findChildComponent(createdViewPanel, JList.class); if (listSelectionModel == null) { listSelectionModel = list.getSelectionModel(); if (detailsTable != null) { @@ -352,7 +353,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { createdViewPanel = createDetailsView(); } - detailsTable = (JTable) findChildComponent(createdViewPanel, JTable.class); + detailsTable = findChildComponent(createdViewPanel, JTable.class); detailsTable.setRowHeight(Math.max(detailsTable.getFont().getSize() + 4, 16 + 1)); if (listSelectionModel != null) { detailsTable.setSelectionModel(listSelectionModel); @@ -391,6 +392,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { firePropertyChange("viewType", oldValue, viewType); } + @SuppressWarnings("serial") // JDK-implementation class class ViewTypeAction extends AbstractAction { private int viewType; @@ -470,6 +472,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { */ public Action[] getActions() { if (actions == null) { + @SuppressWarnings("serial") // JDK-implementation class class FilePaneAction extends AbstractAction { FilePaneAction(String name) { this(name, name); @@ -566,7 +569,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { } - private void updateListRowCount(JList list) { + private void updateListRowCount(JList list) { if (smallIconsView) { list.setVisibleRowCount(getModel().getSize() / 3); } else { @@ -577,9 +580,11 @@ public class FilePane extends JPanel implements PropertyChangeListener { public JPanel createList() { JPanel p = new JPanel(new BorderLayout()); final JFileChooser fileChooser = getFileChooser(); + + @SuppressWarnings("serial") // anonymous class final JList list = new JList() { public int getNextMatch(String prefix, int startIndex, Position.Bias bias) { - ListModel model = getModel(); + ListModel model = getModel(); int max = model.getSize(); if (prefix == null || startIndex < 0 || startIndex >= max) { throw new IllegalArgumentException(); @@ -651,6 +656,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { /** * This model allows for sorting JList */ + @SuppressWarnings("serial") // JDK-implementation class private class SortableListModel extends AbstractListModel implements TableModelListener, RowSorterListener { @@ -684,6 +690,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { return detailsTableModel; } + @SuppressWarnings("serial") // JDK-implementation class class DetailsTableModel extends AbstractTableModel implements ListDataListener { JFileChooser chooser; BasicDirectoryModel directoryModel; @@ -911,7 +918,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { public void updateComparators(ShellFolderColumnInfo [] columns) { for (int i = 0; i < columns.length; i++) { - Comparator c = columns[i].getComparator(); + Comparator c = columns[i].getComparator(); if (c != null) { c = new DirectoriesFirstComparatorWrapper(i, c); } @@ -962,12 +969,13 @@ public class FilePane extends JPanel implements PropertyChangeListener { * directory and file to file using the wrapped comparator. */ private class DirectoriesFirstComparatorWrapper implements Comparator { - private Comparator comparator; + private Comparator comparator; private int column; - public DirectoriesFirstComparatorWrapper(int column, Comparator comparator) { + @SuppressWarnings("unchecked") + public DirectoriesFirstComparatorWrapper(int column, Comparator comparator) { this.column = column; - this.comparator = comparator; + this.comparator = (Comparator)comparator; } public int compare(File f1, File f2) { @@ -1003,6 +1011,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { return tableCellEditor; } + @SuppressWarnings("serial") // JDK-implementation class private class DetailsTableCellEditor extends DefaultCellEditor { private final JTextField tf; @@ -1025,7 +1034,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { } } - + @SuppressWarnings("serial") // JDK-implementation class class DetailsTableCellRenderer extends DefaultTableCellRenderer { JFileChooser chooser; DateFormat df; @@ -1129,6 +1138,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { JPanel p = new JPanel(new BorderLayout()); + @SuppressWarnings("serial") // anonymous class final JTable detailsTable = new JTable(getDetailsTableModel()) { // Handle Escape key events here protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { @@ -1447,6 +1457,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { protected Action newFolderAction; + @SuppressWarnings("serial") // anonymous class inside public Action getNewFolderAction() { if (!readOnly && newFolderAction == null) { newFolderAction = new AbstractAction(newFolderActionLabelText) { @@ -1479,9 +1490,10 @@ public class FilePane extends JPanel implements PropertyChangeListener { return newFolderAction; } + @SuppressWarnings("serial") // JDK-implementation class protected class FileRenderer extends DefaultListCellRenderer { - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @@ -1957,14 +1969,14 @@ public class FilePane extends JPanel implements PropertyChangeListener { return fileChooserUIAccessor.getDirectory(); } - private Component findChildComponent(Container container, Class cls) { + private T findChildComponent(Container container, Class cls) { int n = container.getComponentCount(); for (int i = 0; i < n; i++) { Component comp = container.getComponent(i); if (cls.isInstance(comp)) { - return comp; + return cls.cast(comp); } else if (comp instanceof Container) { - Component c = findChildComponent((Container)comp, cls); + T c = findChildComponent((Container)comp, cls); if (c != null) { return c; } @@ -2018,7 +2030,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { public Action getApproveSelectionAction(); public Action getChangeToParentDirectoryAction(); public Action getNewFolderAction(); - public MouseListener createDoubleClickListener(JList list); + public MouseListener createDoubleClickListener(JList list); public ListSelectionListener createListSelectionListener(); } } diff --git a/jdk/src/share/classes/sun/swing/ImageIconUIResource.java b/jdk/src/share/classes/sun/swing/ImageIconUIResource.java index 75906cac6a6..6ecf32379eb 100644 --- a/jdk/src/share/classes/sun/swing/ImageIconUIResource.java +++ b/jdk/src/share/classes/sun/swing/ImageIconUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -35,6 +35,7 @@ import java.awt.Image; * @author Shannon Hickey * */ +@SuppressWarnings("serial") // JDK-implementation class public class ImageIconUIResource extends ImageIcon implements UIResource { /** diff --git a/jdk/src/share/classes/sun/swing/JLightweightFrame.java b/jdk/src/share/classes/sun/swing/JLightweightFrame.java index dfba20fae2c..f94cdbc46ca 100644 --- a/jdk/src/share/classes/sun/swing/JLightweightFrame.java +++ b/jdk/src/share/classes/sun/swing/JLightweightFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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,6 +64,7 @@ import sun.security.action.GetPropertyAction; * @author Artem Ananiev * @author Anton Tarasov */ +@SuppressWarnings("serial") // JDK-implementation class public final class JLightweightFrame extends LightweightFrame implements RootPaneContainer { private final JRootPane rootPane = new JRootPane(); @@ -209,6 +210,7 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan } } + @SuppressWarnings("serial") // anonymous class inside private void initInterior() { contentPane = new JPanel() { @Override diff --git a/jdk/src/share/classes/sun/swing/PrintColorUIResource.java b/jdk/src/share/classes/sun/swing/PrintColorUIResource.java index 93d6d18fc7e..9669be85465 100644 --- a/jdk/src/share/classes/sun/swing/PrintColorUIResource.java +++ b/jdk/src/share/classes/sun/swing/PrintColorUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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,6 +36,7 @@ import javax.swing.plaf.ColorUIResource; * @author Shannon Hickey * */ +@SuppressWarnings("serial") // JDK-implementation class public class PrintColorUIResource extends ColorUIResource { /** The color to use during printing */ diff --git a/jdk/src/share/classes/sun/swing/PrintingStatus.java b/jdk/src/share/classes/sun/swing/PrintingStatus.java index d5b7aee900c..0dd01a4593b 100644 --- a/jdk/src/share/classes/sun/swing/PrintingStatus.java +++ b/jdk/src/share/classes/sun/swing/PrintingStatus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -62,6 +62,7 @@ public class PrintingStatus { private final AtomicBoolean isAborted = new AtomicBoolean(false); // the action that will abort printing + @SuppressWarnings("serial") // anonymous class private final Action abortAction = new AbstractAction() { public void actionPerformed(ActionEvent ae) { if (!isAborted.get()) { diff --git a/jdk/src/share/classes/sun/swing/SwingLazyValue.java b/jdk/src/share/classes/sun/swing/SwingLazyValue.java index a9e6f2c1bc8..87205f3398c 100644 --- a/jdk/src/share/classes/sun/swing/SwingLazyValue.java +++ b/jdk/src/share/classes/sun/swing/SwingLazyValue.java @@ -67,13 +67,13 @@ public class SwingLazyValue implements UIDefaults.LazyValue { ReflectUtil.checkPackageAccess(className); Class c = Class.forName(className, true, null); if (methodName != null) { - Class[] types = getClassArray(args); + Class[] types = getClassArray(args); Method m = c.getMethod(methodName, types); makeAccessible(m); return m.invoke(c, args); } else { - Class[] types = getClassArray(args); - Constructor constructor = c.getConstructor(types); + Class[] types = getClassArray(args); + Constructor constructor = c.getConstructor(types); makeAccessible(constructor); return constructor.newInstance(args); } @@ -96,10 +96,10 @@ public class SwingLazyValue implements UIDefaults.LazyValue { }); } - private Class[] getClassArray(Object[] args) { - Class[] types = null; + private Class[] getClassArray(Object[] args) { + Class[] types = null; if (args!=null) { - types = new Class[args.length]; + types = new Class[args.length]; for (int i = 0; i< args.length; i++) { /* PENDING(ges): At present only the primitive types used are handled correctly; this should eventually diff --git a/jdk/src/share/classes/sun/swing/SwingUtilities2.java b/jdk/src/share/classes/sun/swing/SwingUtilities2.java index 9e410ed3977..75a0a4f9b72 100644 --- a/jdk/src/share/classes/sun/swing/SwingUtilities2.java +++ b/jdk/src/share/classes/sun/swing/SwingUtilities2.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -127,7 +127,7 @@ public class SwingUtilities2 { */ public static class AATextInfo { - private static AATextInfo getAATextInfoFromMap(Map hints) { + private static AATextInfo getAATextInfoFromMap(Map hints) { Object aaHint = hints.get(KEY_TEXT_ANTIALIASING); Object contHint = hints.get(KEY_TEXT_LCD_CONTRAST); @@ -141,12 +141,13 @@ public class SwingUtilities2 { } } + @SuppressWarnings("unchecked") public static AATextInfo getAATextInfo(boolean lafCondition) { SunToolkit.setAAFontSettingsCondition(lafCondition); Toolkit tk = Toolkit.getDefaultToolkit(); Object map = tk.getDesktopProperty(SunToolkit.DESKTOPFONTHINTS); if (map instanceof Map) { - return getAATextInfoFromMap((Map)map); + return getAATextInfoFromMap((Map)map); } else { return null; } @@ -663,7 +664,7 @@ public class SwingUtilities2 { * Otherwise, this method returns -1. * This is used to make WindowsL&F JFileChooser act like native dialogs. */ - public static int loc2IndexFileList(JList list, Point point) { + public static int loc2IndexFileList(JList list, Point point) { int index = list.locationToIndex(point); if (index != -1) { Object bySize = list.getClientProperty("List.isFileList"); @@ -680,11 +681,10 @@ public class SwingUtilities2 { * Returns true if the given point is within the actual bounds of the * JList item at index (not just inside the cell). */ - private static boolean pointIsInActualBounds(JList list, int index, + private static boolean pointIsInActualBounds(JList list, int index, Point point) { - ListCellRenderer renderer = list.getCellRenderer(); - ListModel dataModel = list.getModel(); - Object value = dataModel.getElementAt(index); + ListCellRenderer renderer = list.getCellRenderer(); + T value = list.getModel().getElementAt(index); Component item = renderer.getListCellRendererComponent(list, value, index, false, false); Dimension itemSize = item.getPreferredSize(); diff --git a/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java b/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java index 8b033ca3e7f..994f70029ec 100644 --- a/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java +++ b/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -47,6 +47,7 @@ import sun.awt.OSInfo; * * @author Leif Samuelsson */ +@SuppressWarnings("serial") // JDK-implementation class public class WindowsPlacesBar extends JToolBar implements ActionListener, PropertyChangeListener { JFileChooser fc; diff --git a/jdk/src/share/classes/sun/swing/icon/SortArrowIcon.java b/jdk/src/share/classes/sun/swing/icon/SortArrowIcon.java index 7aac1159910..54a0238640c 100644 --- a/jdk/src/share/classes/sun/swing/icon/SortArrowIcon.java +++ b/jdk/src/share/classes/sun/swing/icon/SortArrowIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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,6 +36,7 @@ import javax.swing.plaf.UIResource; * Sorting icon. * */ +@SuppressWarnings("serial") // JDK-implementation class public class SortArrowIcon implements Icon, UIResource, Serializable { // Height of the arrow, the width is ARROW_HEIGHT private static final int ARROW_HEIGHT = 5; diff --git a/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java b/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java index 3da946bcb2f..1297bcd26a5 100644 --- a/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java +++ b/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -61,7 +61,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { /** * User specific data. */ - private Map data; + private Map data; /** * Font to use if there is no matching StateInfo, or the StateInfo doesn't @@ -106,7 +106,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } } if (style.data != null) { - data = new HashMap(); + data = new HashMap<>(); data.putAll(style.data); } font = style.font; @@ -124,7 +124,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { * @param data Style specific data. */ public DefaultSynthStyle(Insets insets, boolean opaque, - StateInfo[] states, Map data) { + StateInfo[] states, Map data) { this.insets = insets; this.opaque = opaque; this.states = states; @@ -366,7 +366,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { * * @param data Style specific values */ - public void setData(Map data) { + public void setData(Map data) { this.data = data; } @@ -375,7 +375,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { * * @return Style specific data. */ - public Map getData() { + public Map getData() { return data; } @@ -402,7 +402,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } - private Object getKeyFromData(Map stateData, Object key) { + private Object getKeyFromData(Map stateData, Object key) { Object value = null; if (stateData != null) { @@ -462,7 +462,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } } if (data != null) { - style.data = new HashMap(); + style.data = new HashMap<>(); style.data.putAll(data); } return style; @@ -570,7 +570,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } if (data != null) { if (style.data == null) { - style.data = new HashMap(); + style.data = new HashMap<>(); } style.data.putAll(data); } @@ -708,7 +708,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { * a component. */ public static class StateInfo { - private Map data; + private Map data; private Font font; private Color[] colors; private int state; @@ -746,7 +746,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { this.font = info.font; if(info.data != null) { if(data == null) { - data = new HashMap(); + data = new HashMap<>(); } data.putAll(info.data); } @@ -756,11 +756,11 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } } - public Map getData() { + public Map getData() { return data; } - public void setData(Map data) { + public void setData(Map data) { this.data = data; } @@ -836,7 +836,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } if(data != null) { if(info.data == null) { - info.data = new HashMap(); + info.data = new HashMap<>(); } info.data.putAll(data); } diff --git a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java index 085a9999dc3..1f93fa7fc24 100644 --- a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java +++ b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -303,6 +303,7 @@ public abstract class SynthFileChooserUI extends BasicFileChooserUI implements /** * Responds to a File Name completion request (e.g. Tab) */ + @SuppressWarnings("serial") // JDK-implementation class private class FileNameCompletionAction extends AbstractAction { protected FileNameCompletionAction() { super("fileNameCompletion"); @@ -538,6 +539,7 @@ public abstract class SynthFileChooserUI extends BasicFileChooserUI implements public void clearIconCache() { } // Copied as SynthBorder is package private in synth + @SuppressWarnings("serial") // JDK-implementation clas private class UIBorder extends AbstractBorder implements UIResource { private Insets _insets; UIBorder(Insets insets) { diff --git a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java index bd7c9b4371e..f0d0ac31c14 100644 --- a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java +++ b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -175,7 +175,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { return SynthFileChooserUIImpl.this.getNewFolderAction(); } - public MouseListener createDoubleClickListener(JList list) { + public MouseListener createDoubleClickListener(JList list) { return SynthFileChooserUIImpl.this.createDoubleClickListener(getFileChooser(), list); } @@ -190,6 +190,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { readOnly = UIManager.getBoolean("FileChooser.readOnly"); } + @SuppressWarnings("serial") // anonymous classes inside public void installComponents(JFileChooser fc) { super.installComponents(fc); @@ -562,7 +563,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { if (currentDirectory != null) { JComponent cb = getDirectoryComboBox(); if (cb instanceof JComboBox) { - ComboBoxModel model = ((JComboBox)cb).getModel(); + ComboBoxModel model = ((JComboBox)cb).getModel(); if (model instanceof DirectoryComboBoxModel) { ((DirectoryComboBoxModel)model).addItem(currentDirectory); } @@ -734,6 +735,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { /** * Data model for a type-face selection combo-box. */ + @SuppressWarnings("serial") // JDK-implementation class protected class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel { Vector directories = new Vector(); int[] depths = null; @@ -863,6 +865,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { /** * Acts when DirectoryComboBox has changed the selected item. */ + @SuppressWarnings("serial") // JDK-implementation class protected class DirectoryComboBoxAction extends AbstractAction { protected DirectoryComboBoxAction() { super("DirectoryComboBoxAction"); @@ -923,6 +926,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { /** * Data model for a type-face selection combo-box. */ + @SuppressWarnings("serial") // JDK-implementation class protected class FilterComboBoxModel extends AbstractFilterComboBoxModel { protected JFileChooser getFileChooser() { return SynthFileChooserUIImpl.this.getFileChooser(); @@ -1012,6 +1016,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { } } + @SuppressWarnings("serial") // JDK-implementation class private class AlignedLabel extends JLabel { private AlignedLabel[] group; private int maxWidth = 0; diff --git a/jdk/src/share/classes/sun/swing/plaf/windows/ClassicSortArrowIcon.java b/jdk/src/share/classes/sun/swing/plaf/windows/ClassicSortArrowIcon.java index 3931ef8135c..6430a71f06e 100644 --- a/jdk/src/share/classes/sun/swing/plaf/windows/ClassicSortArrowIcon.java +++ b/jdk/src/share/classes/sun/swing/plaf/windows/ClassicSortArrowIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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,6 +36,7 @@ import javax.swing.plaf.UIResource; * Classic sort icons. * */ +@SuppressWarnings("serial") // JDK-implementation class public class ClassicSortArrowIcon implements Icon, UIResource, Serializable{ private static final int X_OFFSET = 9; private boolean ascending; diff --git a/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java b/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java index 68aada7d758..8aa945d166e 100644 --- a/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java +++ b/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -39,6 +39,7 @@ import javax.swing.plaf.UIResource; import javax.swing.border.Border; import javax.swing.table.*; +@SuppressWarnings("serial") // JDK-implementation class public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer implements UIResource { private boolean horizontalTextPositionSet; @@ -187,6 +188,7 @@ public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer return new Point(x, y); } + @SuppressWarnings("serial") // JDK-implementation class private class EmptyIcon implements Icon, Serializable { int width = 0; int height = 0; diff --git a/jdk/src/share/classes/sun/swing/text/TextComponentPrintable.java b/jdk/src/share/classes/sun/swing/text/TextComponentPrintable.java index bf4d3f59b31..63d3c5890dd 100644 --- a/jdk/src/share/classes/sun/swing/text/TextComponentPrintable.java +++ b/jdk/src/share/classes/sun/swing/text/TextComponentPrintable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -324,6 +324,7 @@ public class TextComponentPrintable implements CountingPrintable { } } } + @SuppressWarnings("serial") // anonymous class inside private JTextComponent createPrintShellOnEDT(final JTextComponent textComponent) { assert SwingUtilities.isEventDispatchThread(); diff --git a/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider b/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider index debc75277f3..4cb7f1d2c73 100644 --- a/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider +++ b/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider @@ -31,3 +31,4 @@ #[windows]sun.tools.attach.WindowsAttachProvider #[linux]sun.tools.attach.LinuxAttachProvider #[macosx]sun.tools.attach.BsdAttachProvider +#[aix]sun.tools.attach.AixAttachProvider diff --git a/jdk/src/share/classes/sun/tools/javac/SourceClass.java b/jdk/src/share/classes/sun/tools/javac/SourceClass.java index 0a1741d7b31..d1744baf3c6 100644 --- a/jdk/src/share/classes/sun/tools/javac/SourceClass.java +++ b/jdk/src/share/classes/sun/tools/javac/SourceClass.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, 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 @@ -154,7 +154,7 @@ class SourceClass extends ClassDefinition { // maybe define an uplevel "A.this" current instance field if (!isTopLevel() && !isLocal()) { - LocalMember outerArg = ((SourceClass)outerClass).getThisArgument(); + LocalMember outerArg = outerClass.getThisArgument(); UplevelReference r = getReference(outerArg); setOuterMember(r.getLocalField(env)); } diff --git a/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java b/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java index 301eae167c9..05c827608d0 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java +++ b/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -711,7 +711,7 @@ public class ProxyClient implements JConsoleContext { memoryPoolProxies = new ArrayList(); Iterator iterator = mbeans.iterator(); while (iterator.hasNext()) { - ObjectName objName = (ObjectName) iterator.next(); + ObjectName objName = iterator.next(); MemoryPoolProxy p = new MemoryPoolProxy(this, objName); memoryPoolProxies.add(p); } @@ -737,7 +737,7 @@ public class ProxyClient implements JConsoleContext { garbageCollectorMBeans = new ArrayList(); Iterator iterator = mbeans.iterator(); while (iterator.hasNext()) { - ObjectName on = (ObjectName) iterator.next(); + ObjectName on = iterator.next(); String name = GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE + ",name=" + on.getKeyProperty("name"); diff --git a/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java b/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java index b43a7c57edd..a38b9d68408 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -311,7 +311,7 @@ class ThreadTab extends Tab implements ActionListener, DocumentListener, ListSel ThreadJList list = (ThreadJList)ev.getSource(); final JTextArea textArea = list.textArea; - Long selected = (Long)list.getSelectedValue(); + Long selected = list.getSelectedValue(); if (selected == null) { if (lastSelected != -1) { selected = lastSelected; diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java index e5f0b11df14..456ffce1408 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -389,7 +389,7 @@ public class XOpenTypeViewer extends JPanel implements ActionListener { Iterator it = keys.iterator(); Object[] rowData = new Object[2]; while (it.hasNext()) { - String key = (String) it.next(); + String key = it.next(); Object val = data.get(key); rowData[0] = formatKey(key); if (val == null) { diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java index e6c2d17f411..10ec71e823b 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -76,7 +76,7 @@ public class XPlottingViewer extends PlotterPanel implements ActionListener { //plotterCache.clear(); it = timerCache.keySet().iterator(); while(it.hasNext()) { - String key = (String) it.next(); + String key = it.next(); if(key.startsWith(String.valueOf(tab.hashCode()))) { Timer t = timerCache.get(key); t.cancel(); diff --git a/jdk/src/share/classes/sun/tools/tree/ConvertExpression.java b/jdk/src/share/classes/sun/tools/tree/ConvertExpression.java index 760d78b4536..13fdb2f89bb 100644 --- a/jdk/src/share/classes/sun/tools/tree/ConvertExpression.java +++ b/jdk/src/share/classes/sun/tools/tree/ConvertExpression.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, 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 @@ -65,7 +65,7 @@ class ConvertExpression extends UnaryExpression { case TC_BYTE: return new ByteExpression(right.where, (byte)value); case TC_CHAR: return new CharExpression(right.where, (char)value); case TC_SHORT: return new ShortExpression(right.where, (short)value); - case TC_INT: return new IntExpression(right.where, (int)value); + case TC_INT: return new IntExpression(right.where, value); case TC_LONG: return new LongExpression(right.where, (long)value); case TC_FLOAT: return new FloatExpression(right.where, (float)value); case TC_DOUBLE: return new DoubleExpression(right.where, (double)value); diff --git a/jdk/src/share/classes/sun/tools/tree/FinallyStatement.java b/jdk/src/share/classes/sun/tools/tree/FinallyStatement.java index d0b688fdcd5..aa85218e83f 100644 --- a/jdk/src/share/classes/sun/tools/tree/FinallyStatement.java +++ b/jdk/src/share/classes/sun/tools/tree/FinallyStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, 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 @@ -281,7 +281,7 @@ class FinallyStatement extends Statement { returnType, idFinallyReturnValue); ctx.declare(env, localfield); - env.debugOutput("Assigning return slot to " + localfield.number); + Environment.debugOutput("Assigning return slot to " + localfield.number); } // allocate space for the exception and return address diff --git a/jdk/src/share/classes/sun/tools/tree/SynchronizedStatement.java b/jdk/src/share/classes/sun/tools/tree/SynchronizedStatement.java index 58db7462718..2c2daa85f41 100644 --- a/jdk/src/share/classes/sun/tools/tree/SynchronizedStatement.java +++ b/jdk/src/share/classes/sun/tools/tree/SynchronizedStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, 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 @@ -120,7 +120,7 @@ class SynchronizedStatement extends Statement { LocalMember localfield = new LocalMember(0, clazz, 0, returnType, idFinallyReturnValue); ctx.declare(env, localfield); - env.debugOutput("Assigning return slot to " + localfield.number); + Environment.debugOutput("Assigning return slot to " + localfield.number); } LocalMember f1 = new LocalMember(where, clazz, 0, Type.tObject, null); diff --git a/jdk/src/share/classes/sun/tools/util/CommandLine.java b/jdk/src/share/classes/sun/tools/util/CommandLine.java index 4dd3b4c302a..4bf9582583c 100644 --- a/jdk/src/share/classes/sun/tools/util/CommandLine.java +++ b/jdk/src/share/classes/sun/tools/util/CommandLine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -82,7 +82,7 @@ public class CommandLine { st.commentChar('#'); st.quoteChar('"'); st.quoteChar('\''); - while (st.nextToken() != st.TT_EOF) { + while (st.nextToken() != StreamTokenizer.TT_EOF) { args.add(st.sval); } r.close(); diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java index f275a716b79..2aaa1e76dc4 100644 --- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java +++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma-Ata Time", "ALMT", "Alma-Ata Summer Time", "ALMST", "Alma-Ata Time", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr Time", "ANAT", "Anadyr Summer Time", "ANAST", "Anadyr Time", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java b/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java index ef7dec8570f..4d25bce3586 100644 --- a/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java +++ b/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma Ata Zeit", "ALMT", "Alma-Ata Sommerzeit", "ALMST", "Alma Ata Zeit", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr Zeit", "ANAT", "Anadyr Sommerzeit", "ANAST", "Anadyr Zeit", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java b/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java index aa1a8903817..07d77325a47 100644 --- a/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java +++ b/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Hora de Alma-Ata", "ALMT", "Hora de verano de Alma-Ata", "ALMST", "Hora de Alma-Ata", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Hora de Anadyr", "ANAT", "Hora de verano de Anadyr", "ANAST", "Hora de Anadyr", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java b/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java index a28983b85db..d15b9056057 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java +++ b/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Heure d'Alma-Ata", "ALMT", "Heure d'\u00e9t\u00e9 d'Alma-Ata", "ALMST", "Heure d'Alma-Ata", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Heure d'Anadyr", "ANAT", "Heure d'\u00e9t\u00e9 d'Anadyr", "ANAST", "Heure d'Anadyr", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java b/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java index 4b2209d8e27..a07be9af4a6 100644 --- a/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java +++ b/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Ora di Alma-Ata", "ALMT", "Ora estiva di Alma-Ata", "ALMST", "Ora di Alma-Ata", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Ora di Anadyr", "ANAT", "Ora estiva di Anadyr", "ANAST", "Ora di Anadyr", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java b/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java index 4b655c0b0d8..5a0f5e7012a 100644 --- a/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java +++ b/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"\u30a2\u30eb\u30de\u30a2\u30bf\u6642\u9593", "ALMT", "\u30a2\u30eb\u30de\u30a2\u30bf\u590f\u6642\u9593", "ALMST", "\u30A2\u30EB\u30DE\u30A2\u30BF\u6642\u9593", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u6642\u9593", "ANAT", "\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u590f\u6642\u9593", "ANAST", "\u30A2\u30CA\u30C7\u30A3\u30EA\u6642\u9593", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java b/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java index b32bf1334ca..4d9f395fd55 100644 --- a/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java +++ b/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"\uc54c\ub9c8\uc544\ud0c0 \uc2dc\uac04", "ALMT", "\uc54c\ub9c8\uc544\ud0c0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ALMST", "\uC54C\uB9C8\uC544\uD0C0 \uD45C\uC900\uC2DC", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\uc544\ub098\ub514\ub974 \uc2dc\uac04", "ANAT", "\uc544\ub098\ub514\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ANAST", "\uC544\uB098\uB514\uB9AC \uD45C\uC900\uC2DC", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties index 3a43b04dcc9..f39dfb66568 100644 --- a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties +++ b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties @@ -38,6 +38,8 @@ # language names # key is ISO 639 language code +nb=bokm\u00e5l +nn=nynorsk no=norsk # country names diff --git a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties index 3a43b04dcc9..e56e415a512 100644 --- a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties +++ b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties @@ -38,12 +38,14 @@ # language names # key is ISO 639 language code +nb=bokm\u00e5l +nn=nynorsk no=norsk # country names # key is ISO 3166 country code -NO=Norge +NO=Noreg # variant names diff --git a/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java b/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java index 265fba0b813..07b13ae48ec 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java +++ b/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT", "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST", "Hor\u00E1rio de Alma-Ata", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT", "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST", "Hor\u00E1rio de Anadyr", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java b/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java index c0ec6e9e1c7..5dfb716c627 100644 --- a/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java +++ b/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma-Ata, normaltid", "ALMT", "Alma-Ata, sommartid", "ALMST", "Alma-Ata-tid", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr, normaltid", "ANAT", "Anadyr, sommartid", "ANAST", "Anadyr-tid", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java index 7f79e9612bd..62a946ba437 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java +++ b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma-Ata \u65f6\u95f4", "ALMT", "Alma-Ata \u590f\u4ee4\u65f6", "ALMST", "Alma-Ata \u65F6\u95F4", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u65f6\u95f4", "ANAT", "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u65f6", "ANAST", "\u963F\u90A3\u5E95\u6CB3\u65F6\u95F4", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java index 8cccc2f01ba..f91da7afb3d 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java +++ b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma-Ata \u6642\u9593", "ALMT", "Alma-Ata \u590f\u4ee4\u6642\u9593", "ALMST", "\u963F\u62C9\u6728\u5716\u6642\u9593", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u6642\u9593", "ANAT", "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u6642\u9593", "ANAST", "\u963F\u90A3\u5E95\u6CB3\u6642\u9593", "ANAT"}}, diff --git a/jdk/src/share/instrument/Reentrancy.c b/jdk/src/share/instrument/Reentrancy.c index 58cbfdd1b53..0b526c10a45 100644 --- a/jdk/src/share/instrument/Reentrancy.c +++ b/jdk/src/share/instrument/Reentrancy.c @@ -130,6 +130,7 @@ tryToAcquireReentrancyToken( jvmtiEnv * jvmtienv, error = confirmingTLSSet ( jvmtienv, thread, JPLIS_CURRENTLY_INSIDE_TOKEN); + check_phase_ret_false(error); jplis_assert(error == JVMTI_ERROR_NONE); if ( error != JVMTI_ERROR_NONE ) { result = JNI_FALSE; @@ -158,6 +159,7 @@ releaseReentrancyToken( jvmtiEnv * jvmtienv, error = confirmingTLSSet( jvmtienv, thread, JPLIS_CURRENTLY_OUTSIDE_TOKEN); + check_phase_ret(error); jplis_assert(error == JVMTI_ERROR_NONE); } diff --git a/jdk/src/share/lib/security/java.security-aix b/jdk/src/share/lib/security/java.security-aix new file mode 100644 index 00000000000..fd49537f609 --- /dev/null +++ b/jdk/src/share/lib/security/java.security-aix @@ -0,0 +1,497 @@ +# +# This is the "master security properties file". +# +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + +# In this file, various security properties are set for use by +# java.security classes. This is where users can statically register +# Cryptography Package Providers ("providers" for short). The term +# "provider" refers to a package or set of packages that supply a +# concrete implementation of a subset of the cryptography aspects of +# the Java Security API. A provider may, for example, implement one or +# more digital signature algorithms or message digest algorithms. +# +# Each provider must implement a subclass of the Provider class. +# To register a provider in this master security properties file, +# specify the Provider subclass name and priority in the format +# +# security.provider.= +# +# This declares a provider, and specifies its preference +# order n. The preference order is the order in which providers are +# searched for requested algorithms (when no specific provider is +# requested). The order is 1-based; 1 is the most preferred, followed +# by 2, and so on. +# +# must specify the subclass of the Provider class whose +# constructor sets the values of various properties that are required +# for the Java Security API to look up the algorithms or other +# facilities implemented by the provider. +# +# There must be at least one provider specification in java.security. +# There is a default provider that comes standard with the JDK. It +# is called the "SUN" provider, and its Provider subclass +# named Sun appears in the sun.security.provider package. Thus, the +# "SUN" provider is registered via the following: +# +# security.provider.1=sun.security.provider.Sun +# +# (The number 1 is used for the default provider.) +# +# Note: Providers can be dynamically registered instead by calls to +# either the addProvider or insertProviderAt method in the Security +# class. + +# +# List of providers and their preference orders (see above): +# +security.provider.1=sun.security.provider.Sun +security.provider.2=sun.security.rsa.SunRsaSign +security.provider.3=sun.security.ec.SunEC +security.provider.4=com.sun.net.ssl.internal.ssl.Provider +security.provider.5=com.sun.crypto.provider.SunJCE +security.provider.6=sun.security.jgss.SunProvider +security.provider.7=com.sun.security.sasl.Provider +security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI +security.provider.9=sun.security.smartcardio.SunPCSC + +# +# Sun Provider SecureRandom seed source. +# +# Select the primary source of seed data for the "SHA1PRNG" and +# "NativePRNG" SecureRandom implementations in the "Sun" provider. +# (Other SecureRandom implementations might also use this property.) +# +# On Unix-like systems (for example, Solaris/Linux/MacOS), the +# "NativePRNG" and "SHA1PRNG" implementations obtains seed data from +# special device files such as file:/dev/random. +# +# On Windows systems, specifying the URLs "file:/dev/random" or +# "file:/dev/urandom" will enable the native Microsoft CryptoAPI seeding +# mechanism for SHA1PRNG. +# +# By default, an attempt is made to use the entropy gathering device +# specified by the "securerandom.source" Security property. If an +# exception occurs while accessing the specified URL: +# +# SHA1PRNG: +# the traditional system/thread activity algorithm will be used. +# +# NativePRNG: +# a default value of /dev/random will be used. If neither +# are available, the implementation will be disabled. +# "file" is the only currently supported protocol type. +# +# The entropy gathering device can also be specified with the System +# property "java.security.egd". For example: +# +# % java -Djava.security.egd=file:/dev/random MainClass +# +# Specifying this System property will override the +# "securerandom.source" Security property. +# +# In addition, if "file:/dev/random" or "file:/dev/urandom" is +# specified, the "NativePRNG" implementation will be more preferred than +# SHA1PRNG in the Sun provider. +# +securerandom.source=file:/dev/random + +# +# A list of known strong SecureRandom implementations. +# +# To help guide applications in selecting a suitable strong +# java.security.SecureRandom implementation, Java distributions should +# indicate a list of known strong implementations using the property. +# +# This is a comma-separated list of algorithm and/or algorithm:provider +# entries. +# +securerandom.strongAlgorithms=NativePRNGBlocking:SUN + +# +# Class to instantiate as the javax.security.auth.login.Configuration +# provider. +# +login.configuration.provider=sun.security.provider.ConfigFile + +# +# Default login configuration file +# +#login.config.url.1=file:${user.home}/.java.login.config + +# +# Class to instantiate as the system Policy. This is the name of the class +# that will be used as the Policy object. +# +policy.provider=sun.security.provider.PolicyFile + +# The default is to have a single system-wide policy file, +# and a policy file in the user's home directory. +policy.url.1=file:${java.home}/lib/security/java.policy +policy.url.2=file:${user.home}/.java.policy + +# whether or not we expand properties in the policy file +# if this is set to false, properties (${...}) will not be expanded in policy +# files. +policy.expandProperties=true + +# whether or not we allow an extra policy to be passed on the command line +# with -Djava.security.policy=somefile. Comment out this line to disable +# this feature. +policy.allowSystemProperty=true + +# whether or not we look into the IdentityScope for trusted Identities +# when encountering a 1.1 signed JAR file. If the identity is found +# and is trusted, we grant it AllPermission. +policy.ignoreIdentityScope=false + +# +# Default keystore type. +# +keystore.type=jks + +# +# List of comma-separated packages that start with or equal this string +# will cause a security exception to be thrown when +# passed to checkPackageAccess unless the +# corresponding RuntimePermission ("accessClassInPackage."+package) has +# been granted. +package.access=sun.,\ + com.sun.xml.internal.,\ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ + com.sun.media.sound.,\ + com.sun.proxy.,\ + com.sun.corba.se.,\ + com.sun.org.apache.bcel.internal.,\ + com.sun.org.apache.regexp.internal.,\ + com.sun.org.apache.xerces.internal.,\ + com.sun.org.apache.xpath.internal.,\ + com.sun.org.apache.xalan.internal.extensions.,\ + com.sun.org.apache.xalan.internal.lib.,\ + com.sun.org.apache.xalan.internal.res.,\ + com.sun.org.apache.xalan.internal.templates.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.apache.xalan.internal.xslt.,\ + com.sun.org.apache.xalan.internal.xsltc.cmdline.,\ + com.sun.org.apache.xalan.internal.xsltc.compiler.,\ + com.sun.org.apache.xalan.internal.xsltc.trax.,\ + com.sun.org.apache.xalan.internal.xsltc.util.,\ + com.sun.org.apache.xml.internal.res.,\ + com.sun.org.apache.xml.internal.security.,\ + com.sun.org.apache.xml.internal.serializer.utils.,\ + com.sun.org.apache.xml.internal.utils.,\ + com.sun.org.glassfish.,\ + com.oracle.xmlns.internal.,\ + com.oracle.webservices.internal.,\ + oracle.jrockit.jfr.,\ + org.jcp.xml.dsig.internal.,\ + jdk.internal.,\ + jdk.nashorn.internal.,\ + jdk.nashorn.tools. + + +# +# List of comma-separated packages that start with or equal this string +# will cause a security exception to be thrown when +# passed to checkPackageDefinition unless the +# corresponding RuntimePermission ("defineClassInPackage."+package) has +# been granted. +# +# by default, none of the class loaders supplied with the JDK call +# checkPackageDefinition. +# +package.definition=sun.,\ + com.sun.xml.internal.,\ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ + com.sun.media.sound.,\ + com.sun.proxy.,\ + com.sun.corba.se.,\ + com.sun.org.apache.bcel.internal.,\ + com.sun.org.apache.regexp.internal.,\ + com.sun.org.apache.xerces.internal.,\ + com.sun.org.apache.xpath.internal.,\ + com.sun.org.apache.xalan.internal.extensions.,\ + com.sun.org.apache.xalan.internal.lib.,\ + com.sun.org.apache.xalan.internal.res.,\ + com.sun.org.apache.xalan.internal.templates.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.apache.xalan.internal.xslt.,\ + com.sun.org.apache.xalan.internal.xsltc.cmdline.,\ + com.sun.org.apache.xalan.internal.xsltc.compiler.,\ + com.sun.org.apache.xalan.internal.xsltc.trax.,\ + com.sun.org.apache.xalan.internal.xsltc.util.,\ + com.sun.org.apache.xml.internal.res.,\ + com.sun.org.apache.xml.internal.security.,\ + com.sun.org.apache.xml.internal.serializer.utils.,\ + com.sun.org.apache.xml.internal.utils.,\ + com.sun.org.glassfish.,\ + com.oracle.xmlns.internal.,\ + com.oracle.webservices.internal.,\ + oracle.jrockit.jfr.,\ + org.jcp.xml.dsig.internal.,\ + jdk.internal.,\ + jdk.nashorn.internal.,\ + jdk.nashorn.tools. + + +# +# Determines whether this properties file can be appended to +# or overridden on the command line via -Djava.security.properties +# +security.overridePropertiesFile=true + +# +# Determines the default key and trust manager factory algorithms for +# the javax.net.ssl package. +# +ssl.KeyManagerFactory.algorithm=SunX509 +ssl.TrustManagerFactory.algorithm=PKIX + +# +# The Java-level namelookup cache policy for successful lookups: +# +# any negative value: caching forever +# any positive value: the number of seconds to cache an address for +# zero: do not cache +# +# default value is forever (FOREVER). For security reasons, this +# caching is made forever when a security manager is set. When a security +# manager is not set, the default behavior in this implementation +# is to cache for 30 seconds. +# +# NOTE: setting this to anything other than the default value can have +# serious security implications. Do not set it unless +# you are sure you are not exposed to DNS spoofing attack. +# +#networkaddress.cache.ttl=-1 + +# The Java-level namelookup cache policy for failed lookups: +# +# any negative value: cache forever +# any positive value: the number of seconds to cache negative lookup results +# zero: do not cache +# +# In some Microsoft Windows networking environments that employ +# the WINS name service in addition to DNS, name service lookups +# that fail may take a noticeably long time to return (approx. 5 seconds). +# For this reason the default caching policy is to maintain these +# results for 10 seconds. +# +# +networkaddress.cache.negative.ttl=10 + +# +# Properties to configure OCSP for certificate revocation checking +# + +# Enable OCSP +# +# By default, OCSP is not used for certificate revocation checking. +# This property enables the use of OCSP when set to the value "true". +# +# NOTE: SocketPermission is required to connect to an OCSP responder. +# +# Example, +# ocsp.enable=true + +# +# Location of the OCSP responder +# +# By default, the location of the OCSP responder is determined implicitly +# from the certificate being validated. This property explicitly specifies +# the location of the OCSP responder. The property is used when the +# Authority Information Access extension (defined in RFC 3280) is absent +# from the certificate or when it requires overriding. +# +# Example, +# ocsp.responderURL=http://ocsp.example.net:80 + +# +# Subject name of the OCSP responder's certificate +# +# By default, the certificate of the OCSP responder is that of the issuer +# of the certificate being validated. This property identifies the certificate +# of the OCSP responder when the default does not apply. Its value is a string +# distinguished name (defined in RFC 2253) which identifies a certificate in +# the set of certificates supplied during cert path validation. In cases where +# the subject name alone is not sufficient to uniquely identify the certificate +# then both the "ocsp.responderCertIssuerName" and +# "ocsp.responderCertSerialNumber" properties must be used instead. When this +# property is set then those two properties are ignored. +# +# Example, +# ocsp.responderCertSubjectName="CN=OCSP Responder, O=XYZ Corp" + +# +# Issuer name of the OCSP responder's certificate +# +# By default, the certificate of the OCSP responder is that of the issuer +# of the certificate being validated. This property identifies the certificate +# of the OCSP responder when the default does not apply. Its value is a string +# distinguished name (defined in RFC 2253) which identifies a certificate in +# the set of certificates supplied during cert path validation. When this +# property is set then the "ocsp.responderCertSerialNumber" property must also +# be set. When the "ocsp.responderCertSubjectName" property is set then this +# property is ignored. +# +# Example, +# ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp" + +# +# Serial number of the OCSP responder's certificate +# +# By default, the certificate of the OCSP responder is that of the issuer +# of the certificate being validated. This property identifies the certificate +# of the OCSP responder when the default does not apply. Its value is a string +# of hexadecimal digits (colon or space separators may be present) which +# identifies a certificate in the set of certificates supplied during cert path +# validation. When this property is set then the "ocsp.responderCertIssuerName" +# property must also be set. When the "ocsp.responderCertSubjectName" property +# is set then this property is ignored. +# +# Example, +# ocsp.responderCertSerialNumber=2A:FF:00 + +# +# Policy for failed Kerberos KDC lookups: +# +# When a KDC is unavailable (network error, service failure, etc), it is +# put inside a blacklist and accessed less often for future requests. The +# value (case-insensitive) for this policy can be: +# +# tryLast +# KDCs in the blacklist are always tried after those not on the list. +# +# tryLess[:max_retries,timeout] +# KDCs in the blacklist are still tried by their order in the configuration, +# but with smaller max_retries and timeout values. max_retries and timeout +# are optional numerical parameters (default 1 and 5000, which means once +# and 5 seconds). Please notes that if any of the values defined here is +# more than what is defined in krb5.conf, it will be ignored. +# +# Whenever a KDC is detected as available, it is removed from the blacklist. +# The blacklist is reset when krb5.conf is reloaded. You can add +# refreshKrb5Config=true to a JAAS configuration file so that krb5.conf is +# reloaded whenever a JAAS authentication is attempted. +# +# Example, +# krb5.kdc.bad.policy = tryLast +# krb5.kdc.bad.policy = tryLess:2,2000 +krb5.kdc.bad.policy = tryLast + +# Algorithm restrictions for certification path (CertPath) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# for certification path building and validation. For example, "MD2" is +# generally no longer considered to be a secure hash algorithm. This section +# describes the mechanism for disabling algorithms based on algorithm name +# and/or key length. This includes algorithms used in certificates, as well +# as revocation information such as CRLs and signed OCSP Responses. +# +# The syntax of the disabled algorithm string is described as this Java +# BNF-style: +# DisabledAlgorithms: +# " DisabledAlgorithm { , DisabledAlgorithm } " +# +# DisabledAlgorithm: +# AlgorithmName [Constraint] +# +# AlgorithmName: +# (see below) +# +# Constraint: +# KeySizeConstraint +# +# KeySizeConstraint: +# keySize Operator DecimalInteger +# +# Operator: +# <= | < | == | != | >= | > +# +# DecimalInteger: +# DecimalDigits +# +# DecimalDigits: +# DecimalDigit {DecimalDigit} +# +# DecimalDigit: one of +# 1 2 3 4 5 6 7 8 9 0 +# +# The "AlgorithmName" is the standard algorithm name of the disabled +# algorithm. See "Java Cryptography Architecture Standard Algorithm Name +# Documentation" for information about Standard Algorithm Names. Matching +# is performed using a case-insensitive sub-element matching rule. (For +# example, in "SHA1withECDSA" the sub-elements are "SHA1" for hashing and +# "ECDSA" for signatures.) If the assertion "AlgorithmName" is a +# sub-element of the certificate algorithm name, the algorithm will be +# rejected during certification path building and validation. For example, +# the assertion algorithm name "DSA" will disable all certificate algorithms +# that rely on DSA, such as NONEwithDSA, SHA1withDSA. However, the assertion +# will not disable algorithms related to "ECDSA". +# +# A "Constraint" provides further guidance for the algorithm being specified. +# The "KeySizeConstraint" requires a key of a valid size range if the +# "AlgorithmName" is of a key algorithm. The "DecimalInteger" indicates the +# key size specified in number of bits. For example, "RSA keySize <= 1024" +# indicates that any RSA key with key size less than or equal to 1024 bits +# should be disabled, and "RSA keySize < 1024, RSA keySize > 2048" indicates +# that any RSA key with key size less than 1024 or greater than 2048 should +# be disabled. Note that the "KeySizeConstraint" only makes sense to key +# algorithms. +# +# Note: This property is currently used by Oracle's PKIX implementation. It +# is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 +# +# +jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024 + +# Algorithm restrictions for Secure Socket Layer/Transport Layer Security +# (SSL/TLS) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# when using SSL/TLS. This section describes the mechanism for disabling +# algorithms during SSL/TLS security parameters negotiation, including cipher +# suites selection, peer authentication and key exchange mechanisms. +# +# For PKI-based peer authentication and key exchange mechanisms, this list +# of disabled algorithms will also be checked during certification path +# building and validation, including algorithms used in certificates, as +# well as revocation information such as CRLs and signed OCSP Responses. +# This is in addition to the jdk.certpath.disabledAlgorithms property above. +# +# See the specification of "jdk.certpath.disabledAlgorithms" for the +# syntax of the disabled algorithm string. +# +# Note: This property is currently used by Oracle's JSSE implementation. +# It is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048 + diff --git a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp index 2544091768f..786a83228bb 100644 --- a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp +++ b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -73,8 +73,9 @@ inline uint jar::get_crc32(uint c, uchar *ptr, uint len) { return crc32(c, ptr, SWAP_BYTES(a & 0xFFFF) #define GET_INT_HI(a) \ - SWAP_BYTES((a >> 16) & 0xFFFF); + SWAP_BYTES((a >> 16) & 0xFFFF) +static const ushort jarmagic[2] = { SWAP_BYTES(0xCAFE), 0 }; void jar::init(unpacker* u_) { BYTES_OF(*this).clear(); @@ -105,13 +106,14 @@ void jar::add_to_jar_directory(const char* fname, bool store, int modtime, header[0] = (ushort)SWAP_BYTES(0x4B50); header[1] = (ushort)SWAP_BYTES(0x0201); - header[2] = (ushort)SWAP_BYTES(0xA); + header[2] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14); // required version - header[3] = (ushort)SWAP_BYTES(0xA); + header[3] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14); - // flags 02 = maximum sub-compression flag - header[4] = ( store ) ? 0x0 : SWAP_BYTES(0x2); + // Flags - UTF-8 compression and separating crc and sizes + // into separate headers for deflated file + header[4] = ( store ) ? SWAP_BYTES(0x0800) : 0x0808; // Compression method 8=deflate. header[5] = ( store ) ? 0x0 : SWAP_BYTES(0x08); @@ -135,7 +137,8 @@ void jar::add_to_jar_directory(const char* fname, bool store, int modtime, // Filename length header[14] = (ushort)SWAP_BYTES(fname_length); // So called "extra field" length. - header[15] = 0; + // If it's the first record we must add JAR magic sequence + header[15] = ( central_directory_count ) ? 0 : (ushort)SWAP_BYTES(4); // So called "comment" length. header[16] = 0; // Disk number start @@ -155,6 +158,11 @@ void jar::add_to_jar_directory(const char* fname, bool store, int modtime, // Copy the fname to the header. central_directory.append(fname, fname_length); + // Add jar magic for the first record + if (central_directory_count == 0) { + central_directory.append((void *)jarmagic, sizeof(jarmagic)); + } + central_directory_count++; } @@ -170,10 +178,10 @@ void jar::write_jar_header(const char* fname, bool store, int modtime, header[1] = (ushort)SWAP_BYTES(0x0403); // Version - header[2] = (ushort)SWAP_BYTES(0xA); + header[2] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14); - // flags 02 = maximum sub-compression flag - header[3] = ( store ) ? 0x0 : SWAP_BYTES(0x2); + // General purpose flags - same as in the Central Directory + header[3] = ( store ) ? SWAP_BYTES(0x0800) : 0x0808; // Compression method = deflate header[4] = ( store ) ? 0x0 : SWAP_BYTES(0x08); @@ -182,28 +190,51 @@ void jar::write_jar_header(const char* fname, bool store, int modtime, header[5] = (ushort)GET_INT_LO(dostime); header[6] = (ushort)GET_INT_HI(dostime); - // CRC - header[7] = (ushort)GET_INT_LO(crc); - header[8] = (ushort)GET_INT_HI(crc); + // CRC, 0 if deflated, will come separately in extra header + header[7] = ( store ) ? (ushort)GET_INT_LO(crc) : 0; + header[8] = ( store ) ? (ushort)GET_INT_HI(crc) : 0; - // Compressed length: - header[9] = (ushort)GET_INT_LO(clen); - header[10] = (ushort)GET_INT_HI(clen); + // Compressed length, 0 if deflated + header[9] = ( store ) ? (ushort)GET_INT_LO(clen) : 0; + header[10] = ( store ) ? (ushort)GET_INT_HI(clen) : 0; - // Uncompressed length. - header[11] = (ushort)GET_INT_LO(len); - header[12] = (ushort)GET_INT_HI(len); + // Uncompressed length, 0 if deflated + header[11] = ( store ) ? (ushort)GET_INT_LO(len) : 0; + header[12] = ( store ) ? (ushort)GET_INT_HI(len) : 0; // Filename length header[13] = (ushort)SWAP_BYTES(fname_length); // So called "extra field" length. - header[14] = 0; + header[14] = ( central_directory_count - 1 ) ? 0 : (ushort)SWAP_BYTES(4); // Write the LOC header to the output file. write_data(header, (int)sizeof(header)); // Copy the fname to the header. write_data((char*)fname, (int)fname_length); + + if (central_directory_count == 1) { + // Write JAR magic sequence + write_data((void *)jarmagic, (int)sizeof(jarmagic)); + } +} + +void jar::write_jar_extra(int len, int clen, uint crc) { + ushort header[8]; + // Extra field signature + header[0] = (ushort)SWAP_BYTES(0x4B50); + header[1] = (ushort)SWAP_BYTES(0x0807); + // CRC + header[2] = (ushort)GET_INT_LO(crc); + header[3] = (ushort)GET_INT_HI(crc); + // Compressed length + header[4] = (ushort)GET_INT_LO(clen); + header[5] = (ushort)GET_INT_HI(clen); + // Uncompressed length + header[6] = (ushort)GET_INT_LO(len); + header[7] = (ushort)GET_INT_HI(len); + + write_data(header, sizeof(header)); } static const char marker_comment[] = ZIP_ARCHIVE_MARKER_COMMENT; @@ -212,6 +243,7 @@ void jar::write_central_directory() { bytes mc; mc.set(marker_comment); ushort header[11]; + ushort header64[38]; // Create the End of Central Directory structure. header[0] = (ushort)SWAP_BYTES(0x4B50); @@ -220,8 +252,8 @@ void jar::write_central_directory() { header[2] = 0; header[3] = 0; // Number of entries in central directory. - header[4] = (ushort)SWAP_BYTES(central_directory_count); - header[5] = (ushort)SWAP_BYTES(central_directory_count); + header[4] = ( central_directory_count >= 0xffff ) ? 0xffff : (ushort)SWAP_BYTES(central_directory_count); + header[5] = ( central_directory_count >= 0xffff ) ? 0xffff : (ushort)SWAP_BYTES(central_directory_count); // Size of the central directory} header[6] = (ushort)GET_INT_LO((int)central_directory.size()); header[7] = (ushort)GET_INT_HI((int)central_directory.size()); @@ -229,12 +261,71 @@ void jar::write_central_directory() { header[8] = (ushort)GET_INT_LO(output_file_offset); header[9] = (ushort)GET_INT_HI(output_file_offset); // zipfile comment length; - header [10] = (ushort)SWAP_BYTES((int)mc.len); + header[10] = (ushort)SWAP_BYTES((int)mc.len); // Write the central directory. PRINTCR((2, "Central directory at %d\n", output_file_offset)); write_data(central_directory.b); + // If number of records exceeds the 0xFFFF we need to prepend extended + // Zip64 End of Central Directory record and its locator to the old + // style ECD record + if (central_directory_count > 0xFFFF) { + // Zip64 END signature + header64[0] = (ushort)SWAP_BYTES(0x4B50); + header64[1] = (ushort)0x0606; + // Size of header (long) + header64[2] = (ushort)SWAP_BYTES(44);; + header64[3] = 0; + header64[4] = 0; + header64[5] = 0; + // Version produced and required (short) + header64[6] = (ushort)SWAP_BYTES(45); + header64[7] = (ushort)SWAP_BYTES(45); + // Current disk number (int) + header64[8] = 0; + header64[9] = 0; + // Central directory start disk (int) + header64[10] = 0; + header64[11] = 0; + // Count of records on disk (long) + header64[12] = (ushort)GET_INT_LO(central_directory_count); + header64[13] = (ushort)GET_INT_HI(central_directory_count); + header64[14] = 0; + header64[15] = 0; + // Count of records totally (long) + header64[16] = (ushort)GET_INT_LO(central_directory_count); + header64[17] = (ushort)GET_INT_HI(central_directory_count); + header64[18] = 0; + header64[19] = 0; + // Length of the central directory (long) + header64[20] = header[6]; + header64[21] = header[7]; + header64[22] = 0; + header64[23] = 0; + // Offset of central directory (long) + header64[24] = header[8]; + header64[25] = header[9]; + header64[26] = 0; + header64[27] = 0; + // Zip64 end of central directory locator + // Locator signature + header64[28] = (ushort)SWAP_BYTES(0x4B50); + header64[29] = (ushort)SWAP_BYTES(0x0706); + // Start disk number (int) + header64[30] = 0; + header64[31] = 0; + // Offset of zip64 END record (long) + header64[32] = (ushort)GET_INT_LO(output_file_offset); + header64[33] = (ushort)GET_INT_HI(output_file_offset); + header64[34] = 0; + header64[35] = 0; + // Total number of disks (int) + header64[36] = (ushort)SWAP_BYTES(1); + header64[37] = 0; + write_data(header64, (int)sizeof(header64)); + } + // Write the End of Central Directory structure. PRINTCR((2, "end-of-directory at %d\n", output_file_offset)); write_data(header, (int)sizeof(header)); @@ -286,6 +377,8 @@ void jar::addJarEntry(const char* fname, if (deflate) { write_data(deflated.b); + // Write deflated information in extra header + write_jar_extra(len, clen, crc); } else { write_data(head); write_data(tail); @@ -368,7 +461,7 @@ bool jar::deflate_bytes(bytes& head, bytes& tail) { // NOTE: the window size should always be -MAX_WBITS normally -15. // unzip/zipup.c and java/Deflater.c - int error = deflateInit2(&zs, Z_BEST_COMPRESSION, Z_DEFLATED, + int error = deflateInit2(&zs, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY); if (error != Z_OK) { switch (error) { @@ -414,7 +507,8 @@ bool jar::deflate_bytes(bytes& head, bytes& tail) { error = deflate(&zs, Z_FINISH); } if (error == Z_STREAM_END) { - if (len > (int)zs.total_out ) { + if ((int)zs.total_out > 0) { + // Even if compressed size is bigger than uncompressed, write it PRINTCR((2, "deflate compressed data %d -> %d\n", len, zs.total_out)); deflated.b.len = zs.total_out; deflateEnd(&zs); diff --git a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h index d7c6b34ffd8..14ffc9d65bd 100644 --- a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h +++ b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -40,7 +40,7 @@ struct jar { // Private members fillbytes central_directory; - ushort central_directory_count; + uint central_directory_count; uint output_file_offset; fillbytes deflated; // temporary buffer @@ -74,6 +74,7 @@ struct jar { int len, int clen, uLong crc); void write_jar_header(const char* fname, bool store, int modtime, int len, int clen, unsigned int crc); + void write_jar_extra(int len, int clen, unsigned int crc); void write_central_directory(); uLong dostime(int y, int n, int d, int h, int m, int s); uLong get_dostime(int modtime); diff --git a/jdk/src/share/native/common/check_code.c b/jdk/src/share/native/common/check_code.c index 6a114f1f02b..92d96b19675 100644 --- a/jdk/src/share/native/common/check_code.c +++ b/jdk/src/share/native/common/check_code.c @@ -90,6 +90,41 @@ #include "classfile_constants.h" #include "opcodes.in_out" +/* On AIX malloc(0) and calloc(0, ...) return a NULL pointer, which is legal, + * but the code here does not handles it. So we wrap the methods and return non-NULL + * pointers even if we allocate 0 bytes. + */ +#ifdef _AIX +static int aix_dummy; +static void* aix_malloc(size_t len) { + if (len == 0) { + return &aix_dummy; + } + return malloc(len); +} + +static void* aix_calloc(size_t n, size_t size) { + if (n == 0) { + return &aix_dummy; + } + return calloc(n, size); +} + +static void aix_free(void* p) { + if (p == &aix_dummy) { + return; + } + free(p); +} + +#undef malloc +#undef calloc +#undef free +#define malloc aix_malloc +#define calloc aix_calloc +#define free aix_free +#endif + #ifdef __APPLE__ /* use setjmp/longjmp versions that do not save/restore the signal mask */ #define setjmp _setjmp diff --git a/jdk/src/share/native/common/jni_util.c b/jdk/src/share/native/common/jni_util.c index 3ef707f6079..de3509b7a59 100644 --- a/jdk/src/share/native/common/jni_util.c +++ b/jdk/src/share/native/common/jni_util.c @@ -626,10 +626,14 @@ initializeEncoding(JNIEnv *env) { jstring propname = 0; jstring enc = 0; + jclass strClazz = NULL; if ((*env)->EnsureLocalCapacity(env, 3) < 0) return; + strClazz = JNU_ClassString(env); + CHECK_NULL(strClazz); + propname = (*env)->NewStringUTF(env, "sun.jnu.encoding"); if (propname) { jboolean exc; @@ -683,9 +687,10 @@ initializeEncoding(JNIEnv *env) (*env)->DeleteLocalRef(env, enc); /* Initialize method-id cache */ - String_getBytes_ID = (*env)->GetMethodID(env, JNU_ClassString(env), + String_getBytes_ID = (*env)->GetMethodID(env, strClazz, "getBytes", "(Ljava/lang/String;)[B"); - String_init_ID = (*env)->GetMethodID(env, JNU_ClassString(env), + CHECK_NULL(String_getBytes_ID); + String_init_ID = (*env)->GetMethodID(env, strClazz, "", "([BLjava/lang/String;)V"); } @@ -720,8 +725,10 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str) jbyteArray hab = 0; int len; - if (fastEncoding == NO_ENCODING_YET) + if (fastEncoding == NO_ENCODING_YET) { initializeEncoding(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + } if ((fastEncoding == FAST_8859_1) || (fastEncoding == NO_ENCODING_YET)) return newString8859_1(env, str); @@ -736,9 +743,11 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str) len = (int)strlen(str); hab = (*env)->NewByteArray(env, len); if (hab != 0) { + jclass strClazz = JNU_ClassString(env); + CHECK_NULL_RETURN(strClazz, 0); (*env)->SetByteArrayRegion(env, hab, 0, len, (jbyte *)str); if (jnuEncodingSupported(env)) { - result = (*env)->NewObject(env, JNU_ClassString(env), + result = (*env)->NewObject(env, strClazz, String_init_ID, hab, jnuEncoding); } else { /*If the encoding specified in sun.jnu.encoding is not endorsed @@ -747,9 +756,11 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str) StringCoding class will pickup the iso-8859-1 as the fallback converter for us. */ - jmethodID mid = (*env)->GetMethodID(env, JNU_ClassString(env), + jmethodID mid = (*env)->GetMethodID(env, strClazz, "", "([B)V"); - result = (*env)->NewObject(env, JNU_ClassString(env), mid, hab); + if (mid != NULL) { + result = (*env)->NewObject(env, strClazz, mid, hab); + } } (*env)->DeleteLocalRef(env, hab); return result; @@ -775,8 +786,10 @@ JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy) if (isCopy) *isCopy = JNI_TRUE; - if (fastEncoding == NO_ENCODING_YET) + if (fastEncoding == NO_ENCODING_YET) { initializeEncoding(env); + JNU_CHECK_EXCEPTION_RETURN(env, 0); + } if ((fastEncoding == FAST_8859_1) || (fastEncoding == NO_ENCODING_YET)) return getString8859_1Chars(env, jstr); @@ -791,9 +804,14 @@ JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy) if (jnuEncodingSupported(env)) { hab = (*env)->CallObjectMethod(env, jstr, String_getBytes_ID, jnuEncoding); } else { - jmethodID mid = (*env)->GetMethodID(env, JNU_ClassString(env), - "getBytes", "()[B"); - hab = (*env)->CallObjectMethod(env, jstr, mid); + jmethodID mid; + jclass strClazz = JNU_ClassString(env); + CHECK_NULL_RETURN(strClazz, 0); + mid = (*env)->GetMethodID(env, strClazz, + "getBytes", "()[B"); + if (mid != NULL) { + hab = (*env)->CallObjectMethod(env, jstr, mid); + } } if (!(*env)->ExceptionCheck(env)) { @@ -842,6 +860,7 @@ JNU_ClassString(JNIEnv *env) if ((*env)->EnsureLocalCapacity(env, 1) < 0) return 0; c = (*env)->FindClass(env, "java/lang/String"); + CHECK_NULL_RETURN(c, NULL); cls = (*env)->NewGlobalRef(env, c); (*env)->DeleteLocalRef(env, c); } @@ -857,6 +876,7 @@ JNU_ClassClass(JNIEnv *env) if ((*env)->EnsureLocalCapacity(env, 1) < 0) return 0; c = (*env)->FindClass(env, "java/lang/Class"); + CHECK_NULL_RETURN(c, NULL); cls = (*env)->NewGlobalRef(env, c); (*env)->DeleteLocalRef(env, c); } @@ -872,6 +892,7 @@ JNU_ClassObject(JNIEnv *env) if ((*env)->EnsureLocalCapacity(env, 1) < 0) return 0; c = (*env)->FindClass(env, "java/lang/Object"); + CHECK_NULL_RETURN(c, NULL); cls = (*env)->NewGlobalRef(env, c); (*env)->DeleteLocalRef(env, c); } @@ -887,6 +908,7 @@ JNU_ClassThrowable(JNIEnv *env) if ((*env)->EnsureLocalCapacity(env, 1) < 0) return 0; c = (*env)->FindClass(env, "java/lang/Throwable"); + CHECK_NULL_RETURN(c, NULL); cls = (*env)->NewGlobalRef(env, c); (*env)->DeleteLocalRef(env, c); } @@ -936,8 +958,11 @@ JNU_Equals(JNIEnv *env, jobject object1, jobject object2) { static jmethodID mid = NULL; if (mid == NULL) { - mid = (*env)->GetMethodID(env, JNU_ClassObject(env), "equals", + jclass objClazz = JNU_ClassObject(env); + CHECK_NULL_RETURN(objClazz, JNI_FALSE); + mid = (*env)->GetMethodID(env, objClazz, "equals", "(Ljava/lang/Object;)Z"); + CHECK_NULL_RETURN(mid, JNI_FALSE); } return (*env)->CallBooleanMethod(env, object1, mid, object2); } @@ -1039,7 +1064,9 @@ JNU_PrintClass(JNIEnv *env, char* hdr, jobject object) } else { jclass cls = (*env)->GetObjectClass(env, object); jstring clsName = JNU_ToString(env, cls); - JNU_PrintString(env, hdr, clsName); + if (clsName == NULL) { + JNU_PrintString(env, hdr, clsName); + } (*env)->DeleteLocalRef(env, cls); (*env)->DeleteLocalRef(env, clsName); } diff --git a/jdk/src/share/native/common/jni_util.h b/jdk/src/share/native/common/jni_util.h index 0dab24c3392..b8d23cd1c21 100644 --- a/jdk/src/share/native/common/jni_util.h +++ b/jdk/src/share/native/common/jni_util.h @@ -279,14 +279,37 @@ JNU_NotifyAll(JNIEnv *env, jobject object); #define JNU_IsNull(env,obj) ((obj) == NULL) /************************************************************************ - * Miscellaneous utilities used by the class libraries to check for exceptions + * Miscellaneous utilities used by the class libraries to return from + * a function if a value is NULL or an exception is pending. */ -#define CHECK_NULL(x) if ((x) == NULL) return; -#define CHECK_NULL_RETURN(x, y) if ((x) == NULL) return (y); +#define CHECK_NULL(x) \ + do { \ + if ((x) == NULL) { \ + return; \ + } \ + } while (0) \ -#define CHECK_EXCEPTION(env) if ((*env)->ExceptionCheck(env)) return; -#define CHECK_EXCEPTION_RETURN(env, y) if ((*env)->ExceptionCheck(env)) return (y); +#define CHECK_NULL_RETURN(x, y) \ + do { \ + if ((x) == NULL) { \ + return (y); \ + } \ + } while (0) \ + +#define JNU_CHECK_EXCEPTION(env) \ + do { \ + if ((*env)->ExceptionCheck(env)) { \ + return; \ + } \ + } while (0) \ + +#define JNU_CHECK_EXCEPTION_RETURN(env, y) \ + do { \ + if ((*env)->ExceptionCheck(env)) { \ + return (y); \ + } \ + } while (0) /************************************************************************ * Debugging utilities diff --git a/jdk/src/share/native/java/io/io_util.c b/jdk/src/share/native/java/io/io_util.c index 5dd822382f0..f256af4074b 100644 --- a/jdk/src/share/native/java/io/io_util.c +++ b/jdk/src/share/native/java/io/io_util.c @@ -216,6 +216,7 @@ throwFileNotFoundException(JNIEnv *env, jstring path) #else why = JNU_NewStringPlatform(env, buf); #endif + CHECK_NULL(why); } x = JNU_NewObjectByName(env, "java/io/FileNotFoundException", diff --git a/jdk/src/share/native/java/lang/ClassLoader.c b/jdk/src/share/native/java/lang/ClassLoader.c index f6d0583990c..8e0b950406a 100644 --- a/jdk/src/share/native/java/lang/ClassLoader.c +++ b/jdk/src/share/native/java/lang/ClassLoader.c @@ -132,7 +132,6 @@ Java_java_lang_ClassLoader_defineClass1(JNIEnv *env, if (name != NULL) { utfName = getUTF(env, name, buf, sizeof(buf)); if (utfName == NULL) { - JNU_ThrowOutOfMemoryError(env, NULL); goto free_body; } VerifyFixClassname(utfName); @@ -143,7 +142,6 @@ Java_java_lang_ClassLoader_defineClass1(JNIEnv *env, if (source != NULL) { utfSource = getUTF(env, source, sourceBuf, sizeof(sourceBuf)); if (utfSource == NULL) { - JNU_ThrowOutOfMemoryError(env, NULL); goto free_utfName; } } else { @@ -519,7 +517,6 @@ Java_java_lang_ClassLoader_00024NativeLibrary_findBuiltinLib procHandle = getProcessHandle(); cname = JNU_GetStringPlatformChars(env, name, 0); if (cname == NULL) { - JNU_ThrowOutOfMemoryError(env, NULL); return NULL; } // Copy name Skipping PREFIX diff --git a/jdk/src/share/native/java/lang/System.c b/jdk/src/share/native/java/lang/System.c index 660b21e68e1..9c2f591fab4 100644 --- a/jdk/src/share/native/java/lang/System.c +++ b/jdk/src/share/native/java/lang/System.c @@ -56,44 +56,56 @@ Java_java_lang_System_identityHashCode(JNIEnv *env, jobject this, jobject x) return JVM_IHashCode(env, x); } -#define PUTPROP(props, key, val) \ - if (1) { \ - jstring jkey = (*env)->NewStringUTF(env, key); \ - jstring jval = (*env)->NewStringUTF(env, val); \ - jobject r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \ - if ((*env)->ExceptionOccurred(env)) return NULL; \ - (*env)->DeleteLocalRef(env, jkey); \ - (*env)->DeleteLocalRef(env, jval); \ - (*env)->DeleteLocalRef(env, r); \ +#define PUTPROP(props, key, val) \ + if (1) { \ + jstring jkey, jval; \ + jobject r; \ + jkey = (*env)->NewStringUTF(env, key); \ + if (jkey == NULL) return NULL; \ + jval = (*env)->NewStringUTF(env, val); \ + if (jval == NULL) return NULL; \ + r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ + (*env)->DeleteLocalRef(env, jval); \ + (*env)->DeleteLocalRef(env, r); \ } else ((void) 0) /* "key" is a char type string with only ASCII character in it. "val" is a nchar (typedefed in java_props.h) type string */ -#define PUTPROP_ForPlatformNString(props, key, val) \ - if (1) { \ - jstring jkey = (*env)->NewStringUTF(env, key); \ - jstring jval = GetStringPlatform(env, val); \ - jobject r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \ - if ((*env)->ExceptionOccurred(env)) return NULL; \ - (*env)->DeleteLocalRef(env, jkey); \ - (*env)->DeleteLocalRef(env, jval); \ - (*env)->DeleteLocalRef(env, r); \ +#define PUTPROP_ForPlatformNString(props, key, val) \ + if (1) { \ + jstring jkey, jval; \ + jobject r; \ + jkey = (*env)->NewStringUTF(env, key); \ + if (jkey == NULL) return NULL; \ + jval = GetStringPlatform(env, val); \ + if (jval == NULL) return NULL; \ + r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ + (*env)->DeleteLocalRef(env, jval); \ + (*env)->DeleteLocalRef(env, r); \ } else ((void) 0) -#define REMOVEPROP(props, key) \ - if (1) { \ - jstring jkey = JNU_NewStringPlatform(env, key); \ - jobject r = (*env)->CallObjectMethod(env, props, removeID, jkey); \ - if ((*env)->ExceptionOccurred(env)) return NULL; \ - (*env)->DeleteLocalRef(env, jkey); \ - (*env)->DeleteLocalRef(env, r); \ +#define REMOVEPROP(props, key) \ + if (1) { \ + jstring jkey; \ + jobject r; \ + jkey = JNU_NewStringPlatform(env, key); \ + if (jkey == NULL) return NULL; \ + r = (*env)->CallObjectMethod(env, props, removeID, jkey); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ + (*env)->DeleteLocalRef(env, r); \ } else ((void) 0) -#define GETPROP(props, key, jret) \ - if (1) { \ - jstring jkey = JNU_NewStringPlatform(env, key); \ +#define GETPROP(props, key, jret) \ + if (1) { \ + jstring jkey = JNU_NewStringPlatform(env, key); \ + if (jkey == NULL) return NULL; \ jret = (*env)->CallObjectMethod(env, props, getPropID, jkey); \ - if ((*env)->ExceptionOccurred(env)) return NULL; \ - (*env)->DeleteLocalRef(env, jkey); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ } else ((void) 0) #ifndef VENDOR /* Third party may overwrite this. */ @@ -169,23 +181,31 @@ JNIEXPORT jobject JNICALL Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) { char buf[128]; - java_props_t *sprops = GetJavaProperties(env); - jmethodID putID = (*env)->GetMethodID(env, - (*env)->GetObjectClass(env, props), - "put", - "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); - jmethodID removeID = (*env)->GetMethodID(env, - (*env)->GetObjectClass(env, props), - "remove", - "(Ljava/lang/Object;)Ljava/lang/Object;"); - jmethodID getPropID = (*env)->GetMethodID(env, - (*env)->GetObjectClass(env, props), - "getProperty", - "(Ljava/lang/String;)Ljava/lang/String;"); + java_props_t *sprops; + jmethodID putID, removeID, getPropID; jobject ret = NULL; jstring jVMVal = NULL; - if (sprops == NULL || putID == NULL ) return NULL; + sprops = GetJavaProperties(env); + CHECK_NULL_RETURN(sprops, NULL); + + putID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, props), + "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + CHECK_NULL_RETURN(putID, NULL); + + removeID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, props), + "remove", + "(Ljava/lang/Object;)Ljava/lang/Object;"); + CHECK_NULL_RETURN(removeID, NULL); + + getPropID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, props), + "getProperty", + "(Ljava/lang/String;)Ljava/lang/String;"); + CHECK_NULL_RETURN(getPropID, NULL); PUTPROP(props, "java.specification.version", JDK_MAJOR_VERSION "." JDK_MINOR_VERSION); @@ -382,6 +402,7 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) GETPROP(props, "sun.locale.formatasdefault", jVMVal); if (jVMVal) { const char * val = (*env)->GetStringUTFChars(env, jVMVal, 0); + CHECK_NULL_RETURN(val, NULL); fmtdefault = !strcmp(val, "true"); (*env)->ReleaseStringUTFChars(env, jVMVal, val); (*env)->DeleteLocalRef(env, jVMVal); diff --git a/jdk/src/share/native/java/net/Inet4Address.c b/jdk/src/share/native/java/net/Inet4Address.c index b2f25416133..9fb0f342c00 100644 --- a/jdk/src/share/native/java/net/Inet4Address.c +++ b/jdk/src/share/native/java/net/Inet4Address.c @@ -34,6 +34,8 @@ jclass ia4_class; jmethodID ia4_ctrID; +static int ia4_initialized = 0; + /* * Class: java_net_Inet4Address * Method: init @@ -41,9 +43,13 @@ jmethodID ia4_ctrID; */ JNIEXPORT void JNICALL Java_java_net_Inet4Address_init(JNIEnv *env, jclass cls) { - jclass c = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL(c); - ia4_class = (*env)->NewGlobalRef(env, c); - CHECK_NULL(ia4_class); - ia4_ctrID = (*env)->GetMethodID(env, ia4_class, "", "()V"); + if (!ia4_initialized) { + jclass c = (*env)->FindClass(env, "java/net/Inet4Address"); + CHECK_NULL(c); + ia4_class = (*env)->NewGlobalRef(env, c); + CHECK_NULL(ia4_class); + ia4_ctrID = (*env)->GetMethodID(env, ia4_class, "", "()V"); + CHECK_NULL(ia4_ctrID); + ia4_initialized = 1; + } } diff --git a/jdk/src/share/native/java/net/Inet6Address.c b/jdk/src/share/native/java/net/Inet6Address.c index 729fe78281d..8d34918386d 100644 --- a/jdk/src/share/native/java/net/Inet6Address.c +++ b/jdk/src/share/native/java/net/Inet6Address.c @@ -42,6 +42,8 @@ jfieldID ia6_scopeidsetID; jfieldID ia6_scopeifnameID; jmethodID ia6_ctrID; +static int ia6_initialized = 0; + /* * Class: java_net_Inet6Address * Method: init @@ -49,24 +51,28 @@ jmethodID ia6_ctrID; */ JNIEXPORT void JNICALL Java_java_net_Inet6Address_init(JNIEnv *env, jclass cls) { - jclass ia6h_class; - jclass c = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL(c); - ia6_class = (*env)->NewGlobalRef(env, c); - CHECK_NULL(ia6_class); - ia6h_class = (*env)->FindClass(env, "java/net/Inet6Address$Inet6AddressHolder"); - CHECK_NULL(ia6h_class); - ia6_holder6ID = (*env)->GetFieldID(env, ia6_class, "holder6", "Ljava/net/Inet6Address$Inet6AddressHolder;"); - CHECK_NULL(ia6_holder6ID); - ia6_ipaddressID = (*env)->GetFieldID(env, ia6h_class, "ipaddress", "[B"); - CHECK_NULL(ia6_ipaddressID); - ia6_scopeidID = (*env)->GetFieldID(env, ia6h_class, "scope_id", "I"); - CHECK_NULL(ia6_scopeidID); - ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I"); - CHECK_NULL(ia6_cachedscopeidID); - ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z"); - CHECK_NULL(ia6_scopeidsetID); - ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;"); - CHECK_NULL(ia6_scopeifnameID); - ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "", "()V"); + if (!ia6_initialized) { + jclass ia6h_class; + jclass c = (*env)->FindClass(env, "java/net/Inet6Address"); + CHECK_NULL(c); + ia6_class = (*env)->NewGlobalRef(env, c); + CHECK_NULL(ia6_class); + ia6h_class = (*env)->FindClass(env, "java/net/Inet6Address$Inet6AddressHolder"); + CHECK_NULL(ia6h_class); + ia6_holder6ID = (*env)->GetFieldID(env, ia6_class, "holder6", "Ljava/net/Inet6Address$Inet6AddressHolder;"); + CHECK_NULL(ia6_holder6ID); + ia6_ipaddressID = (*env)->GetFieldID(env, ia6h_class, "ipaddress", "[B"); + CHECK_NULL(ia6_ipaddressID); + ia6_scopeidID = (*env)->GetFieldID(env, ia6h_class, "scope_id", "I"); + CHECK_NULL(ia6_scopeidID); + ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I"); + CHECK_NULL(ia6_cachedscopeidID); + ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z"); + CHECK_NULL(ia6_scopeidsetID); + ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;"); + CHECK_NULL(ia6_scopeifnameID); + ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "", "()V"); + CHECK_NULL(ia6_ctrID); + ia6_initialized = 1; + } } diff --git a/jdk/src/share/native/java/net/InetAddress.c b/jdk/src/share/native/java/net/InetAddress.c index e9fd0979cb8..a712dd9b1d1 100644 --- a/jdk/src/share/native/java/net/InetAddress.c +++ b/jdk/src/share/native/java/net/InetAddress.c @@ -40,6 +40,8 @@ jfieldID iac_familyID; jfieldID iac_hostNameID; jfieldID ia_preferIPv6AddressID; +static int ia_initialized = 0; + /* * Class: java_net_InetAddress * Method: init @@ -47,21 +49,25 @@ jfieldID ia_preferIPv6AddressID; */ JNIEXPORT void JNICALL Java_java_net_InetAddress_init(JNIEnv *env, jclass cls) { - jclass c = (*env)->FindClass(env,"java/net/InetAddress"); - CHECK_NULL(c); - ia_class = (*env)->NewGlobalRef(env, c); - CHECK_NULL(ia_class); - c = (*env)->FindClass(env,"java/net/InetAddress$InetAddressHolder"); - CHECK_NULL(c); - iac_class = (*env)->NewGlobalRef(env, c); - ia_holderID = (*env)->GetFieldID(env, ia_class, "holder", "Ljava/net/InetAddress$InetAddressHolder;"); - CHECK_NULL(ia_holderID); - ia_preferIPv6AddressID = (*env)->GetStaticFieldID(env, ia_class, "preferIPv6Address", "Z"); - CHECK_NULL(ia_preferIPv6AddressID); + if (!ia_initialized) { + jclass c = (*env)->FindClass(env,"java/net/InetAddress"); + CHECK_NULL(c); + ia_class = (*env)->NewGlobalRef(env, c); + CHECK_NULL(ia_class); + c = (*env)->FindClass(env,"java/net/InetAddress$InetAddressHolder"); + CHECK_NULL(c); + iac_class = (*env)->NewGlobalRef(env, c); + ia_holderID = (*env)->GetFieldID(env, ia_class, "holder", "Ljava/net/InetAddress$InetAddressHolder;"); + CHECK_NULL(ia_holderID); + ia_preferIPv6AddressID = (*env)->GetStaticFieldID(env, ia_class, "preferIPv6Address", "Z"); + CHECK_NULL(ia_preferIPv6AddressID); - iac_addressID = (*env)->GetFieldID(env, iac_class, "address", "I"); - CHECK_NULL(iac_addressID); - iac_familyID = (*env)->GetFieldID(env, iac_class, "family", "I"); - CHECK_NULL(iac_familyID); - iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;"); + iac_addressID = (*env)->GetFieldID(env, iac_class, "address", "I"); + CHECK_NULL(iac_addressID); + iac_familyID = (*env)->GetFieldID(env, iac_class, "family", "I"); + CHECK_NULL(iac_familyID); + iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;"); + CHECK_NULL(iac_hostNameID); + ia_initialized = 1; + } } diff --git a/jdk/src/share/native/java/net/net_util.c b/jdk/src/share/native/java/net/net_util.c index 54aef661bc2..dd93b1375bc 100644 --- a/jdk/src/share/native/java/net/net_util.c +++ b/jdk/src/share/native/java/net/net_util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,7 +67,7 @@ JNI_OnLoad(JavaVM *vm, void *reserved) supporting socket APIs are available */ IPv6_available = IPv6_supported() & (!preferIPv4Stack); - initLocalAddrTable (); + platformInit(); parseExclusiveBindProperty(env); return JNI_VERSION_1_2; @@ -75,11 +75,14 @@ JNI_OnLoad(JavaVM *vm, void *reserved) static int initialized = 0; -static void initInetAddrs(JNIEnv *env) { +JNIEXPORT void JNICALL initInetAddressIDs(JNIEnv *env) { if (!initialized) { Java_java_net_InetAddress_init(env, 0); + JNU_CHECK_EXCEPTION(env); Java_java_net_Inet4Address_init(env, 0); + JNU_CHECK_EXCEPTION(env); Java_java_net_Inet6Address_init(env, 0); + JNU_CHECK_EXCEPTION(env); initialized = 1; } } @@ -100,47 +103,32 @@ extern jfieldID iac_familyID; * get_ methods that return objects return NULL on error. */ jobject getInet6Address_scopeifname(JNIEnv *env, jobject iaObj) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, NULL); return (*env)->GetObjectField(env, holder, ia6_scopeifnameID); } int setInet6Address_scopeifname(JNIEnv *env, jobject iaObj, jobject scopeifname) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, JNI_FALSE); (*env)->SetObjectField(env, holder, ia6_scopeifnameID, scopeifname); return JNI_TRUE; } int getInet6Address_scopeid_set(JNIEnv *env, jobject iaObj) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, -1); return (*env)->GetBooleanField(env, holder, ia6_scopeidsetID); } int getInet6Address_scopeid(JNIEnv *env, jobject iaObj) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, -1); return (*env)->GetIntField(env, holder, ia6_scopeidID); } int setInet6Address_scopeid(JNIEnv *env, jobject iaObj, int scopeid) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, JNI_FALSE); (*env)->SetIntField(env, holder, ia6_scopeidID, scopeid); if (scopeid > 0) { @@ -154,7 +142,6 @@ int getInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *dest) { jobject holder, addr; jbyteArray barr; - initInetAddrs(env); holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, JNI_FALSE); addr = (*env)->GetObjectField(env, holder, ia6_ipaddressID); @@ -167,7 +154,6 @@ int setInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *address) { jobject holder; jbyteArray addr; - initInetAddrs(env); holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, JNI_FALSE); addr = (jbyteArray)(*env)->GetObjectField(env, holder, ia6_ipaddressID); @@ -181,52 +167,38 @@ int setInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *address) { } void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); (*env)->SetIntField(env, holder, iac_addressID, address); } void setInetAddress_family(JNIEnv *env, jobject iaObj, int family) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); (*env)->SetIntField(env, holder, iac_familyID, family); } void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject host) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); (*env)->SetObjectField(env, holder, iac_hostNameID, host); } int getInetAddress_addr(JNIEnv *env, jobject iaObj) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); return (*env)->GetIntField(env, holder, iac_addressID); } int getInetAddress_family(JNIEnv *env, jobject iaObj) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); return (*env)->GetIntField(env, holder, iac_familyID); } jobject getInetAddress_hostName(JNIEnv *env, jobject iaObj) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); return (*env)->GetObjectField(env, holder, iac_hostNameID); } JNIEXPORT jobject JNICALL NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) { jobject iaObj; - initInetAddrs(env); #ifdef AF_INET6 if (him->sa_family == AF_INET6) { jbyteArray ipaddress; @@ -238,31 +210,15 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) { jbyte *caddr = (jbyte *)&(him6->sin6_addr); if (NET_IsIPv4Mapped(caddr)) { int address; - static jclass inet4Cls = 0; - if (inet4Cls == 0) { - jclass c = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(c, NULL); - inet4Cls = (*env)->NewGlobalRef(env, c); - CHECK_NULL_RETURN(inet4Cls, NULL); - (*env)->DeleteLocalRef(env, c); - } - iaObj = (*env)->NewObject(env, inet4Cls, ia4_ctrID); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); CHECK_NULL_RETURN(iaObj, NULL); address = NET_IPv4MappedToIPv4(caddr); setInetAddress_addr(env, iaObj, address); setInetAddress_family(env, iaObj, IPv4); } else { - static jclass inet6Cls = 0; jint scope; int ret; - if (inet6Cls == 0) { - jclass c = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL_RETURN(c, NULL); - inet6Cls = (*env)->NewGlobalRef(env, c); - CHECK_NULL_RETURN(inet6Cls, NULL); - (*env)->DeleteLocalRef(env, c); - } - iaObj = (*env)->NewObject(env, inet6Cls, ia6_ctrID); + iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); CHECK_NULL_RETURN(iaObj, NULL); ret = setInet6Address_ipaddress(env, iaObj, (char *)&(him6->sin6_addr)); CHECK_NULL_RETURN(ret, NULL); @@ -275,16 +231,7 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) { #endif /* AF_INET6 */ { struct sockaddr_in *him4 = (struct sockaddr_in *)him; - static jclass inet4Cls = 0; - - if (inet4Cls == 0) { - jclass c = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(c, NULL); - inet4Cls = (*env)->NewGlobalRef(env, c); - CHECK_NULL_RETURN(inet4Cls, NULL); - (*env)->DeleteLocalRef(env, c); - } - iaObj = (*env)->NewObject(env, inet4Cls, ia4_ctrID); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); CHECK_NULL_RETURN(iaObj, NULL); setInetAddress_family(env, iaObj, IPv4); setInetAddress_addr(env, iaObj, ntohl(him4->sin_addr.s_addr)); diff --git a/jdk/src/share/native/java/net/net_util.h b/jdk/src/share/native/java/net/net_util.h index 97351488877..b77d02b2fad 100644 --- a/jdk/src/share/native/java/net/net_util.h +++ b/jdk/src/share/native/java/net/net_util.h @@ -55,6 +55,8 @@ extern jfieldID iac_familyID; extern jfieldID iac_hostNameID; extern jfieldID ia_preferIPv6AddressID; +JNIEXPORT void JNICALL initInetAddressIDs(JNIEnv *env); + /** (Inet6Address accessors) * set_ methods return JNI_TRUE on success JNI_FALSE on error * get_ methods that return int/boolean, return -1 on error @@ -137,7 +139,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr JNIEXPORT jobject JNICALL NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port); -void initLocalAddrTable (); +void platformInit(); void parseExclusiveBindProperty(JNIEnv *env); void diff --git a/jdk/src/share/native/java/util/zip/Deflater.c b/jdk/src/share/native/java/util/zip/Deflater.c index a9f403db172..d7f751d37a9 100644 --- a/jdk/src/share/native/java/util/zip/Deflater.c +++ b/jdk/src/share/native/java/util/zip/Deflater.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -49,13 +49,21 @@ JNIEXPORT void JNICALL Java_java_util_zip_Deflater_initIDs(JNIEnv *env, jclass cls) { levelID = (*env)->GetFieldID(env, cls, "level", "I"); + CHECK_NULL(levelID); strategyID = (*env)->GetFieldID(env, cls, "strategy", "I"); + CHECK_NULL(strategyID); setParamsID = (*env)->GetFieldID(env, cls, "setParams", "Z"); + CHECK_NULL(setParamsID); finishID = (*env)->GetFieldID(env, cls, "finish", "Z"); + CHECK_NULL(finishID); finishedID = (*env)->GetFieldID(env, cls, "finished", "Z"); + CHECK_NULL(finishedID); bufID = (*env)->GetFieldID(env, cls, "buf", "[B"); + CHECK_NULL(bufID); offID = (*env)->GetFieldID(env, cls, "off", "I"); + CHECK_NULL(offID); lenID = (*env)->GetFieldID(env, cls, "len", "I"); + CHECK_NULL(lenID); } JNIEXPORT jlong JNICALL @@ -132,14 +140,14 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr, in_buf = (*env)->GetPrimitiveArrayCritical(env, this_buf, 0); if (in_buf == NULL) { // Throw OOME only when length is not zero - if (this_len != 0) + if (this_len != 0 && (*env)->ExceptionOccurred(env) == NULL) JNU_ThrowOutOfMemoryError(env, 0); return 0; } out_buf = (*env)->GetPrimitiveArrayCritical(env, b, 0); if (out_buf == NULL) { (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0); - if (len != 0) + if (len != 0 && (*env)->ExceptionOccurred(env) == NULL) JNU_ThrowOutOfMemoryError(env, 0); return 0; } @@ -158,7 +166,7 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr, this_off += this_len - strm->avail_in; (*env)->SetIntField(env, this, offID, this_off); (*env)->SetIntField(env, this, lenID, strm->avail_in); - return len - strm->avail_out; + return (jint) (len - strm->avail_out); case Z_BUF_ERROR: (*env)->SetBooleanField(env, this, setParamsID, JNI_FALSE); return 0; diff --git a/jdk/src/share/native/java/util/zip/Inflater.c b/jdk/src/share/native/java/util/zip/Inflater.c index 3778ff4e40c..2e21d084b39 100644 --- a/jdk/src/share/native/java/util/zip/Inflater.c +++ b/jdk/src/share/native/java/util/zip/Inflater.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,10 +50,15 @@ JNIEXPORT void JNICALL Java_java_util_zip_Inflater_initIDs(JNIEnv *env, jclass cls) { needDictID = (*env)->GetFieldID(env, cls, "needDict", "Z"); + CHECK_NULL(needDictID); finishedID = (*env)->GetFieldID(env, cls, "finished", "Z"); + CHECK_NULL(finishedID); bufID = (*env)->GetFieldID(env, cls, "buf", "[B"); + CHECK_NULL(bufID); offID = (*env)->GetFieldID(env, cls, "off", "I"); + CHECK_NULL(offID); lenID = (*env)->GetFieldID(env, cls, "len", "I"); + CHECK_NULL(lenID); } JNIEXPORT jlong JNICALL @@ -127,14 +132,14 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr, in_buf = (*env)->GetPrimitiveArrayCritical(env, this_buf, 0); if (in_buf == NULL) { - if (this_len != 0) + if (this_len != 0 && (*env)->ExceptionOccurred(env) == NULL) JNU_ThrowOutOfMemoryError(env, 0); return 0; } out_buf = (*env)->GetPrimitiveArrayCritical(env, b, 0); if (out_buf == NULL) { (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0); - if (len != 0) + if (len != 0 && (*env)->ExceptionOccurred(env) == NULL) JNU_ThrowOutOfMemoryError(env, 0); return 0; } @@ -154,7 +159,7 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr, this_off += this_len - strm->avail_in; (*env)->SetIntField(env, this, offID, this_off); (*env)->SetIntField(env, this, lenID, strm->avail_in); - return len - strm->avail_out; + return (jint) (len - strm->avail_out); case Z_NEED_DICT: (*env)->SetBooleanField(env, this, needDictID, JNI_TRUE); /* Might have consumed some input here! */ diff --git a/jdk/src/share/native/java/util/zip/ZipFile.c b/jdk/src/share/native/java/util/zip/ZipFile.c index d66cccb747a..5fd4936a803 100644 --- a/jdk/src/share/native/java/util/zip/ZipFile.c +++ b/jdk/src/share/native/java/util/zip/ZipFile.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -71,11 +71,13 @@ ThrowZipException(JNIEnv *env, const char *msg) if (msg != NULL) { s = JNU_NewStringPlatform(env, msg); } - x = JNU_NewObjectByName(env, + if (s != NULL) { + x = JNU_NewObjectByName(env, "java/util/zip/ZipException", "(Ljava/lang/String;)V", s); - if (x != NULL) { - (*env)->Throw(env, x); + if (x != NULL) { + (*env)->Throw(env, x); + } } } @@ -367,8 +369,10 @@ Java_java_util_jar_JarFile_getMetaInfEntryNames(JNIEnv *env, jobject obj) /* If some names were found then build array of java strings */ if (count > 0) { - jclass cls = (*env)->FindClass(env, "java/lang/String"); + jclass cls = JNU_ClassString(env); + CHECK_NULL_RETURN(cls, NULL); result = (*env)->NewObjectArray(env, count, cls, 0); + CHECK_NULL_RETURN(result, NULL); if (result != 0) { for (i = 0; i < count; i++) { jstring str = (*env)->NewStringUTF(env, zip->metanames[i]); diff --git a/jdk/src/share/native/java/util/zip/zip_util.c b/jdk/src/share/native/java/util/zip/zip_util.c index b2fb8209f41..27882480ea6 100644 --- a/jdk/src/share/native/java/util/zip/zip_util.c +++ b/jdk/src/share/native/java/util/zip/zip_util.c @@ -659,7 +659,10 @@ readCEN(jzfile *zip, jint knownTotal) entries = zip->entries = calloc(total, sizeof(entries[0])); tablelen = zip->tablelen = ((total/2) | 1); // Odd -> fewer collisions table = zip->table = malloc(tablelen * sizeof(table[0])); - if (entries == NULL || table == NULL) goto Catch; + /* According to ISO C it is perfectly legal for malloc to return zero + * if called with a zero argument. We check this for 'entries' but not + * for 'table' because 'tablelen' can't be zero (see computation above). */ + if ((entries == NULL && total != 0) || table == NULL) goto Catch; for (j = 0; j < tablelen; j++) table[j] = ZIP_ENDCHAIN; diff --git a/jdk/src/share/native/sun/awt/medialib/mlib_sys.c b/jdk/src/share/native/sun/awt/medialib/mlib_sys.c index 70d052051fd..2c07527cd0b 100644 --- a/jdk/src/share/native/sun/awt/medialib/mlib_sys.c +++ b/jdk/src/share/native/sun/awt/medialib/mlib_sys.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -86,10 +86,13 @@ __typeof__ ( __mlib_sincosf) mlib_sincosf void *__mlib_malloc(mlib_u32 size) { -#ifdef _MSC_VER +#if defined(_MSC_VER) || defined(AIX) /* * Currently, all MS C compilers for Win32 platforms default to 8 byte * alignment. -- from stdlib.h of MS VC++5.0. + * + * On AIX, the malloc subroutine returns a pointer to space suitably + * aligned for the storage of any type of object (see 'man malloc'). */ return (void *) malloc(size); #elif defined(MACOSX) diff --git a/jdk/src/share/native/sun/awt/medialib/mlib_types.h b/jdk/src/share/native/sun/awt/medialib/mlib_types.h index 10c3cd3039e..aba0394ffd4 100644 --- a/jdk/src/share/native/sun/awt/medialib/mlib_types.h +++ b/jdk/src/share/native/sun/awt/medialib/mlib_types.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,7 +57,7 @@ typedef unsigned int mlib_u32; typedef float mlib_f32; typedef double mlib_d64; -#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__GNUC__) +#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__GNUC__) || defined(_AIX) #include #include diff --git a/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c b/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c index 4ca0315abc3..59f3f7db971 100644 --- a/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c +++ b/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c @@ -23,18 +23,19 @@ * questions. */ +#include #include #include "management.h" #include "sun_management_DiagnosticCommandImpl.h" JNIEXPORT void JNICALL Java_sun_management_DiagnosticCommandImpl_setNotificationEnabled (JNIEnv *env, jobject dummy, jboolean enabled) { - if(jmm_version > JMM_VERSION_1_2_2) { - jmm_interface->SetDiagnosticFrameworkNotificationEnabled(env, enabled); - } else { + if (jmm_version <= JMM_VERSION_1_2_2) { JNU_ThrowByName(env, "java/lang/UnsupportedOperationException", "JMX interface to diagnostic framework notifications is not supported by this VM"); + return; } + jmm_interface->SetDiagnosticFrameworkNotificationEnabled(env, enabled); } JNIEXPORT jobjectArray JNICALL @@ -56,7 +57,8 @@ jobject getDiagnosticCommandArgumentInfoArray(JNIEnv *env, jstring command, jobject resultList; dcmd_arg_info_array = (dcmdArgInfo*) malloc(num_arg * sizeof(dcmdArgInfo)); - if (dcmd_arg_info_array == NULL) { + /* According to ISO C it is perfectly legal for malloc to return zero if called with a zero argument */ + if (dcmd_arg_info_array == NULL && num_arg != 0) { return NULL; } jmm_interface->GetDiagnosticCommandArgumentsInfo(env, command, @@ -117,19 +119,24 @@ Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommandInfo return NULL; } num_commands = (*env)->GetArrayLength(env, commands); - dcmd_info_array = (dcmdInfo*) malloc(num_commands * - sizeof(dcmdInfo)); - if (dcmd_info_array == NULL) { - JNU_ThrowOutOfMemoryError(env, NULL); - } - jmm_interface->GetDiagnosticCommandInfo(env, commands, dcmd_info_array); dcmdInfoCls = (*env)->FindClass(env, "sun/management/DiagnosticCommandInfo"); result = (*env)->NewObjectArray(env, num_commands, dcmdInfoCls, NULL); if (result == NULL) { - free(dcmd_info_array); JNU_ThrowOutOfMemoryError(env, 0); + return NULL; } + if (num_commands == 0) { + /* Handle the 'zero commands' case specially to avoid calling 'malloc()' */ + /* with a zero argument because that may legally return a NULL pointer. */ + return result; + } + dcmd_info_array = (dcmdInfo*) malloc(num_commands * sizeof(dcmdInfo)); + if (dcmd_info_array == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return NULL; + } + jmm_interface->GetDiagnosticCommandInfo(env, commands, dcmd_info_array); for (i=0; iGetObjectArrayElement(env,commands,i), @@ -137,6 +144,7 @@ Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommandInfo if (args == NULL) { free(dcmd_info_array); JNU_ThrowOutOfMemoryError(env, 0); + return NULL; } obj = JNU_NewObjectByName(env, "sun/management/DiagnosticCommandInfo", @@ -152,6 +160,7 @@ Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommandInfo if (obj == NULL) { free(dcmd_info_array); JNU_ThrowOutOfMemoryError(env, 0); + return NULL; } (*env)->SetObjectArrayElement(env, result, i, obj); } diff --git a/jdk/src/share/native/sun/misc/Version.c b/jdk/src/share/native/sun/misc/Version.c index d37010e15d5..4dbcf1c8089 100644 --- a/jdk/src/share/native/sun/misc/Version.c +++ b/jdk/src/share/native/sun/misc/Version.c @@ -60,15 +60,15 @@ Java_sun_misc_Version_getJvmVersionInfo(JNIEnv *env, jclass cls) (*func_p)(env, &info, sizeof(info)); setStaticIntField(env, cls, "jvm_major_version", JVM_VERSION_MAJOR(info.jvm_version)); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_minor_version", JVM_VERSION_MINOR(info.jvm_version)); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_micro_version", JVM_VERSION_MICRO(info.jvm_version)); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_build_number", JVM_VERSION_BUILD(info.jvm_version)); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_update_version", info.update_version); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); jvm_special_version = info.special_update_version; return JNI_TRUE; @@ -91,15 +91,15 @@ Java_sun_misc_Version_getJdkVersionInfo(JNIEnv *env, jclass cls) JDK_GetVersionInfo0(&info, sizeof(info)); setStaticIntField(env, cls, "jdk_major_version", JDK_VERSION_MAJOR(info.jdk_version)); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_minor_version", JDK_VERSION_MINOR(info.jdk_version)); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_micro_version", JDK_VERSION_MICRO(info.jdk_version)); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_build_number", JDK_VERSION_BUILD(info.jdk_version)); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_update_version", info.update_version); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); jdk_special_version = info.special_update_version; } diff --git a/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp b/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp index dff675f9500..8273e7f8dbb 100644 --- a/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp +++ b/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, 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 @@ -41,7 +41,9 @@ extern "C" { void ThrowException(JNIEnv *env, const char *exceptionName) { jclass exceptionClazz = env->FindClass(exceptionName); - env->ThrowNew(exceptionClazz, NULL); + if (exceptionClazz != NULL) { + env->ThrowNew(exceptionClazz, NULL); + } } /* @@ -73,7 +75,7 @@ JNIEXPORT jlongArray JNICALL Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair (JNIEnv *env, jclass clazz, jint keySize, jbyteArray encodedParams, jbyteArray seed) { - ECPrivateKey *privKey; /* contains both public and private values */ + ECPrivateKey *privKey = NULL; /* contains both public and private values */ ECParams *ecparams = NULL; SECKEYECParams params_item; jint jSeedLength; @@ -85,6 +87,9 @@ JNICALL Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair params_item.len = env->GetArrayLength(encodedParams); params_item.data = (unsigned char *) env->GetByteArrayElements(encodedParams, 0); + if (params_item.data == NULL) { + goto cleanup; + } // Fill a new ECParams using the supplied OID if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) { @@ -107,7 +112,14 @@ JNICALL Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair jboolean isCopy; result = env->NewLongArray(2); + if (result == NULL) { + goto cleanup; + } + resultElements = env->GetLongArrayElements(result, &isCopy); + if (resultElements == NULL) { + goto cleanup; + } resultElements[0] = (jlong) &(privKey->privateValue); // private big integer resultElements[1] = (jlong) &(privKey->publicValue); // encoded ec point @@ -150,6 +162,9 @@ JNICALL Java_sun_security_ec_ECKeyPairGenerator_getEncodedBytes { SECItem *s = (SECItem *)hSECItem; jbyteArray jEncodedBytes = env->NewByteArray(s->len); + if (jEncodedBytes == NULL) { + return NULL; + } // Copy bytes from a native SECItem buffer to Java byte array env->SetByteArrayRegion(jEncodedBytes, 0, s->len, (jbyte *)s->data); @@ -195,6 +210,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest params_item.len = env->GetArrayLength(encodedParams); params_item.data = (unsigned char *) env->GetByteArrayElements(encodedParams, 0); + if (params_item.data == NULL) { + goto cleanup; + } // Fill a new ECParams using the supplied OID if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) { @@ -208,6 +226,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest privKey.privateValue.len = env->GetArrayLength(privateKey); privKey.privateValue.data = (unsigned char *) env->GetByteArrayElements(privateKey, 0); + if (privKey.privateValue.data == NULL) { + goto cleanup; + } // Prepare a buffer for the signature (twice the key length) pSignedDigestBuffer = new jbyte[ecparams->order.len * 2]; @@ -227,6 +248,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest // Create new byte array temp = env->NewByteArray(signature_item.len); + if (temp == NULL) { + goto cleanup; + } // Copy data from native buffer env->SetByteArrayRegion(temp, 0, signature_item.len, pSignedDigestBuffer); @@ -294,6 +318,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_verifySignedDigest params_item.len = env->GetArrayLength(encodedParams); params_item.data = (unsigned char *) env->GetByteArrayElements(encodedParams, 0); + if (params_item.data == NULL) { + goto cleanup; + } // Fill a new ECParams using the supplied OID if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) { @@ -346,25 +373,34 @@ JNICALL Java_sun_security_ec_ECDHKeyAgreement_deriveKey (JNIEnv *env, jclass clazz, jbyteArray privateKey, jbyteArray publicKey, jbyteArray encodedParams) { jbyteArray jSecret = NULL; + ECParams *ecparams = NULL; // Extract private key value SECItem privateValue_item; privateValue_item.len = env->GetArrayLength(privateKey); privateValue_item.data = (unsigned char *) env->GetByteArrayElements(privateKey, 0); + if (privateValue_item.data == NULL) { + goto cleanup; + } // Extract public key value SECItem publicValue_item; publicValue_item.len = env->GetArrayLength(publicKey); publicValue_item.data = (unsigned char *) env->GetByteArrayElements(publicKey, 0); + if (publicValue_item.data == NULL) { + goto cleanup; + } // Initialize the ECParams struct - ECParams *ecparams = NULL; SECKEYECParams params_item; params_item.len = env->GetArrayLength(encodedParams); params_item.data = (unsigned char *) env->GetByteArrayElements(encodedParams, 0); + if (params_item.data == NULL) { + goto cleanup; + } // Fill a new ECParams using the supplied OID if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) { @@ -386,6 +422,9 @@ JNICALL Java_sun_security_ec_ECDHKeyAgreement_deriveKey // Create new byte array jSecret = env->NewByteArray(secret_item.len); + if (jSecret == NULL) { + goto cleanup; + } // Copy bytes from the SECItem buffer to a Java byte array env->SetByteArrayRegion(jSecret, 0, secret_item.len, diff --git a/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h b/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h index 8a8acfc688e..40d2e335514 100644 --- a/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h +++ b/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h @@ -65,6 +65,13 @@ typedef unsigned long ulong_t; typedef enum boolean { B_FALSE, B_TRUE } boolean_t; #endif /* _ALLBSD_SOURCE */ +#ifdef AIX +#define B_FALSE FALSE +#define B_TRUE TRUE +typedef unsigned char uint8_t; +typedef unsigned long ulong_t; +#endif /* AIX */ + #ifdef _WIN32 typedef unsigned char uint8_t; typedef unsigned long ulong_t; diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Device.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Device.java new file mode 100644 index 00000000000..f4fd2c50a05 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Device.java @@ -0,0 +1,66 @@ +package checker; + +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ + + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.Collections; +import java.util.EnumMap; +import java.util.Map; + +/** + * Represents the device configuration. The values are loaded from an XML file by JAXB. + */ +@XmlRootElement +public class Device { + + @XmlElement() + private Map supportedModules = new EnumMap<>(Module.class); + + /** + * Returns map of supported modules. The map key is module. The map value is version. + * + * @return map of supported modules. + */ + public Map getSupportedModules() { + return Collections.unmodifiableMap(supportedModules); + } +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Kettle.xml b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Kettle.xml new file mode 100644 index 00000000000..2e0357d2f46 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Kettle.xml @@ -0,0 +1,57 @@ + + + + + + + DISPLAY + 2 + + + THERMOMETER + 1 + + + CLOCK + 4 + + + \ No newline at end of file diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Module.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Module.java new file mode 100644 index 00000000000..2b97b4e832d --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Module.java @@ -0,0 +1,49 @@ +package checker; + +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ + + +/** + * Represents available modules. + */ +public enum Module { + + DISPLAY, CLOCK, THERMOMETER, HEATER, SPEAKER, GSM, LED; +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/PluginChecker.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/PluginChecker.java new file mode 100644 index 00000000000..6db5bae4141 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/PluginChecker.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package checker; + +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.tools.Diagnostic; +import javax.xml.bind.JAXBContext; +import java.io.File; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import javax.xml.bind.JAXBException; + +/** + * Reads the device configuration from the XML file specified by -Adevice=device.xml. + * For each class in a project, checks required modules. If the device doesn't have + * the required module, then a compilation error will be shown. + */ +@SupportedAnnotationTypes("checker.RequireContainer") +@SupportedSourceVersion(SourceVersion.RELEASE_8) +public class PluginChecker extends javax.annotation.processing.AbstractProcessor { + + /** + * Name of the option to get the path to the xml with device configuration. + */ + public static final String DEVICE_OPTION = "device"; + private Device device; + + /** + * Only the device option is supported. + * + * {@inheritDoc} + */ + @Override + public Set getSupportedOptions() { + return new HashSet<>(Arrays.asList(DEVICE_OPTION)); + } + + /** + * Initializes the processor by loading the device configuration. + * + * {@inheritDoc} + */ + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + try { + String deviceOption = processingEnv.getOptions().get(DEVICE_OPTION); + device = (Device) JAXBContext.newInstance(Device.class) + .createUnmarshaller().unmarshal(new File(deviceOption)); + } catch (JAXBException e) { + throw new RuntimeException( + "Please specify device by -Adevice=device.xml\n" + + e.toString(), e); + } + } + + /** + * Processes @Require annotations and checks that Device meets requirements. + * + * {@inheritDoc} + */ + @Override + public boolean process(Set annotations, + RoundEnvironment roundEnv) { + for (Element el : roundEnv.getElementsAnnotatedWith(RequireContainer.class)) { + for (Require req : el.getAnnotationsByType(Require.class)) { + //for every Require annotation checks if device has module of required version. + Integer version = device.getSupportedModules().get(req.value()); + + if (version == null + || version < req.minVersion() + || version > req.maxVersion()) { + //if module is optional then show only warning not error + if (req.optional()) { + processingEnv.getMessager() + .printMessage(Diagnostic.Kind.WARNING, + "Plugin [" + el + "] requires " + req + + "\n but device " + (version == null + ? "doesn't have such module." + + " This module is optional." + + " So plugin will work but miss" + + " some functionality" + : "has " + version + + " version of that module")); + } else { + processingEnv.getMessager() + .printMessage(Diagnostic.Kind.ERROR, + "Plugin [" + el + "] requires " + req + + "\n but device " + + (version == null + ? "doesn't have such module" + : "has " + version + + " version of that module")); + } + } + } + return true; + } + return false; + } +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Require.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Require.java new file mode 100644 index 00000000000..6681c2810e2 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Require.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package checker; + +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Indicates that a plug-in depends on a module. + */ +@Retention(RetentionPolicy.CLASS) +@Repeatable(RequireContainer.class) +public @interface Require { + + /** + * Returns the required module. + * + * @return required module. + */ + Module value(); + + /** + * Returns the minimum supported version of a module. + * + * @return minimum supported version of a module. + */ + int minVersion() default 1; + + /** + * Returns the maximum supported version of a module. + * + * @return maximum supported version of a module. + */ + int maxVersion() default Integer.MAX_VALUE; + + /** + * Returns true if a module is optional. A module is optional if a system + * works without that module but is missing some functionality. Returns false if a system + * won't work without the specified module. + * + * @return true if module is optional. False otherwise. + */ + boolean optional() default false; +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/RequireContainer.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/RequireContainer.java new file mode 100644 index 00000000000..d18e0d523c0 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/RequireContainer.java @@ -0,0 +1,51 @@ +package checker; + +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * A container for the repeatable @Require annotation. + */ +@Retention(RetentionPolicy.CLASS) +public @interface RequireContainer { + + Require[] value(); +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/BoilerPlugin.java b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/BoilerPlugin.java new file mode 100644 index 00000000000..3a9d842e5b0 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/BoilerPlugin.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package plugins; + +import checker.Module; +import checker.Require; + +/** + * BoilerPlugin provides support for boiling water and keeping water warm. + */ +@Require(value = Module.CLOCK, maxVersion = 3) +@Require(value = Module.THERMOMETER) +@Require(value = Module.HEATER) +@Require(value = Module.LED, optional = true) //will use if present +public class BoilerPlugin { + + /** + * Heats water up to 100 degrees Celsius. + */ + public void boil() { + boil(100); + } + + /** + * Heats water up to temperature. + * + * @param temperature - desired temperature of the water in the boiler + */ + public void boil(int temperature) { + /* + * Turn on heater and wait while temperature reaches desired temperature + * in Celsius. Finally, turn off heater. + * If present, the LED light changes color according to the temperature. + */ + } + + /** + * Keeps desired temperature. + * + * @param temperature - desired temperature of the water in the boiler + * @param seconds - period of time for checking temperature in seconds + */ + public void keepWarm(int temperature, int seconds) { + //Every n seconds check temperature and warm up, if necessary. + } + +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/ExtendedBoilerPlugin.java b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/ExtendedBoilerPlugin.java new file mode 100644 index 00000000000..b7be61025a0 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/ExtendedBoilerPlugin.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package plugins; + +import checker.Module; +import checker.Require; +import java.util.Calendar; + +/** + * Introduces new features for BoilerPlugin. Features are boiling water by an + * SMS and boiling water by date with notification by a phone call. + */ +@Require(value = Module.SPEAKER) +@Require(value = Module.GSM, minVersion = 3) +@Require(value = Module.DISPLAY) +public class ExtendedBoilerPlugin extends BoilerPlugin { + + /** + * Boils water at the appointed time and wakes you up by a ring and phone + * call. Shows "Good morning" and a quote of the day from the Internet on the + * display. + * + * @param calendar - date and time when water should be boiled + * @param phoneNumber - phone number to call + */ + public void boilAndWakeUp(Calendar calendar, int phoneNumber) { + //implementation + } + + /** + * Boils water at the appointed time by getting an SMS of fixed format. + * Sends an SMS on finish. + * + * @param sms - text of SMS + */ + public void boilBySMS(String sms) { + //implementation + } +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/TimerPlugin.java b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/TimerPlugin.java new file mode 100644 index 00000000000..678785c5cf4 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/TimerPlugin.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package plugins; + +import checker.Module; +import checker.Require; + +/** + * Timer plug-in is used to support an alarm and a timer. It depends on Display and + * Clock modules. + */ +@Require(Module.DISPLAY) +@Require(value = Module.CLOCK, maxVersion = 3) +public class TimerPlugin { + + /** + * Sets timer. + * + * @param time - the remaining time. + */ + public void timer(long time) { + //start timer + //show the remaining time on display + } + + /** + * Sets alarm. + * + * @param time - the alarm time. + */ + public void alarm(long time) { + //start alarm + //show current time and alarm time on display + } +} diff --git a/jdk/src/share/sample/annotations/Validator/src/PositiveIntegerSupplier.java b/jdk/src/share/sample/annotations/Validator/src/PositiveIntegerSupplier.java new file mode 100644 index 00000000000..0a149139b53 --- /dev/null +++ b/jdk/src/share/sample/annotations/Validator/src/PositiveIntegerSupplier.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import java.util.function.Supplier; + +/** + * Supplies a positive number. + */ +@Validate(value = Validator.INTEGER_NUMBER, + description = "It's not an Integer ") +@Validate(value = Validator.POSITIVE_NUMBER, + description = "It's not a positive Number") +public class PositiveIntegerSupplier implements Supplier { + + /** + * Returns a string representation of a positive integer. + * + * @return string representation of a positive integer. + */ + @Override + public String get() { + return "20005"; //random number + } +} diff --git a/jdk/src/share/sample/annotations/Validator/src/SupplierValidator.java b/jdk/src/share/sample/annotations/Validator/src/SupplierValidator.java new file mode 100644 index 00000000000..479ac8643e1 --- /dev/null +++ b/jdk/src/share/sample/annotations/Validator/src/SupplierValidator.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import javax.xml.bind.ValidationException; +import java.util.function.Supplier; + +/** + * Validates the supplier. + */ +public class SupplierValidator { + + /** + * Validates the supplier. + * + * @param supplier - Supplier that needs to be validated. + * @return true if supplier has passed validation check. False otherwise. + */ + public static boolean validate(Supplier supplier) { + for (Validate annotation + : supplier.getClass().getAnnotationsByType(Validate.class)) { + try { + annotation.value().validate(supplier); + } catch (ValidationException e) { + System.out.println(annotation.description()); + e.printStackTrace(); + return false; + } + } + return true; + } +} diff --git a/jdk/src/share/sample/annotations/Validator/src/Validate.java b/jdk/src/share/sample/annotations/Validator/src/Validate.java new file mode 100644 index 00000000000..e0404ea9471 --- /dev/null +++ b/jdk/src/share/sample/annotations/Validator/src/Validate.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Indicates that the class should be validated by the specified validator. + */ +@Retention(RetentionPolicy.RUNTIME) +@Repeatable(ValidateContainer.class) +public @interface Validate { + + /** + * Returns the validator that should validate the annotated class. + * + * @return Validator that should validate annotated class. + */ + Validator value(); + + /** + * Returns text to describe the failure of the validation check. + * + * @return text to describe the failure of the validation check. + */ + String description() default ""; +} + +/** + * A container for the repeatable @Validate annotation. + * + * @author Andrey Nazarov + */ +@Retention(RetentionPolicy.RUNTIME) +@interface ValidateContainer { + + Validate[] value(); +} diff --git a/jdk/src/share/sample/annotations/Validator/src/Validator.java b/jdk/src/share/sample/annotations/Validator/src/Validator.java new file mode 100644 index 00000000000..9e074f5a8e5 --- /dev/null +++ b/jdk/src/share/sample/annotations/Validator/src/Validator.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import javax.xml.bind.ValidationException; +import java.util.function.Supplier; + +/** + * Enum of Validator implementations. + */ +public enum Validator { + + /** + * This validator checks that the string represents an integer. + */ + INTEGER_NUMBER { + /** + * Checks that the string represents an integer. + * + * @param string - a string supplier + * @throws ValidationException if the validation check fails + */ + @Override + void validate(Supplier string) throws ValidationException { + try { + Integer.parseInt((String) string.get()); + } catch (NumberFormatException ex) { + throw new ValidationException("Error while validating " + + string.get()); + } + } + }, + /** + * This validator checks that the string represents a positive number. + */ + POSITIVE_NUMBER { + /** + * Checks that the string represents a positive number. + * + * @param string - an string supplier + * @throws ValidationException if the validation check fails + */ + @Override + void validate(Supplier string) throws ValidationException { + try { + if (Double.compare(0.0, Double.parseDouble( + (String) string.get())) > 0) { + throw new Exception(); + } + } catch (Exception ex) { + throw new ValidationException("Error while validating " + + string.get()); + } + } + }; + + /** + * Checks that the supplier is valid. + * + * @param string - a string supplier + * @throws ValidationException if validation check fails + */ + abstract void validate(Supplier string) throws ValidationException; + +} diff --git a/jdk/src/share/sample/annotations/index.html b/jdk/src/share/sample/annotations/index.html new file mode 100644 index 00000000000..804c83df441 --- /dev/null +++ b/jdk/src/share/sample/annotations/index.html @@ -0,0 +1,67 @@ + + + + Repeating Annotations Demo + + +

      Repeating Annotations Demo

      + +

      + This demo shows how to use repeating annotations at runtime and at compile time. +

      + +
        +
      • Dependency checker.

        + +

        + Shows how to define repeating annotations and process them at compile time. + The problem domain is some code that performs useful operations on hardware devices. + The code relies on "modules" to be present on the devices. Applicability of the code to a particular + device is checked while compiling the code for a particular device. + A set of modules provided by a device is listed in an xml file that turns red during the compilation + phase and is compared with the required module set specified by annotations. + For instance, there is kettle with hardware modules: thermometer, display, and clock. + There is also a boiler plug-in that requires clock, thermometer, heater, and optionally an LED light. + + Build the PluginChecker annotation processor first. + Then, run javac with the annotation processor against plug-in sources using the following command:

        + + javac -cp "PluginChecker.jar" -processor checker.PluginChecker -Adevice=Kettle.xml -proc:only <source + files> + +

        + where PluginChecker.jar - path to jar file that contains PluginChecker annotation processor + class.
        + Kettle.xml - path to device descriptor Kettle.xml
        + <source files> - source files in Plugins/src +

        + For more information, see the source files. +

        + + +
      • Validator.

        + +

        + Shows how to define repeating annotations and process them at runtime. + A problem domain is code that needs to validate provided Suppliers for conformance to some criteria. + The criteria are implemented by the Validator class which is applied by using annotations that are placed in + the code whenever validation is needed. For more information, see the + source files. +

        + +

        +

        +

        + Sources: Validator/src/ +
      + + \ No newline at end of file diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/index.html b/jdk/src/share/sample/lambda/BulkDataOperations/index.html new file mode 100644 index 00000000000..5a16695f21d --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/index.html @@ -0,0 +1,49 @@ + + + + Bulk Data Operations Demo + + +

      Bulk Data Operations Demo

      + +

      + This demo shows how to use bulk data operations with the new JDK8 + Collections API. + The demo also demonstrates new features of JDK8 such as lambda expressions + and method/constructor references. +

      + +
        +
      • CSV Processor

        + +

        + Analyzes a CSV file, finds and collects useful information, computes + different statistics. For more information, see the source file. +

        + Source: src/CSVProcessor.java +
      • Grep

        + +

        + Behaves like the standard Linux tool Grep. For more information, see + the source file. +

        + Source: src/Grep.java +
      • PasswordGenerator

        + +

        + Produces a password of desired length. For more information see + source file. +

        + Source: src/PasswordGenerator.java +
      • WC

        + +

        + Counts newlines, words, characters, and the maximum line length of a + text file. For more information, see the source + file. +

        + Source: src/WC.java +
      + + \ No newline at end of file diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/src/CSVProcessor.java b/jdk/src/share/sample/lambda/BulkDataOperations/src/CSVProcessor.java new file mode 100644 index 00000000000..ded9030209d --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/src/CSVProcessor.java @@ -0,0 +1,368 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.BufferedReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.*; +import java.util.function.*; +import java.util.regex.Pattern; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static java.lang.Double.parseDouble; +import static java.util.stream.Collectors.*; + +/** + * CSVProcessor is a tool for processing CSV files. There are several + * command-line options. Consult the {@link #printUsageAndExit} method for + * instructions and command line parameters. This sample shows examples of the + * following features: + *
        + *
      • Lambda and bulk operations. Working with streams: map(...), filter(...), + * sorted(...) methods. The collect(...) method with different collectors: + * Collectors.maxBy(...), Collectors.minBy(...), Collectors.toList(), + * Collectors.toCollection(...), Collectors.groupingBy(...), + * Collectors.toDoubleSummaryStatistics(...), and a custom Collector.
      • + *
      • Static method reference for printing values.
      • + *
      • Try-with-resources feature for closing files.
      • + *
      • Switch by String feature.
      • + *
      • Other new APIs: Pattern.asPredicate(), BinaryOperator + * BufferedReader.lines(), Collection.forEach(...), Comparator.comparing(...), + * Comparator.reversed(), Arrays.stream(...).
      • + *
      + * + */ +public class CSVProcessor { + + //Number of characters that may be read + private static final int READ_AHEAD_LIMIT = 100_000_000; + + /** + * The main method for the CSVProcessor program. Run the program with an + * empty argument list to see possible arguments. + * + * @param args the argument list for CSVProcessor. + */ + public static void main(String[] args) { + if (args.length < 2) { + printUsageAndExit(); + } + try (BufferedReader br = new BufferedReader( + Files.newBufferedReader(Paths.get(args[args.length - 1])))) { + //Assume that the first line contains column names. + List header = Arrays.stream(br.readLine().split(",")) + .map(String::trim).collect(toList()); + //Calculate an index of the column in question. + int column = getColumnNumber(header, args[1]); + switch (args[0]) { + case "sort": + verifyArgumentNumber(args, 4); + //Define the sort order. + boolean isAsc; + switch (args[2].toUpperCase()) { + case "ASC": + isAsc = true; + break; + case "DESC": + isAsc = false; + break; + default: + printUsageAndExit("Illegal argument" + args[2]); + return;//Should not be reached. + } + /* + * Create a comparator that compares lines by comparing + * values in the specified column. + */ + Comparator cmp + = Comparator.comparing(str -> getCell(str, column), + String.CASE_INSENSITIVE_ORDER); + /* + * sorted(...) is used to sort records. + * forEach(...) is used to output sorted records. + */ + br.lines().sorted(isAsc ? cmp : cmp.reversed()) + .forEach(System.out::println); + break; + case "search": + verifyArgumentNumber(args, 4); + /* + * Records are filtered by a regex. + * forEach(...) is used to output filtered records. + */ + Predicate pattern + = Pattern.compile(args[2]).asPredicate(); + br.lines().filter(str -> pattern.test(getCell(str, column))) + .forEach(System.out::println); + break; + case "groupby": + verifyArgumentNumber(args, 3); + /* + * Group lines by values in the column with collect(...), and + * print with forEach(...) for every distinct value within + * the column. + */ + br.lines().collect( + Collectors.groupingBy(str -> getCell(str, column), + toCollection(TreeSet::new))) + .forEach((str, set) -> { + System.out.println(str + ":"); + set.forEach(System.out::println); + }); + break; + case "stat": + verifyArgumentNumber(args, 3); + + /* + * BufferedReader will be read several times. + * Mark this point to return here after each pass. + * BufferedReader will be read right after the headers line + * because it is already read. + */ + br.mark(READ_AHEAD_LIMIT); + + /* + * Statistics can be collected by a custom collector in one + * pass. One pass is preferable. + */ + System.out.println( + br.lines().collect(new Statistics(column))); + + /* + * Alternatively, statistics can be collected + * by a built-in API in several passes. + * This method demonstrates how separate operations can be + * implemented using a built-in API. + */ + br.reset(); + statInSeveralPasses(br, column); + break; + default: + printUsageAndExit("Illegal argument" + args[0]); + } + } catch (IOException e) { + printUsageAndExit(e.toString()); + } + } + + private static void statInSeveralPasses(BufferedReader br, int column) + throws IOException { + System.out.println("#-----Statistics in several passes-------#"); + //Create a comparator to compare records by the column. + Comparator comparator + = Comparator.comparing( + (String str) -> parseDouble(getCell(str, column))); + //Find max record by using Collectors.maxBy(...) + System.out.println( + "Max: " + br.lines().collect(maxBy(comparator)).get()); + br.reset(); + //Find min record by using Collectors.minBy(...) + System.out.println( + "Min: " + br.lines().collect(minBy(comparator)).get()); + br.reset(); + //Compute the average value and sum with + //Collectors.toDoubleSummaryStatistics(...) + DoubleSummaryStatistics doubleSummaryStatistics + = br.lines().collect(summarizingDouble( + str -> parseDouble(getCell(str, column)))); + System.out.println("Average: " + doubleSummaryStatistics.getAverage()); + System.out.println("Sum: " + doubleSummaryStatistics.getSum()); + } + + private static void verifyArgumentNumber(String[] args, int n) { + if (args.length != n) { + printUsageAndExit("Expected " + n + " arguments but was " + + args.length); + } + } + + private static int getColumnNumber(List header, String name) { + int column = header.indexOf(name); + if (column == -1) { + printUsageAndExit("There is no column with name " + name); + } + return column; + } + + private static String getCell(String record, int column) { + return record.split(",")[column].trim(); + } + + private static void printUsageAndExit(String... str) { + System.out.println("Usages:"); + + System.out.println("CSVProcessor sort COLUMN_NAME ASC|DESC FILE"); + System.out.println("Sort lines by column COLUMN_NAME in CSV FILE\n"); + + System.out.println("CSVProcessor search COLUMN_NAME REGEX FILE"); + System.out.println("Search for REGEX in column COLUMN_NAME in CSV FILE\n"); + + System.out.println("CSVProcessor groupby COLUMN_NAME FILE"); + System.out.println("Split lines into different groups according to column " + + "COLUMN_NAME value\n"); + + System.out.println("CSVProcessor stat COLUMN_NAME FILE"); + System.out.println("Compute max/min/average/sum statistics by column " + + "COLUMN_NAME\n"); + + Arrays.asList(str).forEach(System.err::println); + System.exit(1); + } + + /* + * This is a custom implementation of the Collector interface. + * Statistics are objects gather max,min,sum,average statistics. + */ + private static class Statistics + implements Collector { + + + /* + * This implementation does not need to be thread safe because + * the parallel implementation of + * {@link java.util.stream.Stream#collect Stream.collect()} + * provides the necessary partitioning and isolation for safe parallel + * execution. + */ + private String maxRecord; + private String minRecord; + + private double sum; + private int lineCount; + private final BinaryOperator maxOperator; + private final BinaryOperator minOperator; + private final int column; + + public Statistics(int column) { + this.column = column; + Comparator cmp = Comparator.comparing( + (String str) -> parseDouble(getCell(str, column))); + maxOperator = BinaryOperator.maxBy(cmp); + minOperator = BinaryOperator.minBy(cmp); + } + + /* + * Process line. + */ + public Statistics accept(String line) { + maxRecord = maxRecord == null + ? line : maxOperator.apply(maxRecord, line); + minRecord = minRecord == null + ? line : minOperator.apply(minRecord, line); + + sum += parseDouble(getCell(line, column)); + lineCount++; + return this; + } + + + /* + * Merge two Statistics. + */ + public Statistics combine(Statistics stat) { + maxRecord = maxOperator.apply(maxRecord, stat.getMaxRecord()); + minRecord = minOperator.apply(minRecord, stat.getMinRecord()); + sum += stat.getSum(); + lineCount += stat.getLineCount(); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("#------Statistics------#\n"); + sb.append("Max: ").append(getMaxRecord()).append("\n"); + sb.append("Min: ").append(getMinRecord()).append("\n"); + sb.append("Sum = ").append(getSum()).append("\n"); + sb.append("Average = ").append(average()).append("\n"); + sb.append("#------Statistics------#\n"); + return sb.toString(); + } + + @Override + public Supplier supplier() { + return () -> new Statistics(column); + } + + @Override + public BiConsumer accumulator() { + return Statistics::accept; + } + + @Override + public BinaryOperator combiner() { + return Statistics::combine; + + } + + @Override + public Function finisher() { + return stat -> stat; + } + + @Override + public Set characteristics() { + return EnumSet.of(Characteristics.IDENTITY_FINISH); + } + + private String getMaxRecord() { + return maxRecord; + } + + private String getMinRecord() { + return minRecord; + } + + private double getSum() { + return sum; + } + + private double average() { + return sum / lineCount; + } + + private int getLineCount() { + return lineCount; + } + + } + +} diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/src/Grep.java b/jdk/src/share/sample/lambda/BulkDataOperations/src/Grep.java new file mode 100644 index 00000000000..cb4bdf765cb --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/src/Grep.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.toList; + +/** + * Grep prints lines matching a regex. See {@link #printUsageAndExit(String...)} + * method for instructions and command line parameters. This sample shows + * examples of using next features: + *
        + *
      • Lambda and bulk operations. Working with streams: + * map(...),filter(...),flatMap(...),limit(...) methods.
      • + *
      • Static method reference for printing values.
      • + *
      • New Collections API forEach(...) method.
      • + *
      • Try-with-resources feature.
      • + *
      • new Files.walk(...), Files.lines(...) API.
      • + *
      • Streams that need to be closed.
      • + *
      + * + */ +public class Grep { + + private static void printUsageAndExit(String... str) { + System.out.println("Usage: " + Grep.class.getSimpleName() + + " [OPTION]... PATTERN FILE..."); + System.out.println("Search for PATTERN in each FILE. " + + "If FILE is a directory then whole file tree of the directory" + + " will be processed."); + System.out.println("Example: grep -m 100 'hello world' menu.h main.c"); + System.out.println("Options:"); + System.out.println(" -m NUM: stop analysis after NUM matches"); + Arrays.asList(str).forEach(System.err::println); + System.exit(1); + } + + /** + * The main method for the Grep program. Run program with empty argument + * list to see possible arguments. + * + * @param args the argument list for Grep. + * @throws java.io.IOException If an I/O error occurs. + */ + public static void main(String[] args) throws IOException { + long maxCount = Long.MAX_VALUE; + if (args.length < 2) { + printUsageAndExit(); + } + int i = 0; + //parse OPTIONS + while (args[i].startsWith("-")) { + switch (args[i]) { + case "-m": + try { + maxCount = Long.parseLong(args[++i]); + } catch (NumberFormatException ex) { + printUsageAndExit(ex.toString()); + } + break; + default: + printUsageAndExit("Unexpected option " + args[i]); + } + i++; + } + //parse PATTERN + Pattern pattern = Pattern.compile(args[i++]); + if (i == args.length) { + printUsageAndExit("There are no files for input"); + } + + try { + /* + * First obtain the list of all paths. + * For a small number of arguments there is little to be gained + * by producing this list in parallel. For one argument + * there will be no parallelism. + * + * File names are converted to paths. If a path is a directory then + * Stream is populated with whole file tree of the directory by + * flatMap() method. Files are filtered from directories. + */ + List files = Arrays.stream(args, i, args.length) + .map(Paths::get) + // flatMap will ensure each I/O-based stream will be closed + .flatMap(Grep::getPathStream) + .filter(Files::isRegularFile) + .collect(toList()); + /* + * Then operate on that list in parallel. + * This is likely to give a more even distribution of work for + * parallel execution. + * + * Lines are extracted from files. Lines are filtered by pattern. + * Stream is limited by number of matches. Each remaining string is + * displayed in std output by method reference System.out::println. + */ + files.parallelStream() + // flatMap will ensure each I/O-based stream will be closed + .flatMap(Grep::path2Lines) + .filter(pattern.asPredicate()) + .limit(maxCount) + .forEachOrdered(System.out::println); + } catch (UncheckedIOException ioe) { + printUsageAndExit(ioe.toString()); + } + } + + /** + * Flattens file system hierarchy into a stream. This code is not inlined + * for the reason of Files.walk() throwing a checked IOException that must + * be caught. + * + * @param path - the file or directory + * @return Whole file tree starting from path, a stream with one element - + * the path itself - if it is a file. + */ + private static Stream getPathStream(Path path) { + try { + return Files.walk(path); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + /** + * Produces a stream of lines from a file. The result is a stream in order + * to close it later. This code is not inlined for the reason of + * Files.lines() throwing a checked IOException that must be caught. + * + * @param path - the file to read + * @return stream of lines from the file + */ + private static Stream path2Lines(Path path) { + try { + return Files.lines(path); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/src/PasswordGenerator.java b/jdk/src/share/sample/lambda/BulkDataOperations/src/PasswordGenerator.java new file mode 100644 index 00000000000..e4677985929 --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/src/PasswordGenerator.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; + +/** + * Generates password of desired length. See {@link #usage} method + * for instructions and command line parameters. This sample shows usages of: + *
        + *
      • Method references.
      • + *
      • Lambda and bulk operations. A stream of random integers is mapped to + * chars, limited by desired length and printed in standard output as password + * string.
      • + *
      + * + */ +public class PasswordGenerator { + + private static void usage() { + System.out.println("Usage: PasswordGenerator LENGTH"); + System.out.println( + "Password Generator produces password of desired LENGTH."); + } + + private static final List PASSWORD_CHARS = new ArrayList<>(); + + //Valid symbols. + static { + IntStream.rangeClosed('0', '9').forEach(PASSWORD_CHARS::add); // 0-9 + IntStream.rangeClosed('A', 'Z').forEach(PASSWORD_CHARS::add); // A-Z + IntStream.rangeClosed('a', 'z').forEach(PASSWORD_CHARS::add); // a-z + } + + /** + * The main method for the PasswordGenerator program. Run program with empty + * argument list to see possible arguments. + * + * @param args the argument list for PasswordGenerator. + */ + public static void main(String[] args) { + + if (args.length != 1) { + usage(); + return; + } + + long passwordLength; + try { + passwordLength = Long.parseLong(args[0]); + if (passwordLength < 1) { + printMessageAndUsage("Length has to be positive"); + return; + } + } catch (NumberFormatException ex) { + printMessageAndUsage("Unexpected number format" + args[0]); + return; + } + /* + * Stream of random integers is created containing Integer values + * in range from 0 to PASSWORD_CHARS.size(). + * The stream is limited by passwordLength. + * Valid chars are selected by generated index. + */ + new SecureRandom().ints(passwordLength, 0, PASSWORD_CHARS.size()) + .map(PASSWORD_CHARS::get) + .forEach(i -> System.out.print((char) i)); + } + + private static void printMessageAndUsage(String message) { + System.err.println(message); + usage(); + } + +} diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/src/WC.java b/jdk/src/share/sample/lambda/BulkDataOperations/src/WC.java new file mode 100644 index 00000000000..c724f159a19 --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/src/WC.java @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.function.Consumer; +import java.util.regex.Pattern; + +/** + * WC - Prints newline, word, and character counts for each file. See + * the {@link #usage} method for instructions and command line parameters. This + * sample shows usages of: + *
        + *
      • Lambda and bulk operations. Shows how to create a custom collector to + * gather custom statistics. Implements the collection of statistics using a + * built-in API.
      • + *
      • Constructor reference.
      • + *
      • Try-with-resources feature.
      • + *
      + * + */ +public class WC { + + //The number of characters that may be read. + private static final int READ_AHEAD_LIMIT = 100_000_000; + + //The pattern for splitting strings by non word characters to get words. + private static final Pattern nonWordPattern = Pattern.compile("\\W"); + + /** + * The main method for the WC program. Run the program with an empty + * argument list to see possible arguments. + * + * @param args the argument list for WC + * @throws java.io.IOException If an input exception occurred. + */ + public static void main(String[] args) throws IOException { + + if (args.length != 1) { + usage(); + return; + } + + try (BufferedReader reader = new BufferedReader( + new FileReader(args[0]))) { + reader.mark(READ_AHEAD_LIMIT); + /* + * Statistics can be gathered in four passes using a built-in API. + * The method demonstrates how separate operations can be + * implemented using a built-in API. + */ + collectInFourPasses(reader); + /* + * Usage of several passes to collect data is not the best way. + * Statistics can be gathered by a custom collector in one pass. + */ + reader.reset(); + collectInOnePass(reader); + } catch (FileNotFoundException e) { + usage(); + System.err.println(e); + } + } + + private static void collectInFourPasses(BufferedReader reader) + throws IOException { + /* + * Input is read as a stream of lines by lines(). + * Every line is turned into a stream of chars by the flatMapToInt(...) + * method. + * Length of the stream is counted by count(). + */ + System.out.println("Character count = " + + reader.lines().flatMapToInt(String::chars).count()); + /* + * Input is read as a stream of lines by lines(). + * Every line is split by nonWordPattern into words by flatMap(...) + * method. + * Empty lines are removed by the filter(...) method. + * Length of the stream is counted by count(). + */ + reader.reset(); + System.out.println("Word count = " + + reader.lines() + .flatMap(nonWordPattern::splitAsStream) + .filter(str -> !str.isEmpty()).count()); + + reader.reset(); + System.out.println("Newline count = " + reader.lines().count()); + /* + * Input is read as a stream of lines by lines(). + * Every line is mapped to its length. + * Maximum of the lengths is calculated. + */ + reader.reset(); + System.out.println("Max line length = " + + reader.lines().mapToInt(String::length).max().getAsInt()); + } + + private static void collectInOnePass(BufferedReader reader) { + /* + * The collect() method has three parameters: + * The first parameter is the {@code WCStatistic} constructor reference. + * collect() will create {@code WCStatistics} instances, where + * statistics will be aggregated. + * The second parameter shows how {@code WCStatistics} will process + * String. + * The third parameter shows how to merge two {@code WCStatistic} + * instances. + * + * Also {@code Collector} can be used, which would be more reusable + * solution. See {@code CSVProcessor} example for how {@code Collector} + * can be implemented. + * + * Note that the any performance increase when going parallel will + * depend on the size of the input (lines) and the cost per-element. + */ + WCStatistics wc = reader.lines().parallel() + .collect(WCStatistics::new, + WCStatistics::accept, + WCStatistics::combine); + System.out.println(wc); + } + + private static void usage() { + System.out.println("Usage: " + WC.class.getSimpleName() + " FILE"); + System.out.println("Print newline, word," + + " character counts and max line length for FILE."); + } + + private static class WCStatistics implements Consumer { + /* + * @implNote This implementation does not need to be thread safe because + * the parallel implementation of + * {@link java.util.stream.Stream#collect Stream.collect()} + * provides the necessary partitioning and isolation for safe parallel + * execution. + */ + + private long characterCount; + private long lineCount; + private long wordCount; + private long maxLineLength; + + + /* + * Processes line. + */ + @Override + public void accept(String line) { + characterCount += line.length(); + lineCount++; + wordCount += nonWordPattern.splitAsStream(line) + .filter(str -> !str.isEmpty()).count(); + maxLineLength = Math.max(maxLineLength, line.length()); + } + + /* + * Merges two WCStatistics. + */ + public void combine(WCStatistics stat) { + wordCount += stat.wordCount; + lineCount += stat.lineCount; + characterCount += stat.characterCount; + maxLineLength = Math.max(maxLineLength, stat.maxLineLength); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("#------WCStatistic------#\n"); + sb.append("Character count = ").append(characterCount).append('\n'); + sb.append("Word count = ").append(wordCount).append('\n'); + sb.append("Newline count = ").append(lineCount).append('\n'); + sb.append("Max line length = ").append(maxLineLength).append('\n'); + return sb.toString(); + } + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/ArrayIterator.java b/jdk/src/share/sample/lambda/DefaultMethods/ArrayIterator.java new file mode 100644 index 00000000000..2eca80149b8 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/ArrayIterator.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * The code sample illustrates the usage of default methods in the JDK 8. Most + * implementations of {@link Iterator} don't provide a useful + * {@link Iterator#remove()} method, however, + * they still have to implement this method to throw + * an UnsupportedOperationException. With the default method, the same + * default behavior in interface Iterator itself can be provided. + */ +public class ArrayIterator { + + /** Close the constructor because ArrayIterator is part of the utility + * class. + */ + protected ArrayIterator() { + throw new UnsupportedOperationException(); + } + + /** + * Returns an iterator that goes over the elements in the array. + * + * @param type of an array element + * @param array source array to iterate over it + * @return an iterator that goes over the elements in the array + */ + public static Iterator iterator(final E[] array) { + return new Iterator() { + /** + * Index of the current position + * + */ + private int index = 0; + + /** + * Returns the next element in the iteration + * + * @return the next element in the iteration + * @throws NoSuchElementException if the iteration has no more + * elements + */ + @Override + public boolean hasNext() { + return (index < array.length); + } + + /** + * Returns {@code true} if the iteration has more elements. (In + * other words, returns {@code true} if {@link #next} returns + * an element, rather than throwing an exception.) + * + * @return {@code true} if the iteration has more elements + */ + @Override + public E next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + return array[index++]; + } + + /** + * This method does not need to be overwritten in JDK 8. + */ + //@Override + //public void remove() { + // throw UnsupportedOperationException( + // "Arrays don't support remove.") + //} + }; + } + + /** + * Sample usage of the ArrayIterator + * + * @param args command-line arguments + */ + public static void main(final String[] args) { + Iterator it = ArrayIterator.iterator( + new String[]{"one", "two", "three"}); + + while (it.hasNext()) { + System.out.println(it.next()); + } + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/DiamondInheritance.java b/jdk/src/share/sample/lambda/DefaultMethods/DiamondInheritance.java new file mode 100644 index 00000000000..9214d58a788 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/DiamondInheritance.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * This sample diamond interface inheritance with default methods. + * If there's not already a unique method implementation to inherit, + * you must provide it. The inheritance diagram is similar to the following: + *
      + *                   Animal
      + *                    /   \
      + *                 Horse   Bird
      + *                    \   /
      + *                   Pegasus
      + * 
      + * + * Both {@link Horse} and {@link Bird} interfaces implements the go + * method. The {@link Pegasus} class have to overrides the + * go method. + * + * The new syntax of super-call is used here: + *
      + *     <interface_name>.super.<method>(...);
      + *     For example:  Horse.super.go();
      + * 
      So, Pegasus moves like a horse. + */ +public class DiamondInheritance { + + /** + * Base interface to illustrate the diamond inheritance. + * + * @see DiamondInheritance + */ + public interface Animal { + + /** + * Return string representation of the "go" action for concrete animal + * + * @return string representation of the "go" action for concrete animal + */ + String go(); + } + + /** + * Interface to illustrate the diamond inheritance. + * + * @see DiamondInheritance + */ + public interface Horse extends Animal { + + /** + * Return string representation of the "go" action for horse + * + * @return string representation of the "go" action for horse + */ + @Override + default String go() { + return this.getClass().getSimpleName() + " walks on four legs"; + } + } + + /** + * Interface to illustrate the diamond inheritance. + * + * @see DiamondInheritance + */ + public interface Bird extends Animal { + + /** + * Return string representation of the "go" action for bird + * + * @return string representation of the "go" action for bird + */ + @Override + default String go() { + return this.getClass().getSimpleName() + " walks on two legs"; + } + + /** + * Return string representation of the "fly" action for bird + * + * @return string representation of the "fly" action for bird + */ + default String fly() { + return "I can fly"; + } + } + + /** + * Class to illustrate the diamond inheritance. Pegasus must mix horse and + * bird behavior. + * + * @see DiamondInheritance + */ + public static class Pegasus implements Horse, Bird { + + /** + * Return string representation of the "go" action for the fictitious + * creature Pegasus + * + * @return string representation of the "go" action for the fictitious + * creature Pegasus + */ + @Override + public String go() { + return Horse.super.go(); + } + } + + /** + * Illustrate the behavior of the {@link Pegasus} class + * + * @param args command line arguments + */ + public static void main(final String[] args) { + System.out.println(new Pegasus().go()); + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/Inheritance.java b/jdk/src/share/sample/lambda/DefaultMethods/Inheritance.java new file mode 100644 index 00000000000..961de2c24d5 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/Inheritance.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * The sample illustrates rules to resolve conflicts between inheritance + * candidates with default methods. There are two simple rules: + *
        + *
      • Class wins. If the superclass has a concrete or abstract declaration of + * this method, then it is preferred over all defaults.
      • + *
      • Subtype wins. If an interface extends another interface, and both provide + * a default, then the more specific interface wins.
      • + *
      + */ +public class Inheritance { + + /** + * The behavior of an creature that can swim + */ + public interface Swimable { + + /** + * Return string representation of the swim action for a creature that + * can swim + * + * @return string representation of the swim action for a creature + * that can swim + */ + default String swim() { + return "I can swim."; + } + } + + /** + * The abstract class that overrides {@link #swim} method + */ + public abstract static class Fish implements Swimable { + + /** + * Return string representation of the swim action for a fish + * + * @return string representation of the swim action for a fish + */ + @Override + public String swim() { + return this.getClass().getSimpleName() + " swims under water"; + } + } + + /** + * This class is used for the illustration rule of 1. See the source code + * of the {@link #main} method. + *
      +     *      System.out.println(new Tuna().swim()); //"Tuna swims under water" output is suspected here
      +     * 
      + */ + public static class Tuna extends Fish implements Swimable { + } + + /** + * The behavior of an creature that can dive: the interface that overrides + * {@link #swim} method (subtype of {@link Swimable}) + */ + public interface Diveable extends Swimable { + + /** + * Return string representation of the swim action for a creature that + * can dive + * + * @return string representation of the swim action for a creature + * that can dive + */ + @Override + default String swim() { + return "I can swim on the surface of the water."; + } + + /** + * Return string representation of the dive action for a creature that + * can dive + * + * @return string representation of the dive action for a creature + * that can dive + */ + default String dive() { + return "I can dive."; + } + } + + /** + * This class is used for the illustration of rule 2. See the source code + * of the {@link #main} method + *
      +     *      //"I can swim on the surface of the water." output is suspected here
      +     *      System.out.println(new Duck().swim());
      +     * 
      + */ + public static class Duck implements Swimable, Diveable { + } + + /** + * Illustrate behavior of the classes: {@link Tuna} and {@link Duck} + * + * @param args command line arguments + */ + public static void main(final String[] args) { + // Illustrates rule 1. The Fish.swim() implementation wins + //"Tuna swims under water" is output + System.out.println(new Tuna().swim()); + + // Illustrates rule 2. The Diveable.swim() implementation wins + //"I can swim on the surface of the water." is output + System.out.println(new Duck().swim()); + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/MixIn.java b/jdk/src/share/sample/lambda/DefaultMethods/MixIn.java new file mode 100644 index 00000000000..d9ed81dee27 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/MixIn.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.io.IOException; +import java.lang.reflect.Field; + +/** + * The example illustrates how to use the default method for mixin. + * @see BuildType + * @see Debuggable + */ +public class MixIn { + + /** + * Implement this interface for a class that must be in debug print + */ + public interface Debuggable { + + /** + * Print the class name and all fields to a string. Uses reflection to + * obtain and access fields of this object. + * + * @return the string formatted like the following:
      +         * State of the: <Class Name>
      +         * <member name> : <value>
      +         * ...
      +         * 
      + */ + default String toDebugString() { + StringBuilder sb = new StringBuilder(); + sb.append("State of the: ").append( + this.getClass().getSimpleName()).append("\n"); + for (Class cls = this.getClass(); + cls != null; + cls = cls.getSuperclass()) { + for (Field f : cls.getDeclaredFields()) { + try { + f.setAccessible(true); + sb.append(f.getName()).append(" : "). + append(f.get(this)).append("\n"); + } catch (IllegalAccessException e) { + } + } + } + return sb.toString(); + } + } + + /** + * Sample exception class to demonstrate mixin. This enum inherits the + * behavior of the {@link Debuggable} + */ + public static enum BuildType implements Debuggable { + + BUILD(0, "-build"), + PLAN(0, "-plan"), + EXCLUDE(1, "-exclude"), + TOTAL(2, "-total"); + + private final int compareOrder; + private final String pathSuffix; + + private BuildType(int compareOrder, String pathSuffix) { + this.compareOrder = compareOrder; + this.pathSuffix = pathSuffix; + } + + public int getCompareOrder() { + return compareOrder; + } + + public String getPathSuffix() { + return pathSuffix; + } + } + + /** + * Illustrate the behavior of the MixClass + * + * @param args command-line arguments + * @throws java.io.IOException internal demo error + */ + public static void main(final String[] args) throws IOException { + System.out.println(BuildType.BUILD.toDebugString()); + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/Reflection.java b/jdk/src/share/sample/lambda/DefaultMethods/Reflection.java new file mode 100644 index 00000000000..78424a240e8 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/Reflection.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.stream.Stream; + +/** + * The code sample illustrates changes in the reflection API linked + * default methods. Since Java SE 8, a new method is added into the class + * java.lang.reflect.Method, with which you can reflectively + * determine whether or not a default method provided by an interface + * (Method.isDefault()). + */ +public class Reflection { + + /** + * Base interface to illustrate the new reflection API. + * + * @see Dog + */ + public interface Animal { + + /** + * Return string representation of the eat action for Animal + * + * @return string representation of the eat action for Animal + */ + default String eat() { + return this.getClass().getSimpleName() + + " eats like an ordinary animal"; + } + + /** + * Return string representation of the sleep action for Animal + * + * @return string representation of the sleep action for Animal + */ + default String sleep() { + return this.getClass().getSimpleName() + + " sleeps like an ordinary animal"; + } + + /** + * Return string representation of the go action for Animal + * + * @return string representation of the go action for Animal + */ + String go(); + } + + /** + * Dog class to illustrate the new reflection API. You can see that: + *
        + *
      • the {@link #go} and {@link #sleep} methods are not default. + * {@link #go} is not the default implementation and the {@link #sleep} + * method implementation wins as subtype (according with {@link Inheritance} + * rule. 2)
      • + *
      • the {@link #eat} is a simple default method that is not overridden + * in this class. + *
      • + *
      + */ + public static class Dog implements Animal { + + /** + * Return string representation of the go action for Dog + * + * @return string representation of the go action for Dog + */ + @Override + public String go() { + return "Dog walks on four legs"; + } + + /** + * Return string representation of the sleep action for Dog + * + * @return string representation of the sleep action for Dog + */ + @Override + public String sleep() { + return "Dog sleeps"; + } + } + + /** + * Illustrate the usage of the method java.lang.reflect.Method.isDefault() + * + * @param args command-line arguments + * @throws NoSuchMethodException internal demo error + */ + public static void main(final String[] args) throws NoSuchMethodException { + Dog dog = new Dog(); + Stream.of(Dog.class.getMethod("eat"), Dog.class.getMethod("go"), Dog.class.getMethod("sleep")) + .forEach((m) -> { + System.out.println("Method name: " + m.getName()); + System.out.println(" isDefault: " + m.isDefault()); + System.out.print(" invoke: "); + try { + m.invoke(dog); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { + } + System.out.println(); + }); + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/SimplestUsage.java b/jdk/src/share/sample/lambda/DefaultMethods/SimplestUsage.java new file mode 100644 index 00000000000..a971858f589 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/SimplestUsage.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * The sample illustrates the simplest use case of the default methods. + */ +public class SimplestUsage { + + /** + * The Animal interface provides the default implementation + * of the {@link #eat} method. + */ + public interface Animal { + + /** + * Return string representation of the eat action for Animal + * + * @return string representation of the eat action for Animal + */ + default String eat() { + return this.getClass().getSimpleName() + + " eats like an ordinary animal"; + } + } + + /** + * The Dog class doesn't have its own implementation of the {@link #eat} + * method and uses the default implementation. + */ + public static class Dog implements Animal { + } + + /** + * The Mosquito class implements {@link #eat} method, its own implementation + * overrides the default implementation. + * + */ + public static class Mosquito implements Animal { + + /** + * Return string representation of the eat action for Mosquito + * + * @return string representation of the eat action for Mosquito + */ + @Override + public String eat() { + return "Mosquito consumes blood"; + } + } + + /** + * Illustrate behavior of the classes: {@link Dog} and {@link Mosquito} + * + * @param args command-line arguments + */ + public static void main(String[] args) { + // "Dog eats like an ordinary animal" is output + System.out.println(new Dog().eat()); + + // "Mosquito consumes blood" is output + System.out.println(new Mosquito().eat()); + } +} diff --git a/jdk/src/share/sample/try-with-resources/index.html b/jdk/src/share/sample/try-with-resources/index.html new file mode 100644 index 00000000000..ff237d89ce6 --- /dev/null +++ b/jdk/src/share/sample/try-with-resources/index.html @@ -0,0 +1,36 @@ + + + + + Try-with-Resources Feature Demo + + +

      Try-with-Resources Feature Demo

      + +

      + This demo shows how to use the try-with-resources feature introduced in JDK7. +

      + +
        +
      • Custom AutoCloseable.

        + +

        + Shows how to use a custom resource with the try-with-resources construct. + For more information, see the source file. +

        + Source: src/CustomAutoCloseableSample.java + +
      • Unzip

        + +

        + Extracts archived files. For more information, see the source file. +

        + Source: src/Unzip.java +
      • ZipCat

        + +

        Prints data about a specified file from an archive. For more information, see the source file.

        + Source: src/ZipCat.java + +
      + + \ No newline at end of file diff --git a/jdk/src/share/sample/try-with-resources/src/CustomAutoCloseableSample.java b/jdk/src/share/sample/try-with-resources/src/CustomAutoCloseableSample.java new file mode 100644 index 00000000000..9bbe09aa1ed --- /dev/null +++ b/jdk/src/share/sample/try-with-resources/src/CustomAutoCloseableSample.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * This sample demonstrates the ability to create custom resource that + * implements the {@code AutoCloseable} interface. This resource can be used in + * the try-with-resources construct. + */ +public class CustomAutoCloseableSample { + + /** + * The main method for the CustomAutoCloseableSample program. + * + * @param args is not used. + */ + public static void main(String[] args) { + /* + * TeeStream will be closed automatically after the try block. + */ + try (TeeStream teeStream = new TeeStream(System.out, Paths.get("out.txt")); + PrintStream out = new PrintStream(teeStream)) { + out.print("Hello, world"); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + + /** + * Passes the output through to the specified output stream while copying it into a file. + * The TeeStream functionality is similar to the Unix tee utility. + * TeeStream implements AutoCloseable interface. See OutputStream for details. + */ + public static class TeeStream extends OutputStream { + + private final OutputStream fileStream; + private final OutputStream outputStream; + + /** + * Creates a TeeStream. + * + * @param outputStream an output stream. + * @param outputFile an path to file. + * @throws IOException If an I/O error occurs. + */ + public TeeStream(OutputStream outputStream, Path outputFile) throws IOException { + this.fileStream = new BufferedOutputStream(Files.newOutputStream(outputFile)); + this.outputStream = outputStream; + } + + /** + * Writes the specified byte to the specified output stream + * and copies it to the file. + * + * @param b the byte to be written. + * @throws IOException If an I/O error occurs. + */ + @Override + public void write(int b) throws IOException { + fileStream.write(b); + outputStream.write(b); + } + + /** + * Flushes this output stream and forces any buffered output bytes + * to be written out. + * The flush method of TeeStream flushes + * the specified output stream and the file output stream. + * + * @throws IOException if an I/O error occurs. + */ + @Override + public void flush() throws IOException { + outputStream.flush(); + fileStream.flush(); + } + + /** + * Closes underlying streams and resources. + * The external output stream won't be closed. + * This method is the member of AutoCloseable interface and + * it will be invoked automatically after the try-with-resources block. + * + * @throws IOException If an I/O error occurs. + */ + @Override + public void close() throws IOException { + try (OutputStream file = fileStream) { + flush(); + } + } + } +} diff --git a/jdk/src/share/sample/try-with-resources/src/Unzip.java b/jdk/src/share/sample/try-with-resources/src/Unzip.java new file mode 100644 index 00000000000..d75eba52c78 --- /dev/null +++ b/jdk/src/share/sample/try-with-resources/src/Unzip.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.*; + +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + +/** + * Extract (unzip) a file to the current directory. + */ +public class Unzip { + + /** + * The main method for the Unzip program. Run the program with an empty + * argument list to see possible arguments. + * + * @param args the argument list for {@code Unzip}. + */ + public static void main(String[] args) { + if (args.length != 1) { + System.out.println("Usage: Unzip zipfile"); + } + final Path destDir = Paths.get("."); + /* + * Create AutoCloseable FileSystem. It will be closed automatically + * after the try block. + */ + try (FileSystem zipFileSystem = FileSystems.newFileSystem(Paths.get(args[0]), null)) { + + Path top = zipFileSystem.getPath("/"); + Files.walk(top).skip(1).forEach(file -> { + Path target = destDir.resolve(top.relativize(file).toString()); + System.out.println("Extracting " + target); + try { + Files.copy(file, target, REPLACE_EXISTING); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + } catch (UncheckedIOException | IOException e) { + e.printStackTrace(); + System.exit(1); + } + } +} diff --git a/jdk/src/share/sample/try-with-resources/src/ZipCat.java b/jdk/src/share/sample/try-with-resources/src/ZipCat.java new file mode 100644 index 00000000000..4bbf513a538 --- /dev/null +++ b/jdk/src/share/sample/try-with-resources/src/ZipCat.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Prints data of the specified file to standard output from a zip archive. + */ +public class ZipCat { + + /** + * The main method for the ZipCat program. Run the program with an empty + * argument list to see possible arguments. + * + * @param args the argument list for ZipCat + */ + public static void main(String[] args) { + if (args.length != 2) { + System.out.println("Usage: ZipCat zipfile fileToPrint"); + } + /* + * Creates AutoCloseable FileSystem and BufferedReader. + * They will be closed automatically after the try block. + * If reader initialization fails, then zipFileSystem will be closed + * automatically. + */ + try (FileSystem zipFileSystem + = FileSystems.newFileSystem(Paths.get(args[0]),null); + InputStream input + = Files.newInputStream(zipFileSystem.getPath(args[1]))) { + byte[] buffer = new byte[1024]; + int len; + while ((len = input.read(buffer)) != -1) { + System.out.write(buffer, 0, len); + } + + } catch (IOException e) { + e.printStackTrace(); + System.exit(1); + } + } +} diff --git a/jdk/src/share/transport/socket/socketTransport.c b/jdk/src/share/transport/socket/socketTransport.c index 666ce2d6d6b..dfb3426de80 100644 --- a/jdk/src/share/transport/socket/socketTransport.c +++ b/jdk/src/share/transport/socket/socketTransport.c @@ -506,6 +506,19 @@ socketTransport_close(jdwpTransportEnv* env) if (fd < 0) { return JDWPTRANSPORT_ERROR_NONE; } +#ifdef _AIX + /* + AIX needs a workaround for I/O cancellation, see: + http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/close.htm + ... + The close subroutine is blocked until all subroutines which use the file + descriptor return to usr space. For example, when a thread is calling close + and another thread is calling select with the same file descriptor, the + close subroutine does not return until the select call returns. + ... + */ + shutdown(fd, 2); +#endif if (dbgsysSocketClose(fd) < 0) { /* * close failed - it's pointless to restore socketFD here because diff --git a/jdk/src/solaris/back/exec_md.c b/jdk/src/solaris/back/exec_md.c index eebfae1f7e7..b756be3297a 100644 --- a/jdk/src/solaris/back/exec_md.c +++ b/jdk/src/solaris/back/exec_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,8 +30,8 @@ #include "sys.h" #include "util.h" -#if defined(LINUX) || defined(_ALLBSD_SOURCE) - /* Linux */ +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) + /* Linux, BSD, AIX */ #define FORK() fork() #else /* Solaris (make sure we always get the POSIX-specified behavior) */ diff --git a/jdk/src/solaris/bin/java_md_solinux.c b/jdk/src/solaris/bin/java_md_solinux.c index f561649af16..05f7a4d8112 100644 --- a/jdk/src/solaris/bin/java_md_solinux.c +++ b/jdk/src/solaris/bin/java_md_solinux.c @@ -41,7 +41,11 @@ #define JVM_DLL "libjvm.so" #define JAVA_DLL "libjava.so" +#ifdef AIX +#define LD_LIBRARY_PATH "LIBPATH" +#else #define LD_LIBRARY_PATH "LD_LIBRARY_PATH" +#endif /* help jettison the LD_LIBRARY_PATH settings in the future */ #ifndef SETENV_REQUIRED @@ -248,6 +252,11 @@ RequiresSetenv(const char *jvmpath) { char *dmllp = NULL; char *p; /* a utility pointer */ +#ifdef AIX + /* We always have to set the LIBPATH on AIX because ld doesn't support $ORIGIN. */ + return JNI_TRUE; +#endif + llp = getenv("LD_LIBRARY_PATH"); #ifdef __solaris__ dmllp = getenv("LD_LIBRARY_PATH_64"); @@ -506,7 +515,7 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, * If not on Solaris, assume only a single LD_LIBRARY_PATH * variable. */ - runpath = getenv("LD_LIBRARY_PATH"); + runpath = getenv(LD_LIBRARY_PATH); #endif /* __solaris__ */ /* runpath contains current effective LD_LIBRARY_PATH setting */ @@ -514,8 +523,12 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, jvmpath = JLI_StringDup(jvmpath); new_runpath = JLI_MemAlloc(((runpath != NULL) ? JLI_StrLen(runpath) : 0) + 2 * JLI_StrLen(jrepath) + 2 * JLI_StrLen(arch) + +#ifdef AIX + /* On AIX we additionally need 'jli' in the path because ld doesn't support $ORIGIN. */ + JLI_StrLen(jrepath) + JLI_StrLen(arch) + JLI_StrLen("/lib//jli:") + +#endif JLI_StrLen(jvmpath) + 52); - newpath = new_runpath + JLI_StrLen("LD_LIBRARY_PATH="); + newpath = new_runpath + JLI_StrLen(LD_LIBRARY_PATH "="); /* @@ -527,12 +540,18 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, if (lastslash) *lastslash = '\0'; - sprintf(new_runpath, "LD_LIBRARY_PATH=" + sprintf(new_runpath, LD_LIBRARY_PATH "=" "%s:" "%s/lib/%s:" +#ifdef AIX + "%s/lib/%s/jli:" /* Needed on AIX because ld doesn't support $ORIGIN. */ +#endif "%s/../lib/%s", jvmpath, jrepath, arch, +#ifdef AIX + jrepath, arch, +#endif jrepath, arch ); @@ -861,7 +880,7 @@ void SplashFreeLibrary() { int ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void * args) { int rslt; -#ifdef __linux__ +#ifndef __solaris__ pthread_t tid; pthread_attr_t attr; pthread_attr_init(&attr); @@ -886,7 +905,7 @@ ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void } pthread_attr_destroy(&attr); -#else /* ! __linux__ */ +#else /* __solaris__ */ thread_t tid; long flags = 0; if (thr_create(NULL, stack_size, (void *(*)(void *))continuation, args, flags, &tid) == 0) { @@ -897,7 +916,7 @@ ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void /* See above. Continue in current thread if thr_create() failed */ rslt = continuation(args); } -#endif /* __linux__ */ +#endif /* !__solaris__ */ return rslt; } diff --git a/jdk/src/solaris/bin/java_md_solinux.h b/jdk/src/solaris/bin/java_md_solinux.h index a9e4438a5e2..3f1dc115b4d 100644 --- a/jdk/src/solaris/bin/java_md_solinux.h +++ b/jdk/src/solaris/bin/java_md_solinux.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,23 +45,19 @@ extern char **environ; * A collection of useful strings. One should think of these as #define * entries, but actual strings can be more efficient (with many compilers). */ -#ifdef __linux__ -static const char *system_dir = "/usr/java"; -static const char *user_dir = "/java"; -#else /* Solaris */ +#ifdef __solaris__ static const char *system_dir = "/usr/jdk"; static const char *user_dir = "/jdk"; +#else /* !__solaris__, i.e. Linux, AIX,.. */ +static const char *system_dir = "/usr/java"; +static const char *user_dir = "/java"; #endif #include -#ifdef __linux__ -#include -#else +#ifdef __solaris__ #include +#else +#include #endif -#define JVM_DLL "libjvm.so" -#define JAVA_DLL "libjava.so" -#define LD_LIBRARY_PATH "LD_LIBRARY_PATH" - #endif /* JAVA_MD_SOLINUX_H */ diff --git a/jdk/src/solaris/bin/ppc64/jvm.cfg b/jdk/src/solaris/bin/ppc64/jvm.cfg new file mode 100644 index 00000000000..2fc1214175b --- /dev/null +++ b/jdk/src/solaris/bin/ppc64/jvm.cfg @@ -0,0 +1,33 @@ +# Copyright (c) 2011, 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. +# +# List of JVMs that can be used as an option to java, javac, etc. +# Order is important -- first in this list is the default JVM. +# NOTE that this both this file and its format are UNSUPPORTED and +# WILL GO AWAY in a future release. +# +# You may also select a JVM in an arbitrary location with the +# "-XXaltjvm=" option, but that too is unsupported +# and may not be available in a future release. +# +-server KNOWN diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.aix b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.aix new file mode 100644 index 00000000000..24216461657 --- /dev/null +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.aix @@ -0,0 +1,504 @@ +/* + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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 java.lang; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.concurrent.Executors; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.security.AccessController; +import static java.security.AccessController.doPrivileged; +import java.security.PrivilegedAction; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; + +/** + * java.lang.Process subclass in the UNIX environment. + * + * @author Mario Wolczko and Ross Knippel. + * @author Konstantin Kladko (ported to Linux) + * @author Martin Buchholz + * @author Volker Simonis (ported to AIX) + */ +final class UNIXProcess extends Process { + private static final sun.misc.JavaIOFileDescriptorAccess fdAccess + = sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess(); + + private final int pid; + private int exitcode; + private boolean hasExited; + + private /* final */ OutputStream stdin; + private /* final */ InputStream stdout; + private /* final */ InputStream stderr; + + private static enum LaunchMechanism { + FORK(1), + POSIX_SPAWN(2); + + private int value; + LaunchMechanism(int x) {value = x;} + }; + + /* On AIX, the default is to spawn */ + private static final LaunchMechanism launchMechanism; + private static byte[] helperpath; + + private static byte[] toCString(String s) { + if (s == null) + return null; + byte[] bytes = s.getBytes(); + byte[] result = new byte[bytes.length + 1]; + System.arraycopy(bytes, 0, + result, 0, + bytes.length); + result[result.length-1] = (byte)0; + return result; + } + + static { + launchMechanism = AccessController.doPrivileged( + new PrivilegedAction() + { + public LaunchMechanism run() { + String javahome = System.getProperty("java.home"); + String osArch = System.getProperty("os.arch"); + + helperpath = toCString(javahome + "/lib/" + osArch + "/jspawnhelper"); + String s = System.getProperty( + "jdk.lang.Process.launchMechanism", "posix_spawn"); + + try { + return LaunchMechanism.valueOf(s.toUpperCase()); + } catch (IllegalArgumentException e) { + throw new Error(s + " is not a supported " + + "process launch mechanism on this platform."); + } + } + }); + } + + /* this is for the reaping thread */ + private native int waitForProcessExit(int pid); + + /** + * Create a process. Depending on the mode flag, this is done by + * one of the following mechanisms. + * - fork(2) and exec(2) + * - clone(2) and exec(2) + * - vfork(2) and exec(2) + * + * @param fds an array of three file descriptors. + * Indexes 0, 1, and 2 correspond to standard input, + * standard output and standard error, respectively. On + * input, a value of -1 means to create a pipe to connect + * child and parent processes. On output, a value which + * is not -1 is the parent pipe fd corresponding to the + * pipe which has been created. An element of this array + * is -1 on input if and only if it is not -1 on + * output. + * @return the pid of the subprocess + */ + private native int forkAndExec(int mode, byte[] helperpath, + byte[] prog, + byte[] argBlock, int argc, + byte[] envBlock, int envc, + byte[] dir, + int[] fds, + boolean redirectErrorStream) + throws IOException; + + /** + * The thread factory used to create "process reaper" daemon threads. + */ + private static class ProcessReaperThreadFactory implements ThreadFactory { + private final static ThreadGroup group = getRootThreadGroup(); + + private static ThreadGroup getRootThreadGroup() { + return doPrivileged(new PrivilegedAction () { + public ThreadGroup run() { + ThreadGroup root = Thread.currentThread().getThreadGroup(); + while (root.getParent() != null) + root = root.getParent(); + return root; + }}); + } + + public Thread newThread(Runnable grimReaper) { + // Our thread stack requirement is quite modest. + Thread t = new Thread(group, grimReaper, "process reaper", 32768); + t.setDaemon(true); + // A small attempt (probably futile) to avoid priority inversion + t.setPriority(Thread.MAX_PRIORITY); + return t; + } + } + + /** + * The thread pool of "process reaper" daemon threads. + */ + private static final Executor processReaperExecutor = + doPrivileged(new PrivilegedAction() { + public Executor run() { + return Executors.newCachedThreadPool + (new ProcessReaperThreadFactory()); + }}); + + UNIXProcess(final byte[] prog, + final byte[] argBlock, final int argc, + final byte[] envBlock, final int envc, + final byte[] dir, + final int[] fds, + final boolean redirectErrorStream) + throws IOException { + + pid = forkAndExec(launchMechanism.value, + helperpath, + prog, + argBlock, argc, + envBlock, envc, + dir, + fds, + redirectErrorStream); + + try { + doPrivileged(new PrivilegedExceptionAction() { + public Void run() throws IOException { + initStreams(fds); + return null; + }}); + } catch (PrivilegedActionException ex) { + throw (IOException) ex.getException(); + } + } + + static FileDescriptor newFileDescriptor(int fd) { + FileDescriptor fileDescriptor = new FileDescriptor(); + fdAccess.set(fileDescriptor, fd); + return fileDescriptor; + } + + void initStreams(int[] fds) throws IOException { + stdin = (fds[0] == -1) ? + ProcessBuilder.NullOutputStream.INSTANCE : + new ProcessPipeOutputStream(fds[0]); + + stdout = (fds[1] == -1) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ProcessPipeInputStream(fds[1]); + + stderr = (fds[2] == -1) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ProcessPipeInputStream(fds[2]); + + processReaperExecutor.execute(new Runnable() { + public void run() { + int exitcode = waitForProcessExit(pid); + UNIXProcess.this.processExited(exitcode); + }}); + } + + void processExited(int exitcode) { + synchronized (this) { + this.exitcode = exitcode; + hasExited = true; + notifyAll(); + } + + if (stdout instanceof ProcessPipeInputStream) + ((ProcessPipeInputStream) stdout).processExited(); + + if (stderr instanceof ProcessPipeInputStream) + ((ProcessPipeInputStream) stderr).processExited(); + + if (stdin instanceof ProcessPipeOutputStream) + ((ProcessPipeOutputStream) stdin).processExited(); + } + + public OutputStream getOutputStream() { + return stdin; + } + + public InputStream getInputStream() { + return stdout; + } + + public InputStream getErrorStream() { + return stderr; + } + + public synchronized int waitFor() throws InterruptedException { + while (!hasExited) { + wait(); + } + return exitcode; + } + + @Override + public synchronized boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException + { + if (hasExited) return true; + if (timeout <= 0) return false; + + long timeoutAsNanos = unit.toNanos(timeout); + long startTime = System.nanoTime(); + long rem = timeoutAsNanos; + + while (!hasExited && (rem > 0)) { + wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1)); + rem = timeoutAsNanos - (System.nanoTime() - startTime); + } + return hasExited; + } + + public synchronized int exitValue() { + if (!hasExited) { + throw new IllegalThreadStateException("process hasn't exited"); + } + return exitcode; + } + + private static native void destroyProcess(int pid, boolean force); + private void destroy(boolean force) { + // There is a risk that pid will be recycled, causing us to + // kill the wrong process! So we only terminate processes + // that appear to still be running. Even with this check, + // there is an unavoidable race condition here, but the window + // is very small, and OSes try hard to not recycle pids too + // soon, so this is quite safe. + synchronized (this) { + if (!hasExited) + destroyProcess(pid, force); + } + try { stdin.close(); } catch (IOException ignored) {} + try { stdout.close(); } catch (IOException ignored) {} + try { stderr.close(); } catch (IOException ignored) {} + } + + public void destroy() { + destroy(false); + } + + @Override + public Process destroyForcibly() { + destroy(true); + return this; + } + + @Override + public synchronized boolean isAlive() { + return !hasExited; + } + + private static native void init(); + + static { + init(); + } + + /** + * A buffered input stream for a subprocess pipe file descriptor + * that allows the underlying file descriptor to be reclaimed when + * the process exits, via the processExited hook. + * + * This is tricky because we do not want the user-level InputStream to be + * closed until the user invokes close(), and we need to continue to be + * able to read any buffered data lingering in the OS pipe buffer. + * + * On AIX this is especially tricky, because the 'close()' system call + * will block if another thread is at the same time blocked in a file + * operation (e.g. 'read()') on the same file descriptor. We therefore + * combine this 'ProcessPipeInputStream' with the DeferredCloseInputStream + * approach used on Solaris (see "UNIXProcess.java.solaris"). This means + * that every potentially blocking operation on the file descriptor + * increments a counter before it is executed and decrements it once it + * finishes. The 'close()' operation will only be executed if there are + * no pending operations. Otherwise it is deferred after the last pending + * operation has finished. + * + */ + static class ProcessPipeInputStream extends BufferedInputStream { + private final Object closeLock = new Object(); + private int useCount = 0; + private boolean closePending = false; + + ProcessPipeInputStream(int fd) { + super(new FileInputStream(newFileDescriptor(fd))); + } + + private InputStream drainInputStream(InputStream in) + throws IOException { + int n = 0; + int j; + byte[] a = null; + synchronized (closeLock) { + if (buf == null) // asynchronous close()? + return null; // discard + j = in.available(); + } + while (j > 0) { + a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j); + synchronized (closeLock) { + if (buf == null) // asynchronous close()? + return null; // discard + n += in.read(a, n, j); + j = in.available(); + } + } + return (a == null) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n)); + } + + /** Called by the process reaper thread when the process exits. */ + synchronized void processExited() { + try { + InputStream in = this.in; + if (in != null) { + InputStream stragglers = drainInputStream(in); + in.close(); + this.in = stragglers; + } + } catch (IOException ignored) { } + } + + private void raise() { + synchronized (closeLock) { + useCount++; + } + } + + private void lower() throws IOException { + synchronized (closeLock) { + useCount--; + if (useCount == 0 && closePending) { + closePending = false; + super.close(); + } + } + } + + @Override + public int read() throws IOException { + raise(); + try { + return super.read(); + } finally { + lower(); + } + } + + @Override + public int read(byte[] b) throws IOException { + raise(); + try { + return super.read(b); + } finally { + lower(); + } + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + raise(); + try { + return super.read(b, off, len); + } finally { + lower(); + } + } + + @Override + public long skip(long n) throws IOException { + raise(); + try { + return super.skip(n); + } finally { + lower(); + } + } + + @Override + public int available() throws IOException { + raise(); + try { + return super.available(); + } finally { + lower(); + } + } + + @Override + public void close() throws IOException { + // BufferedInputStream#close() is not synchronized unlike most other methods. + // Synchronizing helps avoid racing with drainInputStream(). + synchronized (closeLock) { + if (useCount == 0) { + super.close(); + } + else { + closePending = true; + } + } + } + } + + /** + * A buffered output stream for a subprocess pipe file descriptor + * that allows the underlying file descriptor to be reclaimed when + * the process exits, via the processExited hook. + */ + static class ProcessPipeOutputStream extends BufferedOutputStream { + ProcessPipeOutputStream(int fd) { + super(new FileOutputStream(newFileDescriptor(fd))); + } + + /** Called by the process reaper thread when the process exits. */ + synchronized void processExited() { + OutputStream out = this.out; + if (out != null) { + try { + out.close(); + } catch (IOException ignored) { + // We know of no reason to get an IOException, but if + // we do, there's nothing else to do but carry on. + } + this.out = ProcessBuilder.NullOutputStream.INSTANCE; + } + } + } +} diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd index df22bd2f3b9..7f0c3b12bf0 100644 --- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd @@ -342,47 +342,39 @@ final class UNIXProcess extends Process { ProcessPipeInputStream(int fd) { super(new FileInputStream(newFileDescriptor(fd))); } - - private InputStream drainInputStream(InputStream in) + private static byte[] drainInputStream(InputStream in) throws IOException { int n = 0; int j; byte[] a = null; - synchronized (closeLock) { - if (buf == null) // asynchronous close()? - return null; // discard - j = in.available(); - } - while (j > 0) { + while ((j = in.available()) > 0) { a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j); - synchronized (closeLock) { - if (buf == null) // asynchronous close()? - return null; // discard - n += in.read(a, n, j); - j = in.available(); - } + n += in.read(a, n, j); } - return (a == null) ? - ProcessBuilder.NullInputStream.INSTANCE : - new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n)); + return (a == null || n == a.length) ? a : Arrays.copyOf(a, n); } /** Called by the process reaper thread when the process exits. */ synchronized void processExited() { - try { - InputStream in = this.in; - if (in != null) { - InputStream stragglers = drainInputStream(in); - in.close(); - this.in = stragglers; - } - } catch (IOException ignored) { } + synchronized (closeLock) { + try { + InputStream in = this.in; + // this stream is closed if and only if: in == null + if (in != null) { + byte[] stragglers = drainInputStream(in); + in.close(); + this.in = (stragglers == null) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ByteArrayInputStream(stragglers); + } + } catch (IOException ignored) {} + } } @Override public void close() throws IOException { // BufferedInputStream#close() is not synchronized unlike most other methods. - // Synchronizing helps avoid racing with drainInputStream(). + // Synchronizing helps avoid race with processExited(). synchronized (closeLock) { super.close(); } diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux index 5ce8a61682a..be267d3ef0c 100644 --- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux @@ -344,47 +344,39 @@ final class UNIXProcess extends Process { ProcessPipeInputStream(int fd) { super(new FileInputStream(newFileDescriptor(fd))); } - - private InputStream drainInputStream(InputStream in) + private static byte[] drainInputStream(InputStream in) throws IOException { int n = 0; int j; byte[] a = null; - synchronized (closeLock) { - if (buf == null) // asynchronous close()? - return null; // discard - j = in.available(); - } - while (j > 0) { + while ((j = in.available()) > 0) { a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j); - synchronized (closeLock) { - if (buf == null) // asynchronous close()? - return null; // discard - n += in.read(a, n, j); - j = in.available(); - } + n += in.read(a, n, j); } - return (a == null) ? - ProcessBuilder.NullInputStream.INSTANCE : - new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n)); + return (a == null || n == a.length) ? a : Arrays.copyOf(a, n); } /** Called by the process reaper thread when the process exits. */ synchronized void processExited() { - try { - InputStream in = this.in; - if (in != null) { - InputStream stragglers = drainInputStream(in); - in.close(); - this.in = stragglers; - } - } catch (IOException ignored) { } + synchronized (closeLock) { + try { + InputStream in = this.in; + // this stream is closed if and only if: in == null + if (in != null) { + byte[] stragglers = drainInputStream(in); + in.close(); + this.in = (stragglers == null) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ByteArrayInputStream(stragglers); + } + } catch (IOException ignored) {} + } } @Override public void close() throws IOException { // BufferedInputStream#close() is not synchronized unlike most other methods. - // Synchronizing helps avoid racing with drainInputStream(). + // Synchronizing helps avoid race with processExited(). synchronized (closeLock) { super.close(); } diff --git a/jdk/src/solaris/classes/sun/awt/UNIXToolkit.java b/jdk/src/solaris/classes/sun/awt/UNIXToolkit.java index 50a913c5438..2fad1b6b4a7 100644 --- a/jdk/src/solaris/classes/sun/awt/UNIXToolkit.java +++ b/jdk/src/solaris/classes/sun/awt/UNIXToolkit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -49,7 +49,7 @@ public abstract class UNIXToolkit extends SunToolkit private BufferedImage tmpImage = null; public static int getDatatransferTimeout() { - Integer dt = (Integer)AccessController.doPrivileged( + Integer dt = AccessController.doPrivileged( new GetIntegerAction("sun.awt.datatransfer.timeout")); if (dt == null || dt <= 0) { return DEFAULT_DATATRANSFER_TIMEOUT; diff --git a/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java b/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java index 20c6174c2ee..48a5b946c81 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, 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 @@ -451,7 +451,7 @@ public abstract class InfoWindow extends Window { while (true) { Message msg = null; try { - msg = (Message)messageQueue.take(); + msg = messageQueue.take(); } catch (InterruptedException e) { return; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java index f35ba1c7e43..26e2cdbbba3 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -163,7 +163,7 @@ class MotifDnDConstants { XlibWrapper.XGrabServer(newDisplay); try { - XlibWrapper.XSetCloseDownMode(newDisplay, (int)XConstants.RetainPermanent); + XlibWrapper.XSetCloseDownMode(newDisplay, XConstants.RetainPermanent); XSetWindowAttributes xwa = new XSetWindowAttributes(); @@ -435,7 +435,7 @@ class MotifDnDConstants { if (formats.length > 0) { // Make a defensive copy. - formats = (long[])formats.clone(); + formats = formats.clone(); Arrays.sort(formats); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java index 85cd5448fd5..35109ebac70 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -201,7 +201,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java index 652b9e9e3af..735bf144df2 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -118,7 +118,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -220,7 +220,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -292,7 +292,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -327,7 +327,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { try { int status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance()); - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XAWTFormatter.java b/jdk/src/solaris/classes/sun/awt/X11/XAWTFormatter.java index 20117bc47ad..a2145dcc3c2 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XAWTFormatter.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XAWTFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -43,7 +43,7 @@ public class XAWTFormatter extends java.util.logging.Formatter { // Line separator string. This is the value of the line.separator // property at the moment that the SimpleFormatter was created. - private String lineSeparator = (String) java.security.AccessController.doPrivileged( + private String lineSeparator = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); boolean displayFullRecord = false; diff --git a/jdk/src/solaris/classes/sun/awt/X11/XAtom.java b/jdk/src/solaris/classes/sun/awt/X11/XAtom.java index 56ebd11b5dd..2d37879e057 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XAtom.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XAtom.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -681,7 +681,7 @@ public final class XAtom { return emptyList; } - int count = (int)getter.getNumberOfItems(); + int count = getter.getNumberOfItems(); if (count == 0) { return emptyList; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java index 2ccfcd083a5..1d82f04a78c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -292,7 +292,7 @@ abstract public class XBaseMenuWindow extends XWindow { */ XMenuItemPeer[] copyItems() { synchronized(getMenuTreeLock()) { - return (XMenuItemPeer[])items.toArray(new XMenuItemPeer[] {}); + return items.toArray(new XMenuItemPeer[] {}); } } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java index 28db82f8a99..1d8804ec9c6 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -285,7 +285,7 @@ public class XBaseWindow { params.putIfNull(BOUNDS, new Rectangle(DEF_LOCATION, DEF_LOCATION, MIN_SIZE, MIN_SIZE)); params.putIfNull(DEPTH, Integer.valueOf((int)XConstants.CopyFromParent)); params.putIfNull(VISUAL, Long.valueOf(XConstants.CopyFromParent)); - params.putIfNull(VISUAL_CLASS, Integer.valueOf((int)XConstants.InputOnly)); + params.putIfNull(VISUAL_CLASS, Integer.valueOf(XConstants.InputOnly)); params.putIfNull(VALUE_MASK, Long.valueOf(XConstants.CWEventMask)); Rectangle bounds = (Rectangle)params.get(BOUNDS); bounds.width = Math.max(MIN_SIZE, bounds.width); @@ -544,7 +544,7 @@ public class XBaseWindow { } flags |= XUtilConstants.PWinGravity; hints.set_flags(flags); - hints.set_win_gravity((int)XConstants.NorthWestGravity); + hints.set_win_gravity(XConstants.NorthWestGravity); if (insLog.isLoggable(PlatformLogger.Level.FINER)) { insLog.finer("Setting hints, resulted flags " + XlibWrapper.hintsToString(flags) + ", values " + hints); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java index c3cb2649c17..6bdff13fdc9 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -184,7 +184,7 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget XWindowPeer wpeer = (XWindowPeer)(container.getPeer()); if (wpeer != null) { return (wpeer.winAttr.visibilityState != - wpeer.winAttr.AWT_UNOBSCURED); + XWindowAttributesData.AWT_UNOBSCURED); } } return true; @@ -335,7 +335,7 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget return rejectFocusRequestHelper("Waiting for asynchronous processing of the request"); } return XKeyboardFocusManagerPeer.deliverFocus(lightweightChild, - (Component)target, + target, temporary, focusedWindowChangeAllowed, time, cause); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java index fcdd6d09f6c..85e578b4052 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -137,7 +137,7 @@ public final class XContentWindow extends XWindow { // NOTE: This method may be called by privileged threads. // DO NOT INVOKE CLIENT CODE ON THIS THREAD! public void handleResize(Rectangle bounds) { - AWTAccessor.getComponentAccessor().setSize((Component)target, bounds.width, bounds.height); + AWTAccessor.getComponentAccessor().setSize(target, bounds.width, bounds.height); postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_RESIZED)); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java index fa5c884020a..f37cfbc22e9 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -318,7 +318,7 @@ abstract class XDecoratedPeer extends XWindowPeer { insets_corrected = true; return; } - Component t = (Component)target; + Component t = target; if (getDecorations() == XWindowAttributesData.AWT_DECOR_NONE) { setReparented(true); insets_corrected = true; @@ -428,7 +428,7 @@ abstract class XDecoratedPeer extends XWindowPeer { public void handleMoved(WindowDimensions dims) { Point loc = dims.getLocation(); - AWTAccessor.getComponentAccessor().setLocation((Component)target, loc.x, loc.y); + AWTAccessor.getComponentAccessor().setLocation(target, loc.x, loc.y); postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_MOVED)); } @@ -536,8 +536,8 @@ abstract class XDecoratedPeer extends XWindowPeer { // its location changes. Point oldLocation = getLocation(); - Point newLocation = new Point(AWTAccessor.getComponentAccessor().getX((Component)target), - AWTAccessor.getComponentAccessor().getY((Component)target)); + Point newLocation = new Point(AWTAccessor.getComponentAccessor().getX(target), + AWTAccessor.getComponentAccessor().getY(target)); if (!newLocation.equals(oldLocation)) { handleMoved(newDimensions); @@ -738,7 +738,7 @@ abstract class XDecoratedPeer extends XWindowPeer { updateChildrenSizes(); // Bounds of the window - Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds((Component)target); + Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds(target); Point newLocation = getNewLocation(xe, currentInsets.left, currentInsets.top); @@ -1052,10 +1052,10 @@ abstract class XDecoratedPeer extends XWindowPeer { final void dumpTarget() { AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor(); - int getWidth = compAccessor.getWidth((Component)target); - int getHeight = compAccessor.getHeight((Component)target); - int getTargetX = compAccessor.getX((Component)target); - int getTargetY = compAccessor.getY((Component)target); + int getWidth = compAccessor.getWidth(target); + int getHeight = compAccessor.getHeight(target); + int getTargetX = compAccessor.getX(target); + int getTargetY = compAccessor.getY(target); System.err.println(">>> Target: " + getTargetX + ", " + getTargetY + ", " + getWidth + ", " + getHeight); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java index fc0a0b7d44f..c2e451785f7 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -47,9 +47,9 @@ class XDialogPeer extends XDecoratedPeer implements DialogPeer { undecorated = Boolean.valueOf(target.isUndecorated()); winAttr.nativeDecor = !target.isUndecorated(); if (winAttr.nativeDecor) { - winAttr.decorations = winAttr.AWT_DECOR_ALL; + winAttr.decorations = XWindowAttributesData.AWT_DECOR_ALL; } else { - winAttr.decorations = winAttr.AWT_DECOR_NONE; + winAttr.decorations = XWindowAttributesData.AWT_DECOR_NONE; } winAttr.functions = MWMConstants.MWM_FUNC_ALL; winAttr.isResizable = true; //target.isResizable(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java index 8a22f65eba1..b1e6f2ad041 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -283,7 +283,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndEnter.getAtom()); @@ -311,7 +311,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndPosition.getAtom()); @@ -335,7 +335,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndLeave.getAtom()); @@ -361,7 +361,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndDrop.getAtom()); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java index f0a6622c4bd..074f37dd753 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -742,7 +742,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { long data3, long data4) { XClientMessageEvent enter = new XClientMessageEvent(); try { - enter.set_type((int)XConstants.ClientMessage); + enter.set_type(XConstants.ClientMessage); enter.set_window(toplevel); enter.set_format(32); enter.set_message_type(XDnDConstants.XA_XdndEnter.getAtom()); @@ -768,7 +768,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { long sourceWindow) { XClientMessageEvent leave = new XClientMessageEvent(); try { - leave.set_type((int)XConstants.ClientMessage); + leave.set_type(XConstants.ClientMessage); leave.set_window(toplevel); leave.set_format(32); leave.set_message_type(XDnDConstants.XA_XdndLeave.getAtom()); @@ -798,7 +798,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(xclient.get_data(0)); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndStatus.getAtom()); @@ -886,7 +886,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(xclient.get_data(0)); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndFinished.getAtom()); @@ -1005,6 +1005,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { } } + @SuppressWarnings("static") private void notifyProtocolListener(XWindow xwindow, int x, int y, int dropAction, XClientMessageEvent xclient, @@ -1147,7 +1148,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { event while it still can be referenced from other Java events. */ { XClientMessageEvent copy = new XClientMessageEvent(); - unsafe.copyMemory(xclient.pData, copy.pData, copy.getSize()); + unsafe.copyMemory(xclient.pData, copy.pData, XClientMessageEvent.getSize()); copy.set_data(0, xclient.get_window()); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java index e762ae0118e..f376b395823 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -538,7 +538,7 @@ public final class XDragSourceContextPeer return false; } - if (ev.get_type() != (int)XConstants.ClientMessage) { + if (ev.get_type() != XConstants.ClientMessage) { return false; } @@ -612,7 +612,7 @@ public final class XDragSourceContextPeer xkey.get_keycode(), 0); switch ((int)keysym) { case (int)XKeySymConstants.XK_Escape: { - if (ev.get_type() == (int)XConstants.KeyRelease) { + if (ev.get_type() == XConstants.KeyRelease) { cleanup(xkey.get_time()); } break; diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java index 65d0b11c6c4..26a4941788d 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -43,7 +43,7 @@ final class XDropTargetEventProcessor { private XDropTargetEventProcessor() {} private boolean doProcessEvent(XEvent ev) { - if (ev.get_type() == (int)XConstants.DestroyNotify && + if (ev.get_type() == XConstants.DestroyNotify && protocol != null && ev.get_xany().get_window() == protocol.getSourceWindow()) { protocol.cleanup(); @@ -51,7 +51,7 @@ final class XDropTargetEventProcessor { return false; } - if (ev.get_type() == (int)XConstants.PropertyNotify) { + if (ev.get_type() == XConstants.PropertyNotify) { XPropertyEvent xproperty = ev.get_xproperty(); if (xproperty.get_atom() == MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom()) { @@ -60,7 +60,7 @@ final class XDropTargetEventProcessor { } } - if (ev.get_type() != (int)XConstants.ClientMessage) { + if (ev.get_type() != XConstants.ClientMessage) { return false; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java index e983eccc807..b8a8441379e 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -328,8 +328,7 @@ final class XDropTargetRegistry { Long lToplevel = Long.valueOf(embedder); boolean isXEmbedServer = false; synchronized (this) { - EmbeddedDropSiteEntry entry = - (EmbeddedDropSiteEntry)embeddedDropSiteRegistry.get(lToplevel); + EmbeddedDropSiteEntry entry = embeddedDropSiteRegistry.get(lToplevel); if (entry == null) { return; } @@ -430,8 +429,7 @@ final class XDropTargetRegistry { Long lToplevel = Long.valueOf(toplevel); EmbeddedDropSiteEntry entry = null; synchronized (this) { - entry = - (EmbeddedDropSiteEntry)embeddedDropSiteRegistry.get(lToplevel); + entry = embeddedDropSiteRegistry.get(lToplevel); if (entry == null) { if (peer != null) { // Toplevel is an XEmbed server within this VM. @@ -495,8 +493,7 @@ final class XDropTargetRegistry { Long lToplevel = Long.valueOf(toplevel); EmbeddedDropSiteEntry entry = null; synchronized (this) { - entry = - (EmbeddedDropSiteEntry)embeddedDropSiteRegistry.get(lToplevel); + entry = embeddedDropSiteRegistry.get(lToplevel); if (entry == null) { return; } @@ -526,8 +523,7 @@ final class XDropTargetRegistry { */ public long getEmbeddedDropSite(long embedder, int x, int y) { Long lToplevel = Long.valueOf(embedder); - EmbeddedDropSiteEntry entry = - (EmbeddedDropSiteEntry)embeddedDropSiteRegistry.get(lToplevel); + EmbeddedDropSiteEntry entry = embeddedDropSiteRegistry.get(lToplevel); if (entry == null) { return 0; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java index 167c3fe3209..cdce154834e 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -654,9 +654,9 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener if (xembedLog.isLoggable(PlatformLogger.Level.FINER)) { xembedLog.finer("Client message to embedder: " + msg); } - if (msg.get_message_type() == xembed.XEmbed.getAtom()) { + if (msg.get_message_type() == XEmbedHelper.XEmbed.getAtom()) { if (xembedLog.isLoggable(PlatformLogger.Level.FINE)) { - xembedLog.fine(xembed.XEmbedMessageToString(msg)); + xembedLog.fine(XEmbedHelper.XEmbedMessageToString(msg)); } } if (isXEmbedActive()) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java index 49c7a5dcf04..947a3cb543c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -99,7 +99,7 @@ public class XEmbedHelper { } void sendMessage(long window, int message, long detail, long data1, long data2) { XClientMessageEvent msg = new XClientMessageEvent(); - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(window); msg.set_message_type(XEmbed.getAtom()); msg.set_format(32); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java index e21d1d255f4..9b37a429125 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -647,7 +647,7 @@ public class XEmbedServerTester implements XEventDispatcher { public void dispatchEvent(XEvent ev) { if (ev.get_type() == ClientMessage) { XClientMessageEvent msg = ev.get_xclient(); - if (msg.get_message_type() == xembed.XEmbed.getAtom()) { + if (msg.get_message_type() == XEmbedHelper.XEmbed.getAtom()) { if (xembedLog.isLoggable(PlatformLogger.Level.FINE)) { xembedLog.fine("Embedded message: " + XEmbedHelper.msgidToString((int)msg.get_data(1))); } @@ -689,7 +689,7 @@ public class XEmbedServerTester implements XEventDispatcher { } } else { synchronized(EVENT_LOCK) { - int eventID = (int)ev.get_type() | SYSTEM_EVENT_MASK; + int eventID = ev.get_type() | SYSTEM_EVENT_MASK; events.add(eventID); if (xembedLog.isLoggable(PlatformLogger.Level.FINER)) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java index b1c2b0ed845..5da53e88634 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -775,7 +775,7 @@ class XFileDialogPeer extends XDialogPeer implements FileDialogPeer, ActionListe // 03/02/2005 b5097243 Pressing 'ESC' on a file dlg does not dispose the dlg on Xtoolkit public void setVisible(boolean b){ if (fileDialog == null) { - init((FileDialog)target); + init(target); } if (savedDir != null || userDir != null) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java index 050e0f20171..ac93ae6501e 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -67,9 +67,9 @@ class XFramePeer extends XDecoratedPeer implements FramePeer { undecorated = Boolean.valueOf(target.isUndecorated()); winAttr.nativeDecor = !target.isUndecorated(); if (winAttr.nativeDecor) { - winAttr.decorations = winAttr.AWT_DECOR_ALL; + winAttr.decorations = XWindowAttributesData.AWT_DECOR_ALL; } else { - winAttr.decorations = winAttr.AWT_DECOR_NONE; + winAttr.decorations = XWindowAttributesData.AWT_DECOR_NONE; } winAttr.functions = MWMConstants.MWM_FUNC_ALL; winAttr.isResizable = true; // target.isResizable(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java b/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java index c309d310e0a..bcef8c85315 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -133,8 +133,8 @@ public final class XGlobalCursorManager extends GlobalCursorManager { XlibWrapper.larg6, XlibWrapper.larg7); - p.x = (int) XlibWrapper.unsafe.getInt(XlibWrapper.larg3); - p.y = (int) XlibWrapper.unsafe.getInt(XlibWrapper.larg4); + p.x = XlibWrapper.unsafe.getInt(XlibWrapper.larg3); + p.y = XlibWrapper.unsafe.getInt(XlibWrapper.larg4); } finally { XToolkit.awtUnlock(); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java index 7c6684bfddc..07899ef8de4 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -301,8 +301,8 @@ public class XIconWindow extends XBaseWindow { } long dst = XlibWrapper.XCreateImage(XToolkit.getDisplay(), visInfo.get_visual(), - (int)awtImage.get_Depth(), - (int)XConstants.ZPixmap, + awtImage.get_Depth(), + XConstants.ZPixmap, 0, bytes, iconWidth, @@ -483,7 +483,7 @@ public class XIconWindow extends XBaseWindow { params.add(BACKGROUND_PIXMAP, iconPixmap); params.add(COLORMAP, adata.get_awt_cmap()); params.add(DEPTH, awtImage.get_Depth()); - params.add(VISUAL_CLASS, (int)XConstants.InputOutput); + params.add(VISUAL_CLASS, XConstants.InputOutput); params.add(VISUAL, visInfo.get_visual()); params.add(VALUE_MASK, XConstants.CWBorderPixel | XConstants.CWColormap | XConstants.CWBackPixmap); params.add(PARENT_WINDOW, XlibWrapper.RootWindow(XToolkit.getDisplay(), visInfo.get_screen())); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XInputMethod.java b/jdk/src/solaris/classes/sun/awt/X11/XInputMethod.java index 6392f2cbf8a..67e729b440c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XInputMethod.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XInputMethod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -138,7 +138,7 @@ public class XInputMethod extends X11InputMethod { } long getCurrentParentWindow() { - return (long)((XWindow)clientComponentWindow.getPeer()).getContentWindow(); + return ((XWindow)clientComponentWindow.getPeer()).getContentWindow(); } /* diff --git a/jdk/src/solaris/classes/sun/awt/X11/XMenuBarPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XMenuBarPeer.java index 7cf0cd73123..c1b568bc0fb 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XMenuBarPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XMenuBarPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -525,7 +525,7 @@ public class XMenuBarPeer extends XBaseMenuWindow implements MenuBarPeer { if (isEventDisabled(xev)) { return; } - final Component currentSource = (Component)getEventSource(); + final Component currentSource = getEventSource(); //This is the only difference from XWindow.handleKeyPress //Ancestor's function can invoke handleF10KeyPress here handleKeyPress(xkey); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XMenuWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XMenuWindow.java index a524f0d6e38..9863c983873 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XMenuWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XMenuWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -250,7 +250,7 @@ public class XMenuWindow extends XBaseMenuWindow { } //Item rectangles for (int i = 0; i < itemCnt; i++) { - XMenuItemPeer item = (XMenuItemPeer)itemVector[i]; + XMenuItemPeer item = itemVector[i]; XMenuItemPeer.TextMetrics metrics = itemMetrics[i]; Dimension dim = metrics.getTextDimension(); if (dim != null) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java index dfd372edabf..722261113d1 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -108,7 +108,7 @@ final class XNETProtocol extends XProtocol implements XStateProtocol, XLayerProt if (log.isLoggable(PlatformLogger.Level.FINE)) { log.fine("Requesting state on " + window + " for " + state); } - req.set_type((int)XConstants.ClientMessage); + req.set_type(XConstants.ClientMessage); req.set_window(window.getWindow()); req.set_message_type(XA_NET_WM_STATE.getAtom()); req.set_format(32); @@ -181,7 +181,7 @@ final class XNETProtocol extends XProtocol implements XStateProtocol, XLayerProt public void requestState(XWindow window, XAtom state, boolean isAdd) { XClientMessageEvent req = new XClientMessageEvent(); try { - req.set_type((int)XConstants.ClientMessage); + req.set_type(XConstants.ClientMessage); req.set_window(window.getWindow()); req.set_message_type(XA_NET_WM_STATE.getAtom()); req.set_format(32); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XPopupMenuPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XPopupMenuPeer.java index cbb71925b50..81c60dd55b2 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XPopupMenuPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XPopupMenuPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -349,7 +349,7 @@ public class XPopupMenuPeer extends XMenuWindow implements PopupMenuPeer { if (isEventDisabled(xev)) { return; } - final Component currentSource = (Component)getEventSource(); + final Component currentSource = getEventSource(); handleKeyPress(xkey); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java index 7c7b2d1936a..f4bf1ec2062 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -342,7 +342,7 @@ final class XTextAreaPeer extends XComponentPeer implements TextAreaPeer { @Override void handleJavaInputMethodEvent(InputMethodEvent e) { if (jtext != null) - jtext.processInputMethodEventPublic((InputMethodEvent)e); + jtext.processInputMethodEventPublic(e); } /** diff --git a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java index 475ea7848b3..ba9ef8c77ab 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -655,8 +655,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable { XWindowAttributes pattr = new XWindowAttributes(); try { XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), pattr.pData); - screenWidth = (int) pattr.get_width(); - screenHeight = (int) pattr.get_height(); + screenWidth = pattr.get_width(); + screenHeight = pattr.get_height(); } finally { pattr.dispose(); } @@ -1542,7 +1542,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable { */ if (desktopProperties.get(SunToolkit.DESKTOPFONTHINTS) == null) { if (XWM.isKDE2()) { - Object hint = fcManager.getFontConfigAAHint(); + Object hint = FontConfigManager.getFontConfigAAHint(); if (hint != null) { /* set the fontconfig/KDE property so that * getDesktopHints() below will see it @@ -2074,7 +2074,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable { } private static void setBackingStoreType() { - String prop = (String)AccessController.doPrivileged( + String prop = AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.awt.backingStore")); if (prop == null) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java index 6791ce78ae3..8df6e569bb7 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -200,7 +200,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { getColorModel(); // fix 4948833: this call forces the color map to be initialized params.putIfNull(COLORMAP, gData.get_awt_cmap()); params.putIfNull(DEPTH, gData.get_awt_depth()); - params.putIfNull(VISUAL_CLASS, Integer.valueOf((int)XConstants.InputOutput)); + params.putIfNull(VISUAL_CLASS, Integer.valueOf(XConstants.InputOutput)); params.putIfNull(VISUAL, visInfo.get_visual()); params.putIfNull(VALUE_MASK, XConstants.CWBorderPixel | XConstants.CWEventMask | XConstants.CWColormap); Long parentWindow = (Long)params.get(PARENT_WINDOW); @@ -350,7 +350,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { Graphics getGraphics(SurfaceData surfData, Color afore, Color aback, Font afont) { if (surfData == null) return null; - Component target = (Component) this.target; + Component target = this.target; /* Fix for bug 4746122. Color and Font shouldn't be null */ Color bgColor = aback; @@ -548,7 +548,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { int w = xe.get_width(); int h = xe.get_height(); - Component target = (Component)getEventSource(); + Component target = getEventSource(); AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor(); if (!compAccessor.getIgnoreRepaint(target) @@ -740,7 +740,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { modifiers = getModifiers(xbe.get_state(),button,0, type, wheel_mouse); if (!wheel_mouse) { - MouseEvent me = new MouseEvent((Component)getEventSource(), + MouseEvent me = new MouseEvent(getEventSource(), type == XConstants.ButtonPress ? MouseEvent.MOUSE_PRESSED : MouseEvent.MOUSE_RELEASED, jWhen,modifiers, x, y, xbe.get_x_root(), @@ -752,7 +752,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { if ((type == XConstants.ButtonRelease) && ((mouseButtonClickAllowed & XlibUtil.getButtonMask(lbutton)) != 0) ) // No up-button in the drag-state { - postEventToEventQueue(me = new MouseEvent((Component)getEventSource(), + postEventToEventQueue(me = new MouseEvent(getEventSource(), MouseEvent.MOUSE_CLICKED, jWhen, modifiers, @@ -766,7 +766,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } else { if (xev.get_type() == XConstants.ButtonPress) { - MouseWheelEvent mwe = new MouseWheelEvent((Component)getEventSource(),MouseEvent.MOUSE_WHEEL, jWhen, + MouseWheelEvent mwe = new MouseWheelEvent(getEventSource(),MouseEvent.MOUSE_WHEEL, jWhen, modifiers, x, y, xbe.get_x_root(), @@ -837,7 +837,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { int modifiers = getModifiers(xme.get_state(), 0, 0); boolean popupTrigger = false; - Component source = (Component)getEventSource(); + Component source = getEventSource(); if (xme.get_window() != window) { Point localXY = toLocal(xme.get_x_root(), xme.get_y_root()); @@ -1111,7 +1111,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { unicodeKey = keysymToUnicode( keysym[0], ev.get_state() ); if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) { keyEventLog.fine("--XWindow.java XIM did NOT process event, hex keysym:"+Long.toHexString(keysym[0])+"\n"+ - " unicode key:"+Integer.toHexString((int)unicodeKey)); + " unicode key:"+Integer.toHexString(unicodeKey)); } } }else { @@ -1121,7 +1121,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { unicodeKey = keysymToUnicode( keysym[0], ev.get_state() ); if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) { keyEventLog.fine("--XWindow.java XIM is absent; hex keysym:"+Long.toHexString(keysym[0])+"\n"+ - " unicode key:"+Integer.toHexString((int)unicodeKey)); + " unicode key:"+Integer.toHexString(unicodeKey)); } } // Keysym should be converted to Unicode, if possible and necessary, @@ -1466,7 +1466,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { long jWhen = XToolkit.nowMillisUTC_offset(when); int modifiers = getModifiers(state, 0, keyCode); - KeyEvent ke = new KeyEvent((Component)getEventSource(), id, jWhen, + KeyEvent ke = new KeyEvent(getEventSource(), id, jWhen, modifiers, keyCode, (char)keyChar, keyLocation); if (event != 0) { byte[] data = Native.toBytes(event, eventSize); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java index 8dcd15bc975..521bbc145b3 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -291,7 +291,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, public void updateIconImages() { Window target = (Window)this.target; - java.util.List iconImages = ((Window)target).getIconImages(); + java.util.List iconImages = target.getIconImages(); XWindowPeer ownerPeer = getOwnerPeer(); winAttr.icons = new ArrayList(); if (iconImages.size() != 0) { @@ -463,8 +463,8 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, public void updateMinimumSize() { //This function only saves minimumSize value in XWindowPeer //Setting WMSizeHints is implemented in XDecoratedPeer - targetMinimumSize = (((Component)target).isMinimumSizeSet()) ? - ((Component)target).getMinimumSize() : null; + targetMinimumSize = (target.isMinimumSizeSet()) ? + target.getMinimumSize() : null; } public Dimension getTargetMinimumSize() { @@ -719,10 +719,10 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, Runnable dc = new Runnable() { public void run() { AWTAccessor.getComponentAccessor(). - setGraphicsConfiguration((Component)target, gc); + setGraphicsConfiguration(target, gc); } }; - SunToolkit.executeOnEventHandlerThread((Component)target, dc); + SunToolkit.executeOnEventHandlerThread(target, dc); } /** @@ -750,7 +750,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, protected Point getNewLocation(XConfigureEvent xe, int leftInset, int topInset) { // Bounds of the window - Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds((Component)target); + Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds(target); int runningWM = XWM.getWMID(); Point newLocation = targetBounds.getLocation(); @@ -1108,7 +1108,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, XUnmapEvent unmap = new XUnmapEvent(); unmap.set_window(window); unmap.set_event(XToolkit.getDefaultRootWindow()); - unmap.set_type((int)XConstants.UnmapNotify); + unmap.set_type(XConstants.UnmapNotify); unmap.set_from_configure(false); XlibWrapper.XSendEvent(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), false, XConstants.SubstructureNotifyMask | XConstants.SubstructureRedirectMask, diff --git a/jdk/src/solaris/classes/sun/awt/X11FontManager.java b/jdk/src/solaris/classes/sun/awt/X11FontManager.java index 573d250acba..c9d2ebc9ba4 100644 --- a/jdk/src/solaris/classes/sun/awt/X11FontManager.java +++ b/jdk/src/solaris/classes/sun/awt/X11FontManager.java @@ -715,7 +715,7 @@ public class X11FontManager extends SunFontManager { if (FontUtilities.isLinux) { fontConfigDirs.add(jreLibDirName+File.separator+"oblique-fonts"); } - fontdirs = (String[])fontConfigDirs.toArray(new String[0]); + fontdirs = fontConfigDirs.toArray(new String[0]); } // Implements SunGraphicsEnvironment.createFontConfiguration. diff --git a/jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java b/jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java index 60846b69c18..547af9c3bed 100644 --- a/jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java +++ b/jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -232,7 +232,7 @@ public class X11GraphicsEnvironment return true; } - String isRemote = (String)java.security.AccessController.doPrivileged( + String isRemote = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.java2d.remote")); if (isRemote != null) { return isRemote.equals("false"); diff --git a/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java b/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java index e33e08a867b..23cf93624a6 100644 --- a/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java +++ b/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, 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 @@ -441,7 +441,7 @@ public class FcFontConfiguration extends FontConfiguration { try { fcVersion = Integer.parseInt(fcVersionStr); if (fcVersion != 0 && - fcVersion != fcm.getFontConfigVersion()) { + fcVersion != FontConfigManager.getFontConfigVersion()) { return; } } catch (Exception e) { diff --git a/jdk/src/solaris/classes/sun/font/NativeFont.java b/jdk/src/solaris/classes/sun/font/NativeFont.java index 9fa469fce3c..bc39f743a91 100644 --- a/jdk/src/solaris/classes/sun/font/NativeFont.java +++ b/jdk/src/solaris/classes/sun/font/NativeFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -331,6 +331,7 @@ public class NativeFont extends PhysicalFont { * ie to request 12 pt Times New Roman italic font, use an XLFD like : * -monotype-times new roman-regular-i---*-120-72-72-p-*-iso8859-1 */ + @SuppressWarnings("cast") byte[] getPlatformNameBytes(int ptSize) { int[] hPos = new int[14]; int hyphenCnt = 1; diff --git a/jdk/src/solaris/classes/sun/font/X11TextRenderer.java b/jdk/src/solaris/classes/sun/font/X11TextRenderer.java index a408168a5cc..3afb0ccd5a4 100644 --- a/jdk/src/solaris/classes/sun/font/X11TextRenderer.java +++ b/jdk/src/solaris/classes/sun/font/X11TextRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -57,11 +57,11 @@ public class X11TextRenderer extends GlyphListPipe { super.drawGlyphVector(sg2d, g, x, y); return; case SunHints.INTVAL_TEXT_ANTIALIAS_ON: - sg2d.surfaceData.aaTextRenderer.drawGlyphVector(sg2d, g, x, y); + SurfaceData.aaTextRenderer.drawGlyphVector(sg2d, g, x, y); return; case SunHints.INTVAL_TEXT_ANTIALIAS_LCD_HRGB: case SunHints.INTVAL_TEXT_ANTIALIAS_LCD_VRGB: - sg2d.surfaceData.lcdTextRenderer.drawGlyphVector(sg2d, g, x, y); + SurfaceData.lcdTextRenderer.drawGlyphVector(sg2d, g, x, y); return; default: } diff --git a/jdk/src/solaris/classes/sun/font/XRGlyphCacheEntry.java b/jdk/src/solaris/classes/sun/font/XRGlyphCacheEntry.java index 18ece2b813b..b1dd7c150fc 100644 --- a/jdk/src/solaris/classes/sun/font/XRGlyphCacheEntry.java +++ b/jdk/src/solaris/classes/sun/font/XRGlyphCacheEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -48,8 +48,8 @@ public class XRGlyphCacheEntry { this.glyphInfoPtr = glyphInfoPtr; /* TODO: Does it make sence to cache results? */ - xOff = (int) Math.round(getXAdvance()); - yOff = (int) Math.round(getYAdvance()); + xOff = Math.round(getXAdvance()); + yOff = Math.round(getYAdvance()); } public int getXOff() { diff --git a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java index d9d883a0e52..af65891495f 100644 --- a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -214,13 +214,13 @@ public abstract class X11SurfaceData extends XSurfaceData { if (!isX11SurfaceDataInitialized() && !GraphicsEnvironment.isHeadless()) { // If a screen magnifier is present, don't attempt to use DGA - String magPresent = (String) java.security.AccessController.doPrivileged + String magPresent = java.security.AccessController.doPrivileged (new sun.security.action.GetPropertyAction("javax.accessibility.screen_magnifier_present")); boolean tryDGA = magPresent == null || !"true".equals(magPresent); initIDs(XORComposite.class, tryDGA); - String xtextpipe = (String) java.security.AccessController.doPrivileged + String xtextpipe = java.security.AccessController.doPrivileged (new sun.security.action.GetPropertyAction("sun.java2d.xtextpipe")); if (xtextpipe == null || "true".startsWith(xtextpipe)) { if ("true".equals(xtextpipe)) { @@ -264,8 +264,7 @@ public abstract class X11SurfaceData extends XSurfaceData { if (GraphicsEnvironment.isHeadless()) { accelerationEnabled = Boolean.FALSE; } else { - String prop = - (String) java.security.AccessController.doPrivileged( + String prop = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.java2d.pmoffscreen")); if (prop != null) { // true iff prop==true, false otherwise diff --git a/jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java b/jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java index 66b595e9455..a3c46ae26da 100644 --- a/jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java +++ b/jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java @@ -1,7 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - - + * Copyright (c) 2013, 2014, 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 @@ -249,7 +247,7 @@ public class XRDrawLine { if (dx < 0) { xsteps = -xsteps; } - x1 = ucX1 + (int) xsteps; + x1 = ucX1 + xsteps; } else if ((outcode1 & (OUTCODE_LEFT | OUTCODE_RIGHT)) != 0) { if ((outcode1 & OUTCODE_LEFT) != 0) { x1 = cxmin; @@ -268,7 +266,7 @@ public class XRDrawLine { if (dy < 0) { ysteps = -ysteps; } - y1 = ucY1 + (int) ysteps; + y1 = ucY1 + ysteps; } outcode1 = outcode(x1, y1, cxmin, cymin, cxmax, cymax); } else { @@ -292,7 +290,7 @@ public class XRDrawLine { if (dx > 0) { xsteps = -xsteps; } - x2 = ucX2 + (int) xsteps; + x2 = ucX2 + xsteps; } else if ((outcode2 & (OUTCODE_LEFT | OUTCODE_RIGHT)) != 0) { if ((outcode2 & OUTCODE_LEFT) != 0) { x2 = cxmin; @@ -313,7 +311,7 @@ public class XRDrawLine { if (dy > 0) { ysteps = -ysteps; } - y2 = ucY2 + (int) ysteps; + y2 = ucY2 + ysteps; } outcode2 = outcode(x2, y2, cxmin, cymin, cxmax, cymax); } diff --git a/jdk/src/solaris/classes/sun/java2d/xr/XRPMBlitLoops.java b/jdk/src/solaris/classes/sun/java2d/xr/XRPMBlitLoops.java index 981629d1e06..58ebf7193b7 100644 --- a/jdk/src/solaris/classes/sun/java2d/xr/XRPMBlitLoops.java +++ b/jdk/src/solaris/classes/sun/java2d/xr/XRPMBlitLoops.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -178,6 +178,7 @@ class XRPMScaledBlit extends ScaledBlit { super(srcType, CompositeType.AnyAlpha, dstType); } + @SuppressWarnings("cast") public void Scale(SurfaceData src, SurfaceData dst, Composite comp, Region clip, int sx1, int sy1, int sx2, int sy2, double dx1, double dy1, double dx2, double dy2) { try { diff --git a/jdk/src/solaris/classes/sun/java2d/xr/XRPaints.java b/jdk/src/solaris/classes/sun/java2d/xr/XRPaints.java index 05136dabaf2..07cba15ec3f 100644 --- a/jdk/src/solaris/classes/sun/java2d/xr/XRPaints.java +++ b/jdk/src/solaris/classes/sun/java2d/xr/XRPaints.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -231,7 +231,7 @@ abstract class XRPaints { Rectangle2D anchor = paint.getAnchorRect(); XRSurfaceData dstData = (XRSurfaceData) sg2d.surfaceData; - XRSurfaceData srcData = (XRSurfaceData) getAccSrcSurface(dstData, bi); + XRSurfaceData srcData = getAccSrcSurface(dstData, bi); AffineTransform at = new AffineTransform(); at.translate(anchor.getX(), anchor.getY()); @@ -259,7 +259,7 @@ abstract class XRPaints { public int colorToIntArgbPixel(Color c) { int rgb = c.getRGB(); - int a = (int) Math.round(xrCompMan.getExtraAlpha() * (rgb >>> 24)); + int a = Math.round(xrCompMan.getExtraAlpha() * (rgb >>> 24)); return ((a << 24) | (rgb & 0x00FFFFFF)); } } diff --git a/jdk/src/solaris/classes/sun/management/OperatingSystemImpl.java b/jdk/src/solaris/classes/sun/management/OperatingSystemImpl.java index 666840f247d..5e2f8dca3b7 100644 --- a/jdk/src/solaris/classes/sun/management/OperatingSystemImpl.java +++ b/jdk/src/solaris/classes/sun/management/OperatingSystemImpl.java @@ -39,19 +39,61 @@ class OperatingSystemImpl extends BaseOperatingSystemImpl super(vm); } - public native long getCommittedVirtualMemorySize(); - public native long getTotalSwapSpaceSize(); - public native long getFreeSwapSpaceSize(); - public native long getProcessCpuTime(); - public native long getFreePhysicalMemorySize(); - public native long getTotalPhysicalMemorySize(); - public native long getOpenFileDescriptorCount(); - public native long getMaxFileDescriptorCount(); - public native double getSystemCpuLoad(); - public native double getProcessCpuLoad(); + public long getCommittedVirtualMemorySize() { + return getCommittedVirtualMemorySize0(); + } + + public long getTotalSwapSpaceSize() { + return getTotalSwapSpaceSize0(); + } + + public long getFreeSwapSpaceSize() { + return getFreeSwapSpaceSize0(); + } + + public long getProcessCpuTime() { + return getProcessCpuTime0(); + } + + public long getFreePhysicalMemorySize() { + return getFreePhysicalMemorySize0(); + } + + public long getTotalPhysicalMemorySize() { + return getTotalPhysicalMemorySize0(); + } + + public long getOpenFileDescriptorCount() { + return getOpenFileDescriptorCount0(); + } + + public long getMaxFileDescriptorCount() { + return getMaxFileDescriptorCount0(); + } + + public double getSystemCpuLoad() { + return getSystemCpuLoad0(); + } + + public double getProcessCpuLoad() { + return getProcessCpuLoad0(); + } + + /* native methods */ + private native long getCommittedVirtualMemorySize0(); + private native long getFreePhysicalMemorySize0(); + private native long getFreeSwapSpaceSize0(); + private native long getMaxFileDescriptorCount0(); + private native long getOpenFileDescriptorCount0(); + private native long getProcessCpuTime0(); + private native double getProcessCpuLoad0(); + private native double getSystemCpuLoad0(); + private native long getTotalPhysicalMemorySize0(); + private native long getTotalSwapSpaceSize0(); static { - initialize(); + initialize0(); } - private static native void initialize(); + + private static native void initialize0(); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java b/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java index 667c51ab59f..7a0ce392299 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java +++ b/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java @@ -68,6 +68,8 @@ public class DefaultAsynchronousChannelProvider { return createProvider("sun.nio.ch.LinuxAsynchronousChannelProvider"); if (osname.contains("OS X")) return createProvider("sun.nio.ch.BsdAsynchronousChannelProvider"); + if (osname.equals("AIX")) + return createProvider("sun.nio.ch.AixAsynchronousChannelProvider"); throw new InternalError("platform not recognized"); } } diff --git a/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java b/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java index 17cd171bc80..4238984c8d2 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java +++ b/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java @@ -93,7 +93,7 @@ final class EPollPort try { socketpair(sv); // register one end with epoll - epollCtl(epfd, EPOLL_CTL_ADD, sv[0], POLLIN); + epollCtl(epfd, EPOLL_CTL_ADD, sv[0], Net.POLLIN); } catch (IOException x) { close0(epfd); throw x; diff --git a/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java b/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java index c323f076fb2..5a1066444eb 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java +++ b/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java @@ -172,9 +172,9 @@ final class KQueuePort // TBD: Measure cost of EV_ONESHOT vs. EV_CLEAR, either will do here. int err = 0; int flags = (EV_ADD|EV_ONESHOT); - if ((events & Port.POLLIN) > 0) + if ((events & Net.POLLIN) > 0) err = keventRegister(kqfd, fd, EVFILT_READ, flags); - if (err == 0 && (events & Port.POLLOUT) > 0) + if (err == 0 && (events & Net.POLLOUT) > 0) err = keventRegister(kqfd, fd, EVFILT_WRITE, flags); if (err != 0) throw new InternalError("kevent failed: " + err); // should not happen @@ -227,9 +227,9 @@ final class KQueuePort int filter = getFilter(keventAddress); int events = 0; if (filter == EVFILT_READ) - events = Port.POLLIN; + events = Net.POLLIN; else if (filter == EVFILT_WRITE) - events = Port.POLLOUT; + events = Net.POLLOUT; Event ev = new Event(channel, events); diff --git a/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java b/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java index 3a57bfc4ba2..50fd67c5a83 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java +++ b/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java @@ -43,8 +43,6 @@ import sun.misc.*; public class PollArrayWrapper extends AbstractPollArrayWrapper { - public static final short POLLCONN = POLLOUT; - // File descriptor to write for interrupt int interruptFD; @@ -58,7 +56,7 @@ public class PollArrayWrapper extends AbstractPollArrayWrapper { void initInterrupt(int fd0, int fd1) { interruptFD = fd1; putDescriptor(0, fd0); - putEventOps(0, POLLIN); + putEventOps(0, Net.POLLIN); putReventOps(0, 0); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/Port.java b/jdk/src/solaris/classes/sun/nio/ch/Port.java index 94025089933..81e1ed87615 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/Port.java +++ b/jdk/src/solaris/classes/sun/nio/ch/Port.java @@ -40,10 +40,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; */ abstract class Port extends AsynchronousChannelGroupImpl { - static final short POLLIN = 0x0001; - static final short POLLOUT = 0x0004; - static final short POLLERR = 0x0008; - static final short POLLHUP = 0x0010; /** * Implemented by clients registered with this port. @@ -76,12 +72,22 @@ abstract class Port extends AsynchronousChannelGroupImpl { } } + /** + * Callback method for implementations that need special handling when fd is + * removed (currently only needed in the AIX-Port - see AixPollPort.java). + */ + protected void preUnregister(int fd) { + // Do nothing by default. + } + /** * Unregister channel identified by its file descriptor */ final void unregister(int fd) { boolean checkForShutdown = false; + preUnregister(fd); + fdToChannelLock.writeLock().lock(); try { fdToChannel.remove(Integer.valueOf(fd)); diff --git a/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java index a0645221ed0..bdc6c687070 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java @@ -118,17 +118,16 @@ class SinkChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) + if ((ops & Net.POLLNVAL) != 0) throw new Error("POLLNVAL detected"); - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0)) newOps |= SelectionKey.OP_WRITE; @@ -146,7 +145,7 @@ class SinkChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { if (ops == SelectionKey.OP_WRITE) - ops = PollArrayWrapper.POLLOUT; + ops = Net.POLLOUT; sk.selector.putEventOps(sk, ops); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java index d632b74259f..398b169cc84 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java @@ -118,17 +118,16 @@ class SourceChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) + if ((ops & Net.POLLNVAL) != 0) throw new Error("POLLNVAL detected"); - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0)) newOps |= SelectionKey.OP_READ; @@ -146,7 +145,7 @@ class SourceChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { if (ops == SelectionKey.OP_READ) - ops = PollArrayWrapper.POLLIN; + ops = Net.POLLIN; sk.selector.putEventOps(sk, ops); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java index 752b70ee4f0..294dc014236 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java @@ -148,7 +148,7 @@ class UnixAsynchronousServerSocketChannelImpl synchronized (updateLock) { acceptPending = true; } - port.startPoll(fdVal, Port.POLLIN); + port.startPoll(fdVal, Net.POLLIN); return; } @@ -299,7 +299,7 @@ class UnixAsynchronousServerSocketChannelImpl } // register for connections - port.startPoll(fdVal, Port.POLLIN); + port.startPoll(fdVal, Net.POLLIN); return result; } } catch (Throwable x) { diff --git a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java index c718057f060..d7f11dc6ffd 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java @@ -142,9 +142,9 @@ class UnixAsynchronousSocketChannelImpl assert Thread.holdsLock(updateLock); int events = 0; if (readPending) - events |= Port.POLLIN; + events |= Net.POLLIN; if (connectPending || writePending) - events |= Port.POLLOUT; + events |= Net.POLLOUT; if (events != 0) port.startPoll(fdVal, events); } @@ -204,9 +204,9 @@ class UnixAsynchronousSocketChannelImpl */ @Override public void onEvent(int events, boolean mayInvokeDirect) { - boolean readable = (events & Port.POLLIN) > 0; - boolean writable = (events & Port.POLLOUT) > 0; - if ((events & (Port.POLLERR | Port.POLLHUP)) > 0) { + boolean readable = (events & Net.POLLIN) > 0; + boolean writable = (events & Net.POLLOUT) > 0; + if ((events & (Net.POLLERR | Net.POLLHUP)) > 0) { readable = true; writable = true; } diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java index 3b375686335..84a9944aa20 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java @@ -593,15 +593,14 @@ public class SctpChannelImpl extends SctpChannel int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { /* This should only happen if this channel is pre-closed while a * selection operation is in progress * ## Throw an error if this channel has not been pre-closed */ return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); /* No need to poll again in checkConnect, @@ -610,19 +609,19 @@ public class SctpChannelImpl extends SctpChannel return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0) && isConnected()) newOps |= SelectionKey.OP_READ; - if (((ops & PollArrayWrapper.POLLCONN) != 0) && + if (((ops & Net.POLLCONN) != 0) && ((intOps & SelectionKey.OP_CONNECT) != 0) && ((state == ChannelState.UNCONNECTED) || (state == ChannelState.PENDING))) { newOps |= SelectionKey.OP_CONNECT; readyToConnect = true; } - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0) && isConnected()) newOps |= SelectionKey.OP_WRITE; @@ -646,11 +645,11 @@ public class SctpChannelImpl extends SctpChannel public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { int newOps = 0; if ((ops & SelectionKey.OP_READ) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; if ((ops & SelectionKey.OP_WRITE) != 0) - newOps |= PollArrayWrapper.POLLOUT; + newOps |= Net.POLLOUT; if ((ops & SelectionKey.OP_CONNECT) != 0) - newOps |= PollArrayWrapper.POLLCONN; + newOps |= Net.POLLCONN; sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java index 424c1d1642d..0a00bd4162e 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java @@ -321,25 +321,24 @@ public class SctpMultiChannelImpl extends SctpMultiChannel int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { /* This should only happen if this channel is pre-closed while a * selection operation is in progress * ## Throw an error if this channel has not been pre-closed */ return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0)) newOps |= SelectionKey.OP_READ; - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0)) newOps |= SelectionKey.OP_WRITE; @@ -361,9 +360,9 @@ public class SctpMultiChannelImpl extends SctpMultiChannel public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { int newOps = 0; if ((ops & SelectionKey.OP_READ) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; if ((ops & SelectionKey.OP_WRITE) != 0) - newOps |= PollArrayWrapper.POLLOUT; + newOps |= Net.POLLOUT; sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java index d22af25f1d1..c32fb9ebc0f 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java @@ -314,21 +314,20 @@ public class SctpServerChannelImpl extends SctpServerChannel int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { /* This should only happen if this channel is pre-closed while a * selection operation is in progress * ## Throw an error if this channel has not been pre-closed */ return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_ACCEPT) != 0)) newOps |= SelectionKey.OP_ACCEPT; @@ -352,7 +351,7 @@ public class SctpServerChannelImpl extends SctpServerChannel /* Translate ops */ if ((ops & SelectionKey.OP_ACCEPT) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; /* Place ops into pollfd array */ sk.selector.putEventOps(sk, newOps); diff --git a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java index d909916450e..595f3c6d187 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java +++ b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java @@ -63,6 +63,8 @@ public class DefaultFileSystemProvider { return createProvider("sun.nio.fs.LinuxFileSystemProvider"); if (osname.contains("OS X")) return createProvider("sun.nio.fs.MacOSXFileSystemProvider"); + if (osname.equals("AIX")) + return createProvider("sun.nio.fs.AixFileSystemProvider"); throw new AssertionError("Platform not recognized"); } } diff --git a/jdk/src/solaris/classes/sun/print/AttributeClass.java b/jdk/src/solaris/classes/sun/print/AttributeClass.java index f9018dce19f..76a652b2a93 100644 --- a/jdk/src/solaris/classes/sun/print/AttributeClass.java +++ b/jdk/src/solaris/classes/sun/print/AttributeClass.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -274,7 +274,7 @@ public class AttributeClass { } private int unsignedByteToInt(byte b) { - return (int) (b & 0xff); + return (b & 0xff); } private int convertToInt(byte[] buf) { diff --git a/jdk/src/solaris/classes/sun/print/CUPSPrinter.java b/jdk/src/solaris/classes/sun/print/CUPSPrinter.java index a4c1082e78c..ddfb6e1e742 100644 --- a/jdk/src/solaris/classes/sun/print/CUPSPrinter.java +++ b/jdk/src/solaris/classes/sun/print/CUPSPrinter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -298,7 +298,7 @@ public class CUPSPrinter { printerInfo[0] = UnixPrintServiceLookup. getDefaultPrinterNameSysV(); printerInfo[1] = null; - return (String[])printerInfo.clone(); + return printerInfo.clone(); } else { return null; } @@ -318,7 +318,7 @@ public class CUPSPrinter { } os.close(); urlConnection.disconnect(); - return (String [])printerInfo.clone(); + return printerInfo.clone(); } } os.close(); diff --git a/jdk/src/solaris/classes/sun/print/IPPPrintService.java b/jdk/src/solaris/classes/sun/print/IPPPrintService.java index f48dd5ba38e..689288126b9 100644 --- a/jdk/src/solaris/classes/sun/print/IPPPrintService.java +++ b/jdk/src/solaris/classes/sun/print/IPPPrintService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -74,8 +74,7 @@ public class IPPPrintService implements PrintService, SunPrinterJobService { private static final String FORCE_PIPE_PROP = "sun.print.ippdebug"; static { - String debugStr = - (String)java.security.AccessController.doPrivileged( + String debugStr = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction(FORCE_PIPE_PROP)); debugPrint = "true".equalsIgnoreCase(debugStr); @@ -424,7 +423,7 @@ public class IPPPrintService implements PrintService, SunPrinterJobService { } // use IPP to get all media, - Media[] allMedia = (Media[])getSupportedMedia(); + Media[] allMedia = getSupportedMedia(); ArrayList sizeList = new ArrayList(); ArrayList trayList = new ArrayList(); for (int i=0; i= 1 && !splitPart[0].trim().endsWith(":")) { + printers.add(posPrinters[i]); + } + } + + return (String[])printers.toArray(new String[printers.size()]); + } + + private PrinterIsAcceptingJobs getPrinterIsAcceptingJobsAIX() { + // On AIX there should not be a blank after '-a'. + String command = "/usr/bin/lpstat -a" + printer; + String results[]= UnixPrintServiceLookup.execCmd(command); + + // Remove headers and bogus entries added by remote printers. + results = filterPrinterNamesAIX(results); + + if (results != null && results.length > 0) { + for (int i = 0; i < results.length; i++) { + if (results[i].contains("READY") || + results[i].contains("RUNNING")) { + return PrinterIsAcceptingJobs.ACCEPTING_JOBS; + } + } + } + + return PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS; + + } + private PrinterIsAcceptingJobs getPrinterIsAcceptingJobs() { if (UnixPrintServiceLookup.isSysV()) { return getPrinterIsAcceptingJobsSysV(); } else if (UnixPrintServiceLookup.isBSD()) { return getPrinterIsAcceptingJobsBSD(); + } else if (UnixPrintServiceLookup.isAIX()) { + return getPrinterIsAcceptingJobsAIX(); } else { return PrinterIsAcceptingJobs.ACCEPTING_JOBS; } @@ -345,11 +393,32 @@ public class UnixPrintService implements PrintService, AttributeUpdater, return new QueuedJobCount(qlen); } + private QueuedJobCount getQueuedJobCountAIX() { + // On AIX there should not be a blank after '-a'. + String command = "/usr/bin/lpstat -a" + printer; + String results[]= UnixPrintServiceLookup.execCmd(command); + + // Remove headers and bogus entries added by remote printers. + results = filterPrinterNamesAIX(results); + + int qlen = 0; + if (results != null && results.length > 0){ + for (int i = 0; i < results.length; i++) { + if (results[i].contains("QUEUED")){ + qlen ++; + } + } + } + return new QueuedJobCount(qlen); + } + private QueuedJobCount getQueuedJobCount() { if (UnixPrintServiceLookup.isSysV()) { return getQueuedJobCountSysV(); } else if (UnixPrintServiceLookup.isBSD()) { return getQueuedJobCountBSD(); + } else if (UnixPrintServiceLookup.isAIX()) { + return getQueuedJobCountAIX(); } else { return new QueuedJobCount(0); } @@ -369,6 +438,13 @@ public class UnixPrintService implements PrintService, AttributeUpdater, return attrs; } + private PrintServiceAttributeSet getAIXServiceAttributes() { + PrintServiceAttributeSet attrs = new HashPrintServiceAttributeSet(); + attrs.add(getQueuedJobCountAIX()); + attrs.add(getPrinterIsAcceptingJobsAIX()); + return attrs; + } + private boolean isSupportedCopies(Copies copies) { int numCopies = copies.getValue(); return (numCopies > 0 && numCopies < MAXCOPIES); @@ -394,6 +470,8 @@ public class UnixPrintService implements PrintService, AttributeUpdater, private PrintServiceAttributeSet getDynamicAttributes() { if (UnixPrintServiceLookup.isSysV()) { return getSysVServiceAttributes(); + } else if (UnixPrintServiceLookup.isAIX()) { + return getAIXServiceAttributes(); } else { return getBSDServiceAttributes(); } diff --git a/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java b/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java index fb6950b7d0d..9a7be7f9971 100644 --- a/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java +++ b/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -78,6 +78,19 @@ public class UnixPrintServiceLookup extends PrintServiceLookup static String osname; + // List of commands used to deal with the printer queues on AIX + String[] lpNameComAix = { + "/usr/bin/lsallq", + "/usr/bin/lpstat -W -p|/usr/bin/expand|/usr/bin/cut -f1 -d' '", + "/usr/bin/lpstat -W -d|/usr/bin/expand|/usr/bin/cut -f1 -d' '", + "/usr/bin/lpstat -W -v" + }; + private static final int aix_lsallq = 0; + private static final int aix_lpstat_p = 1; + private static final int aix_lpstat_d = 2; + private static final int aix_lpstat_v = 3; + private static int aix_defaultPrinterEnumeration = aix_lsallq; + static { /* The system property "sun.java2d.print.polling" * can be used to force the printing code to poll or not poll @@ -114,6 +127,24 @@ public class UnixPrintServiceLookup extends PrintServiceLookup osname = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("os.name")); + + /* The system property "sun.java2d.print.aix.lpstat" + * can be used to force the usage of 'lpstat -p' to enumerate all + * printer queues. By default we use 'lsallq', because 'lpstat -p' can + * take lots of time if thousands of printers are attached to a server. + */ + if (isAIX()) { + String aixPrinterEnumerator = java.security.AccessController.doPrivileged( + new sun.security.action.GetPropertyAction("sun.java2d.print.aix.lpstat")); + + if (aixPrinterEnumerator != null) { + if (aixPrinterEnumerator.equalsIgnoreCase("lpstat")) { + aix_defaultPrinterEnumeration = aix_lpstat_p; + } else if (aixPrinterEnumerator.equalsIgnoreCase("lsallq")) { + aix_defaultPrinterEnumeration = aix_lsallq; + } + } + } } static boolean isMac() { @@ -133,6 +164,10 @@ public class UnixPrintServiceLookup extends PrintServiceLookup osname.contains("OS X")); } + static boolean isAIX() { + return osname.equals("AIX"); + } + static final int UNINITIALIZED = -1; static final int BSD_LPD = 0; static final int BSD_LPD_NG = 1; @@ -200,7 +235,7 @@ public class UnixPrintServiceLookup extends PrintServiceLookup if (printServices == null) { return new PrintService[0]; } else { - return (PrintService[])printServices.clone(); + return printServices.clone(); } } @@ -213,13 +248,13 @@ public class UnixPrintServiceLookup extends PrintServiceLookup // information when queried using IPP. Workaround is to remove it. // Even CUPS ignores these entries as shown in lpstat or using // their web configuration. - PrinterURI uri = (PrinterURI)ps.getAttribute(PrinterURI.class); + PrinterURI uri = ps.getAttribute(PrinterURI.class); if (uri.getURI().getHost().equals("localhost")) { IPPPrintService.debug_println(debugPrefix+"duplicate PrintService, ignoring the new local printer: "+ps); return index; // Do not add this. } PrintService oldPS = (PrintService)(printerList.get(index)); - uri = (PrinterURI)oldPS.getAttribute(PrinterURI.class); + uri = oldPS.getAttribute(PrinterURI.class); if (uri.getURI().getHost().equals("localhost")) { IPPPrintService.debug_println(debugPrefix+"duplicate PrintService, removing existing local printer: "+oldPS); printerList.remove(oldPS); @@ -251,6 +286,8 @@ public class UnixPrintServiceLookup extends PrintServiceLookup } else { if (isMac() || isSysV()) { printers = getAllPrinterNamesSysV(); + } else if (isAIX()) { + printers = getAllPrinterNamesAIX(); } else { //BSD printers = getAllPrinterNamesBSD(); } @@ -410,8 +447,7 @@ public class UnixPrintServiceLookup extends PrintServiceLookup /* check if all printers are already available */ if (printServices != null) { for (PrintService printService : printServices) { - PrinterName printerName = - (PrinterName)printService.getAttribute(PrinterName.class); + PrinterName printerName = printService.getAttribute(PrinterName.class); if (printerName.getValue().equals(name)) { return printService; } @@ -435,6 +471,8 @@ public class UnixPrintServiceLookup extends PrintServiceLookup PrintService printer = null; if (isMac() || isSysV()) { printer = getNamedPrinterNameSysV(name); + } else if (isAIX()) { + printer = getNamedPrinterNameAIX(name); } else { printer = getNamedPrinterNameBSD(name); } @@ -464,8 +502,7 @@ public class UnixPrintServiceLookup extends PrintServiceLookup * initialised. */ - PrinterName defName = - (PrinterName)defService.getAttribute(PrinterName.class); + PrinterName defName = defService.getAttribute(PrinterName.class); if (defName != null && name.equals(defName)) { if (matchesAttributes(defService, serviceSet)) { @@ -600,6 +637,8 @@ public class UnixPrintServiceLookup extends PrintServiceLookup } else { if (isMac() || isSysV()) { defaultPrinter = getDefaultPrinterNameSysV(); + } else if (isAIX()) { + defaultPrinter = getDefaultPrinterNameAIX(); } else { defaultPrinter = getDefaultPrinterNameBSD(); } @@ -774,11 +813,49 @@ public class UnixPrintServiceLookup extends PrintServiceLookup return (String[])printerNames.toArray(new String[printerNames.size()]); } + private String getDefaultPrinterNameAIX() { + String[] names = execCmd(lpNameComAix[aix_lpstat_d]); + // Remove headers and bogus entries added by remote printers. + names = UnixPrintService.filterPrinterNamesAIX(names); + if (names == null || names.length != 1) { + // No default printer found + return null; + } else { + return names[0]; + } + } + + private PrintService getNamedPrinterNameAIX(String name) { + // On AIX there should be no blank after '-v'. + String[] result = execCmd(lpNameComAix[aix_lpstat_v] + name); + // Remove headers and bogus entries added by remote printers. + result = UnixPrintService.filterPrinterNamesAIX(result); + if (result == null || result.length != 1) { + return null; + } else { + return new UnixPrintService(name); + } + } + + private String[] getAllPrinterNamesAIX() { + // Determine all printers of the system. + String [] names = execCmd(lpNameComAix[aix_defaultPrinterEnumeration]); + + // Remove headers and bogus entries added by remote printers. + names = UnixPrintService.filterPrinterNamesAIX(names); + + ArrayList printerNames = new ArrayList(); + for ( int i=0; i < names.length; i++) { + printerNames.add(names[i]); + } + return printerNames.toArray(new String[printerNames.size()]); + } + static String[] execCmd(final String command) { ArrayList results = null; try { final String[] cmd = new String[3]; - if (isSysV()) { + if (isSysV() || isAIX()) { cmd[0] = "/usr/bin/sh"; cmd[1] = "-c"; cmd[2] = "env LC_ALL=C " + command; diff --git a/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c b/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c index 9cfcc592c3a..78a4f606735 100644 --- a/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c +++ b/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -42,7 +42,7 @@ #include #include -#if !defined(LINUX) && !defined(_ALLBSD_SOURCE) +#if !defined(LINUX) && !defined(_ALLBSD_SOURCE) && !defined(AIX) #include #endif @@ -65,6 +65,10 @@ #include "jvm_md.h" #include "hprof.h" +#ifdef AIX +#include "porting_aix.h" /* For the 'dladdr' function. */ +#endif + int md_getpid(void) { @@ -86,7 +90,7 @@ md_sleep(unsigned seconds) void md_init(void) { -#if defined(LINUX) || defined(_ALLBSD_SOURCE) +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) /* No Hi-Res timer option? */ #else if ( gdata->micro_state_accounting ) { @@ -253,7 +257,7 @@ md_timeofday(void) jlong md_get_microsecs(void) { -#if defined(LINUX) || defined(_ALLBSD_SOURCE) +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) return (jlong)(md_timeofday() * (jlong)1000); /* Milli to micro */ #else return (jlong)(gethrtime()/(hrtime_t)1000); /* Nano seconds to micro seconds */ @@ -271,7 +275,7 @@ md_get_timemillis(void) jlong md_get_thread_cpu_timemillis(void) { -#if defined(LINUX) || defined(_ALLBSD_SOURCE) +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) return md_timeofday(); #else return (jlong)(gethrvtime()/1000); /* Nano seconds to milli seconds */ @@ -286,7 +290,7 @@ md_get_prelude_path(char *path, int path_len, char *filename) Dl_info dlinfo; libdir[0] = 0; -#if defined(LINUX) || defined(_ALLBSD_SOURCE) +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) addr = (void*)&Agent_OnLoad; #else /* Just using &Agent_OnLoad will get the first external symbol with @@ -457,3 +461,5 @@ md_find_library_entry(void *handle, const char *name) sym = dlsym(handle, name); return sym; } + + diff --git a/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c b/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c index 3e31e7ff125..dd989f735f7 100644 --- a/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c +++ b/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c @@ -32,6 +32,12 @@ #include #include +static void throwIllegalArgumentException(JNIEnv *env, const char *msg) { + jclass clazz = (*env)->FindClass(env, "java/lang/IllegalArgumentException"); + if (clazz != NULL) + (*env)->ThrowNew(env, clazz, msg); +} + JNIEXPORT void JNICALL Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo (JNIEnv *env, jobject obj) { @@ -51,7 +57,7 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo if (groups == NULL) { jclass cls = (*env)->FindClass(env,"java/lang/OutOfMemoryError"); - if(cls != 0) + if (cls != NULL) (*env)->ThrowNew(env, cls, NULL); return; } @@ -67,15 +73,14 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo */ fid = (*env)->GetFieldID(env, cls, "username", "Ljava/lang/String;"); if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); + (*env)->ExceptionClear(env); + throwIllegalArgumentException(env, "invalid field: username"); + goto cleanupAndReturn; } jstr = (*env)->NewStringUTF(env, pwd.pw_name); + if (jstr == NULL) { + goto cleanupAndReturn; + } (*env)->SetObjectField(env, obj, fid, jstr); /* @@ -83,13 +88,9 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo */ fid = (*env)->GetFieldID(env, cls, "uid", "J"); if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); + (*env)->ExceptionClear(env); + throwIllegalArgumentException(env, "invalid field: uid"); + goto cleanupAndReturn; } (*env)->SetLongField(env, obj, fid, pwd.pw_uid); @@ -98,13 +99,9 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo */ fid = (*env)->GetFieldID(env, cls, "gid", "J"); if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); + (*env)->ExceptionClear(env); + throwIllegalArgumentException(env, "invalid field: gid"); + goto cleanupAndReturn; } (*env)->SetLongField(env, obj, fid, pwd.pw_gid); @@ -113,21 +110,26 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo */ fid = (*env)->GetFieldID(env, cls, "groups", "[J"); if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); + (*env)->ExceptionClear(env); + throwIllegalArgumentException(env, "invalid field: groups"); + goto cleanupAndReturn; } jgroups = (*env)->NewLongArray(env, numSuppGroups); + if (jgroups == NULL) { + goto cleanupAndReturn; + } jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0); + if (jgroupsAsArray == NULL) { + goto cleanupAndReturn; + } for (i = 0; i < numSuppGroups; i++) jgroupsAsArray[i] = groups[i]; (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0); (*env)->SetObjectField(env, obj, fid, jgroups); } +cleanupAndReturn: + free(groups); + return; } diff --git a/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c b/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c index 620e19bb236..188a389d666 100644 --- a/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c +++ b/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c @@ -60,7 +60,7 @@ Java_com_sun_security_auth_module_UnixSystem_getUnixInfo groups = (gid_t *)calloc(numSuppGroups, sizeof(gid_t)); if (groups == NULL) { jclass cls = (*env)->FindClass(env,"java/lang/OutOfMemoryError"); - if(cls != 0) + if (cls != NULL) (*env)->ThrowNew(env, cls, NULL); return; } @@ -90,6 +90,8 @@ Java_com_sun_security_auth_module_UnixSystem_getUnixInfo goto cleanUpAndReturn; jstr = (*env)->NewStringUTF(env, pwd->pw_name); + if (jstr == NULL) + goto cleanUpAndReturn; (*env)->SetObjectField(env, obj, userNameID, jstr); (*env)->SetLongField(env, obj, userID, pwd->pw_uid); @@ -97,7 +99,11 @@ Java_com_sun_security_auth_module_UnixSystem_getUnixInfo (*env)->SetLongField(env, obj, groupID, pwd->pw_gid); jgroups = (*env)->NewLongArray(env, numSuppGroups); + if (jgroups == NULL) + goto cleanUpAndReturn; jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0); + if (jgroupsAsArray == NULL) + goto cleanUpAndReturn; for (i = 0; i < numSuppGroups; i++) jgroupsAsArray[i] = groups[i]; (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0); diff --git a/jdk/src/solaris/native/common/jdk_util_md.h b/jdk/src/solaris/native/common/jdk_util_md.h index d9fd2a2557f..c13bb7794e4 100644 --- a/jdk/src/solaris/native/common/jdk_util_md.h +++ b/jdk/src/solaris/native/common/jdk_util_md.h @@ -39,6 +39,10 @@ #include #define ISNANF(f) isnanf(f) #define ISNAND(d) isnan(d) +#elif defined(_AIX) +#include +#define ISNANF(f) _isnanf(f) +#define ISNAND(d) _isnan(d) #else #error "missing platform-specific definition here" #endif diff --git a/jdk/src/solaris/native/common/jni_util_md.c b/jdk/src/solaris/native/common/jni_util_md.c index e9e0f4e0f3f..42ab2de0037 100644 --- a/jdk/src/solaris/native/common/jni_util_md.c +++ b/jdk/src/solaris/native/common/jni_util_md.c @@ -23,6 +23,8 @@ * questions. */ +#include + #include "jni.h" #include "jni_util.h" #include "dlfcn.h" @@ -40,7 +42,11 @@ void* getProcessHandle() { if (procHandle != NULL) { return procHandle; } +#ifdef __APPLE__ + procHandle = (void*)dlopen(NULL, RTLD_FIRST); +#else procHandle = (void*)dlopen(NULL, RTLD_LAZY); +#endif return procHandle; } diff --git a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c index 5f95cd998c8..487e8a2bac3 100644 --- a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c +++ b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c @@ -283,6 +283,10 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, struct dirent64 *result; int len, maxlen; jobjectArray rv, old; + jclass str_class; + + str_class = JNU_ClassString(env); + CHECK_NULL_RETURN(str_class, NULL); WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) { dir = opendir(path); @@ -299,7 +303,7 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, /* Allocate an initial String array */ len = 0; maxlen = 16; - rv = (*env)->NewObjectArray(env, maxlen, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, maxlen, str_class, NULL); if (rv == NULL) goto error; /* Scan the directory */ @@ -309,8 +313,7 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, continue; if (len == maxlen) { old = rv; - rv = (*env)->NewObjectArray(env, maxlen <<= 1, - JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, maxlen <<= 1, str_class, NULL); if (rv == NULL) goto error; if (JNU_CopyObjectArray(env, rv, old, len) < 0) goto error; (*env)->DeleteLocalRef(env, old); @@ -329,7 +332,7 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, /* Copy the final results into an appropriately-sized array */ old = rv; - rv = (*env)->NewObjectArray(env, len, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, len, str_class, NULL); if (rv == NULL) { return NULL; } diff --git a/jdk/src/solaris/native/java/io/io_util_md.c b/jdk/src/solaris/native/java/io/io_util_md.c index e74bc127102..5899a410347 100644 --- a/jdk/src/solaris/native/java/io/io_util_md.c +++ b/jdk/src/solaris/native/java/io/io_util_md.c @@ -35,7 +35,7 @@ #include #endif -#if defined(__linux__) || defined(_ALLBSD_SOURCE) +#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX) #include #endif diff --git a/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c b/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c index f597bff742d..54aa7142a36 100644 --- a/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c +++ b/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c @@ -53,6 +53,7 @@ Java_java_lang_ProcessEnvironment_environ(JNIEnv *env, jclass ign) jsize i, j; jobjectArray result; jclass byteArrCls = (*env)->FindClass(env, "[B"); + CHECK_NULL_RETURN(byteArrCls, NULL); for (i = 0; environ[i]; i++) { /* Ignore corrupted environment variables */ @@ -61,7 +62,7 @@ Java_java_lang_ProcessEnvironment_environ(JNIEnv *env, jclass ign) } result = (*env)->NewObjectArray(env, 2*count, byteArrCls, 0); - if (result == NULL) return NULL; + CHECK_NULL_RETURN(result, NULL); for (i = 0, j = 0; environ[i]; i++) { const char * varEnd = strchr(environ[i], '='); @@ -72,9 +73,9 @@ Java_java_lang_ProcessEnvironment_environ(JNIEnv *env, jclass ign) jsize varLength = varEnd - environ[i]; jsize valLength = strlen(valBeg); var = (*env)->NewByteArray(env, varLength); - if (var == NULL) return NULL; + CHECK_NULL_RETURN(var, NULL); val = (*env)->NewByteArray(env, valLength); - if (val == NULL) return NULL; + CHECK_NULL_RETURN(val, NULL); (*env)->SetByteArrayRegion(env, var, 0, varLength, (jbyte*) environ[i]); (*env)->SetByteArrayRegion(env, val, 0, valLength, diff --git a/jdk/src/solaris/native/java/lang/UNIXProcess_md.c b/jdk/src/solaris/native/java/lang/UNIXProcess_md.c index 177031e5c74..da5be2257d0 100644 --- a/jdk/src/solaris/native/java/lang/UNIXProcess_md.c +++ b/jdk/src/solaris/native/java/lang/UNIXProcess_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,7 @@ #include #include -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) #include #endif @@ -206,6 +206,7 @@ JNIEXPORT void JNICALL Java_java_lang_UNIXProcess_init(JNIEnv *env, jclass clazz) { parentPathv = effectivePathv(env); + CHECK_NULL(parentPathv); setSIGCHLDHandler(env); } @@ -455,7 +456,7 @@ forkChild(ChildStuff *c) { return resultPid; } -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) static pid_t spawnChild(JNIEnv *env, jobject process, ChildStuff *c, const char *helperpath) { pid_t resultPid; @@ -551,7 +552,7 @@ startChild(JNIEnv *env, jobject process, ChildStuff *c, const char *helperpath) return vforkChild(c); case MODE_FORK: return forkChild(c); -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) case MODE_POSIX_SPAWN: return spawnChild(env, process, c, helperpath); #endif diff --git a/jdk/src/solaris/native/java/lang/childproc.c b/jdk/src/solaris/native/java/lang/childproc.c index 0cfcf6fe9a8..1d183cf1fb2 100644 --- a/jdk/src/solaris/native/java/lang/childproc.c +++ b/jdk/src/solaris/native/java/lang/childproc.c @@ -66,6 +66,9 @@ isAsciiDigit(char c) #define FD_DIR "/dev/fd" #define dirent64 dirent #define readdir64 readdir +#elif defined(_AIX) +/* AIX does not understand '/proc/self' - it requires the real process ID */ +#define FD_DIR aix_fd_dir #else #define FD_DIR "/proc/self/fd" #endif @@ -87,6 +90,12 @@ closeDescriptors(void) close(from_fd); /* for possible use by opendir() */ close(from_fd + 1); /* another one for good luck */ +#if defined(_AIX) + /* AIX does not understand '/proc/self' - it requires the real process ID */ + char aix_fd_dir[32]; /* the pid has at most 19 digits */ + snprintf(aix_fd_dir, 32, "/proc/%d/fd", getpid()); +#endif + if ((dp = opendir(FD_DIR)) == NULL) return 0; diff --git a/jdk/src/solaris/native/java/lang/java_props_md.c b/jdk/src/solaris/native/java/lang/java_props_md.c index 1830b20fd0c..df55fd32b5b 100644 --- a/jdk/src/solaris/native/java/lang/java_props_md.c +++ b/jdk/src/solaris/native/java/lang/java_props_md.c @@ -546,6 +546,9 @@ GetJavaProperties(JNIEnv *env) sprops.display_country = sprops.country; sprops.display_variant = sprops.variant; + /* ParseLocale failed with OOME */ + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + #ifdef MACOSX sprops.sun_jnu_encoding = "UTF-8"; #else diff --git a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c index ea67245f0fe..9d79d3eb80a 100644 --- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c +++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c @@ -51,29 +51,6 @@ #define HAS_GLIBC_GETHOSTBY_R 1 #endif -static jclass ni_iacls; -static jclass ni_ia4cls; -static jmethodID ni_ia4ctrID; - -static jboolean initializeInetClasses(JNIEnv *env) -{ - static int initialized = 0; - if (!initialized) { - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL_RETURN(ni_iacls, JNI_FALSE); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL_RETURN(ni_iacls, JNI_FALSE); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia4ctrID, JNI_FALSE); - initialized = 1; - } - return JNI_TRUE; -} - #if defined(_ALLBSD_SOURCE) && !defined(HAS_GLIBC_GETHOSTBY_R) extern jobjectArray lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6); @@ -147,8 +124,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, int error=0; struct addrinfo hints, *res, *resNew = NULL; - if (!initializeInetClasses(env)) - return NULL; + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host is null"); @@ -241,7 +218,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, goto cleanupAndReturn; } - ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, retLen, ia_class, NULL); if (IS_NULL(ret)) { /* we may have memory to free at the end of this */ goto cleanupAndReturn; @@ -251,7 +228,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, /* We need 4 bytes to store ipv4 address; */ int len = 4; - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { /* we may have memory to free at the end of this */ ret = NULL; @@ -407,8 +384,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, int error = 0; struct addrinfo hints, *res, *resNew = NULL; - if (!initializeInetClasses(env)) - return NULL; + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host is null"); @@ -486,7 +463,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, retLen = i; iterator = resNew; - ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, retLen, ia_class, NULL); if (IS_NULL(ret)) { /* we may have memory to free at the end of this */ @@ -495,7 +472,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, i = 0; while (iterator != NULL) { - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; diff --git a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c index 7ac26c0cbb6..8de5a9bea1b 100644 --- a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c +++ b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c @@ -117,44 +117,6 @@ Java_java_net_Inet6AddressImpl_getLocalHostName(JNIEnv *env, jobject this) { return (*env)->NewStringUTF(env, hostname); } -static jclass ni_iacls; -static jclass ni_ia4cls; -static jclass ni_ia6cls; -static jmethodID ni_ia4ctrID; -static jmethodID ni_ia6ctrID; -static jboolean preferIPv6Address; - -static jboolean initializeInetClasses(JNIEnv *env) -{ - jfieldID ni_preferIPv6AddressID; - static int initialized = 0; - if (!initialized) { - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL_RETURN(ni_iacls, JNI_FALSE); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL_RETURN(ni_iacls, JNI_FALSE); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE); - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL_RETURN(ni_ia6cls, JNI_FALSE); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - CHECK_NULL_RETURN(ni_ia6cls, JNI_FALSE); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia4ctrID, JNI_FALSE); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia6ctrID, JNI_FALSE); - ni_preferIPv6AddressID = - (*env)->GetStaticFieldID(env, ni_iacls, "preferIPv6Address", "Z"); - CHECK_NULL_RETURN(ni_preferIPv6AddressID, JNI_FALSE); - preferIPv6Address = - (*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID); - initialized = 1; - } - return JNI_TRUE; -} - #ifdef MACOSX /* also called from Inet4AddressImpl.c */ __private_extern__ jobjectArray @@ -169,9 +131,8 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6) jboolean includeLoopback = JNI_FALSE; jobject name; - // Make sure static variables we need are set. - if (!initializeInetClasses(env)) - return NULL; + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); /* If the requested name matches this host's hostname, return IP addresses * from all attached interfaces. (#2844683 et al) This prevents undesired @@ -196,6 +157,7 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6) } name = (*env)->NewStringUTF(env, hostname); + CHECK_NULL_RETURN(name, NULL); /* Iterate over the interfaces, and total up the number of IPv4 and IPv6 * addresses we have. Also keep a count of loopback addresses. We need to @@ -230,10 +192,10 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6) /* Create and fill the Java array. */ int arraySize = addrs4 + addrs6 - (includeLoopback ? 0 : (numV4Loopbacks + numV6Loopbacks)); - result = (*env)->NewObjectArray(env, arraySize, ni_iacls, NULL); + result = (*env)->NewObjectArray(env, arraySize, ia_class, NULL); if (!result) goto done; - if (preferIPv6Address) { + if ((*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID)) { i = includeLoopback ? addrs6 : (addrs6 - numV6Loopbacks); j = 0; } else { @@ -297,8 +259,8 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, struct addrinfo hints, *res, *resNew = NULL; #endif /* AF_INET6 */ - if (!initializeInetClasses(env)) - return NULL; + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host is null"); @@ -422,14 +384,14 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, retLen = i; iterator = resNew; - ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, retLen, ia_class, NULL); if (IS_NULL(ret)) { /* we may have memory to free at the end of this */ goto cleanupAndReturn; } - if (preferIPv6Address) { + if ((*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID)) { /* AF_INET addresses will be offset by inet6Count */ inetIndex = inet6Count; inet6Index = 0; @@ -442,7 +404,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, while (iterator != NULL) { int ret1; if (iterator->ai_family == AF_INET) { - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -454,7 +416,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, } else if (iterator->ai_family == AF_INET6) { jint scope = 0; - jobject iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + jobject iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -548,6 +510,7 @@ Java_java_net_Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject this, if (!error) { ret = (*env)->NewStringUTF(env, host); + CHECK_NULL_RETURN(ret, NULL); } #endif /* AF_INET6 */ diff --git a/jdk/src/solaris/native/java/net/NetworkInterface.c b/jdk/src/solaris/native/java/net/NetworkInterface.c index b2ebd8e222b..380dff19cc8 100644 --- a/jdk/src/solaris/native/java/net/NetworkInterface.c +++ b/jdk/src/solaris/native/java/net/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,13 @@ #include #endif +#if defined(_AIX) +#include +#include +#include +#include +#endif + #ifdef __linux__ #define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6" #endif @@ -111,12 +118,7 @@ jfieldID ni_parentID; jfieldID ni_defaultIndexID; jmethodID ni_ctrID; -static jclass ni_iacls; -static jclass ni_ia4cls; -static jclass ni_ia6cls; static jclass ni_ibcls; -static jmethodID ni_ia4ctrID; -static jmethodID ni_ia6ctrID; static jmethodID ni_ibctrID; static jfieldID ni_ibaddressID; static jfieldID ni_ib4broadcastID; @@ -191,27 +193,10 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) { CHECK_NULL(ni_parentID); ni_ctrID = (*env)->GetMethodID(env, ni_class, "", "()V"); CHECK_NULL(ni_ctrID); - - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL(ni_iacls); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL(ni_iacls); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL(ni_ia4cls); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL(ni_ia4cls); - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL(ni_ia6cls); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - CHECK_NULL(ni_ia6cls); ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); CHECK_NULL(ni_ibcls); ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); CHECK_NULL(ni_ibcls); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL(ni_ia4ctrID); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "", "()V"); - CHECK_NULL(ni_ia6ctrID); ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "", "()V"); CHECK_NULL(ni_ibctrID); ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;"); @@ -221,6 +206,9 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) { ni_ib4maskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); CHECK_NULL(ni_ib4maskID); ni_defaultIndexID = (*env)->GetStaticFieldID(env, ni_class, "defaultIndex", "I"); + CHECK_NULL(ni_defaultIndexID); + + initInetAddressIDs(env); } @@ -647,7 +635,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) { /* * Create the array of InetAddresses */ - addrArr = (*env)->NewObjectArray(env, addr_count, ni_iacls, NULL); + addrArr = (*env)->NewObjectArray(env, addr_count, ia_class, NULL); if (addrArr == NULL) { return NULL; } @@ -664,7 +652,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) { jobject ibObj = NULL; if (addrP->family == AF_INET) { - iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (iaObj) { setInetAddress_addr(env, iaObj, htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr)); } @@ -673,7 +661,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) { (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); if (addrP->brdcast) { jobject ia2Obj = NULL; - ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (ia2Obj) { setInetAddress_addr(env, ia2Obj, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr)); (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj); @@ -687,7 +675,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) { #ifdef AF_INET6 if (addrP->family == AF_INET6) { int scope=0; - iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (iaObj) { int ret = setInet6Address_ipaddress(env, iaObj, (char *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr)); if (ret == JNI_FALSE) { @@ -1041,8 +1029,8 @@ static int openSocket(JNIEnv *env, int proto){ } -/** Linux **/ -#ifdef __linux__ +/** Linux, AIX **/ +#if defined(__linux__) || defined(_AIX) /* Open socket for further ioct calls, try v4 socket first and * if it falls return v6 socket */ @@ -1080,11 +1068,13 @@ static int openSocketWithFallback(JNIEnv *env, const char *ifname){ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { struct ifconf ifc; struct ifreq *ifreqP; - char *buf; + char *buf = NULL; int numifs; unsigned i; + int siocgifconfRequest = SIOCGIFCONF; +#if defined(__linux__) /* need to do a dummy SIOCGIFCONF to determine the buffer size. * SIOCGIFCOUNT doesn't work */ @@ -1093,11 +1083,21 @@ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed"); return ifs; } +#elif defined(_AIX) + ifc.ifc_buf = NULL; + if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGSIZIFCONF failed"); + return ifs; + } +#endif /* __linux__ */ CHECKED_MALLOC3(buf,char *, ifc.ifc_len); ifc.ifc_buf = buf; - if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { +#if defined(_AIX) + siocgifconfRequest = CSIOCGIFCONF; +#endif + if (ioctl(sock, siocgifconfRequest, (char *)&ifc) < 0) { NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed"); (void) free(buf); return ifs; @@ -1108,6 +1108,9 @@ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { */ ifreqP = ifc.ifc_req; for (i=0; iifr_addr.sa_family != AF_INET) continue; +#endif /* * Add to the list */ @@ -1135,7 +1138,7 @@ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { * Enumerates and returns all IPv6 interfaces on Linux */ -#ifdef AF_INET6 +#if defined(AF_INET6) && defined(__linux__) static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) { FILE *f; char addr6[40], devname[21]; @@ -1179,11 +1182,108 @@ static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) { #endif +/* + * Enumerates and returns all IPv6 interfaces on AIX + */ + +#if defined(AF_INET6) && defined(_AIX) +static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) { + struct ifconf ifc; + struct ifreq *ifreqP; + char *buf; + int numifs; + unsigned i; + unsigned bufsize; + char *cp, *cplimit; + + /* use SIOCGSIZIFCONF to get size for SIOCGIFCONF */ + + ifc.ifc_buf = NULL; + if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", + "ioctl SIOCGSIZIFCONF failed"); + return ifs; + } + bufsize = ifc.ifc_len; + + buf = (char *)malloc(bufsize); + if (!buf) { + JNU_ThrowOutOfMemoryError(env, "Network interface native buffer allocation failed"); + return ifs; + } + ifc.ifc_len = bufsize; + ifc.ifc_buf = buf; + if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", + "ioctl CSIOCGIFCONF failed"); + free(buf); + return ifs; + } + + /* + * Iterate through each interface + */ + ifreqP = ifc.ifc_req; + cp = (char *)ifc.ifc_req; + cplimit = cp + ifc.ifc_len; + + for ( ; cp < cplimit; cp += (sizeof(ifreqP->ifr_name) + MAX((ifreqP->ifr_addr).sa_len, sizeof(ifreqP->ifr_addr)))) { + ifreqP = (struct ifreq *)cp; + struct ifreq if2; + + memset((char *)&if2, 0, sizeof(if2)); + strcpy(if2.ifr_name, ifreqP->ifr_name); + + /* + * Skip interface that aren't UP + */ + if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) >= 0) { + if (!(if2.ifr_flags & IFF_UP)) { + continue; + } + } + + if (ifreqP->ifr_addr.sa_family != AF_INET6) + continue; + + if (ioctl(sock, SIOCGIFSITE6, (char *)&if2) >= 0) { + struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifreqP->ifr_addr); + s6->sin6_scope_id = if2.ifr_site6; + } + + /* + * Add to the list + */ + ifs = addif(env, sock, ifreqP->ifr_name, ifs, + (struct sockaddr *)&(ifreqP->ifr_addr), + AF_INET6, 0); + + /* + * If an exception occurred then free the list + */ + if ((*env)->ExceptionOccurred(env)) { + free(buf); + freeif(ifs); + return NULL; + } + } + + /* + * Free socket and buffer + */ + free(buf); + return ifs; +} +#endif + + static int getIndex(int sock, const char *name){ /* * Try to get the interface index - * (Not supported on Solaris 2.6 or 7) */ +#if defined(_AIX) + return if_nametoindex(name); +#else struct ifreq if2; strcpy(if2.ifr_name, name); @@ -1192,6 +1292,7 @@ static int getIndex(int sock, const char *name){ } return if2.ifr_ifindex; +#endif } /** @@ -1258,6 +1359,46 @@ static short getSubnet(JNIEnv *env, int sock, const char *ifname) { * MAC address. Returns -1 if there is no hardware address on that interface. */ static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf) { +#if defined (_AIX) + int size; + struct kinfo_ndd *nddp; + void *end; + + size = getkerninfo(KINFO_NDD, 0, 0, 0); + if (size == 0) { + return -1; + } + + if (size < 0) { + perror("getkerninfo 1"); + return -1; + } + + nddp = (struct kinfo_ndd *)malloc(size); + + if (!nddp) { + return -1; + } + + if (getkerninfo(KINFO_NDD, nddp, &size, 0) < 0) { + perror("getkerninfo 2"); + return -1; + } + + end = (void *)nddp + size; + while ((void *)nddp < end) { + if (!strcmp(nddp->ndd_alias, ifname) || + !strcmp(nddp->ndd_name, ifname)) { + bcopy(nddp->ndd_addr, buf, 6); + return 6; + } else { + nddp++; + } + } + + return -1; + +#elif defined(__linux__) static struct ifreq ifr; int i; @@ -1279,6 +1420,7 @@ static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct } return -1; +#endif } static int getMTU(JNIEnv *env, int sock, const char *ifname) { diff --git a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c index 53d8fae2751..ac4a8385e9a 100644 --- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c +++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c @@ -166,9 +166,8 @@ Java_java_net_PlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) { IO_fd_fdID = NET_GetFileDescriptorID(env); CHECK_NULL(IO_fd_fdID); - Java_java_net_InetAddress_init(env, 0); - Java_java_net_Inet4Address_init(env, 0); - Java_java_net_Inet6Address_init(env, 0); + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION(env); Java_java_net_NetworkInterface_init(env, 0); } @@ -507,6 +506,7 @@ Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this, } if (IS_NULL(addressObj)) { JNU_ThrowNullPointerException(env, "Null address in peek()"); + return -1; } if (timeout) { int ret = NET_Timeout(fd, timeout); @@ -1420,7 +1420,7 @@ Java_java_net_PlainDatagramSocketImpl_socketSetOption(JNIEnv *env, default : JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket option not supported by PlainDatagramSocketImp"); - break; + return; } @@ -1834,6 +1834,7 @@ Java_java_net_PlainDatagramSocketImpl_setTimeToLive(JNIEnv *env, jobject this, #ifdef AF_INET6 #ifdef __linux__ setTTL(env, fd, ttl); + JNU_CHECK_EXCEPTION(env); if (ipv6_available()) { setHopLimit(env, fd, ttl); } @@ -2121,6 +2122,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this, else NET_ThrowCurrent(env, "setsockopt IP_DROP_MEMBERSHIP failed"); } + return; } } diff --git a/jdk/src/solaris/native/java/net/PlainSocketImpl.c b/jdk/src/solaris/native/java/net/PlainSocketImpl.c index b6f78b9c158..ef6421397af 100644 --- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c +++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c @@ -162,6 +162,9 @@ Java_java_net_PlainSocketImpl_initProto(JNIEnv *env, jclass cls) { IO_fd_fdID = NET_GetFileDescriptorID(env); CHECK_NULL(IO_fd_fdID); + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION(env); + /* Create the marker fd used for dup2 */ marker_fd = getMarkerFD(); } @@ -963,7 +966,7 @@ Java_java_net_PlainSocketImpl_socketSetOption(JNIEnv *env, jobject this, } if (NET_SetSockOpt(fd, level, optname, (const void *)&optval, optlen) < 0) { -#ifdef __solaris__ +#if defined(__solaris__) || defined(_AIX) if (errno == EINVAL) { // On Solaris setsockopt will set errno to EINVAL if the socket // is closed. The default error message is then confusing diff --git a/jdk/src/solaris/native/java/net/net_util_md.c b/jdk/src/solaris/native/java/net/net_util_md.c index 2ea6fd11932..209af3f04e3 100644 --- a/jdk/src/solaris/native/java/net/net_util_md.c +++ b/jdk/src/solaris/native/java/net/net_util_md.c @@ -737,14 +737,23 @@ static int getLocalScopeID (char *addr) { return 0; } -void initLocalAddrTable () { +void platformInit () { initLoopbackRoutes(); initLocalIfs(); } +#elif defined(_AIX) + +/* Initialize stubs for blocking I/O workarounds (see src/solaris/native/java/net/linux_close.c) */ +extern void aix_close_init(); + +void platformInit () { + aix_close_init(); +} + #else -void initLocalAddrTable () {} +void platformInit () {} #endif @@ -1271,6 +1280,7 @@ int NET_SetSockOpt(int fd, int level, int opt, const void *arg, int len) { + #ifndef IPTOS_TOS_MASK #define IPTOS_TOS_MASK 0x1e #endif @@ -1291,9 +1301,6 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg, #else static long maxsockbuf = -1; #endif - - int addopt; - struct linger *ling; #endif /* @@ -1386,6 +1393,29 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg, } #endif +#ifdef _AIX + if (level == SOL_SOCKET) { + if (opt == SO_SNDBUF || opt == SO_RCVBUF) { + /* + * Just try to set the requested size. If it fails we will leave the + * socket option as is. Setting the buffer size means only a hint in + * the jse2/java software layer, see javadoc. In the previous + * solution the buffer has always been truncated to a length of + * 0x100000 Byte, even if the technical limit has not been reached. + * This kind of absolute truncation was unexpected in the jck tests. + */ + int ret = setsockopt(fd, level, opt, arg, len); + if ((ret == 0) || (ret == -1 && errno == ENOBUFS)) { + // Accept failure because of insufficient buffer memory resources. + return 0; + } else { + // Deliver all other kinds of errors. + return ret; + } + } + } +#endif + /* * On Linux the receive buffer is used for both socket * structures and the the packet payload. The implication @@ -1442,10 +1472,12 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg, } } +#endif +#if defined(_ALLBSD_SOURCE) || defined(_AIX) /* * On Solaris, SO_REUSEADDR will allow multiple datagram - * sockets to bind to the same port. The network jck tests + * sockets to bind to the same port. The network jck tests check * for this "feature", so we need to emulate it by turning on * SO_REUSEPORT as well for that combination. */ @@ -1459,11 +1491,9 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg, } if (sotype == SOCK_DGRAM) { - addopt = SO_REUSEPORT; - setsockopt(fd, level, addopt, arg, len); + setsockopt(fd, level, SO_REUSEPORT, arg, len); } } - #endif return setsockopt(fd, level, opt, arg, len); @@ -1633,7 +1663,7 @@ NET_Wait(JNIEnv *env, jint fd, jint flags, jint timeout) if (timeout <= 0) { return read_rv > 0 ? 0 : -1; } - newTime = prevTime; + prevTime = newTime; if (read_rv > 0) { break; diff --git a/jdk/src/solaris/native/java/net/net_util_md.h b/jdk/src/solaris/native/java/net/net_util_md.h index f7bec897c7d..c602753b950 100644 --- a/jdk/src/solaris/native/java/net/net_util_md.h +++ b/jdk/src/solaris/native/java/net/net_util_md.h @@ -37,7 +37,17 @@ #endif -#if defined(__linux__) || defined(MACOSX) +/* + AIX needs a workaround for I/O cancellation, see: + http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/close.htm + ... + The close subroutine is blocked until all subroutines which use the file + descriptor return to usr space. For example, when a thread is calling close + and another thread is calling select with the same file descriptor, the + close subroutine does not return until the select call returns. + ... +*/ +#if defined(__linux__) || defined(MACOSX) || defined (_AIX) extern int NET_Timeout(int s, long timeout); extern int NET_Read(int s, void* buf, size_t len); extern int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, diff --git a/jdk/src/solaris/native/java/util/TimeZone_md.c b/jdk/src/solaris/native/java/util/TimeZone_md.c index ce2fa5aca8c..e1af8f92556 100644 --- a/jdk/src/solaris/native/java/util/TimeZone_md.c +++ b/jdk/src/solaris/native/java/util/TimeZone_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -123,7 +123,7 @@ findZoneinfoFile(char *buf, size_t size, const char *dir) return NULL; } -#if defined(__linux__) || defined(MACOSX) || (defined(__solaris__) \ +#if defined(_AIX) || defined(__linux__) || defined(MACOSX) || (defined(__solaris__) \ && (defined(_POSIX_PTHREAD_SEMANTICS) || defined(_LP64))) while (readdir_r(dirp, entry, &dp) == 0 && dp != NULL) { #else @@ -615,6 +615,14 @@ getSolarisDefaultZoneID() { #endif /*__solaris__*/ #endif /*__linux__*/ +#ifdef _AIX +static char * +getPlatformTimeZoneID() +{ + return NULL; +} +#endif + /* * findJavaTZ_md() maps platform time zone ID to Java time zone ID * using /lib/tzmappings. If the TZ value is not found, it @@ -635,7 +643,7 @@ findJavaTZ_md(const char *java_home_dir, const char *country) #if defined(__linux__) || defined(_ALLBSD_SOURCE) if (tz == NULL) { #else -#ifdef __solaris__ +#if defined (__solaris__) || defined(_AIX) if (tz == NULL || *tz == '\0') { #endif #endif diff --git a/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c b/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c index c056e8eac87..f7ac70df393 100644 --- a/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c +++ b/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c @@ -37,6 +37,10 @@ #include "awt_Plugin.h" +#ifdef AIX +#include "porting_aix.h" /* For the 'dladdr' function. */ +#endif + #ifdef DEBUG #define VERBOSE_AWT_DEBUG #endif diff --git a/jdk/src/solaris/native/sun/awt/fontpath.c b/jdk/src/solaris/native/sun/awt/fontpath.c index 12c8405beae..19e5d9bf8d8 100644 --- a/jdk/src/solaris/native/sun/awt/fontpath.c +++ b/jdk/src/solaris/native/sun/awt/fontpath.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,7 +64,7 @@ extern Display *awt_display; #define MAXFDIRS 512 /* Max number of directories that contain fonts */ -#if !defined(__linux__) +#if defined(__solaris__) /* * This can be set in the makefile to "/usr/X11" if so desired. */ @@ -114,7 +114,7 @@ static char *fullSolarisFontPath[] = { NULL, /* terminates the list */ }; -#else /* __linux */ +#elif defined( __linux__) /* All the known interesting locations we have discovered on * various flavors of Linux */ @@ -134,6 +134,12 @@ static char *fullLinuxFontPath[] = { "/usr/share/fonts/default/Type1", /* RH 9.0 */ NULL, /* terminates the list */ }; +#elif defined(_AIX) +static char *fullAixFontPath[] = { + "/usr/lpp/X11/lib/X11/fonts/Type1", /* from X11.fnt.iso_T1 */ + "/usr/lpp/X11/lib/X11/fonts/TrueType", /* from X11.fnt.ucs.ttf */ + NULL, /* terminates the list */ +}; #endif static char **getFontConfigLocations(); @@ -497,10 +503,11 @@ static char *getPlatformFontPathChars(JNIEnv *env, jboolean noType1) { #if defined(__linux__) knowndirs = fullLinuxFontPath; -#else /* IF SOLARIS */ +#elif defined(__solaris__) knowndirs = fullSolarisFontPath; +#elif defined(_AIX) + knowndirs = fullAixFontPath; #endif - /* REMIND: this code requires to be executed when the GraphicsEnvironment * is already initialised. That is always true, but if it were not so, * this code could throw an exception and the fontpath would fail to @@ -592,6 +599,25 @@ static void* openFontConfig() { } } #endif + +#if defined(_AIX) + /* On AIX, fontconfig is not a standard package supported by IBM. + * instead it has to be installed from the "AIX Toolbox for Linux Applications" + * site http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html + * and will be installed under /opt/freeware/lib/libfontconfig.a. + * Notice that the archive contains the real 32- and 64-bit shared libraries. + * We first try to load 'libfontconfig.so' from the default library path in the + * case the user has installed a private version of the library and if that + * doesn't succeed, we try the version from /opt/freeware/lib/libfontconfig.a + */ + libfontconfig = dlopen("libfontconfig.so", RTLD_LOCAL|RTLD_LAZY); + if (libfontconfig == NULL) { + libfontconfig = dlopen("/opt/freeware/lib/libfontconfig.a(libfontconfig.so.1)", RTLD_MEMBER|RTLD_LOCAL|RTLD_LAZY); + if (libfontconfig == NULL) { + return NULL; + } + } +#else /* 64 bit sparc should pick up the right version from the lib path. * New features may be added to libfontconfig, this is expected to * be compatible with old features, but we may need to start @@ -606,6 +632,7 @@ static void* openFontConfig() { return NULL; } } +#endif /* Version 1.0 of libfontconfig crashes if HOME isn't defined in * the environment. This should generally never happen, but we can't @@ -1203,7 +1230,7 @@ Java_sun_font_FontConfigManager_getFontConfig */ if (fontformat != NULL && (strcmp((char*)fontformat, "TrueType") != 0) -#ifdef __linux__ +#if defined(__linux__) || defined(_AIX) && (strcmp((char*)fontformat, "Type 1") != 0) #endif ) { diff --git a/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c b/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c index 79e3be488a6..fd48e42cf1e 100644 --- a/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c +++ b/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c @@ -56,8 +56,8 @@ typedef struct _X11RIPrivate { int x, y; } X11RIPrivate; -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define XSD_MAX(a,b) ((a) > (b) ? (a) : (b)) +#define XSD_MIN(a,b) ((a) < (b) ? (a) : (b)) static LockFunc X11SD_Lock; static GetRasInfoFunc X11SD_GetRasInfo; @@ -1090,10 +1090,10 @@ X11SD_ClipToRoot(SurfaceDataBounds *b, SurfaceDataBounds *bounds, x2 = x1 + DisplayWidth(awt_display, xsdo->configData->awt_visInfo.screen); y2 = y1 + DisplayHeight(awt_display, xsdo->configData->awt_visInfo.screen); - x1 = MAX(bounds->x1, x1); - y1 = MAX(bounds->y1, y1); - x2 = MIN(bounds->x2, x2); - y2 = MIN(bounds->y2, y2); + x1 = XSD_MAX(bounds->x1, x1); + y1 = XSD_MAX(bounds->y1, y1); + x2 = XSD_MIN(bounds->x2, x2); + y2 = XSD_MIN(bounds->y2, y2); if ((x1 >= x2) || (y1 >= y2)) { return FALSE; } diff --git a/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c b/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c index e2554b3209e..733606ec444 100644 --- a/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c +++ b/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,8 +72,8 @@ typedef struct _XRadialGradient { #include -#ifdef __solaris__ -/* Solaris 10 will not have these symbols at runtime */ +#if defined(__solaris__) || defined(_AIX) +/* Solaris 10 and AIX will not have these symbols at runtime */ typedef Picture (*XRenderCreateLinearGradientFuncType) (Display *dpy, @@ -147,7 +147,7 @@ static jboolean IsXRenderAvailable(jboolean verbose, jboolean ignoreLinuxVersion return JNI_FALSE; } -#ifdef __solaris__ +#if defined(__solaris__) || defined(_AIX) xrenderlib = dlopen("libXrender.so",RTLD_GLOBAL|RTLD_LAZY); if (xrenderlib != NULL) { diff --git a/jdk/src/solaris/native/sun/management/LinuxOperatingSystem.c b/jdk/src/solaris/native/sun/management/LinuxOperatingSystem.c index c8bd739ebef..1d6c89ed754 100644 --- a/jdk/src/solaris/native/sun/management/LinuxOperatingSystem.c +++ b/jdk/src/solaris/native/sun/management/LinuxOperatingSystem.c @@ -310,7 +310,7 @@ double get_process_load() { } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getSystemCpuLoad +Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0 (JNIEnv *env, jobject dummy) { if(perfInit() == 0) { @@ -321,7 +321,7 @@ Java_sun_management_OperatingSystemImpl_getSystemCpuLoad } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuLoad +Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0 (JNIEnv *env, jobject dummy) { if(perfInit() == 0) { diff --git a/jdk/src/solaris/native/sun/management/MacosxOperatingSystem.c b/jdk/src/solaris/native/sun/management/MacosxOperatingSystem.c index 8fb39786fe1..24c8669ba47 100644 --- a/jdk/src/solaris/native/sun/management/MacosxOperatingSystem.c +++ b/jdk/src/solaris/native/sun/management/MacosxOperatingSystem.c @@ -31,7 +31,7 @@ JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getSystemCpuLoad +Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0 (JNIEnv *env, jobject dummy) { // This code is influenced by the darwin top source @@ -83,7 +83,7 @@ Java_sun_management_OperatingSystemImpl_getSystemCpuLoad JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuLoad +Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0 (JNIEnv *env, jobject dummy) { // This code is influenced by the darwin top source diff --git a/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c b/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c index f1322ebd90b..898a0f9e58a 100644 --- a/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c +++ b/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,7 @@ #include #include #endif -#else +#elif !defined(_AIX) #include #endif #include @@ -57,9 +57,13 @@ #include #include +#if defined(_AIX) +#include +#endif + static jlong page_size = 0; -#if defined(_ALLBSD_SOURCE) +#if defined(_ALLBSD_SOURCE) || defined(_AIX) #define MB (1024UL * 1024UL) #else @@ -175,14 +179,14 @@ static jlong get_total_or_available_swap_space_size(JNIEnv* env, jboolean availa } JNIEXPORT void JNICALL -Java_sun_management_OperatingSystemImpl_initialize +Java_sun_management_OperatingSystemImpl_initialize0 (JNIEnv *env, jclass cls) { page_size = sysconf(_SC_PAGESIZE); } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize +Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize0 (JNIEnv *env, jobject mbean) { #ifdef __solaris__ @@ -249,21 +253,21 @@ Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize +Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize0 (JNIEnv *env, jobject mbean) { return get_total_or_available_swap_space_size(env, JNI_FALSE); } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize +Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize0 (JNIEnv *env, jobject mbean) { return get_total_or_available_swap_space_size(env, JNI_TRUE); } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuTime +Java_sun_management_OperatingSystemImpl_getProcessCpuTime0 (JNIEnv *env, jobject mbean) { #ifdef __APPLE__ @@ -305,7 +309,7 @@ Java_sun_management_OperatingSystemImpl_getProcessCpuTime } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize +Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize0 (JNIEnv *env, jobject mbean) { #ifdef __APPLE__ @@ -326,6 +330,12 @@ Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize */ // throw_internal_error(env, "unimplemented in FreeBSD") return (128 * MB); +#elif defined(_AIX) + perfstat_memory_total_t memory_info; + if (-1 != perfstat_memory_total(NULL, &memory_info, sizeof(perfstat_memory_total_t), 1)) { + return (jlong)(memory_info.real_free * 4L * 1024L); + } + return -1; #else // solaris / linux jlong num_avail_physical_pages = sysconf(_SC_AVPHYS_PAGES); return (num_avail_physical_pages * page_size); @@ -333,7 +343,7 @@ Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize +Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize0 (JNIEnv *env, jobject mbean) { #ifdef _ALLBSD_SOURCE @@ -349,6 +359,12 @@ Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize return -1; } return result; +#elif defined(_AIX) + perfstat_memory_total_t memory_info; + if (-1 != perfstat_memory_total(NULL, &memory_info, sizeof(perfstat_memory_total_t), 1)) { + return (jlong)(memory_info.real_total * 4L * 1024L); + } + return -1; #else // solaris / linux jlong num_physical_pages = sysconf(_SC_PHYS_PAGES); return (num_physical_pages * page_size); @@ -358,7 +374,7 @@ Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount +Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount0 (JNIEnv *env, jobject mbean) { #ifdef __APPLE__ @@ -417,7 +433,16 @@ Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount struct dirent* dentp; jlong fds = 0; - dirp = opendir("/proc/self/fd"); +#if defined(_AIX) +/* AIX does not understand '/proc/self' - it requires the real process ID */ +#define FD_DIR aix_fd_dir + char aix_fd_dir[32]; /* the pid has at most 19 digits */ + snprintf(aix_fd_dir, 32, "/proc/%d/fd", getpid()); +#else +#define FD_DIR "/proc/self/fd" +#endif + + dirp = opendir(FD_DIR); if (dirp == NULL) { throw_internal_error(env, "Unable to open directory /proc/self/fd"); return -1; @@ -438,7 +463,7 @@ Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getMaxFileDescriptorCount +Java_sun_management_OperatingSystemImpl_getMaxFileDescriptorCount0 (JNIEnv *env, jobject mbean) { struct rlimit rlp; diff --git a/jdk/src/solaris/native/sun/management/SolarisOperatingSystem.c b/jdk/src/solaris/native/sun/management/SolarisOperatingSystem.c index a8136f1ac63..f89da99aa39 100644 --- a/jdk/src/solaris/native/sun/management/SolarisOperatingSystem.c +++ b/jdk/src/solaris/native/sun/management/SolarisOperatingSystem.c @@ -226,14 +226,14 @@ double get_process_load(void) { } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getSystemCpuLoad +Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0 (JNIEnv *env, jobject dummy) { return get_cpu_load(-1); } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuLoad +Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0 (JNIEnv *env, jobject dummy) { return get_process_load(); diff --git a/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c index cd2f4927bdb..f5dd361c4fc 100644 --- a/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c @@ -56,18 +56,28 @@ JNIEXPORT void JNICALL Java_sun_nio_ch_DatagramChannelImpl_initIDs(JNIEnv *env, jclass clazz) { clazz = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(clazz); isa_class = (*env)->NewGlobalRef(env, clazz); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, clazz, "", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); clazz = (*env)->FindClass(env, "sun/nio/ch/DatagramChannelImpl"); + CHECK_NULL(clazz); dci_senderID = (*env)->GetFieldID(env, clazz, "sender", "Ljava/net/SocketAddress;"); + CHECK_NULL(dci_senderID); dci_senderAddrID = (*env)->GetFieldID(env, clazz, "cachedSenderInetAddress", "Ljava/net/InetAddress;"); + CHECK_NULL(dci_senderAddrID); dci_senderPortID = (*env)->GetFieldID(env, clazz, "cachedSenderPort", "I"); + CHECK_NULL(dci_senderPortID); } JNIEXPORT void JNICALL @@ -81,7 +91,7 @@ Java_sun_nio_ch_DatagramChannelImpl_disconnect0(JNIEnv *env, jobject this, rv = connect(fd, 0, 0); #endif -#if defined(__linux__) || defined(_ALLBSD_SOURCE) +#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX) { int len; SOCKADDR sa; @@ -114,6 +124,14 @@ Java_sun_nio_ch_DatagramChannelImpl_disconnect0(JNIEnv *env, jobject this, #if defined(_ALLBSD_SOURCE) if (rv < 0 && errno == EADDRNOTAVAIL) rv = errno = 0; +#endif +#if defined(_AIX) + /* See W. Richard Stevens, "UNIX Network Programming, Volume 1", p. 254: + * 'Setting the address family to AF_UNSPEC might return EAFNOSUPPORT + * but that is acceptable. + */ + if (rv < 0 && errno == EAFNOSUPPORT) + rv = errno = 0; #endif } #endif @@ -184,17 +202,11 @@ Java_sun_nio_ch_DatagramChannelImpl_receive0(JNIEnv *env, jobject this, if (senderAddr == NULL) { jobject isa = NULL; int port; - jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, - &port); - + jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port); if (ia != NULL) { isa = (*env)->NewObject(env, isa_class, isa_ctorID, ia, port); } - - if (isa == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return IOS_THROWN; - } + CHECK_NULL_RETURN(isa, IOS_THROWN); (*env)->SetObjectField(env, this, dci_senderAddrID, ia); (*env)->SetIntField(env, this, dci_senderPortID, diff --git a/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c b/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c index 25beacc3d5d..c9d20112479 100644 --- a/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c @@ -147,6 +147,19 @@ Java_sun_nio_ch_FileDispatcherImpl_force0(JNIEnv *env, jobject this, if (md == JNI_FALSE) { result = fdatasync(fd); } else { +#ifdef _AIX + /* On AIX, calling fsync on a file descriptor that is opened only for + * reading results in an error ("EBADF: The FileDescriptor parameter is + * not a valid file descriptor open for writing."). + * However, at this point it is not possibly anymore to read the + * 'writable' attribute of the corresponding file channel so we have to + * use 'fcntl'. + */ + int getfl = fcntl(fd, F_GETFL); + if (getfl >= 0 && (getfl & O_ACCMODE) == O_RDONLY) { + return 0; + } +#endif result = fsync(fd); } return handle(env, result, "Force failed"); diff --git a/jdk/src/solaris/native/sun/nio/ch/FileKey.c b/jdk/src/solaris/native/sun/nio/ch/FileKey.c index ddb88329eca..bdb42a6324b 100644 --- a/jdk/src/solaris/native/sun/nio/ch/FileKey.c +++ b/jdk/src/solaris/native/sun/nio/ch/FileKey.c @@ -43,8 +43,8 @@ static jfieldID key_st_ino; /* id for FileKey.st_ino */ JNIEXPORT void JNICALL Java_sun_nio_ch_FileKey_initIDs(JNIEnv *env, jclass clazz) { - key_st_dev = (*env)->GetFieldID(env, clazz, "st_dev", "J"); - key_st_ino = (*env)->GetFieldID(env, clazz, "st_ino", "J"); + CHECK_NULL(key_st_dev = (*env)->GetFieldID(env, clazz, "st_dev", "J")); + CHECK_NULL(key_st_ino = (*env)->GetFieldID(env, clazz, "st_ino", "J")); } diff --git a/jdk/src/solaris/native/sun/nio/ch/IOUtil.c b/jdk/src/solaris/native/sun/nio/ch/IOUtil.c index 58ef02014b5..d8bbe849252 100644 --- a/jdk/src/solaris/native/sun/nio/ch/IOUtil.c +++ b/jdk/src/solaris/native/sun/nio/ch/IOUtil.c @@ -35,6 +35,7 @@ #include "java_lang_Integer.h" #include "nio.h" #include "nio_util.h" +#include "net_util.h" static jfieldID fd_fdID; /* for jint 'fd' in java.io.FileDescriptor */ @@ -42,8 +43,9 @@ static jfieldID fd_fdID; /* for jint 'fd' in java.io.FileDescriptor */ JNIEXPORT void JNICALL Java_sun_nio_ch_IOUtil_initIDs(JNIEnv *env, jclass clazz) { - clazz = (*env)->FindClass(env, "java/io/FileDescriptor"); - fd_fdID = (*env)->GetFieldID(env, clazz, "fd", "I"); + CHECK_NULL(clazz = (*env)->FindClass(env, "java/io/FileDescriptor")); + CHECK_NULL(fd_fdID = (*env)->GetFieldID(env, clazz, "fd", "I")); + initInetAddressIDs(env); } JNIEXPORT jboolean JNICALL @@ -145,7 +147,6 @@ Java_sun_nio_ch_IOUtil_iovMax(JNIEnv *env, jclass this) return (jint)iov_max; } - /* Declared in nio_util.h for use elsewhere in NIO */ jint diff --git a/jdk/src/solaris/native/sun/nio/ch/NativeThread.c b/jdk/src/solaris/native/sun/nio/ch/NativeThread.c index 79a91a068ac..5e2a78b7af3 100644 --- a/jdk/src/solaris/native/sun/nio/ch/NativeThread.c +++ b/jdk/src/solaris/native/sun/nio/ch/NativeThread.c @@ -32,27 +32,32 @@ #include "sun_nio_ch_NativeThread.h" #include "nio_util.h" - #ifdef __linux__ -#include -#include - -/* Also defined in src/solaris/native/java/net/linux_close.c */ -#define INTERRUPT_SIGNAL (__SIGRTMAX - 2) + #include + #include + /* Also defined in net/linux_close.c */ + #define INTERRUPT_SIGNAL (__SIGRTMAX - 2) +#elif __solaris__ + #include + #include + #define INTERRUPT_SIGNAL (SIGRTMAX - 2) +#elif _ALLBSD_SOURCE + #include + #include + /* Also defined in net/bsd_close.c */ + #define INTERRUPT_SIGNAL SIGIO +#else + #error "missing platform-specific definition here" +#endif static void nullHandler(int sig) { } -#endif - - JNIEXPORT void JNICALL Java_sun_nio_ch_NativeThread_init(JNIEnv *env, jclass cl) { -#ifdef __linux__ - /* Install the null handler for INTERRUPT_SIGNAL. This might overwrite the * handler previously installed by java/net/linux_close.c, but that's okay * since neither handler actually does anything. We install our own @@ -67,25 +72,27 @@ Java_sun_nio_ch_NativeThread_init(JNIEnv *env, jclass cl) sigemptyset(&sa.sa_mask); if (sigaction(INTERRUPT_SIGNAL, &sa, &osa) < 0) JNU_ThrowIOExceptionWithLastError(env, "sigaction"); - -#endif } JNIEXPORT jlong JNICALL Java_sun_nio_ch_NativeThread_current(JNIEnv *env, jclass cl) { -#ifdef __linux__ - return (long)pthread_self(); +#ifdef __solaris__ + return (jlong)thr_self(); #else - return -1; + return (jlong)pthread_self(); #endif } JNIEXPORT void JNICALL Java_sun_nio_ch_NativeThread_signal(JNIEnv *env, jclass cl, jlong thread) { -#ifdef __linux__ - if (pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL)) - JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed"); + int ret; +#ifdef __solaris__ + ret = thr_kill((thread_t)thread, INTERRUPT_SIGNAL); +#else + ret = pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL); #endif + if (ret != 0) + JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed"); } diff --git a/jdk/src/solaris/native/sun/nio/ch/Net.c b/jdk/src/solaris/native/sun/nio/ch/Net.c index 679a9d8d0da..4bb21396036 100644 --- a/jdk/src/solaris/native/sun/nio/ch/Net.c +++ b/jdk/src/solaris/native/sun/nio/ch/Net.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ * questions. */ +#include #include #include #include @@ -40,6 +41,9 @@ #include "nio.h" #include "sun_nio_ch_PollArrayWrapper.h" +#ifdef _AIX +#include +#endif /** * IP_MULTICAST_ALL supported since 2.6.31 but may not be available at @@ -47,56 +51,35 @@ */ #ifdef __linux__ #ifndef IP_MULTICAST_ALL - #define IP_MULTICAST_ALL 49 + #define IP_MULTICAST_ALL 49 #endif #endif -#ifdef _ALLBSD_SOURCE - -#ifndef IP_BLOCK_SOURCE - -#define IP_ADD_SOURCE_MEMBERSHIP 70 /* join a source-specific group */ -#define IP_DROP_SOURCE_MEMBERSHIP 71 /* drop a single source */ -#define IP_BLOCK_SOURCE 72 /* block a source */ -#define IP_UNBLOCK_SOURCE 73 /* unblock a source */ - -#endif /* IP_BLOCK_SOURCE */ - -#ifndef MCAST_BLOCK_SOURCE - -#define MCAST_JOIN_SOURCE_GROUP 82 /* join a source-specific group */ -#define MCAST_LEAVE_SOURCE_GROUP 83 /* leave a single source */ -#define MCAST_BLOCK_SOURCE 84 /* block a source */ -#define MCAST_UNBLOCK_SOURCE 85 /* unblock a source */ - -#endif /* MCAST_BLOCK_SOURCE */ - -#ifndef IPV6_ADD_MEMBERSHIP - -#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP -#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP - -#endif /* IPV6_ADD_MEMBERSHIP */ - -struct my_ip_mreq_source { - struct in_addr imr_multiaddr; - struct in_addr imr_interface; - struct in_addr imr_sourceaddr; -}; - -struct my_group_source_req { - uint32_t gsr_interface; /* interface index */ - struct sockaddr_storage gsr_group; /* group address */ - struct sockaddr_storage gsr_source; /* source address */ -}; - -#else /* _ALLBSD_SOURCE */ - -#define my_ip_mreq_source ip_mreq_source -#define my_group_source_req group_source_req - +/** + * IPV6_ADD_MEMBERSHIP/IPV6_DROP_MEMBERSHIP may not be defined on OSX and AIX + */ +#if defined(__APPLE__) || defined(_AIX) + #ifndef IPV6_ADD_MEMBERSHIP + #define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP + #define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP + #endif #endif +#if defined(_AIX) + #ifndef IP_BLOCK_SOURCE + #define IP_BLOCK_SOURCE 58 /* Block data from a given source to a given group */ + #define IP_UNBLOCK_SOURCE 59 /* Unblock data from a given source to a given group */ + #define IP_ADD_SOURCE_MEMBERSHIP 60 /* Join a source-specific group */ + #define IP_DROP_SOURCE_MEMBERSHIP 61 /* Leave a source-specific group */ + #endif + + #ifndef MCAST_BLOCK_SOURCE + #define MCAST_BLOCK_SOURCE 64 + #define MCAST_UNBLOCK_SOURCE 65 + #define MCAST_JOIN_SOURCE_GROUP 66 + #define MCAST_LEAVE_SOURCE_GROUP 67 + #endif +#endif /* _AIX */ #define COPY_INET6_ADDRESS(env, source, target) \ (*env)->GetByteArrayRegion(env, source, 0, 16, target) @@ -107,7 +90,7 @@ struct my_group_source_req { */ #ifdef AF_INET6 static void initGroupSourceReq(JNIEnv* env, jbyteArray group, jint index, - jbyteArray source, struct my_group_source_req* req) + jbyteArray source, struct group_source_req* req) { struct sockaddr_in6* sin6; @@ -123,6 +106,36 @@ static void initGroupSourceReq(JNIEnv* env, jbyteArray group, jint index, } #endif +#ifdef _AIX + +/* + * Checks whether or not "socket extensions for multicast source filters" is supported. + * Returns JNI_TRUE if it is supported, JNI_FALSE otherwise + */ +static jboolean isSourceFilterSupported(){ + static jboolean alreadyChecked = JNI_FALSE; + static jboolean result = JNI_TRUE; + if (alreadyChecked != JNI_TRUE){ + struct utsname uts; + memset(&uts, 0, sizeof(uts)); + strcpy(uts.sysname, "?"); + const int utsRes = uname(&uts); + int major = -1; + int minor = -1; + major = atoi(uts.version); + minor = atoi(uts.release); + if (strcmp(uts.sysname, "AIX") == 0) { + if (major < 6 || (major == 6 && minor < 1)) {// unsupported on aix < 6.1 + result = JNI_FALSE; + } + } + alreadyChecked = JNI_TRUE; + } + return result; +} + +#endif /* _AIX */ + JNIEXPORT void JNICALL Java_sun_nio_ch_Net_initIDs(JNIEnv *env, jclass clazz) { @@ -143,7 +156,7 @@ Java_sun_nio_ch_Net_isExclusiveBindAvailable(JNIEnv *env, jclass clazz) { JNIEXPORT jboolean JNICALL Java_sun_nio_ch_Net_canIPv6SocketJoinIPv4Group0(JNIEnv* env, jclass cl) { -#ifdef MACOSX +#if defined(__APPLE__) || defined(_AIX) /* for now IPv6 sockets cannot join IPv4 multicast groups */ return JNI_FALSE; #else @@ -460,7 +473,7 @@ Java_sun_nio_ch_Net_joinOrDrop4(JNIEnv *env, jobject this, jboolean join, jobjec jint group, jint interf, jint source) { struct ip_mreq mreq; - struct my_ip_mreq_source mreq_source; + struct ip_mreq_source mreq_source; int opt, n, optlen; void* optval; @@ -471,22 +484,25 @@ Java_sun_nio_ch_Net_joinOrDrop4(JNIEnv *env, jobject this, jboolean join, jobjec optval = (void*)&mreq; optlen = sizeof(mreq); } else { -#ifdef MACOSX - /* no IPv4 include-mode filtering for now */ - return IOS_UNAVAILABLE; -#else + +#ifdef _AIX + /* check AIX for support of source filtering */ + if (isSourceFilterSupported() != JNI_TRUE){ + return IOS_UNAVAILABLE; + } +#endif + mreq_source.imr_multiaddr.s_addr = htonl(group); mreq_source.imr_sourceaddr.s_addr = htonl(source); mreq_source.imr_interface.s_addr = htonl(interf); opt = (join) ? IP_ADD_SOURCE_MEMBERSHIP : IP_DROP_SOURCE_MEMBERSHIP; optval = (void*)&mreq_source; optlen = sizeof(mreq_source); -#endif } n = setsockopt(fdval(env,fdo), IPPROTO_IP, opt, optval, optlen); if (n < 0) { - if (join && (errno == ENOPROTOOPT)) + if (join && (errno == ENOPROTOOPT || errno == EOPNOTSUPP)) return IOS_UNAVAILABLE; handleSocketError(env, errno); } @@ -497,14 +513,21 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_Net_blockOrUnblock4(JNIEnv *env, jobject this, jboolean block, jobject fdo, jint group, jint interf, jint source) { -#ifdef MACOSX +#ifdef __APPLE__ /* no IPv4 exclude-mode filtering for now */ return IOS_UNAVAILABLE; #else - struct my_ip_mreq_source mreq_source; + struct ip_mreq_source mreq_source; int n; int opt = (block) ? IP_BLOCK_SOURCE : IP_UNBLOCK_SOURCE; +#ifdef _AIX + /* check AIX for support of source filtering */ + if (isSourceFilterSupported() != JNI_TRUE){ + return IOS_UNAVAILABLE; + } +#endif + mreq_source.imr_multiaddr.s_addr = htonl(group); mreq_source.imr_sourceaddr.s_addr = htonl(source); mreq_source.imr_interface.s_addr = htonl(interf); @@ -512,7 +535,7 @@ Java_sun_nio_ch_Net_blockOrUnblock4(JNIEnv *env, jobject this, jboolean block, j n = setsockopt(fdval(env,fdo), IPPROTO_IP, opt, (void*)&mreq_source, sizeof(mreq_source)); if (n < 0) { - if (block && (errno == ENOPROTOOPT)) + if (block && (errno == ENOPROTOOPT || errno == EOPNOTSUPP)) return IOS_UNAVAILABLE; handleSocketError(env, errno); } @@ -526,7 +549,7 @@ Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobjec { #ifdef AF_INET6 struct ipv6_mreq mreq6; - struct my_group_source_req req; + struct group_source_req req; int opt, n, optlen; void* optval; @@ -537,7 +560,7 @@ Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobjec optval = (void*)&mreq6; optlen = sizeof(mreq6); } else { -#ifdef MACOSX +#ifdef __APPLE__ /* no IPv6 include-mode filtering for now */ return IOS_UNAVAILABLE; #else @@ -550,7 +573,7 @@ Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobjec n = setsockopt(fdval(env,fdo), IPPROTO_IPV6, opt, optval, optlen); if (n < 0) { - if (join && (errno == ENOPROTOOPT)) + if (join && (errno == ENOPROTOOPT || errno == EOPNOTSUPP)) return IOS_UNAVAILABLE; handleSocketError(env, errno); } @@ -566,11 +589,11 @@ Java_sun_nio_ch_Net_blockOrUnblock6(JNIEnv *env, jobject this, jboolean block, j jbyteArray group, jint index, jbyteArray source) { #ifdef AF_INET6 - #ifdef MACOSX + #ifdef __APPLE__ /* no IPv6 exclude-mode filtering for now */ return IOS_UNAVAILABLE; #else - struct my_group_source_req req; + struct group_source_req req; int n; int opt = (block) ? MCAST_BLOCK_SOURCE : MCAST_UNBLOCK_SOURCE; @@ -579,7 +602,7 @@ Java_sun_nio_ch_Net_blockOrUnblock6(JNIEnv *env, jobject this, jboolean block, j n = setsockopt(fdval(env,fdo), IPPROTO_IPV6, opt, (void*)&req, sizeof(req)); if (n < 0) { - if (block && (errno == ENOPROTOOPT)) + if (block && (errno == ENOPROTOOPT || errno == EOPNOTSUPP)) return IOS_UNAVAILABLE; handleSocketError(env, errno); } @@ -679,6 +702,42 @@ Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlo } } +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollinValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLIN; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_polloutValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLOUT; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollerrValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLERR; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollhupValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLHUP; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollnvalValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLNVAL; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollconnValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLOUT; +} + /* Declared in nio_util.h */ diff --git a/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c index 7a730cc0b25..e96c9b0cc0a 100644 --- a/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c @@ -57,12 +57,20 @@ Java_sun_nio_ch_ServerSocketChannelImpl_initIDs(JNIEnv *env, jclass c) jclass cls; cls = (*env)->FindClass(env, "java/io/FileDescriptor"); + CHECK_NULL(cls); fd_fdID = (*env)->GetFieldID(env, cls, "fd", "I"); + CHECK_NULL(fd_fdID); cls = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(cls); isa_class = (*env)->NewGlobalRef(env, cls); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, cls, "", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); } JNIEXPORT jint JNICALL @@ -79,6 +87,10 @@ Java_sun_nio_ch_ServerSocketChannelImpl_accept0(JNIEnv *env, jobject this, jint remote_port; NET_AllocSockaddr(&sa, &alloc_len); + if (sa == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return IOS_THROWN; + } /* * accept connection but ignore ECONNABORTED indicating that @@ -110,8 +122,9 @@ Java_sun_nio_ch_ServerSocketChannelImpl_accept0(JNIEnv *env, jobject this, (*env)->SetIntField(env, newfdo, fd_fdID, newfd); remote_ia = NET_SockaddrToInetAddress(env, sa, (int *)&remote_port); free((void *)sa); - isa = (*env)->NewObject(env, isa_class, isa_ctorID, - remote_ia, remote_port); + CHECK_NULL_RETURN(remote_ia, IOS_THROWN); + isa = (*env)->NewObject(env, isa_class, isa_ctorID, remote_ia, remote_port); + CHECK_NULL_RETURN(isa, IOS_THROWN); (*env)->SetObjectArrayElement(env, isaa, 0, isa); return 1; } diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c index 225556b4d9f..54e16af7f6b 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c @@ -214,6 +214,7 @@ void handleSendFailed /* retrieved address from sockaddr */ isaObj = SockAddrToInetSocketAddress(env, sap); + CHECK_NULL(isaObj); /* data retrieved from sff_data */ if (dataLength > 0) { @@ -338,6 +339,7 @@ void handlePeerAddrChange } addressObj = SockAddrToInetSocketAddress(env, (struct sockaddr*)&spc->spc_aaddr); + CHECK_NULL(addressObj); /* create PeerAddressChanged */ resultObj = (*env)->NewObject(env, spc_class, spc_ctrID, spc->spc_assoc_id, @@ -394,6 +396,7 @@ void handleMessage } isa = SockAddrToInetSocketAddress(env, sap); + CHECK_NULL(isa); getControlData(msg, cdata); /* create MessageInfoImpl */ @@ -580,4 +583,3 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_sctp_SctpChannelImpl_checkConnect return Java_sun_nio_ch_SocketChannelImpl_checkConnect(env, this, fdo, block, ready); } - diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c index 57c4fae4fa5..db97c948ee6 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c @@ -157,6 +157,7 @@ Java_sun_nio_ch_sctp_SctpNet_init } preCloseFD = sp[0]; close(sp[1]); + initInetAddressIDs(env); } /* @@ -382,8 +383,9 @@ JNIEXPORT jobjectArray JNICALL Java_sun_nio_ch_sctp_SctpNet_getLocalAddresses0 ia = NET_SockaddrToInetAddress(env, sap, &port); if (ia != NULL) isa = (*env)->NewObject(env, isaCls, isaCtrID, ia, port); - if (isa != NULL) - (*env)->SetObjectArrayElement(env, isaa, i, isa); + if (isa == NULL) + break; + (*env)->SetObjectArrayElement(env, isaa, i, isa); if (sap->sa_family == AF_INET) addr_buf = ((struct sockaddr_in*)addr_buf) + 1; @@ -433,8 +435,9 @@ jobjectArray getRemoteAddresses ia = NET_SockaddrToInetAddress(env, sap, &port); if (ia != NULL) isa = (*env)->NewObject(env, isaCls, isaCtrID, ia, port); - if (isa != NULL) - (*env)->SetObjectArrayElement(env, isaa, i, isa); + if (isa == NULL) + break; + (*env)->SetObjectArrayElement(env, isaa, i, isa); if (sap->sa_family == AF_INET) addr_buf = ((struct sockaddr_in*)addr_buf) + 1; diff --git a/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c index 0b4f2a74dff..9453f75d3de 100644 --- a/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c @@ -72,13 +72,15 @@ Java_sun_nio_fs_BsdNativeDispatcher_initIDs(JNIEnv* env, jclass this) jclass clazz; clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL(entry_name); entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL(entry_dir); entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL(entry_fstype); entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL(entry_options); } JNIEXPORT jlong JNICALL @@ -201,4 +203,3 @@ Java_sun_nio_fs_BsdNativeDispatcher_endfsstat(JNIEnv* env, jclass this, jlong va free(iter); } } - diff --git a/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c index 1de7d5b3c98..c8500db5c87 100644 --- a/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c @@ -68,13 +68,15 @@ Java_sun_nio_fs_LinuxNativeDispatcher_init(JNIEnv *env, jclass clazz) my_flistxattr_func = (flistxattr_func*)dlsym(RTLD_DEFAULT, "flistxattr"); clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); - if (clazz == NULL) - return; - + CHECK_NULL(clazz); entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL(entry_name); entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL(entry_dir); entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL(entry_fstype); entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL(entry_options); } JNIEXPORT jint JNICALL diff --git a/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c index 1480ea9046b..de04bbddc7c 100644 --- a/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c @@ -55,14 +55,17 @@ static void throwUnixException(JNIEnv* env, int errnum) { JNIEXPORT void JNICALL Java_sun_nio_fs_SolarisNativeDispatcher_init(JNIEnv *env, jclass clazz) { clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); - if (clazz == NULL) - return; - + CHECK_NULL(clazz); entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL(entry_name); entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL(entry_dir); entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL(entry_fstype); entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL(entry_options); entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J"); + CHECK_NULL(entry_dev); } JNIEXPORT jint JNICALL diff --git a/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c index 8f408951e77..8901376361d 100644 --- a/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c @@ -42,7 +42,7 @@ #include #endif -#ifdef __linux__ +#if defined(__linux__) || defined(_AIX) #include #endif @@ -179,46 +179,64 @@ Java_sun_nio_fs_UnixNativeDispatcher_init(JNIEnv* env, jclass this) jclass clazz; clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileAttributes"); - if (clazz == NULL) { - return 0; - } + CHECK_NULL_RETURN(clazz, 0); attrs_st_mode = (*env)->GetFieldID(env, clazz, "st_mode", "I"); + CHECK_NULL_RETURN(attrs_st_mode, 0); attrs_st_ino = (*env)->GetFieldID(env, clazz, "st_ino", "J"); + CHECK_NULL_RETURN(attrs_st_ino, 0); attrs_st_dev = (*env)->GetFieldID(env, clazz, "st_dev", "J"); + CHECK_NULL_RETURN(attrs_st_dev, 0); attrs_st_rdev = (*env)->GetFieldID(env, clazz, "st_rdev", "J"); + CHECK_NULL_RETURN(attrs_st_rdev, 0); attrs_st_nlink = (*env)->GetFieldID(env, clazz, "st_nlink", "I"); + CHECK_NULL_RETURN(attrs_st_nlink, 0); attrs_st_uid = (*env)->GetFieldID(env, clazz, "st_uid", "I"); + CHECK_NULL_RETURN(attrs_st_uid, 0); attrs_st_gid = (*env)->GetFieldID(env, clazz, "st_gid", "I"); + CHECK_NULL_RETURN(attrs_st_gid, 0); attrs_st_size = (*env)->GetFieldID(env, clazz, "st_size", "J"); + CHECK_NULL_RETURN(attrs_st_size, 0); attrs_st_atime_sec = (*env)->GetFieldID(env, clazz, "st_atime_sec", "J"); + CHECK_NULL_RETURN(attrs_st_atime_sec, 0); attrs_st_atime_nsec = (*env)->GetFieldID(env, clazz, "st_atime_nsec", "J"); + CHECK_NULL_RETURN(attrs_st_atime_nsec, 0); attrs_st_mtime_sec = (*env)->GetFieldID(env, clazz, "st_mtime_sec", "J"); + CHECK_NULL_RETURN(attrs_st_mtime_sec, 0); attrs_st_mtime_nsec = (*env)->GetFieldID(env, clazz, "st_mtime_nsec", "J"); + CHECK_NULL_RETURN(attrs_st_mtime_nsec, 0); attrs_st_ctime_sec = (*env)->GetFieldID(env, clazz, "st_ctime_sec", "J"); + CHECK_NULL_RETURN(attrs_st_ctime_sec, 0); attrs_st_ctime_nsec = (*env)->GetFieldID(env, clazz, "st_ctime_nsec", "J"); + CHECK_NULL_RETURN(attrs_st_ctime_nsec, 0); #ifdef _DARWIN_FEATURE_64_BIT_INODE attrs_st_birthtime_sec = (*env)->GetFieldID(env, clazz, "st_birthtime_sec", "J"); + CHECK_NULL_RETURN(attrs_st_birthtime_sec, 0); #endif clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileStoreAttributes"); - if (clazz == NULL) { - return 0; - } + CHECK_NULL_RETURN(clazz, 0); attrs_f_frsize = (*env)->GetFieldID(env, clazz, "f_frsize", "J"); + CHECK_NULL_RETURN(attrs_f_frsize, 0); attrs_f_blocks = (*env)->GetFieldID(env, clazz, "f_blocks", "J"); + CHECK_NULL_RETURN(attrs_f_blocks, 0); attrs_f_bfree = (*env)->GetFieldID(env, clazz, "f_bfree", "J"); + CHECK_NULL_RETURN(attrs_f_bfree, 0); attrs_f_bavail = (*env)->GetFieldID(env, clazz, "f_bavail", "J"); + CHECK_NULL_RETURN(attrs_f_bavail, 0); clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); - if (clazz == NULL) { - return 0; - } + CHECK_NULL_RETURN(clazz, 0); entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL_RETURN(entry_name, 0); entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL_RETURN(entry_dir, 0); entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL_RETURN(entry_fstype, 0); entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL_RETURN(entry_options, 0); entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J"); + CHECK_NULL_RETURN(entry_dev, 0); /* system calls that might not be available at run time */ @@ -294,7 +312,13 @@ Java_sun_nio_fs_UnixNativeDispatcher_strerror(JNIEnv* env, jclass this, jint err jsize len; jbyteArray bytes; +#ifdef _AIX + /* strerror() is not thread-safe on AIX so we have to use strerror_r() */ + char buffer[256]; + msg = (strerror_r((int)error, buffer, 256) == 0) ? buffer : "Error while calling strerror_r"; +#else msg = strerror((int)error); +#endif len = strlen(msg); bytes = (*env)->NewByteArray(env, len); if (bytes != NULL) { @@ -674,6 +698,15 @@ Java_sun_nio_fs_UnixNativeDispatcher_readdir(JNIEnv* env, jclass this, jlong val /* EINTR not listed as a possible error */ /* TDB: reentrant version probably not required here */ res = readdir64_r(dirp, ptr, &result); + +#ifdef _AIX + /* On AIX, readdir_r() returns EBADF (i.e. '9') and sets 'result' to NULL for the */ + /* directory stream end. Otherwise, 'errno' will contain the error code. */ + if (res != 0) { + res = (result == NULL && res == EBADF) ? 0 : errno; + } +#endif + if (res != 0) { throwUnixException(env, res); return NULL; @@ -877,6 +910,18 @@ Java_sun_nio_fs_UnixNativeDispatcher_statvfs0(JNIEnv* env, jclass this, if (err == -1) { throwUnixException(env, errno); } else { +#ifdef _AIX + /* AIX returns ULONG_MAX in buf.f_blocks for the /proc file system. */ + /* This is too big for a Java signed long and fools various tests. */ + if (buf.f_blocks == ULONG_MAX) { + buf.f_blocks = 0; + } + /* The number of free or available blocks can never exceed the total number of blocks */ + if (buf.f_blocks == 0) { + buf.f_bfree = 0; + buf.f_bavail = 0; + } +#endif (*env)->SetLongField(env, attrs, attrs_f_frsize, long_to_jlong(buf.f_frsize)); (*env)->SetLongField(env, attrs, attrs_f_blocks, long_to_jlong(buf.f_blocks)); (*env)->SetLongField(env, attrs, attrs_f_bfree, long_to_jlong(buf.f_bfree)); diff --git a/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c b/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c index f509c42b559..8b3a62bfdc6 100644 --- a/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c +++ b/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,7 +50,11 @@ JNIEXPORT jlong JNICALL Java_sun_security_pkcs11_Secmod_nssGetLibraryHandle { const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL); // look up existing handle only, do not load +#if defined(AIX) + void *hModule = dlopen(libName, RTLD_LAZY); +#else void *hModule = dlopen(libName, RTLD_NOLOAD); +#endif dprintf2("-handle for %s: %u\n", libName, hModule); (*env)->ReleaseStringUTFChars(env, jLibName, libName); return ptr_to_jlong(hModule); diff --git a/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java b/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java index a38068514c6..d7cfc58e1e8 100644 --- a/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java +++ b/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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,7 +88,7 @@ public class Win32GraphicsDevice extends GraphicsDevice implements // is run as an NT service. To prevent the loading of ddraw.dll // completely, sun.awt.nopixfmt should be set as well. Apps which use // OpenGL w/ Java probably don't want to set this. - String nopixfmt = (String)java.security.AccessController.doPrivileged( + String nopixfmt = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.awt.nopixfmt")); pfDisabled = (nopixfmt != null); initIDs(); diff --git a/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java b/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java index 80042a15150..1b43fbb379f 100644 --- a/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java +++ b/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -94,7 +94,7 @@ class WPathGraphics extends PathGraphics { private static boolean preferGDITextLayout = false; static { String textLayoutStr = - (String)java.security.AccessController.doPrivileged( + java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction( "sun.java2d.print.enableGDITextLayout")); diff --git a/jdk/src/windows/classes/sun/io/Win32ErrorMode.java b/jdk/src/windows/classes/sun/io/Win32ErrorMode.java index d11a63b1096..8ec417fd6e2 100644 --- a/jdk/src/windows/classes/sun/io/Win32ErrorMode.java +++ b/jdk/src/windows/classes/sun/io/Win32ErrorMode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -67,7 +67,7 @@ public class Win32ErrorMode { */ public static void initialize() { if (!sun.misc.VM.isBooted()) { - String s = (String) System.getProperty("sun.io.allowCriticalErrorMessageBox"); + String s = System.getProperty("sun.io.allowCriticalErrorMessageBox"); if (s == null || s.equals(Boolean.FALSE.toString())) { long mode = setErrorMode(0); mode |= SEM_FAILCRITICALERRORS; diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DBufImgOps.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DBufImgOps.java index c2dee96aaef..890bb87d66b 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DBufImgOps.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DBufImgOps.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -78,12 +78,12 @@ class D3DBufImgOps extends BufferedBufImgOps { } SurfaceData srcData = - dstData.getSourceSurfaceData(img, sg.TRANSFORM_ISIDENT, + dstData.getSourceSurfaceData(img, SunGraphics2D.TRANSFORM_ISIDENT, CompositeType.SrcOver, null); if (!(srcData instanceof D3DSurfaceData)) { // REMIND: this hack tries to ensure that we have a cached texture srcData = - dstData.getSourceSurfaceData(img, sg.TRANSFORM_ISIDENT, + dstData.getSourceSurfaceData(img, SunGraphics2D.TRANSFORM_ISIDENT, CompositeType.SrcOver, null); if (!(srcData instanceof D3DSurfaceData)) { return false; diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DDrawImage.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DDrawImage.java index 8bfac53732b..f814dc2f613 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DDrawImage.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DDrawImage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -53,7 +53,7 @@ public class D3DDrawImage extends DrawImage { SurfaceData dstData = sg.surfaceData; SurfaceData srcData = dstData.getSourceSurfaceData(img, - sg.TRANSFORM_GENERIC, + SunGraphics2D.TRANSFORM_GENERIC, sg.imageComp, bgColor); diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java index 2012b19e700..bf6134648c3 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -235,10 +235,12 @@ public class D3DGraphicsDevice extends Win32GraphicsDevice { */ private static class D3DFSWindowAdapter extends WindowAdapter { @Override + @SuppressWarnings("static") public void windowDeactivated(WindowEvent e) { D3DRenderQueue.getInstance().restoreDevices(); } @Override + @SuppressWarnings("static") public void windowActivated(WindowEvent e) { D3DRenderQueue.getInstance().restoreDevices(); } diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DPaints.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DPaints.java index 53e59762c23..b328ce3a083 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DPaints.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DPaints.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -132,14 +132,14 @@ abstract class D3DPaints { } SurfaceData srcData = - dstData.getSourceSurfaceData(bi, sg2d.TRANSFORM_ISIDENT, + dstData.getSourceSurfaceData(bi, SunGraphics2D.TRANSFORM_ISIDENT, CompositeType.SrcOver, null); if (!(srcData instanceof D3DSurfaceData)) { // REMIND: this is a hack that attempts to cache the system // memory image from the TexturePaint instance into a // D3D texture... srcData = - dstData.getSourceSurfaceData(bi, sg2d.TRANSFORM_ISIDENT, + dstData.getSourceSurfaceData(bi, SunGraphics2D.TRANSFORM_ISIDENT, CompositeType.SrcOver, null); if (!(srcData instanceof D3DSurfaceData)) { return false; diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java index d37db9e925b..ffab9092a5a 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -542,7 +542,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { // REMIND: the D3D pipeline doesn't support XOR!, more // fixes will be needed below. For now we disable D3D rendering // for the surface which had any XOR rendering done to. - if (sg2d.compositeState >= sg2d.COMP_XOR) { + if (sg2d.compositeState >= SunGraphics2D.COMP_XOR) { super.validatePipe(sg2d); sg2d.imagepipe = d3dImagePipe; disableAccelerationForSurface(); @@ -557,18 +557,18 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { // by the CompositeType.SrcNoEa (any color) test below.) if (/* CompositeType.SrcNoEa (any color) */ - (sg2d.compositeState <= sg2d.COMP_ISCOPY && - sg2d.paintState <= sg2d.PAINT_ALPHACOLOR) || + (sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY && + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR) || /* CompositeType.SrcOver (any color) */ - (sg2d.compositeState == sg2d.COMP_ALPHA && - sg2d.paintState <= sg2d.PAINT_ALPHACOLOR && + (sg2d.compositeState == SunGraphics2D.COMP_ALPHA && + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR && (((AlphaComposite)sg2d.composite).getRule() == AlphaComposite.SRC_OVER)) || /* CompositeType.Xor (any color) */ - (sg2d.compositeState == sg2d.COMP_XOR && - sg2d.paintState <= sg2d.PAINT_ALPHACOLOR)) + (sg2d.compositeState == SunGraphics2D.COMP_XOR && + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR)) { textpipe = d3dTextPipe; } else { @@ -583,12 +583,12 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { D3DRenderer nonTxPipe = null; if (sg2d.antialiasHint != SunHints.INTVAL_ANTIALIAS_ON) { - if (sg2d.paintState <= sg2d.PAINT_ALPHACOLOR) { - if (sg2d.compositeState <= sg2d.COMP_XOR) { + if (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR) { + if (sg2d.compositeState <= SunGraphics2D.COMP_XOR) { txPipe = d3dTxRenderPipe; nonTxPipe = d3dRenderPipe; } - } else if (sg2d.compositeState <= sg2d.COMP_ALPHA) { + } else if (sg2d.compositeState <= SunGraphics2D.COMP_ALPHA) { if (D3DPaints.isValid(sg2d)) { txPipe = d3dTxRenderPipe; nonTxPipe = d3dRenderPipe; @@ -596,7 +596,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { // custom paints handled by super.validatePipe() below } } else { - if (sg2d.paintState <= sg2d.PAINT_ALPHACOLOR) { + if (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR) { if (graphicsDevice.isCapPresent(CAPS_AA_SHADER) && (sg2d.imageComp == CompositeType.SrcOverNoEa || sg2d.imageComp == CompositeType.SrcOver)) @@ -613,7 +613,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { sg2d.drawpipe = aaConverter; sg2d.fillpipe = aaConverter; sg2d.shapepipe = aaConverter; - } else if (sg2d.compositeState == sg2d.COMP_XOR) { + } else if (sg2d.compositeState == SunGraphics2D.COMP_XOR) { // install the solid pipes when AA and XOR are both enabled txPipe = d3dTxRenderPipe; nonTxPipe = d3dRenderPipe; @@ -623,10 +623,10 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { } if (txPipe != null) { - if (sg2d.transformState >= sg2d.TRANSFORM_TRANSLATESCALE) { + if (sg2d.transformState >= SunGraphics2D.TRANSFORM_TRANSLATESCALE) { sg2d.drawpipe = txPipe; sg2d.fillpipe = txPipe; - } else if (sg2d.strokeState != sg2d.STROKE_THIN) { + } else if (sg2d.strokeState != SunGraphics2D.STROKE_THIN) { sg2d.drawpipe = txPipe; sg2d.fillpipe = nonTxPipe; } else { @@ -653,7 +653,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { @Override protected MaskFill getMaskFill(SunGraphics2D sg2d) { - if (sg2d.paintState > sg2d.PAINT_ALPHACOLOR) { + if (sg2d.paintState > SunGraphics2D.PAINT_ALPHACOLOR) { /* * We can only accelerate non-Color MaskFill operations if * all of the following conditions hold true: @@ -678,8 +678,8 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { public boolean copyArea(SunGraphics2D sg2d, int x, int y, int w, int h, int dx, int dy) { - if (sg2d.transformState < sg2d.TRANSFORM_TRANSLATESCALE && - sg2d.compositeState < sg2d.COMP_XOR) + if (sg2d.transformState < SunGraphics2D.TRANSFORM_TRANSLATESCALE && + sg2d.compositeState < SunGraphics2D.COMP_XOR) { x += sg2d.transX; y += sg2d.transY; @@ -738,7 +738,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { D3DRenderQueue rq = D3DRenderQueue.getInstance(); // swapBuffers can be called from the toolkit thread by swing, we // should detect this and prevent the deadlocks - if (rq.isRenderQueueThread()) { + if (D3DRenderQueue.isRenderQueueThread()) { if (!rq.tryLock()) { // if we could not obtain the lock, repaint the area // that was supposed to be swapped, and no-op this swap diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceDataProxy.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceDataProxy.java index 46b1446c975..66e98882a19 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceDataProxy.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceDataProxy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, 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 @@ -72,7 +72,7 @@ public class D3DSurfaceDataProxy extends SurfaceDataProxy { try { cachedData = d3dgc.createManagedSurface(w, h, transparency); } catch (InvalidPipeException e) { - if (!d3dgc.getD3DDevice().isD3DAvailable()) { + if (!D3DGraphicsDevice.isD3DAvailable()) { invalidate(); flush(); return null; diff --git a/jdk/src/windows/classes/sun/java2d/windows/GDIRenderer.java b/jdk/src/windows/classes/sun/java2d/windows/GDIRenderer.java index bb3e2725700..5971c09cdd6 100644 --- a/jdk/src/windows/classes/sun/java2d/windows/GDIRenderer.java +++ b/jdk/src/windows/classes/sun/java2d/windows/GDIRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -264,7 +264,7 @@ public class GDIRenderer implements Path2D.Float p2df; int transX; int transY; - if (sg2d.transformState <= sg2d.TRANSFORM_INT_TRANSLATE) { + if (sg2d.transformState <= SunGraphics2D.TRANSFORM_INT_TRANSLATE) { if (s instanceof Path2D.Float) { p2df = (Path2D.Float)s; } else { @@ -308,9 +308,9 @@ public class GDIRenderer implements } public void draw(SunGraphics2D sg2d, Shape s) { - if (sg2d.strokeState == sg2d.STROKE_THIN) { + if (sg2d.strokeState == SunGraphics2D.STROKE_THIN) { doShape(sg2d, s, false); - } else if (sg2d.strokeState < sg2d.STROKE_CUSTOM) { + } else if (sg2d.strokeState < SunGraphics2D.STROKE_CUSTOM) { ShapeSpanIterator si = LoopPipe.getStrokeSpans(sg2d, s); try { doFillSpans(sg2d, si); diff --git a/jdk/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java b/jdk/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java index deaf9c60e0d..49d9261bbd3 100644 --- a/jdk/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java +++ b/jdk/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -153,11 +153,11 @@ public class GDIWindowSurfaceData extends SurfaceData { public void validatePipe(SunGraphics2D sg2d) { if (sg2d.antialiasHint != SunHints.INTVAL_ANTIALIAS_ON && - sg2d.paintState <= sg2d.PAINT_ALPHACOLOR && - (sg2d.compositeState <= sg2d.COMP_ISCOPY || - sg2d.compositeState == sg2d.COMP_XOR)) + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR && + (sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY || + sg2d.compositeState == SunGraphics2D.COMP_XOR)) { - if (sg2d.clipState == sg2d.CLIP_SHAPE) { + if (sg2d.clipState == SunGraphics2D.CLIP_SHAPE) { // Do this to init textpipe correctly; we will override the // other non-text pipes below // REMIND: we should clean this up eventually instead of @@ -194,10 +194,10 @@ public class GDIWindowSurfaceData extends SurfaceData { } } sg2d.imagepipe = imagepipe; - if (sg2d.transformState >= sg2d.TRANSFORM_TRANSLATESCALE) { + if (sg2d.transformState >= SunGraphics2D.TRANSFORM_TRANSLATESCALE) { sg2d.drawpipe = gdiTxPipe; sg2d.fillpipe = gdiTxPipe; - } else if (sg2d.strokeState != sg2d.STROKE_THIN){ + } else if (sg2d.strokeState != SunGraphics2D.STROKE_THIN){ sg2d.drawpipe = gdiTxPipe; sg2d.fillpipe = gdiPipe; } else { @@ -220,8 +220,8 @@ public class GDIWindowSurfaceData extends SurfaceData { } public RenderLoops getRenderLoops(SunGraphics2D sg2d) { - if (sg2d.paintState <= sg2d.PAINT_ALPHACOLOR && - sg2d.compositeState <= sg2d.COMP_ISCOPY) + if (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR && + sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY) { return solidloops; } @@ -295,8 +295,8 @@ public class GDIWindowSurfaceData extends SurfaceData { int x, int y, int w, int h, int dx, int dy) { CompositeType comptype = sg2d.imageComp; - if (sg2d.transformState < sg2d.TRANSFORM_TRANSLATESCALE && - sg2d.clipState != sg2d.CLIP_SHAPE && + if (sg2d.transformState < SunGraphics2D.TRANSFORM_TRANSLATESCALE && + sg2d.clipState != SunGraphics2D.CLIP_SHAPE && (CompositeType.SrcOverNoEa.equals(comptype) || CompositeType.SrcNoEa.equals(comptype))) { diff --git a/jdk/src/windows/classes/sun/management/OperatingSystemImpl.java b/jdk/src/windows/classes/sun/management/OperatingSystemImpl.java index ca766448177..f24ef7d9653 100644 --- a/jdk/src/windows/classes/sun/management/OperatingSystemImpl.java +++ b/jdk/src/windows/classes/sun/management/OperatingSystemImpl.java @@ -50,18 +50,48 @@ class OperatingSystemImpl extends BaseOperatingSystemImpl return getCommittedVirtualMemorySize0(); } } - private native long getCommittedVirtualMemorySize0(); - public native long getTotalSwapSpaceSize(); - public native long getFreeSwapSpaceSize(); - public native long getProcessCpuTime(); - public native long getFreePhysicalMemorySize(); - public native long getTotalPhysicalMemorySize(); - public native double getSystemCpuLoad(); - public native double getProcessCpuLoad(); + public long getTotalSwapSpaceSize() { + return getTotalSwapSpaceSize0(); + } + + public long getFreeSwapSpaceSize() { + return getFreeSwapSpaceSize0(); + } + + public long getProcessCpuTime() { + return getProcessCpuTime0(); + } + + public long getFreePhysicalMemorySize() { + return getFreePhysicalMemorySize0(); + } + + public long getTotalPhysicalMemorySize() { + return getTotalPhysicalMemorySize0(); + } + + public double getSystemCpuLoad() { + return getSystemCpuLoad0(); + } + + public double getProcessCpuLoad() { + return getProcessCpuLoad0(); + } + + /* native methods */ + private native long getCommittedVirtualMemorySize0(); + private native long getFreePhysicalMemorySize0(); + private native long getFreeSwapSpaceSize0(); + private native double getProcessCpuLoad0(); + private native long getProcessCpuTime0(); + private native double getSystemCpuLoad0(); + private native long getTotalPhysicalMemorySize0(); + private native long getTotalSwapSpaceSize0(); static { - initialize(); + initialize0(); } - private static native void initialize(); + + private static native void initialize0(); } diff --git a/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java b/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java index 89455769485..08591f82061 100644 --- a/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java +++ b/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java @@ -53,15 +53,6 @@ class PollArrayWrapper { static short SIZE_POLLFD = 8; // sizeof pollfd struct - // events masks - @Native static final short POLLIN = AbstractPollArrayWrapper.POLLIN; - @Native static final short POLLOUT = AbstractPollArrayWrapper.POLLOUT; - @Native static final short POLLERR = AbstractPollArrayWrapper.POLLERR; - @Native static final short POLLHUP = AbstractPollArrayWrapper.POLLHUP; - @Native static final short POLLNVAL = AbstractPollArrayWrapper.POLLNVAL; - @Native static final short POLLREMOVE = AbstractPollArrayWrapper.POLLREMOVE; - @Native static final short POLLCONN = 0x0002; - private int size; // Size of the pollArray PollArrayWrapper(int newSize) { @@ -119,6 +110,6 @@ class PollArrayWrapper { // Adds Windows wakeup socket at a given index. void addWakeupSocket(int fdVal, int index) { putDescriptor(index, fdVal); - putEventOps(index, POLLIN); + putEventOps(index, Net.POLLIN); } } diff --git a/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java b/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java index 1450928a816..57e88ac38cf 100644 --- a/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java @@ -78,17 +78,16 @@ class SinkChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) + if ((ops & Net.POLLNVAL) != 0) throw new Error("POLLNVAL detected"); - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0)) newOps |= SelectionKey.OP_WRITE; @@ -106,7 +105,7 @@ class SinkChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { if ((ops & SelectionKey.OP_WRITE) != 0) - ops = PollArrayWrapper.POLLOUT; + ops = Net.POLLOUT; sk.selector.putEventOps(sk, ops); } diff --git a/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java b/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java index da45df639af..2605d61b47c 100644 --- a/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java @@ -77,17 +77,16 @@ class SourceChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) + if ((ops & Net.POLLNVAL) != 0) throw new Error("POLLNVAL detected"); - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0)) newOps |= SelectionKey.OP_READ; @@ -105,7 +104,7 @@ class SourceChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { if ((ops & SelectionKey.OP_READ) != 0) - ops = PollArrayWrapper.POLLIN; + ops = Net.POLLIN; sk.selector.putEventOps(sk, ops); } diff --git a/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java b/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java index d84712ba97c..eec35ea9518 100644 --- a/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java @@ -313,16 +313,16 @@ final class WindowsSelectorImpl extends SelectorImpl { private int processSelectedKeys(long updateCount) { int numKeysUpdated = 0; numKeysUpdated += processFDSet(updateCount, readFds, - PollArrayWrapper.POLLIN, + Net.POLLIN, false); numKeysUpdated += processFDSet(updateCount, writeFds, - PollArrayWrapper.POLLCONN | - PollArrayWrapper.POLLOUT, + Net.POLLCONN | + Net.POLLOUT, false); numKeysUpdated += processFDSet(updateCount, exceptFds, - PollArrayWrapper.POLLIN | - PollArrayWrapper.POLLCONN | - PollArrayWrapper.POLLOUT, + Net.POLLIN | + Net.POLLCONN | + Net.POLLOUT, true); return numKeysUpdated; } diff --git a/jdk/src/windows/classes/sun/print/Win32PrintJob.java b/jdk/src/windows/classes/sun/print/Win32PrintJob.java index 844f3ee4f22..570d23a91d2 100644 --- a/jdk/src/windows/classes/sun/print/Win32PrintJob.java +++ b/jdk/src/windows/classes/sun/print/Win32PrintJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -308,12 +308,10 @@ public class Win32PrintJob implements CancelablePrintJob { } } - PrinterState prnState = (PrinterState)service.getAttribute( - PrinterState.class); + PrinterState prnState = service.getAttribute(PrinterState.class); if (prnState == PrinterState.STOPPED) { PrinterStateReasons prnStateReasons = - (PrinterStateReasons)service.getAttribute( - PrinterStateReasons.class); + service.getAttribute(PrinterStateReasons.class); if ((prnStateReasons != null) && (prnStateReasons.containsKey(PrinterStateReason.SHUTDOWN))) { @@ -321,9 +319,8 @@ public class Win32PrintJob implements CancelablePrintJob { } } - if ((PrinterIsAcceptingJobs)(service.getAttribute( - PrinterIsAcceptingJobs.class)) == - PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS) { + if (service.getAttribute(PrinterIsAcceptingJobs.class) == + PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS) { throw new PrintException("Printer is not accepting job."); } diff --git a/jdk/src/windows/classes/sun/print/Win32PrintService.java b/jdk/src/windows/classes/sun/print/Win32PrintService.java index 73e89269285..1fc7fe46f54 100644 --- a/jdk/src/windows/classes/sun/print/Win32PrintService.java +++ b/jdk/src/windows/classes/sun/print/Win32PrintService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -506,8 +506,7 @@ public class Win32PrintService implements PrintService, AttributeUpdater, } } else { // if getting MPA failed, we use MediaSize - MediaSize ms = - MediaSize.getMediaSizeForName((MediaSizeName)mediaName); + MediaSize ms = MediaSize.getMediaSizeForName(mediaName); if (ms != null) { try { diff --git a/jdk/src/windows/native/com/sun/security/auth/module/nt.c b/jdk/src/windows/native/com/sun/security/auth/module/nt.c index 64ef356e1dc..72c0ef84f33 100644 --- a/jdk/src/windows/native/com/sun/security/auth/module/nt.c +++ b/jdk/src/windows/native/com/sun/security/auth/module/nt.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -589,7 +589,8 @@ BOOL getImpersonationToken(PHANDLE impersonationToken) { CloseHandle(dupToken); if (debug) { - printf(" [getImpersonationToken] token = %d\n", *impersonationToken); + printf(" [getImpersonationToken] token = %p\n", + (void *)*impersonationToken); } return TRUE; } diff --git a/jdk/src/windows/native/java/io/FileDescriptor_md.c b/jdk/src/windows/native/java/io/FileDescriptor_md.c index 221bf1d9217..db04cd47653 100644 --- a/jdk/src/windows/native/java/io/FileDescriptor_md.c +++ b/jdk/src/windows/native/java/io/FileDescriptor_md.c @@ -48,8 +48,8 @@ jfieldID IO_handle_fdID; JNIEXPORT void JNICALL Java_java_io_FileDescriptor_initIDs(JNIEnv *env, jclass fdClass) { - IO_fd_fdID = (*env)->GetFieldID(env, fdClass, "fd", "I"); - IO_handle_fdID = (*env)->GetFieldID(env, fdClass, "handle", "J"); + CHECK_NULL(IO_fd_fdID = (*env)->GetFieldID(env, fdClass, "fd", "I")); + CHECK_NULL(IO_handle_fdID = (*env)->GetFieldID(env, fdClass, "handle", "J")); } JNIEXPORT jlong JNICALL diff --git a/jdk/src/windows/native/java/io/WinNTFileSystem_md.c b/jdk/src/windows/native/java/io/WinNTFileSystem_md.c index 3c8b821e027..ec7d9d7294b 100644 --- a/jdk/src/windows/native/java/io/WinNTFileSystem_md.c +++ b/jdk/src/windows/native/java/io/WinNTFileSystem_md.c @@ -59,10 +59,12 @@ JNIEXPORT void JNICALL Java_java_io_WinNTFileSystem_initIDs(JNIEnv *env, jclass cls) { HMODULE handle; - jclass fileClass = (*env)->FindClass(env, "java/io/File"); - if (!fileClass) return; - ids.path = - (*env)->GetFieldID(env, fileClass, "path", "Ljava/lang/String;"); + jclass fileClass; + + fileClass = (*env)->FindClass(env, "java/io/File"); + CHECK_NULL(fileClass); + ids.path = (*env)->GetFieldID(env, fileClass, "path", "Ljava/lang/String;"); + CHECK_NULL(ids.path); // GetFinalPathNameByHandle requires Windows Vista or newer if (GetModuleHandleExW((GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | @@ -243,8 +245,8 @@ Java_java_io_WinNTFileSystem_canonicalize0(JNIEnv *env, jobject this, WCHAR canonicalPath[MAX_PATH_LENGTH]; WITH_UNICODE_STRING(env, pathname, path) { - /*we estimate the max length of memory needed as - "currentDir. length + pathname.length" + /* we estimate the max length of memory needed as + "currentDir. length + pathname.length" */ int len = (int)wcslen(path); len += currentDirLength(path, len); @@ -256,12 +258,11 @@ Java_java_io_WinNTFileSystem_canonicalize0(JNIEnv *env, jobject this, } free(cp); } - } else - if (wcanonicalize(path, canonicalPath, MAX_PATH_LENGTH) >= 0) { + } else if (wcanonicalize(path, canonicalPath, MAX_PATH_LENGTH) >= 0) { rv = (*env)->NewString(env, canonicalPath, (jsize)wcslen(canonicalPath)); } } END_UNICODE_STRING(env, path); - if (rv == NULL) { + if (rv == NULL && !(*env)->ExceptionCheck(env)) { JNU_ThrowIOExceptionWithLastError(env, "Bad pathname"); } return rv; @@ -288,15 +289,14 @@ Java_java_io_WinNTFileSystem_canonicalizeWithPrefix0(JNIEnv *env, jobject this, } free(cp); } - } else - if (wcanonicalizeWithPrefix(canonicalPrefix, - pathWithCanonicalPrefix, - canonicalPath, MAX_PATH_LENGTH) >= 0) { + } else if (wcanonicalizeWithPrefix(canonicalPrefix, + pathWithCanonicalPrefix, + canonicalPath, MAX_PATH_LENGTH) >= 0) { rv = (*env)->NewString(env, canonicalPath, (jsize)wcslen(canonicalPath)); } } END_UNICODE_STRING(env, pathWithCanonicalPrefix); } END_UNICODE_STRING(env, canonicalPrefix); - if (rv == NULL) { + if (rv == NULL && !(*env)->ExceptionCheck(env)) { JNU_ThrowIOExceptionWithLastError(env, "Bad pathname"); } return rv; @@ -616,8 +616,13 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) jobjectArray rv, old; DWORD fattr; jstring name; + jclass str_class; + WCHAR *pathbuf; - WCHAR *pathbuf = fileToNTPath(env, file, ids.path); + str_class = JNU_ClassString(env); + CHECK_NULL_RETURN(str_class, NULL); + + pathbuf = fileToNTPath(env, file, ids.path); if (pathbuf == NULL) return NULL; search_path = (WCHAR*)malloc(2*wcslen(pathbuf) + 6); @@ -664,7 +669,7 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) return NULL; } else { // No files found - return an empty array - rv = (*env)->NewObjectArray(env, 0, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, 0, str_class, NULL); return rv; } } @@ -672,7 +677,7 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) /* Allocate an initial String array */ len = 0; maxlen = 16; - rv = (*env)->NewObjectArray(env, maxlen, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, maxlen, str_class, NULL); if (rv == NULL) // Couldn't allocate an array return NULL; /* Scan the directory */ @@ -686,10 +691,8 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) return NULL; // error; if (len == maxlen) { old = rv; - rv = (*env)->NewObjectArray(env, maxlen <<= 1, - JNU_ClassString(env), NULL); - if ( rv == NULL - || JNU_CopyObjectArray(env, rv, old, len) < 0) + rv = (*env)->NewObjectArray(env, maxlen <<= 1, str_class, NULL); + if (rv == NULL || JNU_CopyObjectArray(env, rv, old, len) < 0) return NULL; // error (*env)->DeleteLocalRef(env, old); } @@ -704,7 +707,7 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) /* Copy the final results into an appropriately-sized array */ old = rv; - rv = (*env)->NewObjectArray(env, len, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, len, str_class, NULL); if (rv == NULL) return NULL; /* error */ if (JNU_CopyObjectArray(env, rv, old, len) < 0) diff --git a/jdk/src/windows/native/java/lang/ProcessEnvironment_md.c b/jdk/src/windows/native/java/lang/ProcessEnvironment_md.c index e64d30b74af..3b73dd1d326 100644 --- a/jdk/src/windows/native/java/lang/ProcessEnvironment_md.c +++ b/jdk/src/windows/native/java/lang/ProcessEnvironment_md.c @@ -32,10 +32,15 @@ static jstring environmentBlock9x(JNIEnv *env) { int i; - jmethodID String_init_ID = - (*env)->GetMethodID(env, JNU_ClassString(env), "", "([B)V"); + jmethodID String_init_ID; jbyteArray bytes; - jbyte *blockA = (jbyte *) GetEnvironmentStringsA(); + jbyte *blockA; + + String_init_ID = + (*env)->GetMethodID(env, JNU_ClassString(env), "", "([B)V"); + CHECK_NULL_RETURN(String_init_ID, NULL); + + blockA = (jbyte *) GetEnvironmentStringsA(); if (blockA == NULL) { /* Both GetEnvironmentStringsW and GetEnvironmentStringsA * failed. Out of memory is our best guess. */ diff --git a/jdk/src/windows/native/java/net/Inet4AddressImpl.c b/jdk/src/windows/native/java/net/Inet4AddressImpl.c index f34b5e12431..f21f2de3245 100644 --- a/jdk/src/windows/native/java/net/Inet4AddressImpl.c +++ b/jdk/src/windows/native/java/net/Inet4AddressImpl.c @@ -111,11 +111,6 @@ Java_java_net_Inet4AddressImpl_getLocalHostName (JNIEnv *env, jobject this) { return JNU_NewStringPlatform(env, hostname); } -static jclass ni_iacls; -static jclass ni_ia4cls; -static jmethodID ni_ia4ctrID; -static int initialized = 0; - /* * Find an internet address for a given hostname. Not this this * code only works for addresses of type INET. The translation @@ -140,19 +135,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, jobjectArray ret = NULL; - if (!initialized) { - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL_RETURN(ni_iacls, NULL); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL_RETURN(ni_iacls, NULL); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(ni_ia4cls, NULL); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL_RETURN(ni_ia4cls, NULL); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia4ctrID, NULL); - initialized = 1; - } + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host argument"); @@ -196,13 +180,13 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, address |= (addr[1]<<8) & 0xff00; address |= addr[0]; - ret = (*env)->NewObjectArray(env, 1, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, 1, ia_class, NULL); if (IS_NULL(ret)) { goto cleanupAndReturn; } - iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -226,7 +210,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, addrp++; } - ret = (*env)->NewObjectArray(env, i, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, i, ia_class, NULL); if (IS_NULL(ret)) { goto cleanupAndReturn; @@ -235,7 +219,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, addrp = (struct in_addr **) hp->h_addr_list; i = 0; while (*addrp != (struct in_addr *) 0) { - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; diff --git a/jdk/src/windows/native/java/net/Inet6AddressImpl.c b/jdk/src/windows/native/java/net/Inet6AddressImpl.c index f77d5ab79c7..cac70b34dfa 100644 --- a/jdk/src/windows/native/java/net/Inet6AddressImpl.c +++ b/jdk/src/windows/native/java/net/Inet6AddressImpl.c @@ -72,13 +72,6 @@ Java_java_net_Inet6AddressImpl_getLocalHostName (JNIEnv *env, jobject this) { return JNU_NewStringPlatform (env, hostname); } -static jclass ni_iacls; -static jclass ni_ia4cls; -static jclass ni_ia6cls; -static jmethodID ni_ia4ctrID; -static jmethodID ni_ia6ctrID; -static int initialized = 0; - JNIEXPORT jobjectArray JNICALL Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, jstring host) { @@ -86,30 +79,13 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, jobjectArray ret = 0; int retLen = 0; jboolean preferIPv6Address; - static jfieldID ia_preferIPv6AddressID; int error=0; struct addrinfo hints, *res, *resNew = NULL; - if (!initialized) { - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL_RETURN(ni_iacls, NULL); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL_RETURN(ni_iacls, NULL); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(ni_ia4cls, NULL); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL_RETURN(ni_ia4cls, NULL); - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL_RETURN(ni_ia6cls, NULL); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - CHECK_NULL_RETURN(ni_ia6cls, NULL); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia4ctrID, NULL); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia6ctrID, NULL); - initialized = 1; - } + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host is null"); return 0; @@ -117,17 +93,6 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE); CHECK_NULL_RETURN(hostname, NULL); - if (ia_preferIPv6AddressID == NULL) { - jclass c = (*env)->FindClass(env,"java/net/InetAddress"); - if (c) { - ia_preferIPv6AddressID = - (*env)->GetStaticFieldID(env, c, "preferIPv6Address", "Z"); - } - if (ia_preferIPv6AddressID == NULL) { - JNU_ReleaseStringPlatformChars(env, host, hostname); - return NULL; - } - } /* get the address preference */ preferIPv6Address = (*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID); @@ -229,7 +194,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, retLen = i; iterator = resNew; i = 0; - ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, retLen, ia_class, NULL); if (IS_NULL(ret)) { /* we may have memory to free at the end of this */ @@ -246,7 +211,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, while (iterator != NULL) { if (iterator->ai_family == AF_INET) { - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -257,7 +222,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, inetIndex ++; } else if (iterator->ai_family == AF_INET6) { jint scope = 0, ret1; - jobject iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + jobject iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -347,6 +312,7 @@ Java_java_net_Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject this, if (!error) { ret = (*env)->NewStringUTF(env, host); + CHECK_NULL_RETURN(ret, NULL); } if (ret == NULL) { diff --git a/jdk/src/windows/native/java/net/NetworkInterface.c b/jdk/src/windows/native/java/net/NetworkInterface.c index fee86874771..44e9a61636b 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface.c +++ b/jdk/src/windows/native/java/net/NetworkInterface.c @@ -65,13 +65,6 @@ jfieldID ni_bindsID; /* NetworkInterface.bindings */ jfieldID ni_nameID; /* NetworkInterface.name */ jfieldID ni_displayNameID; /* NetworkInterface.displayName */ jfieldID ni_childsID; /* NetworkInterface.childs */ -jclass ni_iacls; /* InetAddress */ - -jclass ni_ia4cls; /* Inet4Address */ -jmethodID ni_ia4Ctor; /* Inet4Address() */ - -jclass ni_ia6cls; /* Inet6Address */ -jmethodID ni_ia6ctrID; /* Inet6Address() */ jclass ni_ibcls; /* InterfaceAddress */ jmethodID ni_ibctrID; /* InterfaceAddress() */ @@ -515,26 +508,6 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) CHECK_NULL(ni_childsID); ni_ctor = (*env)->GetMethodID(env, ni_class, "", "()V"); CHECK_NULL(ni_ctor); - - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL(ni_iacls); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL(ni_iacls); - - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL(ni_ia4cls); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL(ni_ia4cls); - ni_ia4Ctor = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL(ni_ia4Ctor); - - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL(ni_ia6cls); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - CHECK_NULL(ni_ia6cls); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "", "()V"); - CHECK_NULL(ni_ia6ctrID); - ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); CHECK_NULL(ni_ibcls); ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); @@ -546,6 +519,9 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) ni_ibbroadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;"); CHECK_NULL(ni_ibbroadcastID); ni_ibmaskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); + CHECK_NULL(ni_ibmaskID); + + initInetAddressIDs(env); } /* @@ -591,7 +567,7 @@ jobject createNetworkInterface return NULL; } } - addrArr = (*env)->NewObjectArray(env, netaddrCount, ni_iacls, NULL); + addrArr = (*env)->NewObjectArray(env, netaddrCount, ia_class, NULL); if (addrArr == NULL) { free_netaddr(netaddrP); return NULL; @@ -609,7 +585,7 @@ jobject createNetworkInterface jobject iaObj, ia2Obj; jobject ibObj = NULL; if (addrs->addr.him.sa_family == AF_INET) { - iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (iaObj == NULL) { free_netaddr(netaddrP); return NULL; @@ -624,7 +600,7 @@ jobject createNetworkInterface return NULL; } (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); - ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); + ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (ia2Obj == NULL) { free_netaddr(netaddrP); return NULL; @@ -636,7 +612,7 @@ jobject createNetworkInterface } } else /* AF_INET6 */ { int scope; - iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (iaObj) { int ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr)); if (ret == JNI_FALSE) { diff --git a/jdk/src/windows/native/java/net/NetworkInterface.h b/jdk/src/windows/native/java/net/NetworkInterface.h index a73c62c66b3..929ac507f89 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface.h +++ b/jdk/src/windows/native/java/net/NetworkInterface.h @@ -70,16 +70,6 @@ extern jfieldID ni_nameID; /* NetworkInterface.name */ extern jfieldID ni_displayNameID; /* NetworkInterface.displayName */ extern jfieldID ni_childsID; /* NetworkInterface.childs */ -extern jclass ni_iacls; /* InetAddress */ - -extern jclass ni_ia4cls; /* Inet4Address */ -extern jmethodID ni_ia4Ctor; /* Inet4Address() */ - -extern jclass ni_ia6cls; /* Inet6Address */ -extern jmethodID ni_ia6ctrID; /* Inet6Address() */ -extern jfieldID ni_ia6ipaddressID; -extern jfieldID ni_ia6ipaddressID; - extern jclass ni_ibcls; /* InterfaceAddress */ extern jmethodID ni_ibctrID; /* InterfaceAddress() */ extern jfieldID ni_ibaddressID; /* InterfaceAddress.address */ diff --git a/jdk/src/windows/native/java/net/NetworkInterface_winXP.c b/jdk/src/windows/native/java/net/NetworkInterface_winXP.c index 7e3e79d1f49..4d29e7f799d 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface_winXP.c +++ b/jdk/src/windows/native/java/net/NetworkInterface_winXP.c @@ -504,7 +504,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs) } } - addrArr = (*env)->NewObjectArray(env, netaddrCount, ni_iacls, NULL); + addrArr = (*env)->NewObjectArray(env, netaddrCount, ia_class, NULL); if (addrArr == NULL) { return NULL; } @@ -522,7 +522,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs) jobject iaObj, ia2Obj; jobject ibObj = NULL; if (addrs->addr.him.sa_family == AF_INET) { - iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (iaObj == NULL) { return NULL; } @@ -536,7 +536,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs) return NULL; } (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); - ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); + ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (ia2Obj == NULL) { free_netaddr(netaddrP); return NULL; @@ -547,7 +547,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs) (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); } else /* AF_INET6 */ { int scope; - iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (iaObj) { int ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr)); if (ret == JNI_FALSE) { diff --git a/jdk/src/windows/native/java/net/net_util_md.c b/jdk/src/windows/native/java/net/net_util_md.c index 6ddb2bcfd78..1cacb57386b 100644 --- a/jdk/src/windows/native/java/net/net_util_md.c +++ b/jdk/src/windows/native/java/net/net_util_md.c @@ -125,8 +125,8 @@ DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) return TRUE; } -void initLocalAddrTable () {} -void parseExclusiveBindProperty (JNIEnv *env) {} +void platformInit() {} +void parseExclusiveBindProperty(JNIEnv *env) {} /* * Since winsock doesn't have the equivalent of strerror(errno) diff --git a/jdk/src/windows/native/sun/management/OperatingSystemImpl.c b/jdk/src/windows/native/sun/management/OperatingSystemImpl.c index c684e2bd81c..260f9f695b4 100644 --- a/jdk/src/windows/native/sun/management/OperatingSystemImpl.c +++ b/jdk/src/windows/native/sun/management/OperatingSystemImpl.c @@ -77,7 +77,7 @@ static HANDLE main_process; int perfiInit(void); JNIEXPORT void JNICALL -Java_sun_management_OperatingSystemImpl_initialize +Java_sun_management_OperatingSystemImpl_initialize0 (JNIEnv *env, jclass cls) { main_process = GetCurrentProcess(); @@ -97,7 +97,7 @@ Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize0 } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize +Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize0 (JNIEnv *env, jobject mbean) { MEMORYSTATUSEX ms; @@ -107,7 +107,7 @@ Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize +Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize0 (JNIEnv *env, jobject mbean) { MEMORYSTATUSEX ms; @@ -117,7 +117,7 @@ Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuTime +Java_sun_management_OperatingSystemImpl_getProcessCpuTime0 (JNIEnv *env, jobject mbean) { @@ -136,7 +136,7 @@ Java_sun_management_OperatingSystemImpl_getProcessCpuTime } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize +Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize0 (JNIEnv *env, jobject mbean) { MEMORYSTATUSEX ms; @@ -146,7 +146,7 @@ Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize +Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize0 (JNIEnv *env, jobject mbean) { MEMORYSTATUSEX ms; @@ -927,14 +927,14 @@ perfInit(void) { } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getSystemCpuLoad +Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0 (JNIEnv *env, jobject dummy) { return perfGetCPULoad(-1); } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuLoad +Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0 (JNIEnv *env, jobject dummy) { return perfGetProcessLoad(); diff --git a/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c b/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c index ab46f8d7faa..ecc96a1d8bb 100644 --- a/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c @@ -45,18 +45,28 @@ JNIEXPORT void JNICALL Java_sun_nio_ch_DatagramChannelImpl_initIDs(JNIEnv *env, jclass clazz) { clazz = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(clazz); isa_class = (*env)->NewGlobalRef(env, clazz); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, clazz, "", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); clazz = (*env)->FindClass(env, "sun/nio/ch/DatagramChannelImpl"); + CHECK_NULL(clazz); dci_senderID = (*env)->GetFieldID(env, clazz, "sender", "Ljava/net/SocketAddress;"); + CHECK_NULL(dci_senderID); dci_senderAddrID = (*env)->GetFieldID(env, clazz, "cachedSenderInetAddress", "Ljava/net/InetAddress;"); + CHECK_NULL(dci_senderAddrID); dci_senderPortID = (*env)->GetFieldID(env, clazz, "cachedSenderPort", "I"); + CHECK_NULL(dci_senderPortID); } /* @@ -185,17 +195,11 @@ Java_sun_nio_ch_DatagramChannelImpl_receive0(JNIEnv *env, jobject this, if (senderAddr == NULL) { jobject isa = NULL; int port; - jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, - &port); - + jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port); if (ia != NULL) { isa = (*env)->NewObject(env, isa_class, isa_ctorID, ia, port); } - - if (isa == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return IOS_THROWN; - } + CHECK_NULL_RETURN(isa, IOS_THROWN); // update cachedSenderInetAddress/cachedSenderPort (*env)->SetObjectField(env, this, dci_senderAddrID, ia); diff --git a/jdk/src/windows/native/sun/nio/ch/FileKey.c b/jdk/src/windows/native/sun/nio/ch/FileKey.c index e095296abeb..65306d1d639 100644 --- a/jdk/src/windows/native/sun/nio/ch/FileKey.c +++ b/jdk/src/windows/native/sun/nio/ch/FileKey.c @@ -38,9 +38,9 @@ static jfieldID key_indexLow; /* id for FileKey.nFileIndexLow */ JNIEXPORT void JNICALL Java_sun_nio_ch_FileKey_initIDs(JNIEnv *env, jclass clazz) { - key_volumeSN = (*env)->GetFieldID(env, clazz, "dwVolumeSerialNumber", "J"); - key_indexHigh = (*env)->GetFieldID(env, clazz, "nFileIndexHigh", "J"); - key_indexLow = (*env)->GetFieldID(env, clazz, "nFileIndexLow", "J"); + CHECK_NULL(key_volumeSN = (*env)->GetFieldID(env, clazz, "dwVolumeSerialNumber", "J")); + CHECK_NULL(key_indexHigh = (*env)->GetFieldID(env, clazz, "nFileIndexHigh", "J")); + CHECK_NULL(key_indexLow = (*env)->GetFieldID(env, clazz, "nFileIndexLow", "J")); } diff --git a/jdk/src/windows/native/sun/nio/ch/IOUtil.c b/jdk/src/windows/native/sun/nio/ch/IOUtil.c index 10c72e4682f..49de1eb89d7 100644 --- a/jdk/src/windows/native/sun/nio/ch/IOUtil.c +++ b/jdk/src/windows/native/sun/nio/ch/IOUtil.c @@ -33,6 +33,7 @@ #include "nio.h" #include "nio_util.h" +#include "net_util.h" #include "sun_nio_ch_IOUtil.h" /* field id for jlong 'handle' in java.io.FileDescriptor used for file fds */ @@ -52,9 +53,10 @@ Java_sun_security_provider_NativeSeedGenerator_nativeGenerateSeed JNIEXPORT void JNICALL Java_sun_nio_ch_IOUtil_initIDs(JNIEnv *env, jclass clazz) { - clazz = (*env)->FindClass(env, "java/io/FileDescriptor"); - fd_fdID = (*env)->GetFieldID(env, clazz, "fd", "I"); - handle_fdID = (*env)->GetFieldID(env, clazz, "handle", "J"); + CHECK_NULL(clazz = (*env)->FindClass(env, "java/io/FileDescriptor")); + CHECK_NULL(fd_fdID = (*env)->GetFieldID(env, clazz, "fd", "I")); + CHECK_NULL(handle_fdID = (*env)->GetFieldID(env, clazz, "handle", "J")); + initInetAddressIDs(env); } /************************************************************** diff --git a/jdk/src/windows/native/sun/nio/ch/Iocp.c b/jdk/src/windows/native/sun/nio/ch/Iocp.c index 8f87a8937f7..f9556234075 100644 --- a/jdk/src/windows/native/sun/nio/ch/Iocp.c +++ b/jdk/src/windows/native/sun/nio/ch/Iocp.c @@ -46,16 +46,15 @@ Java_sun_nio_ch_Iocp_initIDs(JNIEnv* env, jclass this) jclass clazz; clazz = (*env)->FindClass(env, "sun/nio/ch/Iocp$CompletionStatus"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); completionStatus_error = (*env)->GetFieldID(env, clazz, "error", "I"); - if (completionStatus_error == NULL) return; + CHECK_NULL(completionStatus_error); completionStatus_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I"); - if (completionStatus_bytesTransferred == NULL) return; + CHECK_NULL(completionStatus_bytesTransferred); completionStatus_completionKey = (*env)->GetFieldID(env, clazz, "completionKey", "I"); - if (completionStatus_completionKey == NULL) return; + CHECK_NULL(completionStatus_completionKey); completionStatus_overlapped = (*env)->GetFieldID(env, clazz, "overlapped", "J"); + CHECK_NULL(completionStatus_overlapped); } JNIEXPORT jint JNICALL diff --git a/jdk/src/windows/native/sun/nio/ch/Net.c b/jdk/src/windows/native/sun/nio/ch/Net.c index 733405e6f80..acaa50d2b5e 100644 --- a/jdk/src/windows/native/sun/nio/ch/Net.c +++ b/jdk/src/windows/native/sun/nio/ch/Net.c @@ -554,11 +554,11 @@ Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlo FD_ZERO(&rd); FD_ZERO(&wr); FD_ZERO(&ex); - if (events & sun_nio_ch_PollArrayWrapper_POLLIN) { + if (events & POLLIN) { FD_SET(fd, &rd); } - if (events & sun_nio_ch_PollArrayWrapper_POLLOUT || - events & sun_nio_ch_PollArrayWrapper_POLLCONN) { + if (events & POLLOUT || + events & POLLCONN) { FD_SET(fd, &wr); } FD_SET(fd, &ex); @@ -572,14 +572,50 @@ Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlo } else if (rv >= 0) { rv = 0; if (FD_ISSET(fd, &rd)) { - rv |= sun_nio_ch_PollArrayWrapper_POLLIN; + rv |= POLLIN; } if (FD_ISSET(fd, &wr)) { - rv |= sun_nio_ch_PollArrayWrapper_POLLOUT; + rv |= POLLOUT; } if (FD_ISSET(fd, &ex)) { - rv |= sun_nio_ch_PollArrayWrapper_POLLERR; + rv |= POLLERR; } } return rv; } + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollinValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLIN; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_polloutValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLOUT; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollerrValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLERR; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollhupValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLHUP; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollnvalValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLNVAL; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollconnValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLCONN; +} diff --git a/jdk/src/windows/native/sun/nio/ch/ServerSocketChannelImpl.c b/jdk/src/windows/native/sun/nio/ch/ServerSocketChannelImpl.c index 2af833c2eb7..30d6d641645 100644 --- a/jdk/src/windows/native/sun/nio/ch/ServerSocketChannelImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/ServerSocketChannelImpl.c @@ -56,12 +56,20 @@ JNIEXPORT void JNICALL Java_sun_nio_ch_ServerSocketChannelImpl_initIDs(JNIEnv *env, jclass cls) { cls = (*env)->FindClass(env, "java/io/FileDescriptor"); + CHECK_NULL(cls); fd_fdID = (*env)->GetFieldID(env, cls, "fd", "I"); + CHECK_NULL(fd_fdID); cls = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(cls); isa_class = (*env)->NewGlobalRef(env, cls); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, cls, "", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); } JNIEXPORT void JNICALL @@ -99,10 +107,10 @@ Java_sun_nio_ch_ServerSocketChannelImpl_accept0(JNIEnv *env, jobject this, (*env)->SetIntField(env, newfdo, fd_fdID, newfd); remote_ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, (int *)&remote_port); + CHECK_NULL_RETURN(remote_ia, IOS_THROWN); - isa = (*env)->NewObject(env, isa_class, isa_ctorID, - remote_ia, remote_port); + isa = (*env)->NewObject(env, isa_class, isa_ctorID, remote_ia, remote_port); + CHECK_NULL_RETURN(isa, IOS_THROWN); (*env)->SetObjectArrayElement(env, isaa, 0, isa); - return 1; } diff --git a/jdk/src/windows/native/sun/nio/ch/SocketChannelImpl.c b/jdk/src/windows/native/sun/nio/ch/SocketChannelImpl.c index be50fd69439..5f9fc5000e1 100644 --- a/jdk/src/windows/native/sun/nio/ch/SocketChannelImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/SocketChannelImpl.c @@ -42,8 +42,8 @@ static jfieldID ia_addrID; /* java.net.InetAddress.address */ JNIEXPORT void JNICALL Java_sun_nio_ch_SocketChannelImpl_initIDs(JNIEnv *env, jclass cls) { - cls = (*env)->FindClass(env, "java/net/InetAddress"); - ia_addrID = (*env)->GetFieldID(env, cls, "address", "I"); + CHECK_NULL(cls = (*env)->FindClass(env, "java/net/InetAddress")); + CHECK_NULL(ia_addrID = (*env)->GetFieldID(env, cls, "address", "I")); } jint diff --git a/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c b/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c index aa10877c42b..7d5e1e77875 100644 --- a/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c @@ -33,13 +33,15 @@ #define FD_SETSIZE 1024 #include +#include + #include "jvm.h" #include "jni.h" #include "jni_util.h" #include "sun_nio_ch_WindowsSelectorImpl.h" #include "sun_nio_ch_PollArrayWrapper.h" -#include "winsock2.h" +#include "nio_util.h" /* Needed for POLL* constants (includes "winsock2.h") */ typedef struct { jint fd; @@ -79,12 +81,11 @@ Java_sun_nio_ch_WindowsSelectorImpl_00024SubSelector_poll0(JNIEnv *env, jobject /* Set FD_SET structures required for select */ for (i = 0; i < numfds; i++) { - if (fds[i].events & sun_nio_ch_PollArrayWrapper_POLLIN) { + if (fds[i].events & POLLIN) { readfds.fd_array[read_count] = fds[i].fd; read_count++; } - if (fds[i].events & (sun_nio_ch_PollArrayWrapper_POLLOUT | - sun_nio_ch_PollArrayWrapper_POLLCONN)) + if (fds[i].events & (POLLOUT | POLLCONN)) { writefds.fd_array[write_count] = fds[i].fd; write_count++; @@ -110,12 +111,11 @@ Java_sun_nio_ch_WindowsSelectorImpl_00024SubSelector_poll0(JNIEnv *env, jobject /* prepare select structures for the i-th socket */ errreadfds.fd_count = 0; errwritefds.fd_count = 0; - if (fds[i].events & sun_nio_ch_PollArrayWrapper_POLLIN) { + if (fds[i].events & POLLIN) { errreadfds.fd_array[0] = fds[i].fd; errreadfds.fd_count = 1; } - if (fds[i].events & (sun_nio_ch_PollArrayWrapper_POLLOUT | - sun_nio_ch_PollArrayWrapper_POLLCONN)) + if (fds[i].events & (POLLOUT | POLLCONN)) { errwritefds.fd_array[0] = fds[i].fd; errwritefds.fd_count = 1; diff --git a/jdk/src/windows/native/sun/nio/ch/nio_util.h b/jdk/src/windows/native/sun/nio/ch/nio_util.h index cf2df5363b7..1d463241c25 100644 --- a/jdk/src/windows/native/sun/nio/ch/nio_util.h +++ b/jdk/src/windows/native/sun/nio/ch/nio_util.h @@ -23,6 +23,8 @@ * questions. */ +#include + #include "jni.h" /** @@ -55,3 +57,19 @@ struct iovec { }; #endif + +#ifndef POLLIN + /* WSAPoll()/WSAPOLLFD and the corresponding constants are only defined */ + /* in Windows Vista / Windows Server 2008 and later. If we are on an */ + /* older release we just use the Solaris constants as this was previously */ + /* done in PollArrayWrapper.java. */ + #define POLLIN 0x0001 + #define POLLOUT 0x0004 + #define POLLERR 0x0008 + #define POLLHUP 0x0010 + #define POLLNVAL 0x0020 + #define POLLCONN 0x0002 +#else + /* POLLCONN must not equal any of the other constants (see winsock2.h). */ + #define POLLCONN 0x2000 +#endif diff --git a/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c b/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c index 62d8a892b05..3b981f3760b 100644 --- a/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c +++ b/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c @@ -111,65 +111,70 @@ Java_sun_nio_fs_WindowsNativeDispatcher_initIDs(JNIEnv* env, jclass this) HMODULE h; clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$FirstFile"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); findFirst_handle = (*env)->GetFieldID(env, clazz, "handle", "J"); + CHECK_NULL(findFirst_handle); findFirst_name = (*env)->GetFieldID(env, clazz, "name", "Ljava/lang/String;"); + CHECK_NULL(findFirst_name); findFirst_attributes = (*env)->GetFieldID(env, clazz, "attributes", "I"); + CHECK_NULL(findFirst_attributes); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$FirstStream"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); findStream_handle = (*env)->GetFieldID(env, clazz, "handle", "J"); + CHECK_NULL(findStream_handle); findStream_name = (*env)->GetFieldID(env, clazz, "name", "Ljava/lang/String;"); + CHECK_NULL(findStream_name); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$VolumeInformation"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); volumeInfo_fsName = (*env)->GetFieldID(env, clazz, "fileSystemName", "Ljava/lang/String;"); + CHECK_NULL(volumeInfo_fsName); volumeInfo_volName = (*env)->GetFieldID(env, clazz, "volumeName", "Ljava/lang/String;"); + CHECK_NULL(volumeInfo_volName); volumeInfo_volSN = (*env)->GetFieldID(env, clazz, "volumeSerialNumber", "I"); + CHECK_NULL(volumeInfo_volSN); volumeInfo_flags = (*env)->GetFieldID(env, clazz, "flags", "I"); + CHECK_NULL(volumeInfo_flags); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$DiskFreeSpace"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); diskSpace_bytesAvailable = (*env)->GetFieldID(env, clazz, "freeBytesAvailable", "J"); + CHECK_NULL(diskSpace_bytesAvailable); diskSpace_totalBytes = (*env)->GetFieldID(env, clazz, "totalNumberOfBytes", "J"); + CHECK_NULL(diskSpace_totalBytes); diskSpace_totalFree = (*env)->GetFieldID(env, clazz, "totalNumberOfFreeBytes", "J"); + CHECK_NULL(diskSpace_totalFree); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$Account"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); account_domain = (*env)->GetFieldID(env, clazz, "domain", "Ljava/lang/String;"); + CHECK_NULL(account_domain); account_name = (*env)->GetFieldID(env, clazz, "name", "Ljava/lang/String;"); + CHECK_NULL(account_name); account_use = (*env)->GetFieldID(env, clazz, "use", "I"); + CHECK_NULL(account_use); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$AclInformation"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); aclInfo_aceCount = (*env)->GetFieldID(env, clazz, "aceCount", "I"); + CHECK_NULL(aclInfo_aceCount); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$CompletionStatus"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); completionStatus_error = (*env)->GetFieldID(env, clazz, "error", "I"); + CHECK_NULL(completionStatus_error); completionStatus_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I"); + CHECK_NULL(completionStatus_bytesTransferred); completionStatus_completionKey = (*env)->GetFieldID(env, clazz, "completionKey", "J"); + CHECK_NULL(completionStatus_completionKey); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$BackupResult"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); backupResult_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I"); + CHECK_NULL(backupResult_bytesTransferred); backupResult_context = (*env)->GetFieldID(env, clazz, "context", "J"); + CHECK_NULL(backupResult_context); // get handle to kernel32 if (GetModuleHandleExW((GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | diff --git a/jdk/test/ProblemList.txt b/jdk/test/ProblemList.txt index 2a90ff98b67..8126fbf8d3b 100644 --- a/jdk/test/ProblemList.txt +++ b/jdk/test/ProblemList.txt @@ -41,11 +41,11 @@ # # List items are testnames followed by labels, all MUST BE commented # as to why they are here and use a label: -# generic-all Problems on all platforms -# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, etc. -# OSNAME-all Where OSNAME is one of: solaris, linux, windows, macosx -# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. solaris-amd64 -# OSNAME-REV Specific on to one OSNAME and REV, e.g. solaris-5.8 +# generic-all Problems on all platforms +# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, etc. +# OSNAME-all Where OSNAME is one of: solaris, linux, windows, macosx, aix +# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. solaris-amd64 +# OSNAME-REV Specific on to one OSNAME and REV, e.g. solaris-5.8 # # More than one label is allowed but must be on the same line. # @@ -134,6 +134,11 @@ sun/management/jmxremote/bootstrap/RmiSslBootstrapTest.sh windows-all # jdk_jmx +# 8030957 +com/sun/management/OperatingSystemMXBean/GetProcessCpuLoad.java aix-all +com/sun/management/OperatingSystemMXBean/GetSystemCpuLoad.java aix-all +javax/management/MBeanServer/OldMBeanServerTest.java aix-all + ############################################################################ # jdk_math @@ -173,11 +178,6 @@ java/net/DatagramSocket/SendDatagramToBadAddress.java macosx-all # 6963118 java/nio/channels/Selector/Wakeup.java windows-all -# 7133499, 7133497 -java/nio/channels/AsyncCloseAndInterrupt.java macosx-all -java/nio/channels/AsynchronousFileChannel/Lock.java macosx-all -java/nio/channels/FileChannel/Transfer.java macosx-all - # 7141822 java/nio/channels/DatagramChannel/ChangingAddress.java macosx-all diff --git a/jdk/test/TEST.ROOT b/jdk/test/TEST.ROOT index 0aba9d3bc72..e6cb16998ed 100644 --- a/jdk/test/TEST.ROOT +++ b/jdk/test/TEST.ROOT @@ -5,7 +5,7 @@ keys=2d dnd i18n # Tests that must run in othervm mode -othervm.dirs=java/awt java/beans java/rmi javax/accessibility javax/imageio javax/sound javax/print javax/management com/sun/awt sun/awt sun/java2d sun/pisces sun/rmi +othervm.dirs=java/awt java/beans javax/accessibility javax/imageio javax/sound javax/print javax/management com/sun/awt sun/awt sun/java2d sun/pisces # Tests that cannot run concurrently exclusiveAccess.dirs=java/rmi/Naming java/util/Currency java/util/prefs sun/management/jmxremote sun/tools/jstatd sun/security/mscapi diff --git a/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh b/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh index 983608cb560..7e057e72c38 100644 --- a/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh +++ b/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh @@ -48,7 +48,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/com/sun/corba/cachedSocket/7056731.sh b/jdk/test/com/sun/corba/cachedSocket/7056731.sh index 5244b9a70a5..3b58ad6e632 100644 --- a/jdk/test/com/sun/corba/cachedSocket/7056731.sh +++ b/jdk/test/com/sun/corba/cachedSocket/7056731.sh @@ -31,7 +31,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java b/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java index e616daadde4..35e55f09174 100644 --- a/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java +++ b/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java @@ -25,7 +25,7 @@ * @bug 8016551 * @summary JMenuItem in WindowsLookAndFeel can't paint default icons * @author Leonid Romanov - * @run main bug8016551 + * @run main/othervm bug8016551 */ import javax.swing.*; diff --git a/jdk/test/com/sun/jdi/ImmutableResourceTest.sh b/jdk/test/com/sun/jdi/ImmutableResourceTest.sh index fa312adad74..29c72ed6254 100644 --- a/jdk/test/com/sun/jdi/ImmutableResourceTest.sh +++ b/jdk/test/com/sun/jdi/ImmutableResourceTest.sh @@ -56,7 +56,7 @@ pass() OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PATHSEP=":" ;; diff --git a/jdk/test/com/sun/jdi/JITDebug.sh b/jdk/test/com/sun/jdi/JITDebug.sh index 0ec359799a6..c647e1153b5 100644 --- a/jdk/test/com/sun/jdi/JITDebug.sh +++ b/jdk/test/com/sun/jdi/JITDebug.sh @@ -63,7 +63,7 @@ pass() OS=`uname -s` export TRANSPORT_METHOD case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PATHSEP=":" TRANSPORT_METHOD=dt_socket ;; diff --git a/jdk/test/com/sun/jdi/JdbReadTwiceTest.sh b/jdk/test/com/sun/jdi/JdbReadTwiceTest.sh index 58be020422b..6f3cb193743 100644 --- a/jdk/test/com/sun/jdi/JdbReadTwiceTest.sh +++ b/jdk/test/com/sun/jdi/JdbReadTwiceTest.sh @@ -213,10 +213,17 @@ if [ ! -r c:/ ] ; then # If the file exists, we try to read it. The # read will fail. mkFiles $HOME/jdb.ini - chmod a-r $HOME/jdb.ini - doit - failIfNot 1 "open: $HOME/jdb.ini" - clean + id > $HOME/jdb.ini + chmod a-r $HOME/jdb.ini + if grep -q "uid=" $HOME/jdb.ini ; then + echo "Unable to make file unreadable, so test will fail. chmod: $HOME/jdb.ini" + if grep -q "uid=0" $HOME/jdb.ini ; then + echo "The test is running as root. Fix infrastructure!" + fi + fi + doit + failIfNot 1 "open: $HOME/jdb.ini" + clean fi diff --git a/jdk/test/com/sun/jdi/PrivateTransportTest.sh b/jdk/test/com/sun/jdi/PrivateTransportTest.sh index 32677db795b..ee8051f46ee 100644 --- a/jdk/test/com/sun/jdi/PrivateTransportTest.sh +++ b/jdk/test/com/sun/jdi/PrivateTransportTest.sh @@ -102,7 +102,7 @@ libdir=${TESTCLASSES} is_windows=false is_cygwin=false case `uname -s` in - SunOS|Linux) + SunOS|Linux|AIX) xx=`find ${jreloc}/lib -name libdt_socket.so` libloc=`dirname ${xx}` ;; @@ -161,13 +161,23 @@ elif [ -f ${libloc}/libdt_socket.so ] ; then echo cp ${libloc}/libdt_socket.so ${fullpath} cp ${libloc}/libdt_socket.so ${fullpath} # make sure we can find libraries in current directory - if [ "${LD_LIBRARY_PATH}" = "" ] ; then - LD_LIBRARY_PATH=${libdir} + if [ "$os" = "AIX" ] ; then + if [ "${LIBPATH}" = "" ] ; then + LIBPATH=${libdir} + else + LIBPATH=${LIBPATH}:${libdir} + fi + export LIBPATH + echo LIBPATH=${LIBPATH} else - LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir} + if [ "${LD_LIBRARY_PATH}" = "" ] ; then + LD_LIBRARY_PATH=${libdir} + else + LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir} + fi + export LD_LIBRARY_PATH + echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH} fi - export LD_LIBRARY_PATH - echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH} else echo "cannot find dt_socket in ${libloc} for ${private_transport}" fail "cannot find dt_socket in ${libloc} for ${private_transport}" diff --git a/jdk/test/com/sun/jdi/ProcessAttachTest.sh b/jdk/test/com/sun/jdi/ProcessAttachTest.sh index 10b5d503154..739b53abb10 100644 --- a/jdk/test/com/sun/jdi/ProcessAttachTest.sh +++ b/jdk/test/com/sun/jdi/ProcessAttachTest.sh @@ -29,7 +29,7 @@ # @summary Unit test for ProcessAttachingConnector # # @build ProcessAttachDebugger ProcessAttachDebuggee ShutdownDebuggee -# @run shell ProcessAttachTest.sh +# @run shell/timeout=120 ProcessAttachTest.sh if [ "${TESTJAVA}" = "" ] then @@ -69,8 +69,8 @@ esac startDebuggee() { - OUTPUTFILE=${TESTCLASSES}/Debuggee.out - ${JAVA} "$@" > ${OUTPUTFILE} & + rm -f ${OUTPUTFILE} + ${JAVA} "$@" > ${OUTPUTFILE} 2>&1 & startpid="$!" pid="${startpid}" @@ -87,17 +87,17 @@ startDebuggee() # "java" process. if [ "$OS" = "Windows" ]; then sleep 2 - pid=`ps -o pid,ppid,comm|grep ${startpid}|grep "java"|cut -c1-6` + pid=`ps -o pid,ppid,comm | awk '/${startpid}.+java/{ print $1 }'` fi echo "Waiting for Debuggee to initialize..." attempts=0 while true; do - sleep 1 out=`tail -1 ${OUTPUTFILE}` if [ ! -z "$out" ]; then break fi + sleep 1 attempts=`expr $attempts + 1` echo "Waiting $attempts second(s) ..." done @@ -107,9 +107,23 @@ startDebuggee() stopDebuggee() { - $JAVA -classpath "${TESTCLASSES}" ShutdownDebuggee $1 + # We have to make sure the debuggee has written the portfile before + # trying to read it. + + echo "Waiting for port file to be written..." + attempts=0 + while true; do + attempts=`expr $attempts + 1` + if [ -f ${PORTFILE} ]; then + break + fi + sleep 1 + echo "Waiting $attempts second(s) ..." + done + + $JAVA -classpath "${TESTCLASSES}" ShutdownDebuggee $1 2>&1 if [ $? != 0 ] ; then - echo "Error: ShutdownDebuggee failed" + echo "Error: ShutdownDebuggee failed: $?" failures=`expr $failures + 1` kill -9 ${startpid} fi @@ -120,7 +134,8 @@ failures=0 ######################################################### echo "Test 1: Debuggee start with suspend=n" -PORTFILE="${TESTCLASSES}"/shutdown1.port +PORTFILE=shutdown1.port +OUTPUTFILE=Debuggee1.out DEBUGGEEFLAGS= if [ -r $TESTCLASSES/@debuggeeVMOptions ] ; then @@ -136,17 +151,27 @@ startDebuggee \ $JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \ ProcessAttachDebugger $pid 2>&1 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi + +if [ $? != 0 ]; then + echo "Error: ProcessAttachDebugger failed: $?" + failures=`expr $failures + 1` +fi # Note that when the debugger disconnects, the debuggee picks another # port and outputs another 'Listening for transport ... ' msg. stopDebuggee "${PORTFILE}" +echo "${OUTPUTFILE}:" +cat $OUTPUTFILE +echo "-----" + ######################################################### echo "\nTest 2: Debuggee start with suspend=y" -PORTFILE="${TESTCLASSES}"/shutdown2.port +PORTFILE=shutdown2.port +OUTPUTFILE=Debuggee2.out + startDebuggee \ $DEBUGGEEFLAGS \ -agentlib:jdwp=transport=dt_socket,server=y,suspend=y \ @@ -155,27 +180,20 @@ startDebuggee \ $JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \ ProcessAttachDebugger $pid 2>&1 -# The debuggee is suspended and doesn't run until the debugger -# disconnects. We have to give it time to write the port number -# to ${PORTFILE} +if [ $? != 0 ]; then + echo "Error: ProcessAttachDebugger failed: $?" + failures=`expr $failures + 1` +fi -echo "Waiting for port file to be written..." -attempts=0 -while true; do - sleep 1 - attempts=`expr $attempts + 1` - if [ -f ${PORTFILE} ]; then - break - fi - echo "Waiting $attempts second(s) ..." -done - -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi stopDebuggee "${PORTFILE}" +echo $OUTPUTFILE : +cat $OUTPUTFILE +echo ----- + ### if [ $failures = 0 ]; then echo "All tests passed."; - else echo "$failures test(s) failed:"; cat ${OUTPUTFILE}; + else echo "$failures test(s) failed." fi exit $failures diff --git a/jdk/test/com/sun/jdi/ShellScaffold.sh b/jdk/test/com/sun/jdi/ShellScaffold.sh index 6ed55c1ae91..7bc063d44eb 100644 --- a/jdk/test/com/sun/jdi/ShellScaffold.sh +++ b/jdk/test/com/sun/jdi/ShellScaffold.sh @@ -199,6 +199,8 @@ findPid() if [ "$osname" = SunOS ] ; then # Solaris and OpenSolaris use pgrep and not ps in psCmd findPidCmd="$psCmd" + elif [ "$osname" = AIX ] ; then + findPidCmd="$psCmd" else # Never use plain 'ps', which requires a "controlling terminal" # and will fail with a "ps: no controlling terminal" error. @@ -293,7 +295,7 @@ EOF psCmd=ps jstack=jstack.exe ;; - SunOS | Linux | Darwin) + SunOS | Linux | Darwin | AIX) transport=dt_socket address= devnull=/dev/null diff --git a/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh b/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh index 6222c80bd14..2b104822b17 100644 --- a/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh +++ b/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh @@ -45,7 +45,7 @@ fi OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN*) diff --git a/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh b/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh index 148041c2825..f772c25245f 100644 --- a/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh +++ b/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh @@ -102,6 +102,14 @@ case "$OS" in TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` ;; + AIX ) + VAR="A different value for AIX" + DEFAULT_JDK=/ + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + # catch all other OSs * ) echo "Unrecognized system! $OS" diff --git a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh index ccbea0c7ed0..d8880392570 100644 --- a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh +++ b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh @@ -135,6 +135,14 @@ case "$OS" in TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` ;; + AIX ) + VAR="A different value for AIX" + DEFAULT_JDK=/ + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + # catch all other OSs * ) echo "Unrecognized system! $OS" diff --git a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh b/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh index deda2826115..f37159d6899 100644 --- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh +++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh @@ -45,7 +45,7 @@ OS=`uname -s` # Need to determine the classpath separator and filepath separator based on the # operating system. case "$OS" in -SunOS | Linux | Darwin ) +SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; diff --git a/jdk/test/java/io/Serializable/serialver/classpath/run.sh b/jdk/test/java/io/Serializable/serialver/classpath/run.sh index 8c6b9f3d0be..2aa1b0e92ea 100644 --- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh +++ b/jdk/test/java/io/Serializable/serialver/classpath/run.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; diff --git a/jdk/test/java/io/Serializable/serialver/nested/run.sh b/jdk/test/java/io/Serializable/serialver/nested/run.sh index 765d2d41c41..578e74afc51 100644 --- a/jdk/test/java/io/Serializable/serialver/nested/run.sh +++ b/jdk/test/java/io/Serializable/serialver/nested/run.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; diff --git a/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh b/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh index 24b129aecbc..c86a4c00f73 100644 --- a/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh +++ b/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh @@ -58,6 +58,9 @@ case "$OS" in Darwin ) FS="/" ;; + AIX ) + FS="/" + ;; Windows*) FS="\\" ;; diff --git a/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh index 6d5aabb0728..49abefef8b4 100644 --- a/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh +++ b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh @@ -63,6 +63,9 @@ case "$OS" in Darwin ) FS="/" ;; + AIX ) + FS="/" + ;; Windows* | CYGWIN* ) FS="\\" ;; diff --git a/jdk/test/java/lang/ClassLoader/getResource/GetResource.java b/jdk/test/java/lang/ClassLoader/getResource/GetResource.java new file mode 100644 index 00000000000..1eb62d0bf24 --- /dev/null +++ b/jdk/test/java/lang/ClassLoader/getResource/GetResource.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.net.URL; + +public class GetResource { + private static final String RESOURCE_NAME = "test.properties"; + public static void main(String[] args) { + String expect = args[0] + "/" + RESOURCE_NAME; + URL url = GetResource.class.getResource(RESOURCE_NAME); + System.out.println("getResource found: " + url); + if (!url.toString().endsWith(expect)) { + throw new RuntimeException(url + " != expected resource " + expect); + } + + url = ClassLoader.getSystemResource(RESOURCE_NAME); + System.out.println("getSystemResource found: " + url); + if (!url.toString().endsWith(expect)) { + throw new RuntimeException(url + " != expected resource " + expect); + } + } +} diff --git a/jdk/test/java/lang/ClassLoader/getResource/GetResource.sh b/jdk/test/java/lang/ClassLoader/getResource/GetResource.sh new file mode 100644 index 00000000000..2f178cd20b8 --- /dev/null +++ b/jdk/test/java/lang/ClassLoader/getResource/GetResource.sh @@ -0,0 +1,124 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @bug 6760902 +# @summary Empty path on bootclasspath is not default to current working +# directory for both class lookup and resource lookup whereas +# empty path on classpath is default to current working directory. +# +# @run shell GetResource.sh + +if [ "${TESTSRC}" = "" ] ; then + TESTSRC=`pwd` +fi +if [ "${TESTCLASSES}" = "" ] ; then + TESTCLASSES=`pwd` +fi + +if [ "${TESTJAVA}" = "" ] ; then + echo "TESTJAVA not set. Test cannot execute." + echo "FAILED!!!" + exit 1 +fi + +if [ "${COMPILEJAVA}" = "" ] ; then + COMPILEJAVA="${TESTJAVA}" +fi + +# set platform-specific variables +OS=`uname -s` +case "$OS" in + Windows*) + PS=";" + ;; + CYGWIN* ) + PS=";" + TESTCLASSES=`/usr/bin/cygpath -a -s -m ${TESTCLASSES}` + ;; + * ) + PS=":" + ;; +esac + +echo TESTSRC=${TESTSRC} +echo TESTCLASSES=${TESTCLASSES} +echo TESTJAVA=${TESTJAVA} +echo "" + +${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \ + -d ${TESTCLASSES} \ + ${TESTSRC}/GetResource.java || exit 10 + +setup() { + dest=${TESTCLASSES}/$1 + rm -rf $dest + mkdir $dest + cp ${TESTSRC}/test.properties $dest + cp ${TESTCLASSES}/GetResource.class $dest +} + + +count=0 +runTest() { + expected=$1; + vmoption=$2; shift; shift + count=`expr $count+1` + echo "Test $count : $vmoption $@" + ${TESTJAVA}/bin/java ${TESTVMOPTS} "$vmoption" $@ \ + GetResource $expected || exit $count +} + +# run test +setup "a" +setup "b" + +cd ${TESTCLASSES} +DIR=`pwd` + +# Expected -Xbootclasspath +# Location or -classpath +runTest "a" "-Xbootclasspath/p:a" +runTest "a" "-Xbootclasspath/p:a${PS}b" +runTest "b" "-Xbootclasspath/p:b" +runTest "b" "-Xbootclasspath/p:b${PS}a" +runTest "a" -cp a +runTest "a" -cp "a${PS}b" +runTest "b" -cp b +runTest "b" -cp "b${PS}a" + +cd ${DIR}/a + +runTest "a" "-Xbootclasspath/p:." +runTest "b" "-Xbootclasspath/p:../b" + +# no -classpath +runTest "a" -cp "${PS}" +runTest "b" -cp "../b" + +# Test empty path in bootclasspath not default to current working directory +runTest "b" "-Xbootclasspath/p:${PS}../b" + +# Test empty path in classpath default to current working directory +runTest "a" -cp "${PS}../b" + diff --git a/jdk/test/java/lang/ClassLoader/getResource/test.properties b/jdk/test/java/lang/ClassLoader/getResource/test.properties new file mode 100644 index 00000000000..64ec12be2bd --- /dev/null +++ b/jdk/test/java/lang/ClassLoader/getResource/test.properties @@ -0,0 +1 @@ +# empty resource diff --git a/jdk/test/java/lang/Math/HypotTests.java b/jdk/test/java/lang/Math/HypotTests.java index d48a6f938a0..9582c83daf8 100644 --- a/jdk/test/java/lang/Math/HypotTests.java +++ b/jdk/test/java/lang/Math/HypotTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -29,7 +29,6 @@ */ import sun.misc.DoubleConsts; -import sun.misc.FpUtils; public class HypotTests { private HypotTests(){} @@ -127,7 +126,7 @@ public class HypotTests { double d = rand.nextDouble(); // Scale d to have an exponent equal to MAX_EXPONENT -15 d = Math.scalb(d, DoubleConsts.MAX_EXPONENT - -15 - FpUtils.ilogb(d)); + -15 - Tests.ilogb(d)); for(int j = 0; j <= 13; j += 1) { failures += testHypotCase(3*d, 4*d, 5*d, 2.5); d *= 2.0; // increase exponent by 1 diff --git a/jdk/test/java/lang/Math/IeeeRecommendedTests.java b/jdk/test/java/lang/Math/IeeeRecommendedTests.java index f776bbf5b1c..ce4c6595b4b 100644 --- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java +++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -28,7 +28,6 @@ * @author Joseph D. Darcy */ -import sun.misc.FpUtils; import sun.misc.DoubleConsts; import sun.misc.FloatConsts; @@ -708,21 +707,21 @@ public class IeeeRecommendedTests { for(int i = 0; i < testCases.length; i++) { // isNaN - failures+=Tests.test("FpUtils.isNaN(float)", testCases[i], - FpUtils.isNaN(testCases[i]), (i ==0)); + failures+=Tests.test("Float.isNaN(float)", testCases[i], + Float.isNaN(testCases[i]), (i ==0)); // isFinite failures+=Tests.test("Float.isFinite(float)", testCases[i], Float.isFinite(testCases[i]), (i >= 3)); // isInfinite - failures+=Tests.test("FpUtils.isInfinite(float)", testCases[i], - FpUtils.isInfinite(testCases[i]), (i==1 || i==2)); + failures+=Tests.test("Float.isInfinite(float)", testCases[i], + Float.isInfinite(testCases[i]), (i==1 || i==2)); // isUnorderd for(int j = 0; j < testCases.length; j++) { - failures+=Tests.test("FpUtils.isUnordered(float, float)", testCases[i],testCases[j], - FpUtils.isUnordered(testCases[i],testCases[j]), (i==0 || j==0)); + failures+=Tests.test("Tests.isUnordered(float, float)", testCases[i],testCases[j], + Tests.isUnordered(testCases[i],testCases[j]), (i==0 || j==0)); } } @@ -758,21 +757,21 @@ public class IeeeRecommendedTests { for(int i = 0; i < testCases.length; i++) { // isNaN - failures+=Tests.test("FpUtils.isNaN(double)", testCases[i], - FpUtils.isNaN(testCases[i]), (i ==0)); + failures+=Tests.test("Double.isNaN(double)", testCases[i], + Double.isNaN(testCases[i]), (i ==0)); // isFinite failures+=Tests.test("Double.isFinite(double)", testCases[i], Double.isFinite(testCases[i]), (i >= 3)); // isInfinite - failures+=Tests.test("FpUtils.isInfinite(double)", testCases[i], - FpUtils.isInfinite(testCases[i]), (i==1 || i==2)); + failures+=Tests.test("Double.isInfinite(double)", testCases[i], + Double.isInfinite(testCases[i]), (i==1 || i==2)); // isUnorderd for(int j = 0; j < testCases.length; j++) { - failures+=Tests.test("FpUtils.isUnordered(double, double)", testCases[i],testCases[j], - FpUtils.isUnordered(testCases[i],testCases[j]), (i==0 || j==0)); + failures+=Tests.test("Tests.isUnordered(double, double)", testCases[i],testCases[j], + Tests.isUnordered(testCases[i],testCases[j]), (i==0 || j==0)); } } @@ -1023,8 +1022,8 @@ public class IeeeRecommendedTests { 2*FloatConsts.MIN_EXPONENT, // -252 2*FloatConsts.MIN_EXPONENT+1, // -251 - FpUtils.ilogb(Float.MIN_VALUE)-1, // -150 - FpUtils.ilogb(Float.MIN_VALUE), // -149 + FloatConsts.MIN_EXPONENT - FloatConsts.SIGNIFICAND_WIDTH, + FloatConsts.MIN_SUB_EXPONENT, -FloatConsts.MAX_EXPONENT, // -127 FloatConsts.MIN_EXPONENT, // -126 @@ -1100,7 +1099,7 @@ public class IeeeRecommendedTests { failures+=testScalbCase(value, scaleFactor, - (FpUtils.ilogb(value) +j > FloatConsts.MAX_EXPONENT ) ? + (Tests.ilogb(value) +j > FloatConsts.MAX_EXPONENT ) ? Math.copySign(infinityF, value) : // overflow // calculate right answer twoToTheMaxExp*(twoToTheMaxExp*(scale*value)) ); @@ -1230,8 +1229,9 @@ public class IeeeRecommendedTests { 2*DoubleConsts.MIN_EXPONENT, // -2044 2*DoubleConsts.MIN_EXPONENT+1, // -2043 - FpUtils.ilogb(Double.MIN_VALUE)-1, // -1076 - FpUtils.ilogb(Double.MIN_VALUE), // -1075 + DoubleConsts.MIN_EXPONENT, // -1022 + DoubleConsts.MIN_EXPONENT - DoubleConsts.SIGNIFICAND_WIDTH, + DoubleConsts.MIN_SUB_EXPONENT, -DoubleConsts.MAX_EXPONENT, // -1023 DoubleConsts.MIN_EXPONENT, // -1022 @@ -1307,7 +1307,7 @@ public class IeeeRecommendedTests { failures+=testScalbCase(value, scaleFactor, - (FpUtils.ilogb(value) +j > DoubleConsts.MAX_EXPONENT ) ? + (Tests.ilogb(value) +j > DoubleConsts.MAX_EXPONENT ) ? Math.copySign(infinityD, value) : // overflow // calculate right answer twoToTheMaxExp*(twoToTheMaxExp*(scale*value)) ); diff --git a/jdk/test/java/lang/Math/Log1pTests.java b/jdk/test/java/lang/Math/Log1pTests.java index 56a80047aa9..5fe373edc78 100644 --- a/jdk/test/java/lang/Math/Log1pTests.java +++ b/jdk/test/java/lang/Math/Log1pTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -29,7 +29,6 @@ */ import sun.misc.DoubleConsts; -import sun.misc.FpUtils; public class Log1pTests { private Log1pTests(){} @@ -105,7 +104,7 @@ public class Log1pTests { for(int i = 0; i < 1000; i++) { double d = rand.nextDouble(); - d = Math.scalb(d, -53 - FpUtils.ilogb(d)); + d = Math.scalb(d, -53 - Tests.ilogb(d)); for(int j = -53; j <= 52; j++) { failures += testLog1pCaseWithUlpDiff(d, hp15cLogp(d), 5); diff --git a/jdk/test/java/lang/Math/Tests.java b/jdk/test/java/lang/Math/Tests.java index 7dd6d68075f..c06c4ed79e3 100644 --- a/jdk/test/java/lang/Math/Tests.java +++ b/jdk/test/java/lang/Math/Tests.java @@ -30,7 +30,8 @@ * and finally the expected result. */ -import sun.misc.FpUtils; +import sun.misc.FloatConsts; +import sun.misc.DoubleConsts; public class Tests { private Tests(){}; // do not instantiate @@ -59,6 +60,176 @@ public class Tests { return -Math.nextUp(-d); } + /** + * Returns unbiased exponent of a {@code float}; for + * subnormal values, the number is treated as if it were + * normalized. That is for all finite, non-zero, positive numbers + * x, scalb(x, -ilogb(x)) is + * always in the range [1, 2). + *

      + * Special cases: + *

        + *
      • If the argument is NaN, then the result is 230. + *
      • If the argument is infinite, then the result is 228. + *
      • If the argument is zero, then the result is -(228). + *
      + * + * @param f floating-point number whose exponent is to be extracted + * @return unbiased exponent of the argument. + */ + public static int ilogb(double d) { + int exponent = Math.getExponent(d); + + switch (exponent) { + case DoubleConsts.MAX_EXPONENT+1: // NaN or infinity + if( Double.isNaN(d) ) + return (1<<30); // 2^30 + else // infinite value + return (1<<28); // 2^28 + + case DoubleConsts.MIN_EXPONENT-1: // zero or subnormal + if(d == 0.0) { + return -(1<<28); // -(2^28) + } + else { + long transducer = Double.doubleToRawLongBits(d); + + /* + * To avoid causing slow arithmetic on subnormals, + * the scaling to determine when d's significand + * is normalized is done in integer arithmetic. + * (there must be at least one "1" bit in the + * significand since zero has been screened out. + */ + + // isolate significand bits + transducer &= DoubleConsts.SIGNIF_BIT_MASK; + assert(transducer != 0L); + + // This loop is simple and functional. We might be + // able to do something more clever that was faster; + // e.g. number of leading zero detection on + // (transducer << (# exponent and sign bits). + while (transducer < + (1L << (DoubleConsts.SIGNIFICAND_WIDTH - 1))) { + transducer *= 2; + exponent--; + } + exponent++; + assert( exponent >= + DoubleConsts.MIN_EXPONENT - (DoubleConsts.SIGNIFICAND_WIDTH-1) && + exponent < DoubleConsts.MIN_EXPONENT); + return exponent; + } + + default: + assert( exponent >= DoubleConsts.MIN_EXPONENT && + exponent <= DoubleConsts.MAX_EXPONENT); + return exponent; + } + } + + /** + * Returns unbiased exponent of a {@code float}; for + * subnormal values, the number is treated as if it were + * normalized. That is for all finite, non-zero, positive numbers + * x, scalb(x, -ilogb(x)) is + * always in the range [1, 2). + *

      + * Special cases: + *

        + *
      • If the argument is NaN, then the result is 230. + *
      • If the argument is infinite, then the result is 228. + *
      • If the argument is zero, then the result is -(228). + *
      + * + * @param f floating-point number whose exponent is to be extracted + * @return unbiased exponent of the argument. + */ + public static int ilogb(float f) { + int exponent = Math.getExponent(f); + + switch (exponent) { + case FloatConsts.MAX_EXPONENT+1: // NaN or infinity + if( Float.isNaN(f) ) + return (1<<30); // 2^30 + else // infinite value + return (1<<28); // 2^28 + + case FloatConsts.MIN_EXPONENT-1: // zero or subnormal + if(f == 0.0f) { + return -(1<<28); // -(2^28) + } + else { + int transducer = Float.floatToRawIntBits(f); + + /* + * To avoid causing slow arithmetic on subnormals, + * the scaling to determine when f's significand + * is normalized is done in integer arithmetic. + * (there must be at least one "1" bit in the + * significand since zero has been screened out. + */ + + // isolate significand bits + transducer &= FloatConsts.SIGNIF_BIT_MASK; + assert(transducer != 0); + + // This loop is simple and functional. We might be + // able to do something more clever that was faster; + // e.g. number of leading zero detection on + // (transducer << (# exponent and sign bits). + while (transducer < + (1 << (FloatConsts.SIGNIFICAND_WIDTH - 1))) { + transducer *= 2; + exponent--; + } + exponent++; + assert( exponent >= + FloatConsts.MIN_EXPONENT - (FloatConsts.SIGNIFICAND_WIDTH-1) && + exponent < FloatConsts.MIN_EXPONENT); + return exponent; + } + + default: + assert( exponent >= FloatConsts.MIN_EXPONENT && + exponent <= FloatConsts.MAX_EXPONENT); + return exponent; + } + } + + /** + * Returns {@code true} if the unordered relation holds + * between the two arguments. When two floating-point values are + * unordered, one value is neither less than, equal to, nor + * greater than the other. For the unordered relation to be true, + * at least one argument must be a {@code NaN}. + * + * @param arg1 the first argument + * @param arg2 the second argument + * @return {@code true} if at least one argument is a NaN, + * {@code false} otherwise. + */ + public static boolean isUnordered(float arg1, float arg2) { + return Float.isNaN(arg1) || Float.isNaN(arg2); + } + + /** + * Returns {@code true} if the unordered relation holds + * between the two arguments. When two floating-point values are + * unordered, one value is neither less than, equal to, nor + * greater than the other. For the unordered relation to be true, + * at least one argument must be a {@code NaN}. + * + * @param arg1 the first argument + * @param arg2 the second argument + * @return {@code true} if at least one argument is a NaN, + * {@code false} otherwise. + */ + public static boolean isUnordered(double arg1, double arg2) { + return Double.isNaN(arg1) || Double.isNaN(arg2); + } + public static int test(String testName, float input, boolean result, boolean expected) { if (expected != result) { @@ -237,7 +408,7 @@ public class Tests { return 1; } else { double difference = expected - result; - if (FpUtils.isUnordered(expected, result) || + if (isUnordered(expected, result) || Double.isNaN(difference) || // fail if greater than or unordered !(Math.abs( difference/Math.ulp(expected) ) <= Math.abs(ulps)) ) { @@ -332,7 +503,7 @@ public class Tests { double result, double expected, double tolerance) { if (Double.compare(expected, result ) != 0) { double difference = expected - result; - if (FpUtils.isUnordered(expected, result) || + if (isUnordered(expected, result) || Double.isNaN(difference) || // fail if greater than or unordered !(Math.abs((difference)/expected) <= StrictMath.pow(10, -tolerance)) ) { diff --git a/jdk/test/java/lang/ProcessBuilder/Basic.java b/jdk/test/java/lang/ProcessBuilder/Basic.java index 515c6ec18e1..ce0bad7772f 100644 --- a/jdk/test/java/lang/ProcessBuilder/Basic.java +++ b/jdk/test/java/lang/ProcessBuilder/Basic.java @@ -61,6 +61,9 @@ public class Basic { /* used for Mac OS X only */ static final String cfUserTextEncoding = System.getenv("__CF_USER_TEXT_ENCODING"); + /* used for AIX only */ + static final String libpath = System.getenv("LIBPATH"); + /** * Returns the number of milliseconds since time given by * startNanoTime, which must have been previously returned from a @@ -87,7 +90,11 @@ public class Basic { String output = commandOutput(r); equal(p.waitFor(), 0); equal(p.exitValue(), 0); - return output; + // The debug/fastdebug versions of the VM may write some warnings to stdout + // (i.e. "Warning: Cannot open log file: hotspot.log" if the VM is started + // in a directory without write permissions). These warnings will confuse tests + // which match the entire output of the child process so better filter them out. + return output.replaceAll("Warning:.*\\n", ""); } private static String commandOutput(ProcessBuilder pb) { @@ -588,6 +595,12 @@ public class Basic { System.getProperty("os.name").startsWith("Windows"); } + static class AIX { + public static boolean is() { return is; } + private static final boolean is = + System.getProperty("os.name").equals("AIX"); + } + static class Unix { public static boolean is() { return is; } private static final boolean is = @@ -641,7 +654,7 @@ public class Basic { private static boolean isEnglish(String envvar) { String val = getenv(envvar); - return (val == null) || val.matches("en.*"); + return (val == null) || val.matches("en.*") || val.matches("C"); } /** Returns true if we can expect English OS error strings */ @@ -716,6 +729,14 @@ public class Basic { return cleanedVars.replace(javaMainClassStr,""); } + /* Only used for AIX -- + * AIX adds the variable AIXTHREAD_GUARDPAGES=0 to the environment. + * Remove it from the list of env variables + */ + private static String removeAixExpectedVars(String vars) { + return vars.replace("AIXTHREAD_GUARDPAGES=0,",""); + } + private static String sortByLinesWindowsly(String text) { String[] lines = text.split("\n"); Arrays.sort(lines, new WindowsComparator()); @@ -1164,13 +1185,20 @@ public class Basic { ProcessBuilder pb = new ProcessBuilder(); pb.environment().clear(); String expected = Windows.is() ? "SystemRoot="+systemRoot+",": ""; + expected = AIX.is() ? "LIBPATH="+libpath+",": expected; if (Windows.is()) { pb.environment().put("SystemRoot", systemRoot); } + if (AIX.is()) { + pb.environment().put("LIBPATH", libpath); + } String result = getenvInChild(pb); if (MacOSX.is()) { result = removeMacExpectedVars(result); } + if (AIX.is()) { + result = removeAixExpectedVars(result); + } equal(result, expected); } catch (Throwable t) { unexpected(t); } @@ -1685,10 +1713,14 @@ public class Basic { } Process p = Runtime.getRuntime().exec(cmdp, envp); String expected = Windows.is() ? "=C:=\\,=ExitValue=3,SystemRoot="+systemRoot+"," : "=C:=\\,"; + expected = AIX.is() ? expected + "LIBPATH="+libpath+",": expected; String commandOutput = commandOutput(p); if (MacOSX.is()) { commandOutput = removeMacExpectedVars(commandOutput); } + if (AIX.is()) { + commandOutput = removeAixExpectedVars(commandOutput); + } equal(commandOutput, expected); if (Windows.is()) { ProcessBuilder pb = new ProcessBuilder(childArgs); @@ -1740,9 +1772,14 @@ public class Basic { if (MacOSX.is()) { commandOutput = removeMacExpectedVars(commandOutput); } + if (AIX.is()) { + commandOutput = removeAixExpectedVars(commandOutput); + } check(commandOutput.equals(Windows.is() ? "LC_ALL=C,SystemRoot="+systemRoot+"," - : "LC_ALL=C,"), + : AIX.is() + ? "LC_ALL=C,LIBPATH="+libpath+"," + : "LC_ALL=C,"), "Incorrect handling of envstrings containing NULs"); } catch (Throwable t) { unexpected(t); } @@ -2019,8 +2056,13 @@ public class Basic { if (Unix.is() && new File("/bin/bash").exists() && new File("/bin/sleep").exists()) { - final String[] cmd = { "/bin/bash", "-c", "(/bin/sleep 6666)" }; - final String[] cmdkill = { "/bin/bash", "-c", "(/usr/bin/pkill -f \"sleep 6666\")" }; + // Notice that we only destroy the process created by us (i.e. + // our child) but not our grandchild (i.e. '/bin/sleep'). So + // pay attention that the grandchild doesn't run too long to + // avoid polluting the process space with useless processes. + // Running the grandchild for 60s should be more than enough. + final String[] cmd = { "/bin/bash", "-c", "(/bin/sleep 60)" }; + final String[] cmdkill = { "/bin/bash", "-c", "(/usr/bin/pkill -f \"sleep 60\")" }; final ProcessBuilder pb = new ProcessBuilder(cmd); final Process p = pb.start(); final InputStream stdout = p.getInputStream(); @@ -2042,13 +2084,27 @@ public class Basic { reader.start(); Thread.sleep(100); p.destroy(); - // Subprocess is now dead, but file descriptors remain open. check(p.waitFor() != 0); check(p.exitValue() != 0); + // Subprocess is now dead, but file descriptors remain open. + // Make sure the test will fail if we don't manage to close + // the open streams within 30 seconds. Notice that this time + // must be shorter than the sleep time of the grandchild. + Timer t = new Timer("test/java/lang/ProcessBuilder/Basic.java process reaper", true); + t.schedule(new TimerTask() { + public void run() { + fail("Subprocesses which create subprocesses of " + + "their own caused the parent to hang while " + + "waiting for file descriptors to be closed."); + System.exit(-1); + } + }, 30000); stdout.close(); stderr.close(); stdin.close(); new ProcessBuilder(cmdkill).start(); + // All streams successfully closed so we can cancel the timer. + t.cancel(); //---------------------------------------------------------- // There remain unsolved issues with asynchronous close. // Here's a highly non-portable experiment to demonstrate: @@ -2194,8 +2250,9 @@ public class Basic { } long end = System.nanoTime(); // give waitFor(timeout) a wide berth (100ms) - if ((end - start) > 100000000) - fail("Test failed: waitFor took too long"); + // Old AIX machines my need a little longer. + if ((end - start) > 100000000L * (AIX.is() ? 4 : 1)) + fail("Test failed: waitFor took too long (" + (end - start) + "ns)"); p.destroy(); p.waitFor(); @@ -2222,7 +2279,7 @@ public class Basic { long end = System.nanoTime(); if ((end - start) < 500000000) - fail("Test failed: waitFor didn't take long enough"); + fail("Test failed: waitFor didn't take long enough (" + (end - start) + "ns)"); p.destroy(); @@ -2230,7 +2287,7 @@ public class Basic { p.waitFor(1000, TimeUnit.MILLISECONDS); end = System.nanoTime(); if ((end - start) > 900000000) - fail("Test failed: waitFor took too long on a dead process."); + fail("Test failed: waitFor took too long on a dead process. (" + (end - start) + "ns)"); } catch (Throwable t) { unexpected(t); } //---------------------------------------------------------------- diff --git a/jdk/test/java/lang/ProcessBuilder/CloseRace.java b/jdk/test/java/lang/ProcessBuilder/CloseRace.java new file mode 100644 index 00000000000..ff2e81fe7a8 --- /dev/null +++ b/jdk/test/java/lang/ProcessBuilder/CloseRace.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8024521 + * @summary Closing ProcessPipeInputStream at the time the process exits is racy + * and leads to data corruption. Run this test manually (as + * an ordinary java program) with -Xmx8M to repro bug 8024521. + * @run main/othervm -Xmx8M -Dtest.duration=2 CloseRace + */ + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class CloseRace { + private static final String BIG_FILE = "bigfile"; + + private static final int[] procFDs = new int[6]; + + /** default value sufficient to repro bug 8024521. */ + private static final int testDurationSeconds + = Integer.getInteger("test.duration", 600); + + static boolean fdInUse(int i) { + return new File("/proc/self/fd/" + i).exists(); + } + + static boolean[] procFDsInUse() { + boolean[] inUse = new boolean[procFDs.length]; + for (int i = 0; i < procFDs.length; i++) + inUse[i] = fdInUse(procFDs[i]); + return inUse; + } + + static int count(boolean[] bits) { + int count = 0; + for (int i = 0; i < bits.length; i++) + count += bits[i] ? 1 : 0; + return count; + } + + public static void main(String args[]) throws Exception { + if (!(new File("/proc/self/fd").isDirectory())) + return; + + // Catch Errors from process reaper + Thread.setDefaultUncaughtExceptionHandler + ((t, e) -> { e.printStackTrace(); System.exit(1); }); + + try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) { + f.setLength(Runtime.getRuntime().maxMemory()); // provoke OOME + } + + for (int i = 0, j = 0; j < procFDs.length; i++) + if (!fdInUse(i)) + procFDs[j++] = i; + + Thread[] threads = { + new Thread(new OpenLoop()), + new Thread(new ExecLoop()), + }; + for (Thread thread : threads) + thread.start(); + + Thread.sleep(testDurationSeconds * 1000); + + for (Thread thread : threads) + thread.interrupt(); + for (Thread thread : threads) + thread.join(); + } + + static class OpenLoop implements Runnable { + public void run() { + while (!Thread.interrupted()) { + try { + // wait for ExecLoop to finish creating process + do {} while (count(procFDsInUse()) != 3); + List iss = new ArrayList<>(4); + + // eat up three "holes" (closed ends of pipe fd pairs) + for (int i = 0; i < 3; i++) + iss.add(new FileInputStream(BIG_FILE)); + do {} while (count(procFDsInUse()) == procFDs.length); + // hopefully this will racily occupy empty fd slot + iss.add(new FileInputStream(BIG_FILE)); + Thread.sleep(1); // Widen race window + for (InputStream is : iss) + is.close(); + } catch (InterruptedException e) { + break; + } catch (Exception e) { + throw new Error(e); + } + } + } + } + + static class ExecLoop implements Runnable { + public void run() { + ProcessBuilder builder = new ProcessBuilder("/bin/true"); + while (!Thread.interrupted()) { + try { + // wait for OpenLoop to finish + do {} while (count(procFDsInUse()) > 0); + Process process = builder.start(); + InputStream is = process.getInputStream(); + process.waitFor(); + is.close(); + } catch (InterruptedException e) { + break; + } catch (Exception e) { + throw new Error(e); + } + } + } + } +} diff --git a/jdk/test/java/lang/ProcessBuilder/DestroyTest.java b/jdk/test/java/lang/ProcessBuilder/DestroyTest.java index ebf00e32b79..401bd146c28 100644 --- a/jdk/test/java/lang/ProcessBuilder/DestroyTest.java +++ b/jdk/test/java/lang/ProcessBuilder/DestroyTest.java @@ -154,6 +154,9 @@ public class DestroyTest { } else if (osName.equals("SunOS")) { return new UnixTest( File.createTempFile("ProcessTrap-", ".sh",null)); + } else if (osName.equals("AIX")) { + return new UnixTest( + File.createTempFile("ProcessTrap-", ".sh",null)); } return null; } diff --git a/jdk/test/java/lang/Runtime/exec/CloseRace.java b/jdk/test/java/lang/Runtime/exec/CloseRace.java deleted file mode 100644 index a1e57902e31..00000000000 --- a/jdk/test/java/lang/Runtime/exec/CloseRace.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 8024521 - * @summary Closing ProcessPipeInputStream at the time the process exits is racy - * and leads to the data corruption. - * @library /lib/testlibrary - * @run main/othervm/timeout=80 CloseRace - */ - -/** - * This test has a little chance to catch the race during the given default - * time gap of 20 seconds. To increase the time gap, set the system property - * CloseRaceTimeGap=N to the number of seconds. - * Jtreg's timeoutFactor should also be set appropriately. - * - * For example, to run the test for 10 minutes: - * > jtreg \ - * -testjdk:$(PATH_TO_TESTED_JDK) \ - * -timeoutFactor:10 \ - * -DCloseRaceTimeGap=600 \ - * $(PATH_TO_TESTED_JDK_SOURCE)/test/java/lang/Runtime/exec/CloseRace.java - */ - -import java.io.*; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import jdk.testlibrary.OutputAnalyzer; -import static jdk.testlibrary.ProcessTools.*; - -public class CloseRace { - - public static void main(String args[]) throws Exception { - ProcessBuilder pb = createJavaProcessBuilder("-Xmx64M", "CloseRace$Child", - System.getProperty("CloseRaceTimeGap", "20")); - OutputAnalyzer oa = new OutputAnalyzer(pb.start()); - oa.stderrShouldNotContain("java.lang.OutOfMemoryError"); - } - - public static class Child { - private static final String BIG_FILE = "bigfile"; - private static final String SMALL_FILE = "smallfile"; - private static int timeGap = 20; // seconds - - public static void main(String args[]) throws Exception { - if (args.length > 0) { - try { - timeGap = Integer.parseUnsignedInt(args[0]); - timeGap = Integer.max(timeGap, 10); - timeGap = Integer.min(timeGap, 10 * 60 * 60); // no more than 10 hours - } catch (NumberFormatException ignore) {} - } - try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) { - f.setLength(1024 * 1024 * 1024); // 1 Gb, greater than max heap size - } - try (FileOutputStream fs = new FileOutputStream(SMALL_FILE); - PrintStream ps = new PrintStream(fs)) { - for (int i = 0; i < 128; ++i) - ps.println("line of text"); - } - - List threads = new LinkedList<>(); - for (int i = 0; i < 99; ++i) { - Thread t = new Thread (new OpenLoop()); - t.start(); - threads.add(t); - } - Thread t2 = new Thread (new ExecLoop()); - t2.start(); - threads.add(t2); - - Thread.sleep(timeGap); - - for (Thread t : threads) { - t.interrupt(); - t.join(); - } - } - - private static class OpenLoop implements Runnable { - public void run() { - final Path bigFilePath = Paths.get(BIG_FILE); - while (!Thread.interrupted()) { - try (InputStream in = Files.newInputStream(bigFilePath)) { - // Widen the race window by sleeping 1ms - Thread.sleep(1); - } catch (InterruptedException e) { - break; - } catch (Exception e) { - System.err.println(e); - } - } - } - } - - private static class ExecLoop implements Runnable { - public void run() { - List command = new ArrayList<>( - Arrays.asList("/bin/cat", SMALL_FILE)); - while (!Thread.interrupted()) { - try { - ProcessBuilder builder = new ProcessBuilder(command); - final Process process = builder.start(); - InputStream is = process.getInputStream(); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); - while (br.readLine() != null) {} - process.waitFor(); - isr.close(); - } catch (InterruptedException e) { - break; - } catch (Exception e) { - System.err.println(e); - } - } - } - } - } -} diff --git a/jdk/test/java/lang/StringCoding/CheckEncodings.sh b/jdk/test/java/lang/StringCoding/CheckEncodings.sh index edc5f9a4e49..2936d9cae65 100644 --- a/jdk/test/java/lang/StringCoding/CheckEncodings.sh +++ b/jdk/test/java/lang/StringCoding/CheckEncodings.sh @@ -30,7 +30,7 @@ # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin) ;; + SunOS | Linux | Darwin | AIX ) ;; Windows* | CYGWIN* ) echo "Passed"; exit 0 ;; * ) echo "Unrecognized system!" ; exit 1 ;; diff --git a/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh b/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh index e62a63cd8a5..915aa9558ff 100644 --- a/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh +++ b/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh @@ -48,7 +48,7 @@ echo "CLASSPATH=${CLASSPATH}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java b/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java new file mode 100644 index 00000000000..64b4d59cf18 --- /dev/null +++ b/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java @@ -0,0 +1,46 @@ +/* + * Copyright 2014 Goldman Sachs. + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.IllegalClassFormatException; +import java.lang.instrument.Instrumentation; +import java.security.ProtectionDomain; + +public class DummyAgent implements ClassFileTransformer { + @Override + public byte[] transform(ClassLoader loader, String className, + Class classBeingRedefined, ProtectionDomain protectionDomain, + byte[] classfileBuffer) throws IllegalClassFormatException { + + /* The Daemon Thread bug is timing dependent and you want the transform method + * to return ASAP - so just return the buffer will be fine + */ + return classfileBuffer; + } + + public static void premain(String agentArgs, Instrumentation inst) { + inst.addTransformer(new DummyAgent(), false); + } + +} diff --git a/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java b/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java new file mode 100644 index 00000000000..18d671afc09 --- /dev/null +++ b/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java @@ -0,0 +1,27 @@ +/* + * Copyright 2014 Goldman Sachs. + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* Just a dummy class for loading */ +public class DummyClass { +} diff --git a/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java new file mode 100644 index 00000000000..20c9077d02f --- /dev/null +++ b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java @@ -0,0 +1,72 @@ +/* + * Copyright 2014 Goldman Sachs. + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* @test + * @bug 7142035 + * @summary Assert in java.lang.instrument agents during shutdown when classloading occurs after shutdown + * @library /lib/testlibrary + * + * @build DummyAgent DummyClass TestDaemonThreadLauncher TestDaemonThread + * @run shell ../MakeJAR3.sh DummyAgent + * @run main TestDaemonThreadLauncher /timeout=240 + * + */ +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; + +public class TestDaemonThread implements Runnable{ + File classpath; + + public TestDaemonThread(File classpath) { + this.classpath = classpath; + } + + @Override + public void run() { + + + try { + URL u = this.getClass().getClassLoader().getResource("DummyClass.class"); + String path = u.getPath(); + String parent = u.getPath().substring(0, path.lastIndexOf('/')+1); + URL parentURL = new URL(u, parent); + System.out.println(parentURL); + /* Load lots of class by creating multiple classloaders */ + for(;;) { + ClassLoader cl = new URLClassLoader(new URL[] {parentURL}, null); + cl.loadClass("DummyClass"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) throws Exception { + Thread t = new Thread(new TestDaemonThread(new File(args[0]))); + /* The important part of the bug is that a Daemon thread can continue to load classes after shutdown */ + t.setDaemon(true); + t.start(); + Thread.sleep(200); + } +} diff --git a/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java new file mode 100644 index 00000000000..9660bbfa9dc --- /dev/null +++ b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java @@ -0,0 +1,44 @@ +/* + * Copyright 2014 Goldman Sachs. + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +import jdk.testlibrary.JDKToolLauncher; +import jdk.testlibrary.OutputAnalyzer; +import jdk.testlibrary.ProcessTools; + +import java.io.IOException; +import java.nio.file.Path; + +public class TestDaemonThreadLauncher { + + private static ProcessBuilder processBuilder = new ProcessBuilder(); + + public static void main(String args[]) throws Exception { + for(int i=0; i<50; i++) { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-javaagent:DummyAgent.jar", "TestDaemonThread", "."); + OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); + analyzer.shouldNotContain("ASSERTION FAILED"); + } + } +} diff --git a/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh b/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh index 3455959c3aa..c47f59de834 100644 --- a/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh +++ b/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh @@ -47,6 +47,10 @@ case "$OS" in PS=":" FS="/" ;; + AIX ) + PS=":" + FS="/" + ;; Windows*) PS=";" OS="Windows" diff --git a/jdk/test/java/lang/invoke/lambda/T8032697.java b/jdk/test/java/lang/invoke/lambda/T8032697.java new file mode 100644 index 00000000000..be422a94b33 --- /dev/null +++ b/jdk/test/java/lang/invoke/lambda/T8032697.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8032697 + * @summary Issues with Lambda + */ + +import java.lang.invoke.LambdaMetafactory; +import java.lang.invoke.LambdaConversionException; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import T8032697_anotherpkg.T8032697_A; + +public class T8032697 extends T8032697_A { + + interface I { + int m(); + } + + interface IA { + int m(T8032697_A x); + } + + static MethodHandles.Lookup l; + static MethodHandle h; + private static MethodType mt(Class k) { return MethodType.methodType(k); } + private static MethodType mt(Class k, Class k2) { return MethodType.methodType(k, k2); } + private static boolean mf(MethodType mti, MethodType mtf) { + try { + LambdaMetafactory.metafactory(l, "m", mti,mtf,h,mtf); + } catch(LambdaConversionException e) { + return true; + } + return false; + } + + public static void main(String[] args) throws Throwable { + l = MethodHandles.lookup(); + h = l.findVirtual(T8032697_A.class, "f", mt(int.class)); + if (mf(mt(I.class, T8032697.class), mt(int.class))) throw new AssertionError("Error: Should work"); + if (mf(mt(IA.class), mt(int.class, T8032697.class))) throw new AssertionError("Error: Should work"); + if (!mf(mt(I.class, T8032697_A.class), mt(int.class))) throw new AssertionError("Error: Should fail"); + if (!mf(mt(IA.class), mt(int.class, T8032697_A.class))) throw new AssertionError("Error: Should fail"); + } +} diff --git a/jdk/test/java/lang/invoke/lambda/T8032697_anotherpkg/T8032697_A.java b/jdk/test/java/lang/invoke/lambda/T8032697_anotherpkg/T8032697_A.java new file mode 100644 index 00000000000..d611e3fef6f --- /dev/null +++ b/jdk/test/java/lang/invoke/lambda/T8032697_anotherpkg/T8032697_A.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package T8032697_anotherpkg; + +public class T8032697_A { + protected final int f() { return 2; } +} diff --git a/jdk/test/java/lang/invoke/lambda/T8032704.java b/jdk/test/java/lang/invoke/lambda/T8032704.java new file mode 100644 index 00000000000..9dfe3a0f108 --- /dev/null +++ b/jdk/test/java/lang/invoke/lambda/T8032704.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8032704 + * @summary Issues with lib perm in Lambda + */ + +import java.io.Closeable; +import java.lang.invoke.LambdaMetafactory; +import java.lang.invoke.LambdaConversionException; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class T8032704 { + + public static void here() {} + static MethodHandle h; + private static MethodType mt(Class k) { return MethodType.methodType(k); } + private static boolean mf(MethodHandles.Lookup l) { + try { + LambdaMetafactory.metafactory(l, "close", + mt(Closeable.class),mt(void.class),h,mt(void.class)); + } catch(LambdaConversionException e) { + return true; + } + return false; + } + + public static void main(String[] args) throws Throwable { + MethodHandles.Lookup ll = MethodHandles.lookup(); + h = ll.findStatic(T8032704.class, "here", mt(void.class)); + if (mf(ll)) throw new AssertionError("Error: Should work"); + if (!mf(MethodHandles.publicLookup())) throw new AssertionError("Error: Should fail - public"); + if (!mf(ll.in(T8032704other.class))) throw new AssertionError("Error: Should fail - other"); + if (!mf(ll.in(Thread.class))) throw new AssertionError("Error: Should fail - Thread"); + } +} + +class T8032704other {} diff --git a/jdk/test/java/lang/invoke/lambda/T8032711.java b/jdk/test/java/lang/invoke/lambda/T8032711.java new file mode 100644 index 00000000000..b01009f8336 --- /dev/null +++ b/jdk/test/java/lang/invoke/lambda/T8032711.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8032711 + * @summary Issue with Lambda in handling + */ + +import java.lang.invoke.LambdaMetafactory; +import java.lang.invoke.LambdaConversionException; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class T8032711 { + + interface I { + void m(); + } + + static void here() {} + static MethodHandles.Lookup l; + static MethodHandle h; + private static MethodType mt(Class k) { return MethodType.methodType(k); } + private static boolean mf(Class k) { + try { + LambdaMetafactory.metafactory(l, "m", + mt(I.class),mt(k),h,mt(void.class)); + } catch(LambdaConversionException e) { + return true; + } + return false; + } + + public static void main(String[] args) throws Throwable { + l = MethodHandles.lookup(); + h = l.findStatic(T8032711.class, "here", mt(void.class)); + if (mf(void.class)) throw new AssertionError("Error: Should work"); + if (!mf(String.class)) throw new AssertionError("Error: Should fail"); + } +} diff --git a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java index d9c8d472456..4077d2a08ef 100644 --- a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java +++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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,9 +23,9 @@ /* * @test - * @bug 4530538 + * @bug 4530538 6980984 * @summary Basic unit test of memory management testing: - * 1) setUsatgeThreshold() and getUsageThreshold() + * 1) setUsageThreshold() and getUsageThreshold() * 2) test low memory detection on the old generation. * * @author Mandy Chung @@ -40,16 +40,18 @@ import javax.management.*; import javax.management.openmbean.CompositeData; public class MemoryManagement { - private static MemoryMXBean mm = ManagementFactory.getMemoryMXBean(); - private static List pools = ManagementFactory.getMemoryPoolMXBeans(); - private static List managers = ManagementFactory.getMemoryManagerMXBeans(); - private static MemoryPoolMXBean mpool = null; - private static boolean trace = false; - private static boolean testFailed = false; + private static final MemoryMXBean mm = ManagementFactory.getMemoryMXBean(); + private static final List pools = + Collections.synchronizedList(ManagementFactory.getMemoryPoolMXBeans()); + private static final List managers = + Collections.synchronizedList(ManagementFactory.getMemoryManagerMXBeans()); + private static volatile MemoryPoolMXBean mpool = null; + private static volatile boolean trace = false; + private static volatile boolean testFailed = false; private static final int NUM_CHUNKS = 2; - private static long chunkSize; + private static volatile long chunkSize; + private static volatile int listenerInvoked = 0; - private static int listenerInvoked = 0; static class SensorListener implements NotificationListener { public void handleNotification(Notification notif, Object handback) { String type = notif.getType(); @@ -101,7 +103,13 @@ public class MemoryManagement { // Now set threshold MemoryUsage mu = mpool.getUsage(); - chunkSize = (mu.getMax() - mu.getUsed()) / 20; + long max = mu.getMax(); + if (max != -1) { + chunkSize = (max - mu.getUsed()) / 20; + } else { // 6980984 + System.gc(); + chunkSize = Runtime.getRuntime().freeMemory()/20; + } newThreshold = mu.getUsed() + (chunkSize * NUM_CHUNKS); System.out.println("Setting threshold for " + mpool.getName() + diff --git a/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh b/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh index 571a3d931a3..1ef2f35c8e9 100644 --- a/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh +++ b/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh @@ -61,7 +61,7 @@ i=1 while true; do echo "Run $i: TestSystemLoadAvg" case `uname -s` in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) runOne GetSystemLoadAverage ;; * ) diff --git a/jdk/test/java/lang/management/ThreadMXBean/Locks.java b/jdk/test/java/lang/management/ThreadMXBean/Locks.java index c078dccd62d..e65d3637f67 100644 --- a/jdk/test/java/lang/management/ThreadMXBean/Locks.java +++ b/jdk/test/java/lang/management/ThreadMXBean/Locks.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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,18 +27,19 @@ * @summary Basic unit test of ThreadInfo.getLockName() * and ThreadInfo.getLockOwnerName() * @author Mandy Chung + * @author Jaroslav Bachorik * - * @build ThreadExecutionSynchronizer * @run main/othervm Locks */ import java.lang.management.*; +import java.util.concurrent.Phaser; public class Locks { - private static Object objA = new Object(); - private static Object objB = new Object(); - private static Object objC = new Object(); - private static ThreadMXBean tm = ManagementFactory.getThreadMXBean(); + private static final Object objA = new Object(); + private static final Object objB = new Object(); + private static final Object objC = new Object(); + private static final ThreadMXBean tm = ManagementFactory.getThreadMXBean(); private static boolean testFailed = false; @@ -46,48 +47,62 @@ public class Locks { if (lock == null) return null; return lock.getClass().getName() + '@' + - Integer.toHexString(System.identityHashCode(lock)); + Integer.toHexString(System.identityHashCode(lock)); + } + + private static void assertNoLock(Thread t) { + long tid = t.getId(); + ThreadInfo info = tm.getThreadInfo(tid); + String result = info.getLockName(); + + if (result != null) { + throw new RuntimeException("Thread " + t.getName() + " is not supposed to hold any lock. " + + "Currently owning lock: " + result); + } } private static void checkBlockedObject(Thread t, Object lock, Thread owner, Thread.State expectedState) { - ThreadInfo info = tm.getThreadInfo(t.getId()); + long tid = t.getId(); + ThreadInfo info = tm.getThreadInfo(tid); String result = info.getLockName(); String expectedLock = (lock != null ? getLockName(lock) : null); String expectedOwner = (owner != null ? owner.getName() : null); if (lock != null) { - if (expectedState ==Thread.State.BLOCKED) { + if (expectedState == Thread.State.BLOCKED) { int retryCount=0; while(info.getThreadState() != Thread.State.BLOCKED) { if (retryCount++ > 500) { throw new RuntimeException("Thread " + t.getName() + - " is expected to block on " + expectedLock + - " but got " + result + - " Thread.State = " + info.getThreadState()); + " is expected to block on " + expectedLock + + " but got " + result + + " Thread.State = " + info.getThreadState()); } goSleep(100); + info = tm.getThreadInfo(tid); + result = info.getLockName(); } } if (expectedState == Thread.State.WAITING && - info.getThreadState() != Thread.State.WAITING) { + info.getThreadState() != Thread.State.WAITING) { throw new RuntimeException("Thread " + t.getName() + - " is expected to wait on " + expectedLock + - " but got " + result + - " Thread.State = " + info.getThreadState()); + " is expected to wait on " + expectedLock + + " but got " + result + + " Thread.State = " + info.getThreadState()); } } if ((result != null && !result.equals(expectedLock)) || - (result == null && expectedLock != null)) { + (result == null && expectedLock != null)) { throw new RuntimeException("Thread " + t.getName() + " is blocked on " + - expectedLock + " but got " + result); + expectedLock + " but got " + result); } result = info.getLockOwnerName(); if ((result != null && !result.equals(expectedOwner)) || - (result == null && expectedOwner != null)) { + (result == null && expectedOwner != null)) { throw new RuntimeException("Owner of " + lock + " should be " + - expectedOwner + " but got " + result); + expectedOwner + " but got " + result); } } @@ -100,53 +115,49 @@ public class Locks { } } - static ThreadExecutionSynchronizer thrsync = new ThreadExecutionSynchronizer(); - static ThreadExecutionSynchronizer thrsync1 = new ThreadExecutionSynchronizer(); + private static volatile int dummyCounter = 0; static class LockAThread extends Thread { - public LockAThread() { + private final Phaser p; + public LockAThread(Phaser p) { super("LockAThread"); + this.p = p; } public void run() { synchronized(objA) { - // stop here for LockBThread to hold objB - thrsync.waitForSignal(); - - System.out.println("LockAThread about to block on objB"); - synchronized(objB) {}; + // stop here for LockBThread to hold objB + System.out.println("LockAThread about to block on objB"); + p.arriveAndAwaitAdvance(); // Phase 1 (blocking) + synchronized(objB) { + dummyCounter++; + }; } + p.arriveAndAwaitAdvance(); // Phase 2 (blocking) System.out.println("LockAThread about to exit"); - // The state could be anything. The expected state value - // passed with this method is not verified. - checkBlockedObject(this, null, null, Thread.State.TERMINATED); + // Make sure the current thread is not holding any lock + assertNoLock(this); } } static class LockBThread extends Thread { - public LockBThread() { + private final Phaser p; + public LockBThread(Phaser p) { super("LockBThread"); + this.p = p; } public void run() { synchronized(objB) { - // signal waiting LockAThread. - thrsync.signal(); - - System.out.println("LockBThread about to block on objC"); - // Signal main thread about to block on objC - thrsync1.signal(); - synchronized(objC) {}; + System.out.println("LockBThread about to block on objC"); + p.arriveAndAwaitAdvance(); // Phase 1 (blocking) + // Signal main thread about to block on objC + synchronized(objC) { + dummyCounter++; + }; } + p.arriveAndAwaitAdvance(); // Phase 2 (blocking) System.out.println("LockBThread about to exit"); - // The state could be anything. The expected state value - // passed with this method is not verified. - checkBlockedObject(this, null, null, Thread.State.TERMINATED); - } - - public void aboutToLockC() { - // Stop here till LockBThread about to blocked - // for lock objC. - thrsync1.waitForSignal(); - goSleep(500); + // Make sure the current thread is not holding any lock + assertNoLock(this); } } @@ -154,32 +165,36 @@ public class Locks { private static Object ready = new Object(); private static CheckerThread checker; static class WaitingThread extends Thread { - public WaitingThread() { + private final Phaser p; + public WaitingThread(Phaser p) { super("WaitingThread"); + this.p = p; } public void run() { synchronized(objC) { - System.out.println("WaitingThread about to wait on objC"); - try { - // Signal checker thread, about to wait on objC. - thrsync.signal(); - objC.wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - testFailed = true; - } + System.out.println("WaitingThread about to wait on objC"); + try { + // Signal checker thread, about to wait on objC. + p.arriveAndAwaitAdvance(); // Phase 1 (waiting) + objC.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + testFailed = true; + } - // block until CheckerThread finishes checking - System.out.println("WaitingThread about to block on ready"); - // signal checker thread that it is about acquire - // object ready. - thrsync.signal(); - synchronized(ready) {}; + // block until CheckerThread finishes checking + System.out.println("WaitingThread about to block on ready"); + // signal checker thread that it is about acquire + // object ready. + p.arriveAndAwaitAdvance(); // Phase 2 (waiting) + synchronized(ready) { + dummyCounter++; + }; } synchronized(objC) { try { // signal checker thread, about to wait on objC - thrsync.signal(); + p.arriveAndAwaitAdvance(); // Phase 3 (waiting) objC.wait(); } catch (InterruptedException e) { e.printStackTrace(); @@ -190,21 +205,23 @@ public class Locks { } } static class CheckerThread extends Thread { - public CheckerThread() { + private final Phaser p; + public CheckerThread(Phaser p) { super("CheckerThread"); + this.p = p; } private void waitForState(Thread.State state) { - thrsync.waitForSignal(); - while (waiter.getState() != state) { - goSleep(10); + p.arriveAndAwaitAdvance(); + while (!waiter.isInterrupted() && waiter.getState() != state) { + goSleep(10); } } public void run() { synchronized (ready) { // wait until WaitingThread about to wait for objC - waitForState(Thread.State.WAITING); + waitForState(Thread.State.WAITING); // Phase 1 (waiting) checkBlockedObject(waiter, objC, null, Thread.State.WAITING); synchronized (objC) { @@ -213,13 +230,13 @@ public class Locks { // wait for waiter thread to about to enter // synchronized object ready. - waitForState(Thread.State.BLOCKED); + waitForState(Thread.State.BLOCKED); // Phase 2 (waiting) checkBlockedObject(waiter, ready, this, Thread.State.BLOCKED); } // wait for signal from waiting thread that it is about // wait for objC. - waitForState(Thread.State.WAITING); + waitForState(Thread.State.WAITING); // Phase 3 (waiting) synchronized(objC) { checkBlockedObject(waiter, objC, Thread.currentThread(), Thread.State.WAITING); objC.notify(); @@ -235,24 +252,24 @@ public class Locks { LockAThread t1; LockBThread t2; + Phaser p = new Phaser(3); synchronized(objC) { - // The state could be anything. The expected state value - // passed with this method is not verified. - checkBlockedObject(mainThread, null, null, Thread.State.RUNNABLE); + // Make sure the main thread is not holding any lock + assertNoLock(mainThread); // Test deadlock case // t1 holds lockA and attempts to lock B // t2 holds lockB and attempts to lock C - t1 = new LockAThread(); + + t1 = new LockAThread(p); t1.start(); - t2 = new LockBThread(); + t2 = new LockBThread(p); t2.start(); - t2.aboutToLockC(); - - checkBlockedObject(t1, objB, t2, Thread.State.BLOCKED); + p.arriveAndAwaitAdvance(); // Phase 1 (blocking) checkBlockedObject(t2, objC, mainThread, Thread.State.BLOCKED); + checkBlockedObject(t1, objB, t2, Thread.State.BLOCKED); long[] expectedThreads = new long[3]; expectedThreads[0] = t1.getId(); // blocked on lockB @@ -260,13 +277,14 @@ public class Locks { expectedThreads[2] = mainThread.getId(); // owner of lockC findThreadsBlockedOn(objB, expectedThreads); } - goSleep(100); + p.arriveAndAwaitAdvance(); // Phase 2 (blocking) + p = new Phaser(2); // Test Object.wait() case - waiter = new WaitingThread(); + waiter = new WaitingThread(p); waiter.start(); - checker = new CheckerThread(); + checker = new CheckerThread(p); checker.start(); try { @@ -284,7 +302,7 @@ public class Locks { } private static ThreadInfo findOwnerInfo(ThreadInfo[] infos, String lock) - throws Exception { + throws Exception { ThreadInfo ownerInfo = null; for (int i = 0; i < infos.length; i++) { String blockedLock = infos[i].getLockName(); @@ -292,7 +310,7 @@ public class Locks { long threadId = infos[i].getLockOwnerId(); if (threadId == -1) { throw new RuntimeException("TEST FAILED: " + - lock + " expected to have owner"); + lock + " expected to have owner"); } for (int j = 0; j < infos.length; j++) { if (infos[j].getThreadId() == threadId) { @@ -305,7 +323,7 @@ public class Locks { return ownerInfo; } private static void findThreadsBlockedOn(Object o, long[] expectedThreads) - throws Exception { + throws Exception { String lock = getLockName(o); // Check with ThreadInfo with no stack trace (i.e. no safepoint) ThreadInfo[] infos = tm.getThreadInfo(tm.getAllThreadIds()); @@ -317,14 +335,14 @@ public class Locks { } private static void doCheck(ThreadInfo[] infos, String lock, long[] expectedThreads) - throws Exception { + throws Exception { ThreadInfo ownerInfo = null; // Find the thread who is blocking on lock for (int i = 0; i < infos.length; i++) { String blockedLock = infos[i].getLockName(); if (lock.equals(blockedLock)) { System.out.print(infos[i].getThreadName() + - " blocked on " + blockedLock); + " blocked on " + blockedLock); ownerInfo = infos[i]; } } @@ -336,7 +354,7 @@ public class Locks { ownerInfo = findOwnerInfo(infos, lock); threads[count++] = ownerInfo.getThreadId(); System.out.println(" Owner = " + ownerInfo.getThreadName() + - " id = " + ownerInfo.getThreadId()); + " id = " + ownerInfo.getThreadId()); lock = ownerInfo.getLockName(); System.out.print(ownerInfo.getThreadName() + " Id = " + ownerInfo.getThreadId() + @@ -346,13 +364,13 @@ public class Locks { if (count != expectedThreads.length) { throw new RuntimeException("TEST FAILED: " + - "Expected chain of threads not matched; current count =" + count); + "Expected chain of threads not matched; current count =" + count); } for (int i = 0; i < count; i++) { if (threads[i] != expectedThreads[i]) { System.out.println("TEST FAILED: " + - "Unexpected thread in the chain " + threads[i] + - " expected to be " + expectedThreads[i]); + "Unexpected thread in the chain " + threads[i] + + " expected to be " + expectedThreads[i]); } } } diff --git a/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java b/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java index e03042864c9..6986adc6893 100644 --- a/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java +++ b/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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,45 +27,28 @@ * @summary Basic unit test of the synchronization statistics support: * * @author Mandy Chung + * @author Jaroslav Bachorik * - * @ignore 6309226 - * @build Semaphore * @run main/othervm SynchronizationStatistics */ import java.lang.management.*; +import java.util.concurrent.Phaser; public class SynchronizationStatistics { - private static ThreadMXBean mbean = ManagementFactory.getThreadMXBean(); - - private static boolean blockedTimeCheck = - mbean.isThreadContentionMonitoringSupported(); - private static boolean trace = false; - - private static Object lockA = new Object(); - private static Object lockB = new Object(); - private static Object lockC = new Object(); - private static Object lockD = new Object(); - private static Object waiter = new Object(); - private static volatile boolean testFailed = false; - - private static Object go = new Object(); - - private static void goSleep(long ms) { - try { - Thread.sleep(ms); - } catch (InterruptedException e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - testFailed = true; + private static class LockerThread extends Thread { + public LockerThread(Runnable r) { + super(r, "LockerThread"); } } - public static void main(String args[]) throws Exception { - if (args.length > 0 && args[0].equals("trace")) { - trace = true; - } + private static final ThreadMXBean mbean = ManagementFactory.getThreadMXBean(); + private static final boolean blockedTimeCheck = + mbean.isThreadContentionMonitoringSupported(); + + + public static void main(String args[]) throws Exception { if (blockedTimeCheck) { mbean.setThreadContentionMonitoringEnabled(true); } @@ -75,457 +58,317 @@ public class SynchronizationStatistics { "Thread Contention Monitoring is not enabled"); } - Examiner examiner = new Examiner("Examiner"); - BlockedThread blocked = new BlockedThread("BlockedThread"); - examiner.setThread(blocked); - - // Start the threads and check them in Blocked and Waiting states - examiner.start(); - - // wait until the examiner acquires all the locks and waiting - // for the BlockedThread to start - examiner.waitUntilWaiting(); - - System.out.println("Checking the thread state for the examiner thread " + - "is waiting to begin."); - - // The Examiner should be waiting to be notified by the BlockedThread - checkThreadState(examiner, Thread.State.WAITING); - - System.out.println("Now starting the blocked thread"); - blocked.start(); - - try { - examiner.join(); - blocked.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - testFailed = true; - } - - if (testFailed) - throw new RuntimeException("TEST FAILED."); + testBlockingOnSimpleMonitor(); + testBlockingOnNestedMonitor(); + testWaitingOnSimpleMonitor(); + testMultiWaitingOnSimpleMonitor(); + testWaitingOnNestedMonitor(); System.out.println("Test passed."); } - private static String INDENT = " "; - private static void printStack(Thread t, StackTraceElement[] stack) { - System.out.println(INDENT + t + - " stack: (length = " + stack.length + ")"); - if (t != null) { - for (int j = 0; j < stack.length; j++) { - System.out.println(INDENT + stack[j]); + private static LockerThread newLockerThread(Runnable r) { + LockerThread t = new LockerThread(r); + t.setDaemon(true); + return t; + } + + private static void waitForThreadState(Thread t, Thread.State state) throws InterruptedException { + while (!t.isInterrupted() && t.getState() != state) { + Thread.sleep(3); + } + } + + /** + * Tests that blocking on a single monitor properly increases the + * blocked count at least by 1. Also asserts that the correct lock name is provided. + */ + private static void testBlockingOnSimpleMonitor() throws Exception { + System.out.println("testBlockingOnSimpleMonitor"); + final Object lock1 = new Object(); + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + p.arriveAndAwaitAdvance(); // phase[2] + } + p.arriveAndAwaitAdvance(); // phase[3] } - System.out.println(); + }); + + lt.start(); + long tid = lt.getId(); + ThreadInfo ti = mbean.getThreadInfo(tid); + String lockName = null; + synchronized(lock1) { + p.arriveAndAwaitAdvance(); // phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); + lockName = mbean.getThreadInfo(tid).getLockName(); } + + p.arriveAndAwaitAdvance(); // phase[2] + testBlocked(ti, mbean.getThreadInfo(tid), lockName, lock1); + p.arriveAndDeregister(); // phase[3] + + lt.join(); + + System.out.println("OK"); } - private static void checkThreadState(Thread thread, Thread.State s) - throws Exception { + /** + * Tests that blocking on a nested monitor properly increases the + * blocked count at least by 1 - it is not affected by the nesting depth. + * Also asserts that the correct lock name is provided. + */ + private static void testBlockingOnNestedMonitor() throws Exception { + System.out.println("testBlockingOnNestedMonitor"); + final Object lock1 = new Object(); + final Object lock2 = new Object(); - ThreadInfo ti = mbean.getThreadInfo(thread.getId()); - if (ti.getThreadState() != s) { - ThreadInfo info = mbean.getThreadInfo(thread.getId(), - Integer.MAX_VALUE); - System.out.println(INDENT + "TEST FAILED:"); - printStack(thread, info.getStackTrace()); - System.out.println(INDENT + "Thread state: " + info.getThreadState()); - - throw new RuntimeException("TEST FAILED: " + - "Thread state for " + thread + " returns " + ti.getThreadState() + - ". Expected to be " + s); - } - } - - private static void checkThreadState(Thread thread, - Thread.State s1, Thread.State s2) - throws Exception { - - ThreadInfo ti = mbean.getThreadInfo(thread.getId()); - if (ti.getThreadState() != s1 && ti.getThreadState() != s2) { - throw new RuntimeException("TEST FAILED: " + - "Thread state for " + thread + " returns " + ti.getThreadState() + - ". Expected to be " + s1 + " or " + s2); - } - } - - static class StatThread extends Thread { - private long blockingBaseTime = 0; - private long totalWaitTime = 0; - private long totalBlockedEnterTime = 0; - - StatThread(String name) { - super(name); - } - - void addWaitTime(long ns) { - totalWaitTime = totalWaitTime + ns; - } - void addBlockedEnterTime(long ns) { - totalBlockedEnterTime = totalBlockedEnterTime + ns; - } - void setBlockingBaseTime(long time) { - blockingBaseTime = time; - } - - long totalBlockedTimeMs() { - return totalBlockedEnterTime / 1000000; - } - - long totalBlockedTimeMs(long now) { - long t = totalBlockedEnterTime + (now - blockingBaseTime); - return t / 1000000; - } - - long totalWaitTimeMs() { - return totalWaitTime / 1000000; - } - - long totalWaitTimeMs(long now) { - long t = totalWaitTime + (now - blockingBaseTime); - return t / 1000000; - } - } - - static class BlockedThread extends StatThread { - private Semaphore handshake = new Semaphore(); - BlockedThread(String name) { - super(name); - } - void waitUntilBlocked() { - handshake.semaP(); - - // give a chance for the examiner thread to really wait - goSleep(20); - } - - void waitUntilWaiting() { - waitUntilBlocked(); - } - - boolean hasWaitersForBlocked() { - return (handshake.getWaiterCount() > 0); - } - - private void notifyWaiter() { - // wait until the examiner waits on the semaphore - while (handshake.getWaiterCount() == 0) { - goSleep(20); - } - handshake.semaV(); - } - - private void waitObj(long ms) { - synchronized (waiter) { - try { - // notify examinerabout to wait on a monitor - notifyWaiter(); - - long base = System.nanoTime(); - setBlockingBaseTime(base); - waiter.wait(ms); - long now = System.nanoTime(); - addWaitTime(now - base); - } catch (Exception e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - testFailed = true; + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + p.arriveAndAwaitAdvance(); // phase[2] + p.arriveAndAwaitAdvance(); // phase[3] + synchronized(lock2) { + System.out.println("[LockerThread obtained Lock2]"); + p.arriveAndAwaitAdvance(); // phase[4] + } + p.arriveAndAwaitAdvance(); // phase[5] } } + }); + + lt.start(); + long tid = lt.getId(); + ThreadInfo ti = mbean.getThreadInfo(tid); + ThreadInfo ti1 = null; + String lockName = null; + synchronized(lock1) { + p.arriveAndAwaitAdvance(); // phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); + lockName = mbean.getThreadInfo(tid).getLockName(); } + p.arriveAndAwaitAdvance(); // phase[2] - private void test() { - // notify examiner about to block on lockA - notifyWaiter(); + ti1 = mbean.getThreadInfo(tid); + testBlocked(ti, ti1, lockName, lock1); + ti = ti1; - long base = System.nanoTime(); - setBlockingBaseTime(base); - synchronized (lockA) { - long now = System.nanoTime(); - addBlockedEnterTime(now - base); - - A(); // Expected blocked count = 1 - } - E(); + synchronized(lock2) { + p.arriveAndAwaitAdvance(); // phase [3] + waitForThreadState(lt, Thread.State.BLOCKED); + lockName = mbean.getThreadInfo(tid).getLockName(); } - private void A() { - // notify examiner about to block on lockB - notifyWaiter(); + p.arriveAndAwaitAdvance(); // phase [4] + testBlocked(ti, mbean.getThreadInfo(tid), lockName, lock2); + p.arriveAndDeregister(); - long base = System.nanoTime(); - setBlockingBaseTime(base); - synchronized (lockB) { - long now = System.nanoTime(); - addBlockedEnterTime(now - base); + lt.join(); - B(); // Expected blocked count = 2 + System.out.println("OK"); + } + + /** + * Tests that waiting on a single monitor properly increases the waited + * count by 1 and the waited time by a positive number. + */ + private static void testWaitingOnSimpleMonitor() throws Exception { + System.out.println("testWaitingOnSimpleMonitor"); + final Object lock1 = new Object(); + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + try { + lock1.wait(300); + } catch (InterruptedException ex) { + // ignore + } + p.arriveAndAwaitAdvance(); // phase[2] + } + p.arriveAndAwaitAdvance(); // phase[3] } + }); + + lt.start(); + ThreadInfo ti1 = mbean.getThreadInfo(lt.getId()); + synchronized(lock1) { + p.arriveAndAwaitAdvance(); // phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); } - private void B() { - // notify examiner about to block on lockC - notifyWaiter(); + p.arriveAndAwaitAdvance(); // phase[2] - long base = System.nanoTime(); - setBlockingBaseTime(base); - synchronized (lockC) { - long now = System.nanoTime(); - addBlockedEnterTime(now - base); + ThreadInfo ti2 = mbean.getThreadInfo(lt.getId()); + p.arriveAndDeregister(); // phase[3] - C(); // Expected blocked count = 3 + lt.join(); + + testWaited(ti1, ti2, 1); + System.out.println("OK"); + } + + /** + * Tests that waiting multiple times on the same monitor subsequently + * increases the waited count by the number of subsequent calls and the + * waited time by a positive number. + */ + private static void testMultiWaitingOnSimpleMonitor() throws Exception { + System.out.println("testWaitingOnMultipleMonitors"); + final Object lock1 = new Object(); + + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + for (int i = 0; i < 3; i++) { + try { + lock1.wait(300); + } catch (InterruptedException ex) { + // ignore + } + p.arriveAndAwaitAdvance(); // phase[2-4] + } + } + p.arriveAndAwaitAdvance(); // phase[5] } + }); + + lt.start(); + ThreadInfo ti1 = mbean.getThreadInfo(lt.getId()); + synchronized(lock1) { + p.arriveAndAwaitAdvance(); //phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); } - private void C() { - // notify examiner about to block on lockD - notifyWaiter(); + int phase = p.getPhase(); + while ((p.arriveAndAwaitAdvance() - phase) < 3); // phase[2-4] - long base = System.nanoTime(); - setBlockingBaseTime(base); - synchronized (lockD) { - long now = System.nanoTime(); - addBlockedEnterTime(now - base); + ThreadInfo ti2 = mbean.getThreadInfo(lt.getId()); + p.arriveAndDeregister(); // phase[5] - D(); // Expected blocked count = 4 - } - } - private void D() { - goSleep(50); - } - private void E() { - final int WAIT = 1000; - waitObj(WAIT); - waitObj(WAIT); - waitObj(WAIT); - } + lt.join(); + testWaited(ti1, ti2, 3); + System.out.println("OK"); + } - public void run() { - test(); - } // run() - } // BlockedThread + /** + * Tests that waiting on monitors places in nested synchronized blocks + * properly increases the waited count by the number of times the "lock.wait()" + * was invoked and the waited time by a positive number. + */ + private static void testWaitingOnNestedMonitor() throws Exception { + System.out.println("testWaitingOnNestedMonitor"); + final Object lock1 = new Object(); + final Object lock2 = new Object(); + final Object lock3 = new Object(); - static int blockedCount = 0; - static int waitedCount = 0; - static class Examiner extends StatThread { - private BlockedThread blockedThread; - private Semaphore semaphore = new Semaphore(); + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + try { + lock1.wait(300); + } catch (InterruptedException ex) { + // ignore + } - Examiner(String name) { - super(name); - } - - public void setThread(BlockedThread thread) { - blockedThread = thread; - } - - private void blockedTimeRangeCheck(StatThread t, - long blockedTime, - long nowNano) - throws Exception { - long expected = t.totalBlockedTimeMs(nowNano); - - // accept 5% range - timeRangeCheck(blockedTime, expected, 5); - } - private void waitedTimeRangeCheck(StatThread t, - long waitedTime, - long nowNano) - throws Exception { - long expected = t.totalWaitTimeMs(nowNano); - - // accept 5% range - timeRangeCheck(waitedTime, expected, 5); - } - - private void timeRangeCheck(long time, long expected, int percent) - throws Exception { - - double diff = expected - time; - - if (trace) { - System.out.println(" Time = " + time + - " expected = " + expected + - ". Diff = " + diff); - - } - // throw an exception if blockedTime and expectedTime - // differs > percent% - if (diff < 0) { - diff = diff * -1; - } - - long range = (expected * percent) / 100; - // minimum range = 2 ms - if (range < 2) { - range = 2; - } - if (diff > range) { - throw new RuntimeException("TEST FAILED: " + - "Time returned = " + time + - " expected = " + expected + ". Diff = " + diff); - } - } - private void checkInfo(StatThread t, Thread.State s, Object lock, - String lockName, int bcount, int wcount) - throws Exception { - - String action = "ERROR"; - if (s == Thread.State.WAITING || s == Thread.State.TIMED_WAITING) { - action = "wait on "; - } else if (s == Thread.State.BLOCKED) { - action = "block on "; - } - System.out.println(t + " expected to " + action + lockName + - " with blocked count = " + bcount + - " and waited count = " + wcount); - - long now = System.nanoTime(); - ThreadInfo info = mbean.getThreadInfo(t.getId()); - if (info.getThreadState() != s) { - printStack(t, info.getStackTrace()); - throw new RuntimeException("TEST FAILED: " + - "Thread state returned is " + info.getThreadState() + - ". Expected to be " + s); - } - - if (info.getLockName() == null || - !info.getLockName().equals(lock.toString())) { - throw new RuntimeException("TEST FAILED: " + - "getLockName() returned " + info.getLockName() + - ". Expected to be " + lockName + " - " + lock.toString()); - } - - if (info.getBlockedCount() != bcount) { - throw new RuntimeException("TEST FAILED: " + - "Blocked Count returned is " + info.getBlockedCount() + - ". Expected to be " + bcount); - } - if (info.getWaitedCount() != wcount) { - throw new RuntimeException("TEST FAILED: " + - "Waited Count returned is " + info.getWaitedCount() + - ". Expected to be " + wcount); - } - - String lockObj = info.getLockName(); - if (lockObj == null || !lockObj.equals(lock.toString())) { - throw new RuntimeException("TEST FAILED: " + - "Object blocked on is " + lockObj + - ". Expected to be " + lock.toString()); - } - - if (!blockedTimeCheck) { - return; - } - long blockedTime = info.getBlockedTime(); - if (blockedTime < 0) { - throw new RuntimeException("TEST FAILED: " + - "Blocked time returned is negative = " + blockedTime); - } - - if (s == Thread.State.BLOCKED) { - blockedTimeRangeCheck(t, blockedTime, now); - } else { - timeRangeCheck(blockedTime, t.totalBlockedTimeMs(), 5); - } - - long waitedTime = info.getWaitedTime(); - if (waitedTime < 0) { - throw new RuntimeException("TEST FAILED: " + - "Waited time returned is negative = " + waitedTime); - } - if (s == Thread.State.WAITING || s == Thread.State.TIMED_WAITING) { - waitedTimeRangeCheck(t, waitedTime, now); - } else { - timeRangeCheck(waitedTime, t.totalWaitTimeMs(), 5); - } - - } - - private void examine() { - try { - synchronized (lockD) { - synchronized (lockC) { - synchronized (lockB) { - synchronized (lockA) { - // notify main thread to continue - semaphore.semaV(); - - // wait until BlockedThread has started - blockedThread.waitUntilBlocked(); - - blockedCount++; - checkInfo(blockedThread, Thread.State.BLOCKED, - lockA, "lockA", - blockedCount, waitedCount); - } - - // wait until BlockedThread to block on lockB - blockedThread.waitUntilBlocked(); - - blockedCount++; - checkInfo(blockedThread, Thread.State.BLOCKED, - lockB, "lockB", - blockedCount, waitedCount); + p.arriveAndAwaitAdvance(); // phase[2] + synchronized(lock2) { + System.out.println("[LockerThread obtained Lock2]"); + try { + lock2.wait(300); + } catch (InterruptedException ex) { + // ignore } - // wait until BlockedThread to block on lockC - blockedThread.waitUntilBlocked(); - - blockedCount++; - checkInfo(blockedThread, Thread.State.BLOCKED, - lockC, "lockC", - blockedCount, waitedCount); + p.arriveAndAwaitAdvance(); // phase[3] + synchronized(lock3) { + System.out.println("[LockerThread obtained Lock3]"); + try { + lock3.wait(300); + } catch (InterruptedException ex) { + // ignore + } + p.arriveAndAwaitAdvance(); // phase[4] + } } - // wait until BlockedThread to block on lockD - blockedThread.waitUntilBlocked(); - blockedCount++; - - checkInfo(blockedThread, Thread.State.BLOCKED, - lockD, "lockD", - blockedCount, waitedCount); } - - // wait until BlockedThread about to call E() - // BlockedThread will wait on waiter for 3 times - blockedThread.waitUntilWaiting(); - - waitedCount++; - checkInfo(blockedThread, Thread.State.TIMED_WAITING, - waiter, "waiter", blockedCount, waitedCount); - - blockedThread.waitUntilWaiting(); - - waitedCount++; - checkInfo(blockedThread, Thread.State.TIMED_WAITING, - waiter, "waiter", blockedCount, waitedCount); - - blockedThread.waitUntilWaiting(); - - waitedCount++; - checkInfo(blockedThread, Thread.State.TIMED_WAITING, - waiter, "waiter", blockedCount, waitedCount); - - } catch (Exception e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - testFailed = true; + p.arriveAndAwaitAdvance(); // phase[5] } + }); + + lt.start(); + ThreadInfo ti1 = mbean.getThreadInfo(lt.getId()); + synchronized(lock1) { + p.arriveAndAwaitAdvance(); // phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); } - public void run() { - examine(); - } // run() - - public void waitUntilWaiting() { - semaphore.semaP(); - - // wait until the examiner is waiting for - while (!blockedThread.hasWaitersForBlocked()) { - goSleep(50); - } - // give a chance for the examiner thread to really wait - goSleep(20); - + synchronized(lock2) { + p.arriveAndAwaitAdvance(); // phase[2] + waitForThreadState(lt, Thread.State.BLOCKED); } - } // Examiner + + synchronized(lock3) { + p.arriveAndAwaitAdvance(); // phase[3] + waitForThreadState(lt, Thread.State.BLOCKED); + } + + p.arriveAndAwaitAdvance(); // phase[4] + ThreadInfo ti2 = mbean.getThreadInfo(lt.getId()); + p.arriveAndDeregister(); // phase[5] + + lt.join(); + testWaited(ti1, ti2, 3); + System.out.println("OK"); + } + + private static void testWaited(ThreadInfo ti1, ThreadInfo ti2, int waited) throws Error { + long waitCntDiff = ti2.getWaitedCount() - ti1.getWaitedCount(); + long waitTimeDiff = ti2.getWaitedTime() - ti1.getWaitedTime(); + if (waitCntDiff < waited) { + throw new Error("Unexpected diff in waited count. Expecting at least " + + waited + " , got " + waitCntDiff); + } + if (waitTimeDiff <= 0) { + throw new Error("Unexpected diff in waited time. Expecting increasing " + + "value, got " + waitTimeDiff + "ms"); + } + } + + private static void testBlocked(ThreadInfo ti1, ThreadInfo ti2, + String lockName, final Object lock) + throws Error { + long blkCntDiff = ti2.getBlockedCount() - ti1.getBlockedCount(); + long blkTimeDiff = ti2.getBlockedTime() - ti1.getBlockedTime(); + if (blkCntDiff < 1) { + throw new Error("Unexpected diff in blocked count. Expecting at least 1, " + + "got " + blkCntDiff); + } + if (blkTimeDiff < 0) { + throw new Error("Unexpected diff in blocked time. Expecting a positive " + + "number, got " + blkTimeDiff); + } + if (!lockName.equals(lock.toString())) { + throw new Error("Unexpected blocked monitor name. Expecting " + + lock.toString() + ", got " + + lockName); + } + } } diff --git a/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java b/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java deleted file mode 100644 index 6cba7e73521..00000000000 --- a/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * - * @summary This class is used to synchronize execution of two threads. - * @author Swamy Venkataramanappa - */ - -import java.util.concurrent.Semaphore; - -public class ThreadExecutionSynchronizer { - - private volatile boolean waiting; - private final Semaphore semaphore; - - public ThreadExecutionSynchronizer() { - semaphore = new Semaphore(1); - waiting = false; - } - - // Synchronizes two threads execution points. - // Basically any thread could get scheduled to run and - // it is not possible to know which thread reaches expected - // execution point. So whichever thread reaches a execution - // point first wait for the second thread. When the second thread - // reaches the expected execution point will wake up - // the thread which is waiting here. - void stopOrGo() { - semaphore.acquireUninterruptibly(); // Thread can get blocked. - if (!waiting) { - waiting = true; - // Wait for second thread to enter this method. - while(!semaphore.hasQueuedThreads()) { - try { - Thread.sleep(20); - } catch (InterruptedException xx) {} - } - semaphore.release(); - } else { - waiting = false; - semaphore.release(); - } - } - - // Wrapper function just for code readability. - void waitForSignal() { - stopOrGo(); - goSleep(50); - } - - void signal() { - stopOrGo(); - goSleep(50); - } - - private static void goSleep(long ms) { - try { - Thread.sleep(ms); - } catch (InterruptedException e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - } - } -} diff --git a/jdk/test/java/net/Authenticator/B4933582.sh b/jdk/test/java/net/Authenticator/B4933582.sh index fa1768398ae..1e1268e3f8a 100644 --- a/jdk/test/java/net/Authenticator/B4933582.sh +++ b/jdk/test/java/net/Authenticator/B4933582.sh @@ -26,7 +26,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/net/DatagramSocket/Send12k.java b/jdk/test/java/net/DatagramSocket/Send12k.java index 6446330d35e..f6375c1f0b7 100644 --- a/jdk/test/java/net/DatagramSocket/Send12k.java +++ b/jdk/test/java/net/DatagramSocket/Send12k.java @@ -53,7 +53,7 @@ public class Send12k { boolean sendOkay = true; try { s1.send(p1); - } catch (SocketException e) { + } catch (IOException e) { /* * Prior to merlin a send of > 12k to loopback address * would fail silently. diff --git a/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh b/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh index 271b21d26f3..eac0315e7e3 100644 --- a/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh +++ b/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh @@ -27,7 +27,7 @@ # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Darwin ) + SunOS | Darwin | AIX ) PATHSEP=":" FILESEP="/" ;; diff --git a/jdk/test/java/net/Socket/OldSocketImpl.sh b/jdk/test/java/net/Socket/OldSocketImpl.sh index bbe055fa2ea..70b92afc7b6 100644 --- a/jdk/test/java/net/Socket/OldSocketImpl.sh +++ b/jdk/test/java/net/Socket/OldSocketImpl.sh @@ -28,7 +28,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/net/URL/B5086147.sh b/jdk/test/java/net/URL/B5086147.sh index a669e1347ee..772d7a32cd1 100644 --- a/jdk/test/java/net/URL/B5086147.sh +++ b/jdk/test/java/net/URL/B5086147.sh @@ -26,7 +26,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) exit 0 ;; CYGWIN* ) diff --git a/jdk/test/java/net/URLClassLoader/B5077773.sh b/jdk/test/java/net/URLClassLoader/B5077773.sh index 9bd9a1e6f34..3b52698840a 100644 --- a/jdk/test/java/net/URLClassLoader/B5077773.sh +++ b/jdk/test/java/net/URLClassLoader/B5077773.sh @@ -34,7 +34,7 @@ OS=`uname -s` case "$OS" in - SunOS | Darwin ) + SunOS | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh b/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh index 0d212c62aae..339525a1042 100644 --- a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh +++ b/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh @@ -27,7 +27,7 @@ OS=`uname -s` case "$OS" in - SunOS | Darwin ) + SunOS | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/net/URLConnection/6212146/test.sh b/jdk/test/java/net/URLConnection/6212146/test.sh index 45f5310005e..9a0615cadf3 100644 --- a/jdk/test/java/net/URLConnection/6212146/test.sh +++ b/jdk/test/java/net/URLConnection/6212146/test.sh @@ -33,7 +33,7 @@ OS=`uname -s` case "$OS" in - SunOS | Darwin ) + SunOS | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh b/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh index fd76d5a5031..5c14e7392ec 100644 --- a/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh +++ b/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh @@ -34,7 +34,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) ;; + SunOS | Linux | Darwin | AIX ) ;; # Skip locale test for Windows Windows* | CYGWIN* ) echo "Passed"; exit 0 ;; diff --git a/jdk/test/java/nio/charset/spi/basic.sh b/jdk/test/java/nio/charset/spi/basic.sh index 6b5ad3108ac..6bc60d140e7 100644 --- a/jdk/test/java/nio/charset/spi/basic.sh +++ b/jdk/test/java/nio/charset/spi/basic.sh @@ -48,7 +48,7 @@ JAR=$COMPILEJAVA/bin/jar DIR=`pwd` case `uname` in - SunOS | Linux | Darwin ) CPS=':' ;; + SunOS | Linux | Darwin | AIX ) CPS=':' ;; Windows* ) CPS=';' ;; CYGWIN* ) DIR=`/usr/bin/cygpath -a -s -m $DIR` @@ -81,7 +81,7 @@ if [ $# -gt 0 ]; then L="$1" shift s=`uname -s` - if [ $s != Linux -a $s != SunOS -a $s != Darwin ]; then + if [ $s != Linux -a $s != SunOS -a $s != Darwin -a $s != AIX ]; then echo "$L: Locales not supported on this system, skipping..." exit 0 fi diff --git a/jdk/test/java/nio/file/Files/SBC.java b/jdk/test/java/nio/file/Files/SBC.java index ab467266edf..d26428d5f60 100644 --- a/jdk/test/java/nio/file/Files/SBC.java +++ b/jdk/test/java/nio/file/Files/SBC.java @@ -235,7 +235,7 @@ public class SBC { try { Files.newByteChannel(link, READ, LinkOption.NOFOLLOW_LINKS); throw new RuntimeException(); - } catch (IOException x) { + } catch (IOException | UnsupportedOperationException x) { } finally { TestUtil.deleteUnchecked(link); } diff --git a/jdk/test/java/nio/file/Files/probeContentType/ForceLoad.java b/jdk/test/java/nio/file/Files/probeContentType/ForceLoad.java index 5bb19ddaaa0..4a4edb26eb8 100644 --- a/jdk/test/java/nio/file/Files/probeContentType/ForceLoad.java +++ b/jdk/test/java/nio/file/Files/probeContentType/ForceLoad.java @@ -25,6 +25,8 @@ * @bug 4313887 * @summary Test library dependencies by invoking Files.probeContentType * before other methods that would cause nio.dll to be loaded. + * @build ForceLoad SimpleFileTypeDetector + * @run main/othervm ForceLoad */ import java.nio.file.*; diff --git a/jdk/test/java/nio/file/Files/walkFileTree/find.sh b/jdk/test/java/nio/file/Files/walkFileTree/find.sh index 9a99147fda0..2549ad3cbbb 100644 --- a/jdk/test/java/nio/file/Files/walkFileTree/find.sh +++ b/jdk/test/java/nio/file/Files/walkFileTree/find.sh @@ -43,7 +43,14 @@ case "$OS" in echo "This test does not run on Windows" exit 0 ;; + AIX ) + CLASSPATH=${TESTCLASSES}:${TESTSRC} + # On AIX "find -follow" may core dump on recursive links without '-L' + # see: http://www-01.ibm.com/support/docview.wss?uid=isg1IV28143 + FIND_FOLLOW_OPT="-L" + ;; * ) + FIND_FOLLOW_OPT= CLASSPATH=${TESTCLASSES}:${TESTSRC} ;; esac @@ -65,7 +72,7 @@ if [ $? != 0 ]; then failures=`expr $failures + 1`; fi # cycles (sym links to ancestor directories), other versions do # not. For that reason we run PrintFileTree with the -printCycles # option when the output without this option differs to find(1). -find "$ROOT" -follow > out1 +find $FIND_FOLLOW_OPT "$ROOT" -follow > out1 $JAVA ${TESTVMOPTS} PrintFileTree -follow "$ROOT" > out2 diff out1 out2 if [ $? != 0 ]; diff --git a/jdk/test/java/rmi/MarshalledObject/compare/Compare.java b/jdk/test/java/rmi/MarshalledObject/compare/Compare.java index 20322646920..94eff595092 100644 --- a/jdk/test/java/rmi/MarshalledObject/compare/Compare.java +++ b/jdk/test/java/rmi/MarshalledObject/compare/Compare.java @@ -29,7 +29,7 @@ * not involved in location should be compared. * @author Ken Arnold * - * @run main Compare 11 annotatedRef + * @run main/othervm Compare 11 annotatedRef */ import java.rmi.MarshalledObject; diff --git a/jdk/test/java/rmi/MarshalledObject/compare/HashCode.java b/jdk/test/java/rmi/MarshalledObject/compare/HashCode.java index 768e418ae5b..86fc5ddfe23 100644 --- a/jdk/test/java/rmi/MarshalledObject/compare/HashCode.java +++ b/jdk/test/java/rmi/MarshalledObject/compare/HashCode.java @@ -27,7 +27,7 @@ * @summary MarshalledObject with null throws NullPointerException * @author Ken Arnold * - * @run main HashCode 11 annotatedRef + * @run main/othervm HashCode 11 annotatedRef */ import java.rmi.MarshalledObject; diff --git a/jdk/test/java/rmi/Naming/DefaultRegistryPort.java b/jdk/test/java/rmi/Naming/DefaultRegistryPort.java index a4c49792536..be1cba70f15 100644 --- a/jdk/test/java/rmi/Naming/DefaultRegistryPort.java +++ b/jdk/test/java/rmi/Naming/DefaultRegistryPort.java @@ -28,7 +28,7 @@ * @author Dana Burns * @library ../testlibrary * @build TestLibrary - * @run main DefaultRegistryPort + * @run main/othervm DefaultRegistryPort */ /* diff --git a/jdk/test/java/rmi/Naming/LookupIPv6.java b/jdk/test/java/rmi/Naming/LookupIPv6.java index da6c62cbc83..453ac166a3b 100644 --- a/jdk/test/java/rmi/Naming/LookupIPv6.java +++ b/jdk/test/java/rmi/Naming/LookupIPv6.java @@ -25,7 +25,8 @@ * @summary Ensure that java.rmi.Naming.lookup can handle URLs containing * IPv6 addresses. * @bug 4402708 - * + * @library ../testlibrary + * @build TestLibrary * @run main/othervm -Djava.net.preferIPv6Addresses=true LookupIPv6 */ @@ -62,17 +63,19 @@ public class LookupIPv6 { * an Inet6Address since this test is run with * -Djava.net.preferIPv6Addresses=true. */ + int port = TestLibrary.getUnusedRandomPort(); InetAddress localAddr = InetAddress.getAllByName(null)[0]; if (localAddr instanceof Inet6Address) { System.out.println("IPv6 detected"); Registry reg; try { - reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); + reg = LocateRegistry.createRegistry(port); } catch (Exception ex) { reg = LocateRegistry.getRegistry(); } reg.rebind("foo", reg); - Naming.lookup("rmi://[" + localAddr.getHostAddress() + "]/foo"); + Naming.lookup(String.format("rmi://[%s]:%d/foo", + localAddr.getHostAddress(), port)); } } } diff --git a/jdk/test/java/rmi/Naming/LookupNameWithColon.java b/jdk/test/java/rmi/Naming/LookupNameWithColon.java index e3865fd1239..4250b6b37c9 100644 --- a/jdk/test/java/rmi/Naming/LookupNameWithColon.java +++ b/jdk/test/java/rmi/Naming/LookupNameWithColon.java @@ -28,7 +28,7 @@ * * @library ../testlibrary * @build TestLibrary - * @run main LookupNameWithColon + * @run main/othervm LookupNameWithColon */ import java.rmi.Naming; diff --git a/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java b/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java index 725d9ca6c7a..418c3726c2d 100644 --- a/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java +++ b/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java @@ -28,7 +28,7 @@ * @author Dana Burns * @library ../../testlibrary * @build TestLibrary Legal LegalRegistryNames_Stub - * @run main LegalRegistryNames + * @run main/othervm LegalRegistryNames */ import java.net.InetAddress; diff --git a/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java b/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java index 32cbe5ff481..93d1ce8427d 100644 --- a/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java +++ b/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -43,7 +43,7 @@ public class CheckPackageAccess { * access to classes in the sun.* hierarchy, which is what is specified * in the JDK's default java.security file. */ - private final static String restrictedClassName = "sun.misc.Ref"; + private final static String restrictedClassName = "sun.misc.Cache"; public static void main(String[] args) { diff --git a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh index 9c7a2eac4ec..86dfff43f5b 100644 --- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh +++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh @@ -33,7 +33,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN* ) diff --git a/jdk/test/java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java b/jdk/test/java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java index f37cbaeb79f..fac64b5691a 100644 --- a/jdk/test/java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java +++ b/jdk/test/java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java @@ -25,6 +25,8 @@ * @test * @bug 4252236 * @summary ActivationGroupDesc should not do early binding of default classname + * This test doesn't need to run with othervm option as all it does is + * create an ActivationGroupDesc instance, which has no side effects * @author Laird Dornin * * @library ../../../testlibrary diff --git a/jdk/test/java/rmi/registry/readTest/readTest.sh b/jdk/test/java/rmi/registry/readTest/readTest.sh index b6e7c55c46b..812d0a42b54 100644 --- a/jdk/test/java/rmi/registry/readTest/readTest.sh +++ b/jdk/test/java/rmi/registry/readTest/readTest.sh @@ -34,7 +34,7 @@ ARGS="" REGARGS="" case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" FILEURL="file:" diff --git a/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java b/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java index ef524a4dd8a..fd5ef1eacce 100644 --- a/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java +++ b/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -123,7 +123,7 @@ public class NotExtending implements Remote { } /** - * Force desparate garbage collection so that all sun.misc.Ref instances + * Force desperate garbage collection so that soft references * will be cleared. * * This method is required with the JDK 1.1.x RMI runtime so that the diff --git a/jdk/test/java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java b/jdk/test/java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java index def2806964d..eeb96a14ace 100644 --- a/jdk/test/java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java +++ b/jdk/test/java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java @@ -30,7 +30,7 @@ * @bug 6597112 * @summary GC'ing objects whilst being exported to RMI should not cause exceptions * @author Neil Richards , - * @run main GcDuringExport + * @run main/othervm GcDuringExport */ import java.rmi.Remote; diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh index 7f5dc78c23a..3794cd41bbb 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh @@ -62,6 +62,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh index e1ed14425fa..f2002448566 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh @@ -46,6 +46,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh index e817db37898..2951a28e549 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh @@ -70,6 +70,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; Windows* ) PATHSEP=";" FILESEP="\\" diff --git a/jdk/test/java/security/Security/signedfirst/Dyn.sh b/jdk/test/java/security/Security/signedfirst/Dyn.sh index 73cff3e80da..019a2f46c60 100644 --- a/jdk/test/java/security/Security/signedfirst/Dyn.sh +++ b/jdk/test/java/security/Security/signedfirst/Dyn.sh @@ -62,6 +62,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/java/security/Security/signedfirst/Static.sh b/jdk/test/java/security/Security/signedfirst/Static.sh index 46765e4a92b..b22ca05e184 100644 --- a/jdk/test/java/security/Security/signedfirst/Static.sh +++ b/jdk/test/java/security/Security/signedfirst/Static.sh @@ -62,6 +62,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/java/security/cert/X509Certificate/X509BadCertificate.java b/jdk/test/java/security/cert/X509Certificate/X509BadCertificate.java new file mode 100644 index 00000000000..b2a6c6923fa --- /dev/null +++ b/jdk/test/java/security/cert/X509Certificate/X509BadCertificate.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8028431 + * @summary Make sure that proper CertificateException is thrown + * when loading bad x509 certificate + * @author Artem Smotrakov + */ + +import java.io.File; +import java.io.FileInputStream; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.security.cert.CertificateException; + +public class X509BadCertificate { + + public static void main(String[] args) throws Exception { + test("bad-cert-1.pem"); + } + + /** + * Parse X509 certificates. + */ + static void test(String filename) throws Exception { + try { + System.out.println("Parse file " + filename); + File f = new File(System.getProperty("test.src", "."), filename); + try (FileInputStream fis = new FileInputStream(f)) { + CertificateFactory cf = CertificateFactory.getInstance("X509"); + X509Certificate cert = (X509Certificate) + cf.generateCertificate(fis); + } + throw new Exception("Test failed: " + + "expected CertificateParsingException was not thrown"); + } catch (CertificateException e) { + System.out.println("Test passed: expected exception was thrown: " + + e.toString()); + } + } +} diff --git a/jdk/test/java/security/cert/X509Certificate/bad-cert-1.pem b/jdk/test/java/security/cert/X509Certificate/bad-cert-1.pem new file mode 100644 index 00000000000..0e6c355d0fd --- /dev/null +++ b/jdk/test/java/security/cert/X509Certificate/bad-cert-1.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIJAJYB3qu9C2kiMA0GCSqGSIb3DQEBBQUAMEoxDTALBgNV +BAMMBFRlc3QxDTALBgNVBAsMBEphdmExDzANBgNVBAoMBk9yYWNsZTEMMAoGA1UE +BwwDU1BCMQswCQYDVQQGEwJSVTAeFw0xMzEyMjMwNzA4MDhaFw0yMzEyMjEwNzA4 +MDhaMEoxDTALBgNVBAMMBFRlc3QxDTALBgNVBAsMBEphdmExDzANBgNVBAoMBk9y +YWNsZTEMMAoGA1UMBwwDU1BCMQswCQYDVQQGEwJSVTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAOqiCN4gFxehl547Q7/VNGbGApr+wszLdanHPucAH6Wf +LtcRhKNUSqtBAQxEpFrTpMNEqm2GElAjiPa6m48qIjLVSvOb/9w3G/yXB8zyZbIm +/Nfp2sT4OEaa1JSEZSpolhS4FfqYzjGQp5cn4Xn4zKjDgiceHgfLls5x2dRydQZO +Yf91qSIioZxVHUtlo8yztkieiSaqPWt3nJ4PIwhFbsu1HVmWaYZD+nBYCKgVHqrS +cueO98Ca4Doz73O27X1dVbQBdLS0JI7qVAG8LD388iPL8qbsOkgWPzmEQ+kLRKO4 +g7RpuwlXuwaMSh95NWaxlu4Ob6GRJQmpconYoe13+7ECAwEAAaNQME4wHQYDVR0O +BBYEFIG8TPobXcbNbDi+zKudd9whpxoNMB8GA1UdIwQYMBaAFIG8TPobXcbNbDi+ +zKudd9whpxoNMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFRQADggEBAAynN+e7 +h+ufT5SBKN/gBuJAnF1mKIPESiipuv5KoYUGZOY8ShgYLcwY+qnbuHYFUlvq6Zns +K4/e+x/16h32vD7dEPkNvukbvER4YJQQiN6osDfXpTPzixYftWdmtX0u8xQfwb/g +R8DS7bazz99jVXk+jTK4yWBY+gMwEat+LyNQ5cyq8Qhi1oBKUbGRbiOts19B97fn +Rv8TsyXN3INLGYhdVxZoD7E5tyG1ydSFmOMadulAC2epBXDHOXZnz2UWauJc0XW5 +1L/YQVri47VkdHS3tisBzELEJdLmdMDb+5tAU+lItXmTXe2/PB53WIvsEIb4t+eQ +wY0hCj9lVJlajTQ= +-----END CERTIFICATE----- diff --git a/jdk/test/java/util/Currency/PropertiesTest.sh b/jdk/test/java/util/Currency/PropertiesTest.sh index 65ab89da2e0..01f1326cd2d 100644 --- a/jdk/test/java/util/Currency/PropertiesTest.sh +++ b/jdk/test/java/util/Currency/PropertiesTest.sh @@ -52,7 +52,7 @@ echo "CLASSPATH=${CLASSPATH}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/util/Locale/LocaleCategory.sh b/jdk/test/java/util/Locale/LocaleCategory.sh index 7715d354225..989556a2477 100644 --- a/jdk/test/java/util/Locale/LocaleCategory.sh +++ b/jdk/test/java/util/Locale/LocaleCategory.sh @@ -52,7 +52,7 @@ echo "CLASSPATH=${CLASSPATH}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | *BSD | Darwin ) + SunOS | Linux | *BSD | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/util/Locale/LocaleProviders.sh b/jdk/test/java/util/Locale/LocaleProviders.sh index db6e4a92d62..58cd9c82060 100644 --- a/jdk/test/java/util/Locale/LocaleProviders.sh +++ b/jdk/test/java/util/Locale/LocaleProviders.sh @@ -56,7 +56,7 @@ echo "CLASSPATH=${CLASSPATH}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | *BSD | Darwin ) + SunOS | Linux | *BSD | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/util/Locale/LocaleTest.java b/jdk/test/java/util/Locale/LocaleTest.java index 8c9c4f16199..2a6824222b3 100644 --- a/jdk/test/java/util/Locale/LocaleTest.java +++ b/jdk/test/java/util/Locale/LocaleTest.java @@ -25,7 +25,7 @@ * @bug 4052404 4052440 4084688 4092475 4101316 4105828 4107014 4107953 4110613 * 4118587 4118595 4122371 4126371 4126880 4135316 4135752 4139504 4139940 4143951 * 4147315 4147317 4147552 4335196 4778440 4940539 5010672 6475525 6544471 6627549 - * 6786276 7066203 7085757 + * 6786276 7066203 7085757 8030696 * @summary test Locales */ /* @@ -62,6 +62,8 @@ */ import java.text.*; +import java.util.Arrays; +import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.Date; @@ -925,16 +927,20 @@ test commented out pending API-change approval } /* - * @bug 4147552 4778440 + * @bug 4147552 4778440 8030696 */ public void Test4147552() { Locale[] locales = { new Locale("no", "NO"), new Locale("no", "NO", "B"), - new Locale("no", "NO", "NY") }; + new Locale("no", "NO", "NY"), new Locale("nb", "NO"), + new Locale("nn", "NO") }; String[] englishDisplayNames = { "Norwegian (Norway)", "Norwegian (Norway,Bokm\u00e5l)", - "Norwegian (Norway,Nynorsk)" }; + "Norwegian (Norway,Nynorsk)", + "Norwegian Bokm\u00e5l (Norway)", + "Norwegian Nynorsk (Norway)" }; String[] norwegianDisplayNames = { "norsk (Norge)", - "norsk (Norge,bokm\u00e5l)", "norsk (Norge,nynorsk)" }; + "norsk (Norge,bokm\u00e5l)", "norsk (Noreg,nynorsk)", + "bokm\u00e5l (Norge)", "nynorsk (Noreg)" }; for (int i = 0; i < locales.length; i++) { Locale loc = locales[i]; @@ -948,6 +954,17 @@ test commented out pending API-change approval } } + /* + * @bug 8030696 + */ + public void Test8030696() { + List av = Arrays.asList(Locale.getAvailableLocales()); + if (!av.contains(new Locale("nb", "NO")) || + !av.contains(new Locale("nn", "NO"))) { + errln("\"nb-NO\" and/or \"nn-NO\" locale(s) not returned from getAvailableLocales()."); + } + } + static String escapeUnicode(String s) { StringBuffer buf = new StringBuffer(); for (int i=0; i list = new CopyOnWriteArrayList<>(); + list.add("A"); + list.add("B"); + list.add("C"); + list.add("D"); + list.add("E"); + + expectThrow(() -> list.subList(-1, 5)); + expectThrow(() -> list.subList(0, 6)); + expectThrow(() -> list.subList(4, 3)); + expectThrow(() -> list.subList(0, 5).subList(-1, 5)); + expectThrow(() -> list.subList(0, 5).subList(0, 6)); + expectThrow(() -> list.subList(0, 5).subList(4, 3)); + } + + static void expectThrow(Runnable r) { + try { + r.run(); + throw new RuntimeException("Failed: expected IOOBE to be thrown"); + } catch (IndexOutOfBoundsException x) { + // ok, excpeted + } + } +} + diff --git a/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh b/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh index eef8641c7b6..fc1aece9ebd 100644 --- a/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh +++ b/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh @@ -83,9 +83,9 @@ if [ "$status" != 0 ]; then fi if [ "$status" != 0 ]; then - echo "ERROR: 'jmap $jmap_option' is not supported so this test" - echo "ERROR: cannot work reliably. Aborting!" - exit 2 + echo "WARNING: 'jmap $jmap_option' is not supported on this platform" + echo "WARNING: so this test cannot work reliably. Aborting!" + exit 0 fi fi diff --git a/jdk/test/java/util/logging/LoggerWeakRefLeak.sh b/jdk/test/java/util/logging/LoggerWeakRefLeak.sh index ea3dc1f8f1d..25cc4aabc74 100644 --- a/jdk/test/java/util/logging/LoggerWeakRefLeak.sh +++ b/jdk/test/java/util/logging/LoggerWeakRefLeak.sh @@ -83,9 +83,9 @@ if [ "$status" != 0 ]; then fi if [ "$status" != 0 ]; then - echo "ERROR: 'jmap $jmap_option' is not supported so this test" - echo "ERROR: cannot work reliably. Aborting!" - exit 2 + echo "WARNING: 'jmap $jmap_option' is not supported on this platform" + echo "WARNING: so this test cannot work reliably. Aborting!" + exit 0 fi fi diff --git a/jdk/test/java/util/logging/SimpleLogManager.java b/jdk/test/java/util/logging/SimpleLogManager.java index f469727654f..1e1da7919a5 100644 --- a/jdk/test/java/util/logging/SimpleLogManager.java +++ b/jdk/test/java/util/logging/SimpleLogManager.java @@ -98,16 +98,14 @@ public class SimpleLogManager extends CustomLogManager { return false; } CustomLogger newLogger = new CustomLogger(logger); - super.addLogger(newLogger); - return true; + return super.addLogger(newLogger); } public class CustomLogger extends Logger { + final Logger keepRef; // keep a strong reference to avoid GC. CustomLogger(Logger logger) { super(logger.getName(), logger.getResourceBundleName()); - } - CustomLogger(String name) { - super(name, null); + keepRef = logger; } } } diff --git a/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh b/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh index 28210696b39..bfb4a2a54c7 100644 --- a/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh +++ b/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh @@ -31,7 +31,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh b/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh index c16b60ff877..51eaa6eda0c 100644 --- a/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh +++ b/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh @@ -56,7 +56,7 @@ echo "TESTCLASSES=${TESTCLASSES}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh index 84a58535cf1..800a898eb1a 100644 --- a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh +++ b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh @@ -89,7 +89,7 @@ case "$OS" in FILESEP="/" ;; - Linux | Darwin ) + Linux | Darwin | AIX ) VAR="A different value for Linux" DEFAULT_JDK=/none #DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386 diff --git a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh index ed36fef3f17..eb60ba99282 100644 --- a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh +++ b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh @@ -90,7 +90,7 @@ case "$OS" in FILESEP="/" ;; - Linux | Darwin ) + Linux | Darwin | AIX ) VAR="A different value for Linux" DEFAULT_JDK=/none #DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386 diff --git a/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh b/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh index 18ffc1c8d40..1977ca80275 100644 --- a/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh +++ b/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh @@ -92,6 +92,14 @@ case "$OS" in TMP="/tmp" ;; + AIX ) + VAR="A different value for AIX" + DEFAULT_JDK=/ + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + Darwin ) VAR="A different value for MacOSX" DEFAULT_JDK=/usr diff --git a/jdk/test/javax/script/CommonSetup.sh b/jdk/test/javax/script/CommonSetup.sh index 69ed2379eda..7a64bd8c661 100644 --- a/jdk/test/javax/script/CommonSetup.sh +++ b/jdk/test/javax/script/CommonSetup.sh @@ -36,7 +36,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/javax/security/auth/Subject/doAs/Test.sh b/jdk/test/javax/security/auth/Subject/doAs/Test.sh index 73565211859..fac17d138c5 100644 --- a/jdk/test/javax/security/auth/Subject/doAs/Test.sh +++ b/jdk/test/javax/security/auth/Subject/doAs/Test.sh @@ -48,6 +48,11 @@ case "$OS" in FS="/" RM="/bin/rm -f" ;; + AIX ) + PS=":" + FS="/" + RM="/bin/rm -f" + ;; CYGWIN* ) PS=";" FS="/" diff --git a/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java b/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java index 805a6a203cb..86c22a10627 100644 --- a/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java +++ b/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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 @@ -28,6 +28,8 @@ import java.util.function.Function; /** + * @test + * @bug 8020816 * @author Robert Field */ diff --git a/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh b/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh index b562afa4323..fff2a3436fc 100644 --- a/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh +++ b/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh @@ -53,7 +53,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh b/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh index 4d1d6e8f93d..55d7e7635f4 100644 --- a/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh +++ b/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh @@ -43,7 +43,7 @@ CYGWIN_NT*) esac case $OS in -SunOS | Linux | Darwin) +SunOS | Linux | Darwin | AIX ) PATHSEP=":" FILESEP="/" DFILESEP=$FILESEP diff --git a/jdk/test/sun/misc/Version/Version.java b/jdk/test/sun/misc/Version/Version.java index 13e507540c1..85c8ce2a071 100644 --- a/jdk/test/sun/misc/Version/Version.java +++ b/jdk/test/sun/misc/Version/Version.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -116,10 +116,16 @@ public class Version { } else if (Character.isDigit(cs.charAt(0)) && Character.isDigit(cs.charAt(1)) && cs.charAt(2) == '.' && Character.isDigit(cs.charAt(3))) { - // HSX has nn.n (major.minor) version + // HSX has nn.n[n] (major.minor) version major = Integer.valueOf(version.substring(0, 2)).intValue(); - minor = Character.digit(cs.charAt(3), 10); - cs = cs.subSequence(4, cs.length()); + if (Character.isDigit(cs.charAt(4))) { + minor = Integer.valueOf(version.substring(3, 5)).intValue(); + cs = cs.subSequence(5, cs.length()); + } + else { + minor = Character.digit(cs.charAt(3), 10); + cs = cs.subSequence(4, cs.length()); + } } if (cs.charAt(0) == '_' && cs.length() >= 3 && Character.isDigit(cs.charAt(1)) && diff --git a/jdk/test/sun/net/ftp/MarkResetTest.sh b/jdk/test/sun/net/ftp/MarkResetTest.sh index c998bcffef2..3878b505d90 100644 --- a/jdk/test/sun/net/ftp/MarkResetTest.sh +++ b/jdk/test/sun/net/ftp/MarkResetTest.sh @@ -28,7 +28,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/net/www/http/HttpClient/RetryPost.java b/jdk/test/sun/net/www/http/HttpClient/RetryPost.java index 2f5add47afa..da7d868c3f2 100644 --- a/jdk/test/sun/net/www/http/HttpClient/RetryPost.java +++ b/jdk/test/sun/net/www/http/HttpClient/RetryPost.java @@ -55,8 +55,8 @@ public class RetryPost void doClient() { try { InetSocketAddress address = httpServer.getAddress(); - URL url = new URL("http://" + address.getHostName() + ":" + address.getPort() + "/test/"); - HttpURLConnection uc = (HttpURLConnection)url.openConnection(); + URL url = new URL("http://localhost:" + address.getPort() + "/test/"); + HttpURLConnection uc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY); uc.setDoOutput(true); uc.setRequestMethod("POST"); uc.getResponseCode(); diff --git a/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh b/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh index 17d08cd30b0..c500171220c 100644 --- a/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh +++ b/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh @@ -28,7 +28,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/net/www/protocol/jar/B5105410.sh b/jdk/test/sun/net/www/protocol/jar/B5105410.sh index f47ca5ed99d..aa31a53ebc2 100644 --- a/jdk/test/sun/net/www/protocol/jar/B5105410.sh +++ b/jdk/test/sun/net/www/protocol/jar/B5105410.sh @@ -31,7 +31,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh index 5f039b97c93..69632014bac 100644 --- a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh +++ b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh @@ -31,7 +31,7 @@ DEST=`pwd` OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/rmi/rmic/RMIGenerator/RmicDefault.java b/jdk/test/sun/rmi/rmic/RMIGenerator/RmicDefault.java index 5f4587ecdfb..ff203731664 100644 --- a/jdk/test/sun/rmi/rmic/RMIGenerator/RmicDefault.java +++ b/jdk/test/sun/rmi/rmic/RMIGenerator/RmicDefault.java @@ -28,7 +28,7 @@ * @library ../../../../java/rmi/testlibrary * * @build StreamPipe - * @run main RmicDefault + * @run main/othervm RmicDefault */ /* diff --git a/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh b/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh index 020202a1818..25913c63ea0 100644 --- a/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh +++ b/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh @@ -61,13 +61,13 @@ mkdir $newv11dir $newvcompatdir $newv12dir set -ex -${TESTJAVA}/bin/rmic -keep -nowrite -v1.1 -d $refv11dir -classpath "$@" -${TESTJAVA}/bin/rmic -keep -nowrite -vcompat -d $refvcompatdir -classpath "$@" -${TESTJAVA}/bin/rmic -keep -v1.2 -d $refv12dir -classpath "$@" +${TESTJAVA}/bin/rmic -keep -nowrite -v1.1 -d $refv11dir -classpath "$@" +${TESTJAVA}/bin/rmic -keep -nowrite -vcompat -d $refvcompatdir -classpath "$@" +${TESTJAVA}/bin/rmic -keep -nowrite -v1.2 -d $refv12dir -classpath "$@" -${TESTJAVA}/bin/rmic -Xnew -nowrite -keep -v1.1 -d $newv11dir -classpath "$@" -${TESTJAVA}/bin/rmic -Xnew -nowrite -keep -vcompat -d $newvcompatdir -classpath "$@" -${TESTJAVA}/bin/rmic -Xnew -keep -v1.2 -d $newv12dir -classpath "$@" +${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -v1.1 -d $newv11dir -classpath "$@" +${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -vcompat -d $newvcompatdir -classpath "$@" +${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -v1.2 -d $newv12dir -classpath "$@" set +ex diff --git a/jdk/test/sun/security/krb5/runNameEquals.sh b/jdk/test/sun/security/krb5/runNameEquals.sh index 7ee81e505c6..f65e32ffd97 100644 --- a/jdk/test/sun/security/krb5/runNameEquals.sh +++ b/jdk/test/sun/security/krb5/runNameEquals.sh @@ -66,6 +66,10 @@ case "$OS" in fi fi ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh b/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh index 30b245c81a0..7e93e184354 100644 --- a/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh +++ b/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh @@ -72,6 +72,12 @@ case "$OS" in CP="${FS}bin${FS}cp" CHMOD="${FS}bin${FS}chmod" ;; + AIX ) + FS="/" + PS=":" + CP="${FS}bin${FS}cp" + CHMOD="${FS}bin${FS}chmod" + ;; Windows* ) FS="\\" PS=";" diff --git a/jdk/test/sun/security/pkcs11/Provider/Login.sh b/jdk/test/sun/security/pkcs11/Provider/Login.sh index a1f6b132c9e..35f9ed562ea 100644 --- a/jdk/test/sun/security/pkcs11/Provider/Login.sh +++ b/jdk/test/sun/security/pkcs11/Provider/Login.sh @@ -73,6 +73,12 @@ case "$OS" in CP="${FS}bin${FS}cp" CHMOD="${FS}bin${FS}chmod" ;; + AIX ) + FS="/" + PS=":" + CP="${FS}bin${FS}cp" + CHMOD="${FS}bin${FS}chmod" + ;; Windows* ) FS="\\" PS=";" diff --git a/jdk/test/sun/security/provider/KeyStore/DKSTest.sh b/jdk/test/sun/security/provider/KeyStore/DKSTest.sh index b789e414140..99c7617dfa5 100644 --- a/jdk/test/sun/security/provider/KeyStore/DKSTest.sh +++ b/jdk/test/sun/security/provider/KeyStore/DKSTest.sh @@ -50,15 +50,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS ) - PS=":" - FS="/" - ;; - Linux ) - PS=":" - FS="/" - ;; - Darwin ) + SunOS | Linux | Darwin | AIX) PS=":" FS="/" ;; diff --git a/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh b/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh index 5775eab80b1..e2da96ea297 100644 --- a/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh +++ b/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh @@ -63,6 +63,10 @@ case "$OS" in PS=":" FS="/" ;; + AIX ) + PS=":" + FS="/" + ;; CYGWIN* ) PS=";" FS="/" diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh index 9b48bee7f3b..b0a824fc45e 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh @@ -33,7 +33,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh index eff4930de4a..ee2381612d0 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh @@ -46,7 +46,7 @@ fi OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) FILESEP="/" PATHSEP=":" ;; diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh index 4cdc5d4d1b7..1b7cf984e8b 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh @@ -32,7 +32,7 @@ HOSTNAME=`uname -n` OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh index de7b039488c..fd24c76a475 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh @@ -32,7 +32,7 @@ HOSTNAME=`uname -n` OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh b/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh index b6f8c8b3ff2..9b16831d799 100644 --- a/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh +++ b/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/jarsigner/EntriesOrder.java b/jdk/test/sun/security/tools/jarsigner/EntriesOrder.java new file mode 100644 index 00000000000..96c90e98e12 --- /dev/null +++ b/jdk/test/sun/security/tools/jarsigner/EntriesOrder.java @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8031572 + * @summary jarsigner -verify exits with 0 when a jar file is not properly signed + */ + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.cert.Certificate; +import java.util.*; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.JarInputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +public class EntriesOrder { + + public static void main(String[] args) throws Exception { + + String[] entries = { + "META-INF/", + "META-INF/MANIFEST.MF", + "META-INF/A.RSA", + "META-INF/A.SF", + "META-INF/inf", + "a"}; + + Map content = new HashMap<>(); + + // We will create a jar containing entries above. Try all permutations + // and confirm 1) When opened as a JarFile, we can always get 3 signed + // ones (MANIFEST, inf, a), and 2) When opened as a JarInputStream, + // when the order is correct (MANIFEST at beginning, followed by RSA/SF, + // directory ignored), we can get 2 signed ones (inf, a). + + // Prepares raw files + Files.write(Paths.get("a"), "a".getBytes()); + Files.createDirectory(Paths.get("META-INF/")); + Files.write(Paths.get("META-INF/inf"), "inf".getBytes()); + + // Pack, sign, and extract to get all files + sun.tools.jar.Main m = + new sun.tools.jar.Main(System.out, System.err, "jar"); + if (!m.run("cvf a.jar a META-INF/inf".split(" "))) { + throw new Exception("jar creation failed"); + } + sun.security.tools.keytool.Main.main( + ("-keystore jks -storepass changeit -keypass changeit -dname" + + " CN=A -alias a -genkeypair -keyalg rsa").split(" ")); + sun.security.tools.jarsigner.Main.main( + "-keystore jks -storepass changeit a.jar a".split(" ")); + m = new sun.tools.jar.Main(System.out, System.err, "jar"); + if (!m.run("xvf a.jar".split(" "))) { + throw new Exception("jar extraction failed"); + } + + // Data + for (String s: entries) { + if (!s.endsWith("/")) { + content.put(s, Files.readAllBytes(Paths.get(s))); + } + } + + // Test + for (List perm: Permute(entries)) { + + // Recreate a jar + try (ZipOutputStream zos + = new ZipOutputStream(new FileOutputStream("x.jar"))) { + for (String e: perm) { + zos.putNextEntry(new ZipEntry(e)); + if (Paths.get(e).toFile().isDirectory()) continue; + zos.write(content.get(e)); + } + } + + // Open with JarFile, number of signed entries should be 3. + int cc = 0; + try (JarFile jf = new JarFile("x.jar")) { + Enumeration jes = jf.entries(); + while (jes.hasMoreElements()) { + JarEntry je = jes.nextElement(); + sun.misc.IOUtils.readFully(jf.getInputStream(je), -1, true); + Certificate[] certs = je.getCertificates(); + if (certs != null && certs.length > 0) { + cc++; + } + } + } + + if (cc != 3) { + System.out.println(perm + " - jf - " + cc); + throw new Exception(); + } + + // Open with JarInputStream + int signed; + + perm.remove("META-INF/"); + if (perm.get(0).equals("META-INF/MANIFEST.MF") && + perm.get(1).contains("/A.") && + perm.get(2).contains("/A.")) { + signed = 2; // Good order + } else { + signed = 0; // Bad order. In this case, the number of signed + // entries is not documented. Just test impl. + } + + cc = 0; + try (JarInputStream jis + = new JarInputStream(new FileInputStream("x.jar"))) { + while (true) { + JarEntry je = jis.getNextJarEntry(); + if (je == null) break; + sun.misc.IOUtils.readFully(jis, -1, true); + Certificate[] certs = je.getCertificates(); + if (certs != null && certs.length > 0) { + cc++; + } + } + } + + if (cc != signed) { + System.out.println(perm + " - jis - " + cc + " " + signed); + throw new Exception(); + } + } + } + + // Helper method to return all permutations of an array. Each output can + // be altered without damaging the iteration process. + static Iterable> Permute(String[] entries) { + return new Iterable>() { + + int s = entries.length; + long c = factorial(s) - 1; // number of permutations + + private long factorial(int n) { + return (n == 1) ? 1: (n * factorial(n-1)); + } + + @Override + public Iterator> iterator() { + return new Iterator>() { + @Override + public boolean hasNext() { + return c >= 0; + } + + @Override + public List next() { + if (c < 0) return null; + List result = new ArrayList<>(s); + LinkedList source = new LinkedList<>( + Arrays.asList(entries)); + // Treat c as a integer with different radixes at + // different digits, i.e. at digit 0, radix is s; + // at digit 1, radix is s-1. Thus a s-digit number + // is able to represent s! different values. + long n = c; + for (int i=s; i>=1; i--) { + int x = (int)(n % i); + result.add(source.remove(x)); + n = n / i; + } + c--; + return result; + } + }; + } + }; + } +} diff --git a/jdk/test/sun/security/tools/jarsigner/PercentSign.sh b/jdk/test/sun/security/tools/jarsigner/PercentSign.sh index 559c0533e73..38d9ece9bbc 100644 --- a/jdk/test/sun/security/tools/jarsigner/PercentSign.sh +++ b/jdk/test/sun/security/tools/jarsigner/PercentSign.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/jarsigner/diffend.sh b/jdk/test/sun/security/tools/jarsigner/diffend.sh index 0f943796af4..787b58680f3 100644 --- a/jdk/test/sun/security/tools/jarsigner/diffend.sh +++ b/jdk/test/sun/security/tools/jarsigner/diffend.sh @@ -41,7 +41,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/jarsigner/oldsig.sh b/jdk/test/sun/security/tools/jarsigner/oldsig.sh index aae758cb937..062c2aa21d9 100644 --- a/jdk/test/sun/security/tools/jarsigner/oldsig.sh +++ b/jdk/test/sun/security/tools/jarsigner/oldsig.sh @@ -42,7 +42,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/keytool/AltProviderPath.sh b/jdk/test/sun/security/tools/keytool/AltProviderPath.sh index 82bc65787ab..8fd67ef0e0a 100644 --- a/jdk/test/sun/security/tools/keytool/AltProviderPath.sh +++ b/jdk/test/sun/security/tools/keytool/AltProviderPath.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh b/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh index 0f9b82c84b8..62d1195a1ca 100644 --- a/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh +++ b/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh @@ -59,6 +59,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/sun/security/tools/keytool/NoExtNPE.sh b/jdk/test/sun/security/tools/keytool/NoExtNPE.sh index da63ed8ce3a..99b6ae51f36 100644 --- a/jdk/test/sun/security/tools/keytool/NoExtNPE.sh +++ b/jdk/test/sun/security/tools/keytool/NoExtNPE.sh @@ -51,6 +51,10 @@ case "$OS" in Darwin ) FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) FILESEP="/" ;; diff --git a/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh b/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh index 6246d2bdbb1..3323179daff 100644 --- a/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh +++ b/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh @@ -45,7 +45,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/keytool/StandardAlgName.sh b/jdk/test/sun/security/tools/keytool/StandardAlgName.sh index 8ac1324bc11..c12348537e1 100644 --- a/jdk/test/sun/security/tools/keytool/StandardAlgName.sh +++ b/jdk/test/sun/security/tools/keytool/StandardAlgName.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh b/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh index 7347f345878..d3cd2ff92cb 100644 --- a/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh +++ b/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh @@ -46,15 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS ) - PATHSEP=":" - FILESEP="/" - ;; - Linux ) - PATHSEP=":" - FILESEP="/" - ;; - Darwin ) + SunOS | Linux | Darwin | AIX) PATHSEP=":" FILESEP="/" ;; diff --git a/jdk/test/sun/security/tools/keytool/printssl.sh b/jdk/test/sun/security/tools/keytool/printssl.sh index 36ba9d09437..6ebdd3dad22 100644 --- a/jdk/test/sun/security/tools/keytool/printssl.sh +++ b/jdk/test/sun/security/tools/keytool/printssl.sh @@ -40,7 +40,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) FS="/" ;; CYGWIN* ) diff --git a/jdk/test/sun/security/tools/keytool/resource.sh b/jdk/test/sun/security/tools/keytool/resource.sh index 1256422144e..1e31ff2d241 100644 --- a/jdk/test/sun/security/tools/keytool/resource.sh +++ b/jdk/test/sun/security/tools/keytool/resource.sh @@ -43,7 +43,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null FS="/" ;; diff --git a/jdk/test/sun/security/tools/keytool/standard.sh b/jdk/test/sun/security/tools/keytool/standard.sh index 630aa41c46f..a42fbfda3cc 100644 --- a/jdk/test/sun/security/tools/keytool/standard.sh +++ b/jdk/test/sun/security/tools/keytool/standard.sh @@ -45,7 +45,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin | CYGWIN* ) + SunOS | Linux | Darwin | AIX | CYGWIN* ) FS="/" ;; Windows_* ) diff --git a/jdk/test/sun/security/tools/policytool/Alias.sh b/jdk/test/sun/security/tools/policytool/Alias.sh index ae1e4082004..c7c25899ce3 100644 --- a/jdk/test/sun/security/tools/policytool/Alias.sh +++ b/jdk/test/sun/security/tools/policytool/Alias.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/ChangeUI.sh b/jdk/test/sun/security/tools/policytool/ChangeUI.sh index 1b6a7984087..96077fa6beb 100644 --- a/jdk/test/sun/security/tools/policytool/ChangeUI.sh +++ b/jdk/test/sun/security/tools/policytool/ChangeUI.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/OpenPolicy.sh b/jdk/test/sun/security/tools/policytool/OpenPolicy.sh index 325b817c3d2..ada838ebda9 100644 --- a/jdk/test/sun/security/tools/policytool/OpenPolicy.sh +++ b/jdk/test/sun/security/tools/policytool/OpenPolicy.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/SaveAs.sh b/jdk/test/sun/security/tools/policytool/SaveAs.sh index af18ad96c21..1c16ecb426c 100644 --- a/jdk/test/sun/security/tools/policytool/SaveAs.sh +++ b/jdk/test/sun/security/tools/policytool/SaveAs.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh b/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh index 05978a38b57..70992074e2b 100644 --- a/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh +++ b/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/UsePolicy.sh b/jdk/test/sun/security/tools/policytool/UsePolicy.sh index c8412389a3b..a1e3d34c6c4 100644 --- a/jdk/test/sun/security/tools/policytool/UsePolicy.sh +++ b/jdk/test/sun/security/tools/policytool/UsePolicy.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/i18n.sh b/jdk/test/sun/security/tools/policytool/i18n.sh index 58b59e060b2..18ce68dda28 100644 --- a/jdk/test/sun/security/tools/policytool/i18n.sh +++ b/jdk/test/sun/security/tools/policytool/i18n.sh @@ -49,7 +49,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/tools/common/CommonSetup.sh b/jdk/test/sun/tools/common/CommonSetup.sh index db58377a668..f4401a7f6f2 100644 --- a/jdk/test/sun/tools/common/CommonSetup.sh +++ b/jdk/test/sun/tools/common/CommonSetup.sh @@ -48,6 +48,7 @@ # isSolaris - true if OS is Solaris # isWindows - true if OS is Windows # isMacos - true if OS is Macos X +# isAIX - true if OS is AIX if [ -z "${TESTJAVA}" ]; then @@ -83,6 +84,7 @@ isSolaris=false isUnknownOS=false isWindows=false isMacos=false +isAIX=false OS=`uname -s` @@ -113,6 +115,10 @@ case "$OS" in OS="Solaris" isSolaris=true ;; + AIX ) + OS="AIX" + isAIX=true + ;; Windows* ) OS="Windows" PATTERN_EOL='[ ]*$' diff --git a/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh b/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh index 01c2e4b6f01..b82b3ac387c 100644 --- a/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh +++ b/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh @@ -54,7 +54,7 @@ pass() OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin) + SunOS | Linux | Darwin | AIX) PATHSEP=":" ;; diff --git a/jdk/test/sun/tools/jinfo/Basic.sh b/jdk/test/sun/tools/jinfo/Basic.sh index e12bbb3ce33..5905c83d009 100644 --- a/jdk/test/sun/tools/jinfo/Basic.sh +++ b/jdk/test/sun/tools/jinfo/Basic.sh @@ -45,7 +45,7 @@ failed=0 runSA=true -if [ $isMacos = true ]; then +if [ $isMacos = true -o $isAIX = true -o `uname -m` = ppc64 ]; then runSA=false fi diff --git a/jdk/test/sun/tools/jstat/classOutput1.awk b/jdk/test/sun/tools/jstat/classOutput1.awk index d31118bf0ec..6213899e72b 100644 --- a/jdk/test/sun/tools/jstat/classOutput1.awk +++ b/jdk/test/sun/tools/jstat/classOutput1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/classloadOutput1.awk b/jdk/test/sun/tools/jstat/classloadOutput1.awk index 66e2b5dcd18..0a3d1e945b5 100644 --- a/jdk/test/sun/tools/jstat/classloadOutput1.awk +++ b/jdk/test/sun/tools/jstat/classloadOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/compilerOutput1.awk b/jdk/test/sun/tools/jstat/compilerOutput1.awk index 4a9f89e9fde..09b920ab0e4 100644 --- a/jdk/test/sun/tools/jstat/compilerOutput1.awk +++ b/jdk/test/sun/tools/jstat/compilerOutput1.awk @@ -30,7 +30,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/fileURITest1.awk b/jdk/test/sun/tools/jstat/fileURITest1.awk index 51e31846501..8b56e89ca31 100644 --- a/jdk/test/sun/tools/jstat/fileURITest1.awk +++ b/jdk/test/sun/tools/jstat/fileURITest1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk b/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk index ab630d143b6..ec7a737d55c 100644 --- a/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcCauseOutput1.awk b/jdk/test/sun/tools/jstat/gcCauseOutput1.awk index 3041291ac3d..005e791043a 100644 --- a/jdk/test/sun/tools/jstat/gcCauseOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcCauseOutput1.awk @@ -30,7 +30,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk b/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk index 12d9544542a..352e02d6cbc 100644 --- a/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk b/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk index 0491fa52076..f4473dc37e4 100644 --- a/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcOldCapacityOutput1.awk b/jdk/test/sun/tools/jstat/gcOldCapacityOutput1.awk index 7fb4575163a..cbf88756060 100644 --- a/jdk/test/sun/tools/jstat/gcOldCapacityOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcOldCapacityOutput1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcOldOutput1.awk b/jdk/test/sun/tools/jstat/gcOldOutput1.awk index c007f66b3be..319f707d273 100644 --- a/jdk/test/sun/tools/jstat/gcOldOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcOldOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcOutput1.awk b/jdk/test/sun/tools/jstat/gcOutput1.awk index d1d90a281e2..5bd59fe0d8e 100644 --- a/jdk/test/sun/tools/jstat/gcOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/lineCounts1.awk b/jdk/test/sun/tools/jstat/lineCounts1.awk index dd6d5f8fbf5..cc974104b99 100644 --- a/jdk/test/sun/tools/jstat/lineCounts1.awk +++ b/jdk/test/sun/tools/jstat/lineCounts1.awk @@ -25,7 +25,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 5) && (totallines == 6)) { + if ((headerlines == 1) && (datalines == 5)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/lineCounts2.awk b/jdk/test/sun/tools/jstat/lineCounts2.awk index adecd0a0572..ac2009d2e0b 100644 --- a/jdk/test/sun/tools/jstat/lineCounts2.awk +++ b/jdk/test/sun/tools/jstat/lineCounts2.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/lineCounts3.awk b/jdk/test/sun/tools/jstat/lineCounts3.awk index 24788b429e0..9b6d3ecec59 100644 --- a/jdk/test/sun/tools/jstat/lineCounts3.awk +++ b/jdk/test/sun/tools/jstat/lineCounts3.awk @@ -30,7 +30,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 10) && (totallines == 11)) { + if ((headerlines == 1) && (datalines == 10)) { exit 0 } else { exit 1 diff --git a/jdk/test/sun/tools/jstat/lineCounts4.awk b/jdk/test/sun/tools/jstat/lineCounts4.awk index c4ea918fdd2..db40ad355c6 100644 --- a/jdk/test/sun/tools/jstat/lineCounts4.awk +++ b/jdk/test/sun/tools/jstat/lineCounts4.awk @@ -36,7 +36,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 2) && (datalines == 11) && (totallines == 13) && (datalines2 == 1)) { + if ((headerlines == 2) && (datalines == 11) && (datalines2 == 1)) { exit 0 } else { exit 1 diff --git a/jdk/test/sun/tools/jstat/printCompilationOutput1.awk b/jdk/test/sun/tools/jstat/printCompilationOutput1.awk index f2e26213975..d165e4d997e 100644 --- a/jdk/test/sun/tools/jstat/printCompilationOutput1.awk +++ b/jdk/test/sun/tools/jstat/printCompilationOutput1.awk @@ -25,7 +25,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/timeStamp1.awk b/jdk/test/sun/tools/jstat/timeStamp1.awk index cce381ce41d..908f4230419 100644 --- a/jdk/test/sun/tools/jstat/timeStamp1.awk +++ b/jdk/test/sun/tools/jstat/timeStamp1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh b/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh index fa312adad74..29c72ed6254 100644 --- a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh +++ b/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh @@ -56,7 +56,7 @@ pass() OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PATHSEP=":" ;; diff --git a/jdk/test/sun/util/calendar/zi/tzdata/VERSION b/jdk/test/sun/util/calendar/zi/tzdata/VERSION index 1d7698924aa..2f162e0638a 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION +++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2013h +tzdata2013i diff --git a/jdk/test/sun/util/calendar/zi/tzdata/africa b/jdk/test/sun/util/calendar/zi/tzdata/africa index 0eed8b1a26a..82d14a4a14d 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/africa +++ b/jdk/test/sun/util/calendar/zi/tzdata/africa @@ -500,14 +500,13 @@ Rule Libya 1997 only - Apr 4 0:00 1:00 S Rule Libya 1997 only - Oct 4 0:00 0 - Rule Libya 2013 only - Mar lastFri 1:00 1:00 S Rule Libya 2013 only - Oct lastFri 2:00 0 - - -# The 1996 and 1997 entries are from Shanks & Pottenger; -# the IATA SSIM data contain some obvious errors. # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Tripoli 0:52:44 - LMT 1920 1:00 Libya CE%sT 1959 2:00 - EET 1982 1:00 Libya CE%sT 1990 May 4 +# The 1996 and 1997 entries are from Shanks & Pottenger; +# the IATA SSIM data contain some obvious errors. 2:00 - EET 1996 Sep 30 1:00 Libya CE%sT 1997 Oct 4 2:00 - EET 2012 Nov 10 2:00 diff --git a/jdk/test/sun/util/calendar/zi/tzdata/asia b/jdk/test/sun/util/calendar/zi/tzdata/asia index fd278e5c8a8..1a8f83d3a64 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/asia +++ b/jdk/test/sun/util/calendar/zi/tzdata/asia @@ -1403,12 +1403,22 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u # switch back to standard time this winter, so the will stay on DST # until about the same time next year (at least). # http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950 -# -# From Paul Eggert (2013-09-21): -# It's looking like this change will be permanent; see -# Petra News Agency, Cancelling winter saved Jordan $7 million (2013-02-20) -# . -# So move Jordan to UTC+3 as of the abovementioned date. + +# From Steffen Thorsen (2013-12-11): +# Jordan Times and other sources say that Jordan is going back to +# UTC+2 on 2013-12-19 at midnight: +# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime +# Official, in Arabic: +# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14 +# ... Our background/permalink about it +# http://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html +# ... +# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P +# ... says midnight for the coming one and 1:00 for the ones in the future +# (and they will use DST again next year, using the normal schedule). + +# From Paul Eggert (2013-12-11): +# As Steffen suggested, consider the past 21-month experiment to be DST. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Jordan 1973 only - Jun 6 0:00 1:00 S @@ -1438,11 +1448,13 @@ Rule Jordan 2002 2012 - Mar lastThu 24:00 1:00 S Rule Jordan 2003 only - Oct 24 0:00s 0 - Rule Jordan 2004 only - Oct 15 0:00s 0 - Rule Jordan 2005 only - Sep lastFri 0:00s 0 - -Rule Jordan 2006 2012 - Oct lastFri 0:00s 0 - +Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 - +Rule Jordan 2013 only - Dec 20 0:00 0 - +Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S +Rule Jordan 2014 max - Oct lastFri 0:00s 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Amman 2:23:44 - LMT 1931 - 2:00 Jordan EE%sT 2012 Oct 26 0:00s - 3:00 - AST + 2:00 Jordan EE%sT # Kazakhstan diff --git a/jdk/test/sun/util/calendar/zi/tzdata/northamerica b/jdk/test/sun/util/calendar/zi/tzdata/northamerica index b8caf6d019b..9e551bb1c46 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica +++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica @@ -2688,6 +2688,11 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose # to DST--and one more hour on 1999-04-04--when the announcers will have # returned to Baltimore, which switches on that date.) +# From Steffen Thorsen (2013-11-11): +# DST start in Cuba in 2004 ... does not follow the same rules as the +# years before. The correct date should be Sunday 2004-03-28 00:00 ... +# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html + # From Evert van der Veer via Steffen Thorsen (2004-10-28): # Cuba is not going back to standard time this year. # From Paul Eggert (2006-03-22): @@ -2877,7 +2882,8 @@ Rule Cuba 1996 only - Oct 6 0:00s 0 S Rule Cuba 1997 only - Oct 12 0:00s 0 S Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S -Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties deleted file mode 100644 index 594231f2ef3..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Central Summer Time (Northern Territory) -ACT.generic.long=Central Time (Northern Territory) -ACT.standard.long=Central Standard Time (Northern Territory) -AET.daylight.long=Eastern Summer Time (New South Wales) -AET.generic.long=Eastern Time (New South Wales) -AET.standard.long=Eastern Standard Time (New South Wales) -AGT.generic.long=Argentine Time -ART.generic.long=Eastern European Time -AST.generic.long=Alaska Time -Africa/Abidjan.generic.long=Greenwich Mean Time -Africa/Accra.generic.long=Ghana Mean Time -Africa/Addis_Ababa.generic.long=Eastern Africa Time -Africa/Algiers.generic.long=Central European Time -Africa/Asmara.generic.long=Eastern Africa Time -Africa/Asmera.generic.long=Eastern Africa Time -Africa/Bamako.generic.long=Greenwich Mean Time -Africa/Bangui.generic.long=Western African Time -Africa/Banjul.generic.long=Greenwich Mean Time -Africa/Bissau.generic.long=Greenwich Mean Time -Africa/Blantyre.generic.long=Central Africa Time -Africa/Brazzaville.generic.long=Western African Time -Africa/Bujumbura.generic.long=Central Africa Time -Africa/Cairo.generic.long=Eastern European Time -Africa/Casablanca.generic.long=Western European Time -Africa/Ceuta.generic.long=Central European Time -Africa/Conakry.generic.long=Greenwich Mean Time -Africa/Dakar.generic.long=Greenwich Mean Time -Africa/Dar_es_Salaam.generic.long=Eastern Africa Time -Africa/Djibouti.generic.long=Eastern Africa Time -Africa/Douala.generic.long=Western African Time -Africa/El_Aaiun.generic.long=Western European Time -Africa/Freetown.generic.long=Sierra Leone Time -Africa/Gaborone.generic.long=Central Africa Time -Africa/Harare.generic.long=Central Africa Time -Africa/Johannesburg.generic.long=South Africa Time -Africa/Juba.generic.long=Eastern Africa Time -Africa/Kampala.generic.long=Eastern Africa Time -Africa/Khartoum.generic.long=Eastern Africa Time -Africa/Kigali.generic.long=Central Africa Time -Africa/Kinshasa.generic.long=Western African Time -Africa/Lagos.generic.long=Western African Time -Africa/Libreville.generic.long=Western African Time -Africa/Lome.generic.long=Greenwich Mean Time -Africa/Luanda.generic.long=Western African Time -Africa/Lubumbashi.generic.long=Central Africa Time -Africa/Lusaka.generic.long=Central Africa Time -Africa/Malabo.generic.long=Western African Time -Africa/Maputo.generic.long=Central Africa Time -Africa/Maseru.generic.long=South Africa Time -Africa/Mbabane.generic.long=South Africa Time -Africa/Mogadishu.generic.long=Eastern Africa Time -Africa/Monrovia.generic.long=Greenwich Mean Time -Africa/Nairobi.generic.long=Eastern Africa Time -Africa/Ndjamena.generic.long=Western African Time -Africa/Niamey.generic.long=Western African Time -Africa/Nouakchott.generic.long=Greenwich Mean Time -Africa/Ouagadougou.generic.long=Greenwich Mean Time -Africa/Porto-Novo.generic.long=Western African Time -Africa/Sao_Tome.generic.long=Greenwich Mean Time -Africa/Timbuktu.generic.long=Greenwich Mean Time -Africa/Tripoli.generic.long=Eastern European Time -Africa/Tunis.generic.long=Central European Time -Africa/Windhoek.generic.long=Western African Time -America/Adak.generic.long=Hawaii-Aleutian Time -America/Anchorage.generic.long=Alaska Time -America/Anguilla.generic.long=Atlantic Time -America/Antigua.generic.long=Atlantic Time -America/Araguaina.generic.long=Brasilia Time -America/Argentina/Buenos_Aires.generic.long=Argentine Time -America/Argentina/Catamarca.generic.long=Argentine Time -America/Argentina/ComodRivadavia.generic.long=Argentine Time -America/Argentina/Cordoba.generic.long=Argentine Time -America/Argentina/Jujuy.generic.long=Argentine Time -America/Argentina/La_Rioja.generic.long=Argentine Time -America/Argentina/Mendoza.generic.long=Argentine Time -America/Argentina/Rio_Gallegos.generic.long=Argentine Time -America/Argentina/Salta.generic.long=Argentine Time -America/Argentina/San_Juan.generic.long=Argentine Time -America/Argentina/San_Luis.generic.long=Argentine Time -America/Argentina/Tucuman.generic.long=Argentine Time -America/Argentina/Ushuaia.generic.long=Argentine Time -America/Aruba.generic.long=Atlantic Time -America/Asuncion.generic.long=Paraguay Time -America/Atikokan.generic.long=Eastern Time -America/Atka.generic.long=Hawaii-Aleutian Time -America/Bahia.generic.long=Brasilia Time -America/Bahia_Banderas.generic.long=Central Time -America/Barbados.generic.long=Atlantic Time -America/Belem.generic.long=Brasilia Time -America/Belize.generic.long=Central Time -America/Blanc-Sablon.generic.long=Atlantic Time -America/Boa_Vista.generic.long=Amazon Time -America/Bogota.generic.long=Colombia Time -America/Boise.generic.long=Mountain Time -America/Buenos_Aires.generic.long=Argentine Time -America/Cambridge_Bay.generic.long=Mountain Time -America/Campo_Grande.generic.long=Amazon Time -America/Cancun.generic.long=Central Time -America/Caracas.generic.long=Venezuela Time -America/Catamarca.generic.long=Argentine Time -America/Cayenne.generic.long=French Guiana Time -America/Cayman.generic.long=Eastern Time -America/Chicago.generic.long=Central Time -America/Chihuahua.generic.long=Mountain Time -America/Coral_Harbour.generic.long=Eastern Time -America/Cordoba.generic.long=Argentine Time -America/Costa_Rica.generic.long=Central Time -America/Creston.generic.long=Mountain Time -America/Cuiaba.generic.long=Amazon Time -America/Curacao.generic.long=Atlantic Time -America/Danmarkshavn.generic.long=Greenwich Mean Time -America/Dawson.generic.long=Pacific Time -America/Dawson_Creek.generic.long=Mountain Time -America/Denver.generic.long=Mountain Time -America/Detroit.generic.long=Eastern Time -America/Dominica.generic.long=Atlantic Time -America/Edmonton.generic.long=Mountain Time -America/Eirunepe.generic.long=Acre Time -America/El_Salvador.generic.long=Central Time -America/Ensenada.generic.long=Pacific Time -America/Fort_Wayne.generic.long=Eastern Time -America/Fortaleza.generic.long=Brasilia Time -America/Glace_Bay.generic.long=Atlantic Time -America/Godthab.generic.long=Western Greenland Time -America/Goose_Bay.generic.long=Atlantic Time -America/Grand_Turk.generic.long=Eastern Time -America/Grenada.generic.long=Atlantic Time -America/Guadeloupe.generic.long=Atlantic Time -America/Guatemala.generic.long=Central Time -America/Guayaquil.generic.long=Ecuador Time -America/Guyana.generic.long=Guyana Time -America/Halifax.generic.long=Atlantic Time -America/Havana.generic.long=Cuba Time -America/Hermosillo.generic.long=Mountain Time -America/Indiana/Indianapolis.generic.long=Eastern Time -America/Indiana/Knox.generic.long=Central Time -America/Indiana/Marengo.generic.long=Eastern Time -America/Indiana/Petersburg.generic.long=Eastern Time -America/Indiana/Tell_City.generic.long=Central Time -America/Indiana/Vevay.generic.long=Eastern Time -America/Indiana/Vincennes.generic.long=Eastern Time -America/Indiana/Winamac.generic.long=Eastern Time -America/Indianapolis.generic.long=Eastern Time -America/Inuvik.generic.long=Mountain Time -America/Iqaluit.generic.long=Eastern Time -America/Jamaica.generic.long=Eastern Time -America/Jujuy.generic.long=Argentine Time -America/Juneau.generic.long=Alaska Time -America/Kentucky/Louisville.generic.long=Eastern Time -America/Kentucky/Monticello.generic.long=Eastern Time -America/Knox_IN.generic.long=Central Time -America/Kralendijk.generic.long=Atlantic Time -America/La_Paz.generic.long=Bolivia Time -America/Lima.generic.long=Peru Time -America/Los_Angeles.generic.long=Pacific Time -America/Louisville.generic.long=Eastern Time -America/Lower_Princes.generic.long=Atlantic Time -America/Maceio.generic.long=Brasilia Time -America/Managua.generic.long=Central Time -America/Manaus.generic.long=Amazon Time -America/Marigot.generic.long=Atlantic Time -America/Martinique.generic.long=Atlantic Time -America/Matamoros.generic.long=Central Time -America/Mazatlan.generic.long=Mountain Time -America/Mendoza.generic.long=Argentine Time -America/Menominee.generic.long=Central Time -America/Merida.generic.long=Central Time -America/Metlakatla.daylight.long=Metlakatla Daylight Time -America/Metlakatla.generic.long=Metlakatla Time -America/Metlakatla.standard.long=Metlakatla Standard Time -America/Mexico_City.generic.long=Central Time -America/Miquelon.generic.long=Pierre & Miquelon Time -America/Moncton.generic.long=Atlantic Time -America/Monterrey.generic.long=Central Time -America/Montevideo.generic.long=Uruguay Time -America/Montreal.generic.long=Eastern Time -America/Montserrat.generic.long=Atlantic Time -America/Nassau.generic.long=Eastern Time -America/New_York.generic.long=Eastern Time -America/Nipigon.generic.long=Eastern Time -America/Nome.generic.long=Alaska Time -America/Noronha.generic.long=Fernando de Noronha Time -America/North_Dakota/Beulah.generic.long=Central Time -America/North_Dakota/Center.generic.long=Central Time -America/North_Dakota/New_Salem.generic.long=Central Time -America/Ojinaga.generic.long=Mountain Time -America/Panama.generic.long=Eastern Time -America/Pangnirtung.generic.long=Eastern Time -America/Paramaribo.generic.long=Suriname Time -America/Phoenix.generic.long=Mountain Time -America/Port-au-Prince.generic.long=Eastern Time -America/Port_of_Spain.generic.long=Atlantic Time -America/Porto_Acre.generic.long=Acre Time -America/Porto_Velho.generic.long=Amazon Time -America/Puerto_Rico.generic.long=Atlantic Time -America/Rainy_River.generic.long=Central Time -America/Rankin_Inlet.generic.long=Central Time -America/Recife.generic.long=Brasilia Time -America/Regina.generic.long=Central Time -America/Resolute.generic.long=Central Time -America/Rio_Branco.generic.long=Acre Time -America/Rosario.generic.long=Argentine Time -America/Santa_Isabel.generic.long=Pacific Time -America/Santarem.generic.long=Brasilia Time -America/Santiago.generic.long=Chile Time -America/Santo_Domingo.generic.long=Atlantic Time -America/Sao_Paulo.generic.long=Brasilia Time -America/Scoresbysund.generic.long=Eastern Greenland Time -America/Shiprock.generic.long=Mountain Time -America/Sitka.generic.long=Alaska Time -America/St_Barthelemy.generic.long=Atlantic Time -America/St_Johns.generic.long=Newfoundland Time -America/St_Kitts.generic.long=Atlantic Time -America/St_Lucia.generic.long=Atlantic Time -America/St_Thomas.generic.long=Atlantic Time -America/St_Vincent.generic.long=Atlantic Time -America/Swift_Current.generic.long=Central Time -America/Tegucigalpa.generic.long=Central Time -America/Thule.generic.long=Atlantic Time -America/Thunder_Bay.generic.long=Eastern Time -America/Tijuana.generic.long=Pacific Time -America/Toronto.generic.long=Eastern Time -America/Tortola.generic.long=Atlantic Time -America/Vancouver.generic.long=Pacific Time -America/Virgin.generic.long=Atlantic Time -America/Whitehorse.generic.long=Pacific Time -America/Winnipeg.generic.long=Central Time -America/Yakutat.generic.long=Alaska Time -America/Yellowknife.generic.long=Mountain Time -Antarctica/Casey.daylight.long=Western Summer Time (Australia) -Antarctica/Casey.generic.long=Western Time (Australia) -Antarctica/Casey.standard.long=Western Standard Time (Australia) -Antarctica/Davis.generic.long=Davis Time -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville Time -Antarctica/Macquarie.daylight.long=Macquarie Island Summer Time -Antarctica/Macquarie.generic.long=Macquarie Island Time -Antarctica/Macquarie.standard.long=Macquarie Island Time -Antarctica/Mawson.generic.long=Mawson Time -Antarctica/McMurdo.generic.long=New Zealand Time -Antarctica/Palmer.generic.long=Chile Time -Antarctica/Rothera.generic.long=Rothera Time -Antarctica/South_Pole.generic.long=New Zealand Time -Antarctica/Syowa.generic.long=Syowa Time -Antarctica/Vostok.generic.long=Vostok Time -Arctic/Longyearbyen.generic.long=Central European Time -Asia/Aden.generic.long=Arabia Time -Asia/Almaty.generic.long=Alma-Ata Time -Asia/Amman.generic.long=Arabia Time -Asia/Anadyr.generic.long=Anadyr Time -Asia/Aqtau.generic.long=Aqtau Time -Asia/Aqtobe.generic.long=Aqtobe Time -Asia/Ashgabat.generic.long=Turkmenistan Time -Asia/Ashkhabad.generic.long=Turkmenistan Time -Asia/Baghdad.generic.long=Arabia Time -Asia/Bahrain.generic.long=Arabia Time -Asia/Baku.generic.long=Azerbaijan Time -Asia/Bangkok.generic.long=Indochina Time -Asia/Beirut.generic.long=Eastern European Time -Asia/Bishkek.generic.long=Kirgizstan Time -Asia/Brunei.generic.long=Brunei Time -Asia/Calcutta.generic.long=India Time -Asia/Choibalsan.generic.long=Choibalsan Time -Asia/Chongqing.generic.long=China Time -Asia/Chungking.generic.long=China Time -Asia/Colombo.generic.long=India Time -Asia/Dacca.generic.long=Bangladesh Time -Asia/Damascus.generic.long=Eastern European Time -Asia/Dhaka.generic.long=Bangladesh Time -Asia/Dili.generic.long=Timor-Leste Time -Asia/Dubai.generic.long=Gulf Time -Asia/Dushanbe.generic.long=Tajikistan Time -Asia/Gaza.generic.long=Eastern European Time -Asia/Harbin.generic.long=China Time -Asia/Hebron.generic.long=Eastern European Time -Asia/Ho_Chi_Minh.generic.long=Indochina Time -Asia/Hong_Kong.generic.long=Hong Kong Time -Asia/Hovd.generic.long=Hovd Time -Asia/Irkutsk.generic.long=Irkutsk Time -Asia/Istanbul.generic.long=Eastern European Time -Asia/Jakarta.generic.long=West Indonesia Time -Asia/Jayapura.generic.long=East Indonesia Time -Asia/Jerusalem.generic.long=Israel Time -Asia/Kabul.generic.long=Afghanistan Time -Asia/Kamchatka.generic.long=Petropavlovsk-Kamchatski Time -Asia/Karachi.generic.long=Pakistan Time -Asia/Kashgar.generic.long=China Time -Asia/Kathmandu.generic.long=Nepal Time -Asia/Katmandu.generic.long=Nepal Time -Asia/Khandyga.daylight.long=Khandyga Summer Time -Asia/Khandyga.generic.long=Khandyga Time -Asia/Khandyga.standard.long=Khandyga Time -Asia/Kolkata.generic.long=India Time -Asia/Krasnoyarsk.generic.long=Krasnoyarsk Time -Asia/Kuala_Lumpur.generic.long=Malaysia Time -Asia/Kuching.generic.long=Malaysia Time -Asia/Kuwait.generic.long=Arabia Time -Asia/Macao.generic.long=China Time -Asia/Macau.generic.long=China Time -Asia/Magadan.generic.long=Magadan Time -Asia/Makassar.generic.long=Central Indonesia Time -Asia/Manila.generic.long=Philippines Time -Asia/Muscat.generic.long=Gulf Time -Asia/Nicosia.generic.long=Eastern European Time -Asia/Novokuznetsk.generic.long=Novosibirsk Time -Asia/Novosibirsk.generic.long=Novosibirsk Time -Asia/Omsk.generic.long=Omsk Time -Asia/Oral.generic.long=Oral Time -Asia/Phnom_Penh.generic.long=Indochina Time -Asia/Pontianak.generic.long=West Indonesia Time -Asia/Pyongyang.generic.long=Korea Time -Asia/Qatar.generic.long=Arabia Time -Asia/Qyzylorda.generic.long=Qyzylorda Time -Asia/Rangoon.generic.long=Myanmar Time -Asia/Saigon.generic.long=Indochina Time -Asia/Sakhalin.generic.long=Sakhalin Time -Asia/Samarkand.generic.long=Uzbekistan Time -Asia/Seoul.generic.long=Korea Time -Asia/Shanghai.generic.long=China Time -Asia/Singapore.generic.long=Singapore Time -Asia/Taipei.generic.long=China Time -Asia/Tashkent.generic.long=Uzbekistan Time -Asia/Tbilisi.generic.long=Georgia Time -Asia/Tehran.generic.long=Iran Time -Asia/Tel_Aviv.generic.long=Israel Time -Asia/Thimbu.generic.long=Bhutan Time -Asia/Thimphu.generic.long=Bhutan Time -Asia/Tokyo.generic.long=Japan Time -Asia/Ujung_Pandang.generic.long=Central Indonesia Time -Asia/Ulaanbaatar.generic.long=Ulaanbaatar Time -Asia/Ulan_Bator.generic.long=Ulaanbaatar Time -Asia/Urumqi.generic.long=China Time -Asia/Ust-Nera.daylight.long=Ust-Nera Summer Time -Asia/Ust-Nera.generic.long=Ust-Nera Time -Asia/Ust-Nera.standard.long=Ust-Nera Time -Asia/Vientiane.generic.long=Indochina Time -Asia/Vladivostok.generic.long=Vladivostok Time -Asia/Yakutsk.generic.long=Yakutsk Time -Asia/Yekaterinburg.generic.long=Yekaterinburg Time -Asia/Yerevan.generic.long=Armenia Time -Atlantic/Azores.generic.long=Azores Time -Atlantic/Bermuda.generic.long=Atlantic Time -Atlantic/Canary.generic.long=Western European Time -Atlantic/Cape_Verde.generic.long=Cape Verde Time -Atlantic/Faeroe.generic.long=Western European Time -Atlantic/Faroe.generic.long=Western European Time -Atlantic/Jan_Mayen.generic.long=Central European Time -Atlantic/Madeira.generic.long=Western European Time -Atlantic/Reykjavik.generic.long=Greenwich Mean Time -Atlantic/South_Georgia.generic.long=South Georgia Time -Atlantic/St_Helena.generic.long=Greenwich Mean Time -Atlantic/Stanley.generic.long=Falkland Is. Time -Australia/ACT.daylight.long=Eastern Summer Time (New South Wales) -Australia/ACT.generic.long=Eastern Time (New South Wales) -Australia/ACT.standard.long=Eastern Standard Time (New South Wales) -Australia/Adelaide.daylight.long=Central Summer Time (South Australia) -Australia/Adelaide.generic.long=Central Time (South Australia) -Australia/Adelaide.standard.long=Central Standard Time (South Australia) -Australia/Brisbane.daylight.long=Eastern Summer Time (Queensland) -Australia/Brisbane.generic.long=Eastern Time (Queensland) -Australia/Brisbane.standard.long=Eastern Standard Time (Queensland) -Australia/Broken_Hill.daylight.long=Central Summer Time (South Australia/New South Wales) -Australia/Broken_Hill.generic.long=Central Time (South Australia/New South Wales) -Australia/Broken_Hill.standard.long=Central Standard Time (South Australia/New South Wales) -Australia/Canberra.daylight.long=Eastern Summer Time (New South Wales) -Australia/Canberra.generic.long=Eastern Time (New South Wales) -Australia/Canberra.standard.long=Eastern Standard Time (New South Wales) -Australia/Currie.daylight.long=Eastern Summer Time (New South Wales) -Australia/Currie.generic.long=Eastern Time (New South Wales) -Australia/Currie.standard.long=Eastern Standard Time (New South Wales) -Australia/Darwin.daylight.long=Central Summer Time (Northern Territory) -Australia/Darwin.generic.long=Central Time (Northern Territory) -Australia/Darwin.standard.long=Central Standard Time (Northern Territory) -Australia/Eucla.daylight.long=Central Western Summer Time (Australia) -Australia/Eucla.generic.long=Central Western Time (Australia) -Australia/Eucla.standard.long=Central Western Standard Time (Australia) -Australia/Hobart.daylight.long=Eastern Summer Time (Tasmania) -Australia/Hobart.generic.long=Eastern Time (Tasmania) -Australia/Hobart.standard.long=Eastern Standard Time (Tasmania) -Australia/LHI.generic.long=Lord Howe Time -Australia/Lindeman.daylight.long=Eastern Summer Time (Queensland) -Australia/Lindeman.generic.long=Eastern Time (Queensland) -Australia/Lindeman.standard.long=Eastern Standard Time (Queensland) -Australia/Lord_Howe.generic.long=Lord Howe Time -Australia/Melbourne.daylight.long=Eastern Summer Time (Victoria) -Australia/Melbourne.generic.long=Eastern Time (Victoria) -Australia/Melbourne.standard.long=Eastern Standard Time (Victoria) -Australia/NSW.daylight.long=Eastern Summer Time (New South Wales) -Australia/NSW.generic.long=Eastern Time (New South Wales) -Australia/NSW.standard.long=Eastern Standard Time (New South Wales) -Australia/North.daylight.long=Central Summer Time (Northern Territory) -Australia/North.generic.long=Central Time (Northern Territory) -Australia/North.standard.long=Central Standard Time (Northern Territory) -Australia/Perth.daylight.long=Western Summer Time (Australia) -Australia/Perth.generic.long=Western Time (Australia) -Australia/Perth.standard.long=Western Standard Time (Australia) -Australia/Queensland.daylight.long=Eastern Summer Time (Queensland) -Australia/Queensland.generic.long=Eastern Time (Queensland) -Australia/Queensland.standard.long=Eastern Standard Time (Queensland) -Australia/South.daylight.long=Central Summer Time (South Australia) -Australia/South.generic.long=Central Time (South Australia) -Australia/South.standard.long=Central Standard Time (South Australia) -Australia/Sydney.daylight.long=Eastern Summer Time (New South Wales) -Australia/Sydney.generic.long=Eastern Time (New South Wales) -Australia/Sydney.standard.long=Eastern Standard Time (New South Wales) -Australia/Tasmania.daylight.long=Eastern Summer Time (Tasmania) -Australia/Tasmania.generic.long=Eastern Time (Tasmania) -Australia/Tasmania.standard.long=Eastern Standard Time (Tasmania) -Australia/Victoria.daylight.long=Eastern Summer Time (Victoria) -Australia/Victoria.generic.long=Eastern Time (Victoria) -Australia/Victoria.standard.long=Eastern Standard Time (Victoria) -Australia/West.daylight.long=Western Summer Time (Australia) -Australia/West.generic.long=Western Time (Australia) -Australia/West.standard.long=Western Standard Time (Australia) -Australia/Yancowinna.daylight.long=Central Summer Time (South Australia/New South Wales) -Australia/Yancowinna.generic.long=Central Time (South Australia/New South Wales) -Australia/Yancowinna.standard.long=Central Standard Time (South Australia/New South Wales) -BET.generic.long=Brasilia Time -BST.generic.long=Bangladesh Time -Brazil/Acre.generic.long=Acre Time -Brazil/DeNoronha.generic.long=Fernando de Noronha Time -Brazil/East.generic.long=Brasilia Time -Brazil/West.generic.long=Amazon Time -CAT.generic.long=Central Africa Time -CET.generic.long=Central European Time -CNT.generic.long=Newfoundland Time -CST.generic.long=Central Time -CST6CDT.generic.long=Central Time -CTT.generic.long=China Time -Canada/Atlantic.generic.long=Atlantic Time -Canada/Central.generic.long=Central Time -Canada/East-Saskatchewan.generic.long=Central Time -Canada/Eastern.generic.long=Eastern Time -Canada/Mountain.generic.long=Mountain Time -Canada/Newfoundland.generic.long=Newfoundland Time -Canada/Pacific.generic.long=Pacific Time -Canada/Saskatchewan.generic.long=Central Time -Canada/Yukon.generic.long=Pacific Time -Chile/Continental.generic.long=Chile Time -Chile/EasterIsland.generic.long=Easter Is. Time -Cuba.generic.long=Cuba Time -EAT.generic.long=Eastern Africa Time -ECT.generic.long=Central European Time -EET.generic.long=Eastern European Time -EST.generic.long=Eastern Time -EST5EDT.generic.long=Eastern Time -Egypt.generic.long=Eastern European Time -Eire.generic.long=Irish Time -Etc/Greenwich.generic.long=Greenwich Mean Time -Etc/UCT.generic.long=Coordinated Universal Time -Etc/UTC.generic.long=Coordinated Universal Time -Etc/Universal.generic.long=Coordinated Universal Time -Etc/Zulu.generic.long=Coordinated Universal Time -Europe/Amsterdam.generic.long=Central European Time -Europe/Andorra.generic.long=Central European Time -Europe/Athens.generic.long=Eastern European Time -Europe/Belfast.generic.long=British Time -Europe/Belgrade.generic.long=Central European Time -Europe/Berlin.generic.long=Central European Time -Europe/Bratislava.generic.long=Central European Time -Europe/Brussels.generic.long=Central European Time -Europe/Bucharest.generic.long=Eastern European Time -Europe/Budapest.generic.long=Central European Time -Europe/Busingen.generic.long=Central European Time -Europe/Chisinau.generic.long=Eastern European Time -Europe/Copenhagen.generic.long=Central European Time -Europe/Dublin.generic.long=Irish Time -Europe/Gibraltar.generic.long=Central European Time -Europe/Guernsey.generic.long=British Time -Europe/Helsinki.generic.long=Eastern European Time -Europe/Isle_of_Man.generic.long=British Time -Europe/Istanbul.generic.long=Eastern European Time -Europe/Jersey.generic.long=British Time -Europe/Kaliningrad.daylight.long=Further-eastern European Summer Time -Europe/Kaliningrad.generic.long=Further-eastern European Time -Europe/Kaliningrad.standard.long=Further-eastern European Time -Europe/Kiev.generic.long=Eastern European Time -Europe/Lisbon.generic.long=Western European Time -Europe/Ljubljana.generic.long=Central European Time -Europe/London.generic.long=British Time -Europe/Luxembourg.generic.long=Central European Time -Europe/Madrid.generic.long=Central European Time -Europe/Malta.generic.long=Central European Time -Europe/Mariehamn.generic.long=Eastern European Time -Europe/Minsk.daylight.long=Further-eastern European Summer Time -Europe/Minsk.generic.long=Further-eastern European Time -Europe/Minsk.standard.long=Further-eastern European Time -Europe/Monaco.generic.long=Central European Time -Europe/Moscow.generic.long=Moscow Time -Europe/Nicosia.generic.long=Eastern European Time -Europe/Oslo.generic.long=Central European Time -Europe/Paris.generic.long=Central European Time -Europe/Podgorica.generic.long=Central European Time -Europe/Prague.generic.long=Central European Time -Europe/Riga.generic.long=Eastern European Time -Europe/Rome.generic.long=Central European Time -Europe/Samara.generic.long=Samara Time -Europe/San_Marino.generic.long=Central European Time -Europe/Sarajevo.generic.long=Central European Time -Europe/Simferopol.generic.long=Eastern European Time -Europe/Skopje.generic.long=Central European Time -Europe/Sofia.generic.long=Eastern European Time -Europe/Stockholm.generic.long=Central European Time -Europe/Tallinn.generic.long=Eastern European Time -Europe/Tirane.generic.long=Central European Time -Europe/Tiraspol.generic.long=Eastern European Time -Europe/Uzhgorod.generic.long=Eastern European Time -Europe/Vaduz.generic.long=Central European Time -Europe/Vatican.generic.long=Central European Time -Europe/Vienna.generic.long=Central European Time -Europe/Vilnius.generic.long=Eastern European Time -Europe/Volgograd.generic.long=Volgograd Time -Europe/Warsaw.generic.long=Central European Time -Europe/Zagreb.generic.long=Central European Time -Europe/Zaporozhye.generic.long=Eastern European Time -Europe/Zurich.generic.long=Central European Time -GB-Eire.generic.long=British Time -GB.generic.long=British Time -GMT.generic.long=Greenwich Mean Time -Greenwich.generic.long=Greenwich Mean Time -HST.generic.long=Hawaii Time -Hongkong.generic.long=Hong Kong Time -IET.generic.long=Eastern Time -IST.generic.long=India Time -Iceland.generic.long=Greenwich Mean Time -Indian/Antananarivo.generic.long=Eastern Africa Time -Indian/Chagos.generic.long=Indian Ocean Territory Time -Indian/Christmas.generic.long=Christmas Island Time -Indian/Cocos.generic.long=Cocos Islands Time -Indian/Comoro.generic.long=Eastern Africa Time -Indian/Kerguelen.generic.long=French Southern & Antarctic Lands Time -Indian/Mahe.generic.long=Seychelles Time -Indian/Maldives.generic.long=Maldives Time -Indian/Mauritius.generic.long=Mauritius Time -Indian/Mayotte.generic.long=Eastern Africa Time -Indian/Reunion.generic.long=Reunion Time -Iran.generic.long=Iran Time -Israel.generic.long=Israel Time -JST.generic.long=Japan Time -Jamaica.generic.long=Eastern Time -Japan.generic.long=Japan Time -Kwajalein.generic.long=Marshall Islands Time -Libya.generic.long=Eastern European Time -MET.generic.long=Middle Europe Time -MIT.generic.long=West Samoa Time -MST.generic.long=Mountain Time -MST7MDT.generic.long=Mountain Time -Mexico/BajaNorte.generic.long=Pacific Time -Mexico/BajaSur.generic.long=Mountain Time -Mexico/General.generic.long=Central Time -NET.generic.long=Armenia Time -NST.generic.long=New Zealand Time -NZ-CHAT.generic.long=Chatham Time -NZ.generic.long=New Zealand Time -Navajo.generic.long=Mountain Time -PLT.generic.long=Pakistan Time -PNT.generic.long=Mountain Time -PRC.generic.long=China Time -PRT.generic.long=Atlantic Time -PST.generic.long=Pacific Time -PST8PDT.generic.long=Pacific Time -Pacific/Apia.generic.long=West Samoa Time -Pacific/Auckland.generic.long=New Zealand Time -Pacific/Chatham.generic.long=Chatham Time -Pacific/Chuuk.daylight.long=Chuuk Summer Time -Pacific/Chuuk.generic.long=Chuuk Time -Pacific/Chuuk.standard.long=Chuuk Time -Pacific/Easter.generic.long=Easter Is. Time -Pacific/Efate.generic.long=Vanuatu Time -Pacific/Enderbury.generic.long=Phoenix Is. Time -Pacific/Fakaofo.generic.long=Tokelau Time -Pacific/Fiji.generic.long=Fiji Time -Pacific/Funafuti.generic.long=Tuvalu Time -Pacific/Galapagos.generic.long=Galapagos Time -Pacific/Gambier.generic.long=Gambier Time -Pacific/Guadalcanal.generic.long=Solomon Is. Time -Pacific/Guam.generic.long=Chamorro Time -Pacific/Honolulu.generic.long=Hawaii Time -Pacific/Johnston.generic.long=Hawaii Time -Pacific/Kiritimati.generic.long=Line Is. Time -Pacific/Kosrae.generic.long=Kosrae Time -Pacific/Kwajalein.generic.long=Marshall Islands Time -Pacific/Majuro.generic.long=Marshall Islands Time -Pacific/Marquesas.generic.long=Marquesas Time -Pacific/Midway.generic.long=Samoa Time -Pacific/Nauru.generic.long=Nauru Time -Pacific/Niue.generic.long=Niue Time -Pacific/Norfolk.generic.long=Norfolk Time -Pacific/Noumea.generic.long=New Caledonia Time -Pacific/Pago_Pago.generic.long=Samoa Time -Pacific/Palau.generic.long=Palau Time -Pacific/Pitcairn.generic.long=Pitcairn Time -Pacific/Pohnpei.daylight.long=Pohnpei Summer Time -Pacific/Pohnpei.generic.long=Ponape Time -Pacific/Pohnpei.standard.long=Pohnpei Time -Pacific/Ponape.daylight.long=Pohnpei Summer Time -Pacific/Ponape.generic.long=Ponape Time -Pacific/Ponape.standard.long=Pohnpei Time -Pacific/Port_Moresby.generic.long=Papua New Guinea Time -Pacific/Rarotonga.generic.long=Cook Is. Time -Pacific/Saipan.generic.long=Chamorro Time -Pacific/Samoa.generic.long=Samoa Time -Pacific/Tahiti.generic.long=Tahiti Time -Pacific/Tarawa.generic.long=Gilbert Is. Time -Pacific/Tongatapu.generic.long=Tonga Time -Pacific/Truk.daylight.long=Chuuk Summer Time -Pacific/Truk.generic.long=Chuuk Time -Pacific/Truk.standard.long=Chuuk Time -Pacific/Wake.generic.long=Wake Time -Pacific/Wallis.generic.long=Wallis & Futuna Time -Pacific/Yap.daylight.long=Chuuk Summer Time -Pacific/Yap.generic.long=Chuuk Time -Pacific/Yap.standard.long=Chuuk Time -Poland.generic.long=Central European Time -Portugal.generic.long=Western European Time -ROK.generic.long=Korea Time -SST.generic.long=Solomon Is. Time -Singapore.generic.long=Singapore Time -SystemV/AST4.generic.long=Atlantic Time -SystemV/AST4ADT.generic.long=Atlantic Time -SystemV/CST6.generic.long=Central Time -SystemV/CST6CDT.generic.long=Central Time -SystemV/EST5.generic.long=Eastern Time -SystemV/EST5EDT.generic.long=Eastern Time -SystemV/HST10.generic.long=Hawaii Time -SystemV/MST7.generic.long=Mountain Time -SystemV/MST7MDT.generic.long=Mountain Time -SystemV/PST8.generic.long=Pacific Time -SystemV/PST8PDT.generic.long=Pacific Time -SystemV/YST9.generic.long=Alaska Time -SystemV/YST9YDT.generic.long=Alaska Time -Turkey.generic.long=Eastern European Time -UCT.generic.long=Coordinated Universal Time -US/Alaska.generic.long=Alaska Time -US/Aleutian.generic.long=Hawaii-Aleutian Time -US/Arizona.generic.long=Mountain Time -US/Central.generic.long=Central Time -US/East-Indiana.generic.long=Eastern Time -US/Eastern.generic.long=Eastern Time -US/Hawaii.generic.long=Hawaii Time -US/Indiana-Starke.generic.long=Central Time -US/Michigan.generic.long=Eastern Time -US/Mountain.generic.long=Mountain Time -US/Pacific-New.generic.long=Pacific Time -US/Pacific.generic.long=Pacific Time -US/Samoa.generic.long=Samoa Time -UTC.generic.long=Coordinated Universal Time -Universal.generic.long=Coordinated Universal Time -VST.generic.long=Indochina Time -W-SU.generic.long=Moscow Time -WET.generic.long=Western European Time -Zulu.generic.long=Coordinated Universal Time diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java deleted file mode 100644 index e112e56f340..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 8025051 - * @summary Test time zone names across all locales - * @run main TimeZoneNamesTest - */ - -import sun.util.locale.provider.TimeZoneNameUtility; -import java.util.TimeZone; -import java.util.Locale; -import java.util.Properties; -import java.io.IOException; -import java.io.FileInputStream; - -public class TimeZoneNamesTest { - // name type to test. Possible: long, short. - static String requestedTestType = "long"; - // test Standard/DST (false) or Generic (true) TZ names - static boolean testGeneric = false; - - public static void testGenericTZName( Locale locale, String timezoneName, - int nameType, String expectedName ) throws RuntimeException { - if (testGeneric) { - String genericName = TimeZoneNameUtility.retrieveGenericDisplayName(timezoneName, nameType, locale); - //Check for equality - if (!genericName.equals(expectedName)) - throw new RuntimeException( "Time zone ("+timezoneName+") name is incorrect for locale \""+locale.getDisplayName() - +"\" nameType: Generic"+"("+nameType+") Should be: " +expectedName+" Observed: "+genericName); - } - } - - public static void testTZName( Locale locale, String timezoneName, boolean isDaylight, - int nameType, String expectedName ) throws RuntimeException { - if (!testGeneric) { - //Construct time zone objects - TimeZone zone = TimeZone.getTimeZone(timezoneName); - //Get name from JDK - String name = zone.getDisplayName(isDaylight, nameType, locale); - //Check for equality - if (!name.equals(expectedName)) - throw new RuntimeException( "Time zone ("+timezoneName+") name is incorrect for locale: \""+locale.getDisplayName() - +"\" nameType:"+requestedTestType+" DST:"+isDaylight+" Should be: " +expectedName+" Observed: "+name); - } - } - - public static boolean testPropertyEntry( Locale locale, String entry, String value ) { - boolean result = true; - String[] params = entry.split("\\."); - if (params.length != 3) { - System.out.println("Incorrect property file entry="+entry+" "+params.length); - result = false; - } else { - boolean isDaylight = true; - int nameType = TimeZone.LONG; - - if (params[2].equals("short")) - nameType = TimeZone.SHORT; - - if (params[1].equals("standard")) - isDaylight = false; - - // Names with non-requested tz name type are ignored - if (requestedTestType.equals(params[2])) { - try { - if (params[1].equals("generic")) - testGenericTZName( locale, params[0], nameType, value ); - else - testTZName( locale, params[0], isDaylight, nameType, value ); - } catch (RuntimeException e) { - System.out.println( "Test FAILED: "+e ); - result = false; - } - } - } - return result; - } - - public static boolean testPropertyFile( String propFile, String shortName, Locale locale ) throws RuntimeException { - boolean result = true; - Properties property = new Properties(); - try { - property.load( new FileInputStream(propFile) ); - } catch (IOException e) { - throw new RuntimeException("Property file "+propFile+" is not found", e); - } - for (String key: property.stringPropertyNames()) { - result &= testPropertyEntry(locale, key, property.getProperty(key) ); - } - return result; - } - - // Locale to test, file with names data, test long/short names, test generic names (true/false) - static Object[][] testTargets = { - { Locale.ROOT,"TimeZoneNames.properties","long",false}, - { Locale.ROOT,"TimeZoneNames_short.properties","short",false}, - { Locale.ROOT,"TimeZoneNames.properties","long",true}, - { Locale.ROOT,"TimeZoneNames_short.properties","short",true}, - - { new Locale("de"),"TimeZoneNames_de.properties","long",false}, - { new Locale("de"),"TimeZoneNames_de_short.properties","short",false}, - { new Locale("de"),"TimeZoneNames_de.properties","long",true}, - { new Locale("de"),"TimeZoneNames_de_short.properties","short",true}, - - { new Locale("es"),"TimeZoneNames_es.properties","long",false}, - { new Locale("es"),"TimeZoneNames_es_short.properties","short",false}, - { new Locale("es"),"TimeZoneNames_es.properties","long",true}, - { new Locale("es"),"TimeZoneNames_es_short.properties","short",true}, - - { new Locale("fr"),"TimeZoneNames_fr.properties","long",false}, - { new Locale("fr"),"TimeZoneNames_fr_short.properties","short",false}, - { new Locale("fr"),"TimeZoneNames_fr.properties","long",true}, - { new Locale("fr"),"TimeZoneNames_fr_short.properties","short",true}, - - { new Locale("it"),"TimeZoneNames_it.properties","long",false}, - { new Locale("it"),"TimeZoneNames_it_short.properties","short",false}, - { new Locale("it"),"TimeZoneNames_it.properties","long",true}, - { new Locale("it"),"TimeZoneNames_it_short.properties","short",true}, - - { new Locale("ja"),"TimeZoneNames_ja.properties","long",false}, - { new Locale("ja"),"TimeZoneNames_ja_short.properties","short",false}, - { new Locale("ja"),"TimeZoneNames_ja.properties","long",true}, - { new Locale("ja"),"TimeZoneNames_ja_short.properties","short",true}, - - { new Locale("ko"),"TimeZoneNames_ko.properties","long",false}, - { new Locale("ko"),"TimeZoneNames_ko_short.properties","short",false}, - { new Locale("ko"),"TimeZoneNames_ko.properties","long",true}, - { new Locale("ko"),"TimeZoneNames_ko_short.properties","short",true}, - - { new Locale("pt","BR"),"TimeZoneNames_pt_BR.properties","long",false}, - { new Locale("pt","BR"),"TimeZoneNames_pt_BR_short.properties","short",false}, - { new Locale("pt","BR"),"TimeZoneNames_pt_BR.properties","long",true}, - { new Locale("pt","BR"),"TimeZoneNames_pt_BR_short.properties","short",true}, - - { new Locale("sv"),"TimeZoneNames_sv.properties","long",false}, - { new Locale("sv"),"TimeZoneNames_sv_short.properties","short",false}, - { new Locale("sv"),"TimeZoneNames_sv.properties","long",true}, - { new Locale("sv"),"TimeZoneNames_sv_short.properties","short",true}, - - { new Locale("zh","CN"),"TimeZoneNames_zh_CN.properties","long",false}, - { new Locale("zh","CN"),"TimeZoneNames_zh_CN_short.properties","short",false}, - { new Locale("zh","CN"),"TimeZoneNames_zh_CN.properties","long",true}, - { new Locale("zh","CN"),"TimeZoneNames_zh_CN_short.properties","short",true}, - - { new Locale("zh","TW"),"TimeZoneNames_zh_TW.properties","long",false}, - { new Locale("zh","TW"),"TimeZoneNames_zh_TW_short.properties","short",false}, - { new Locale("zh","TW"),"TimeZoneNames_zh_TW.properties","long",true}, - { new Locale("zh","TW"),"TimeZoneNames_zh_TW_short.properties","short",true} - }; - - public static void main(String[] args) { - boolean result = true; - - for (Object [] test: testTargets) { - Locale testLocale = (Locale) test[0]; - String testFile = (String) test[1]; - requestedTestType = (String) test[2]; - testGeneric = (Boolean) test[3]; - result &= testPropertyFile( System.getProperty("test.src",".")+"/"+testFile, testFile, testLocale); - } - if (!result) - throw new RuntimeException("Some time zones has unexpected names. Please, check test output."); - } -} diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties deleted file mode 100644 index 432b127b2b9..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Zentrale Sommerzeit (Northern Territory) -ACT.generic.long=Zentrale Zeitzone (Northern Territory) -ACT.standard.long=Zentrale Normalzeit (Northern Territory) -AET.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -AET.generic.long=\u00D6stliche Zeitzone (New South Wales) -AET.standard.long=\u00D6stliche Normalzeit (New South Wales) -AGT.generic.long=Argentinische Zeit -ART.generic.long=Osteurop\u00E4ische Zeit -AST.generic.long=Zeitzone f\u00FCr Alaska -Africa/Abidjan.generic.long=Greenwich Zeit -Africa/Accra.generic.long=Ghanaische Normalzeit -Africa/Addis_Ababa.generic.long=Ostafrikanische Zeit -Africa/Algiers.generic.long=Mitteleurop\u00E4ische Zeit -Africa/Asmara.generic.long=Ostafrikanische Zeit -Africa/Asmera.generic.long=Ostafrikanische Zeit -Africa/Bamako.generic.long=Greenwich Zeit -Africa/Bangui.generic.long=Westafrikanische Zeit -Africa/Banjul.generic.long=Greenwich Zeit -Africa/Bissau.generic.long=Greenwich Zeit -Africa/Blantyre.generic.long=Zentralafrikanische Zeit -Africa/Brazzaville.generic.long=Westafrikanische Zeit -Africa/Bujumbura.generic.long=Zentralafrikanische Zeit -Africa/Cairo.generic.long=Osteurop\u00E4ische Zeit -Africa/Casablanca.generic.long=Westeurop\u00E4ische Zeit -Africa/Ceuta.generic.long=Mitteleurop\u00E4ische Zeit -Africa/Conakry.generic.long=Greenwich Zeit -Africa/Dakar.generic.long=Greenwich Zeit -Africa/Dar_es_Salaam.generic.long=Ostafrikanische Zeit -Africa/Djibouti.generic.long=Ostafrikanische Zeit -Africa/Douala.generic.long=Westafrikanische Zeit -Africa/El_Aaiun.generic.long=Westeurop\u00E4ische Zeit -Africa/Freetown.generic.long=Sierra Leone Zeit -Africa/Gaborone.generic.long=Zentralafrikanische Zeit -Africa/Harare.generic.long=Zentralafrikanische Zeit -Africa/Johannesburg.generic.long=Zeitzone f\u00FCr S\u00FCdafrika -Africa/Juba.generic.long=Ostafrikanische Zeit -Africa/Kampala.generic.long=Ostafrikanische Zeit -Africa/Khartoum.generic.long=Ostafrikanische Zeit -Africa/Kigali.generic.long=Zentralafrikanische Zeit -Africa/Kinshasa.generic.long=Westafrikanische Zeit -Africa/Lagos.generic.long=Westafrikanische Zeit -Africa/Libreville.generic.long=Westafrikanische Zeit -Africa/Lome.generic.long=Greenwich Zeit -Africa/Luanda.generic.long=Westafrikanische Zeit -Africa/Lubumbashi.generic.long=Zentralafrikanische Zeit -Africa/Lusaka.generic.long=Zentralafrikanische Zeit -Africa/Malabo.generic.long=Westafrikanische Zeit -Africa/Maputo.generic.long=Zentralafrikanische Zeit -Africa/Maseru.generic.long=Zeitzone f\u00FCr S\u00FCdafrika -Africa/Mbabane.generic.long=Zeitzone f\u00FCr S\u00FCdafrika -Africa/Mogadishu.generic.long=Ostafrikanische Zeit -Africa/Monrovia.generic.long=Greenwich Zeit -Africa/Nairobi.generic.long=Ostafrikanische Zeit -Africa/Ndjamena.generic.long=Westafrikanische Zeit -Africa/Niamey.generic.long=Westafrikanische Zeit -Africa/Nouakchott.generic.long=Greenwich Zeit -Africa/Ouagadougou.generic.long=Greenwich Zeit -Africa/Porto-Novo.generic.long=Westafrikanische Zeit -Africa/Sao_Tome.generic.long=Greenwich Zeit -Africa/Timbuktu.generic.long=Greenwich Zeit -Africa/Tripoli.generic.long=Osteurop\u00e4ische Zeit -Africa/Tunis.generic.long=Mitteleurop\u00E4ische Zeit -Africa/Windhoek.generic.long=Westafrikanische Zeit -America/Adak.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen -America/Anchorage.generic.long=Zeitzone f\u00FCr Alaska -America/Anguilla.generic.long=Zeitzone Atlantik -America/Antigua.generic.long=Zeitzone Atlantik -America/Araguaina.generic.long=Brasilianische Zeit -America/Argentina/Buenos_Aires.generic.long=Argentinische Zeit -America/Argentina/Catamarca.generic.long=Argentinische Zeit -America/Argentina/ComodRivadavia.generic.long=Argentinische Zeit -America/Argentina/Cordoba.generic.long=Argentinische Zeit -America/Argentina/Jujuy.generic.long=Argentinische Zeit -America/Argentina/La_Rioja.generic.long=Argentinische Zeit -America/Argentina/Mendoza.generic.long=Argentinische Zeit -America/Argentina/Rio_Gallegos.generic.long=Argentinische Zeit -America/Argentina/Salta.generic.long=Argentinische Zeit -America/Argentina/San_Juan.generic.long=Argentinische Zeit -America/Argentina/San_Luis.generic.long=Argentinische Zeit -America/Argentina/Tucuman.generic.long=Argentinische Zeit -America/Argentina/Ushuaia.generic.long=Argentinische Zeit -America/Aruba.generic.long=Zeitzone Atlantik -America/Asuncion.generic.long=Paraguay Zeit -America/Atikokan.generic.long=\u00D6stliche Zeitzone -America/Atka.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen -America/Bahia.generic.long=Brasilianische Zeit -America/Bahia_Banderas.generic.long=Zentrale Zeitzone -America/Barbados.generic.long=Zeitzone Atlantik -America/Belem.generic.long=Brasilianische Zeit -America/Belize.generic.long=Zentrale Zeitzone -America/Blanc-Sablon.generic.long=Zeitzone Atlantik -America/Boa_Vista.generic.long=Amazonas Normalzeit -America/Bogota.generic.long=Kolumbianische Zeit -America/Boise.generic.long=Zeitzone Mountain -America/Buenos_Aires.generic.long=Argentinische Zeit -America/Cambridge_Bay.generic.long=Zeitzone Mountain -America/Campo_Grande.generic.long=Amazonas Normalzeit -America/Cancun.generic.long=Zentrale Zeitzone -America/Caracas.generic.long=Venezuelanische Zeit -America/Catamarca.generic.long=Argentinische Zeit -America/Cayenne.generic.long=Franz\u00F6sisch-Guiana Zeit -America/Cayman.generic.long=\u00D6stliche Zeitzone -America/Chicago.generic.long=Zentrale Zeitzone -America/Chihuahua.generic.long=Zeitzone Mountain -America/Coral_Harbour.generic.long=\u00D6stliche Zeitzone -America/Cordoba.generic.long=Argentinische Zeit -America/Costa_Rica.generic.long=Zentrale Zeitzone -America/Creston.generic.long=Zeitzone Mountain -America/Cuiaba.generic.long=Amazonas Normalzeit -America/Curacao.generic.long=Zeitzone Atlantik -America/Danmarkshavn.generic.long=Greenwich Zeit -America/Dawson.generic.long=Zeitzone Pazifik -America/Dawson_Creek.generic.long=Zeitzone Mountain -America/Denver.generic.long=Zeitzone Mountain -America/Detroit.generic.long=\u00D6stliche Zeitzone -America/Dominica.generic.long=Zeitzone Atlantik -America/Edmonton.generic.long=Zeitzone Mountain -America/Eirunepe.generic.long=Acre Normalzeit -America/El_Salvador.generic.long=Zentrale Zeitzone -America/Ensenada.generic.long=Zeitzone Pazifik -America/Fort_Wayne.generic.long=\u00D6stliche Zeitzone -America/Fortaleza.generic.long=Brasilianische Zeit -America/Glace_Bay.generic.long=Zeitzone Atlantik -America/Godthab.generic.long=Westgr\u00F6nl\u00E4ndische Zeit -America/Goose_Bay.generic.long=Zeitzone Atlantik -America/Grand_Turk.generic.long=\u00D6stliche Zeitzone -America/Grenada.generic.long=Zeitzone Atlantik -America/Guadeloupe.generic.long=Zeitzone Atlantik -America/Guatemala.generic.long=Zentrale Zeitzone -America/Guayaquil.generic.long=Ecuadorianische Zeit -America/Guyana.generic.long=Guyanische Zeit -America/Halifax.generic.long=Zeitzone Atlantik -America/Havana.generic.long=Kubanische Normalzeit -America/Hermosillo.generic.long=Zeitzone Mountain -America/Indiana/Indianapolis.generic.long=\u00D6stliche Zeitzone -America/Indiana/Knox.generic.long=Zentrale Zeitzone -America/Indiana/Marengo.generic.long=\u00D6stliche Zeitzone -America/Indiana/Petersburg.generic.long=\u00D6stliche Zeitzone -America/Indiana/Tell_City.generic.long=Zentrale Zeitzone -America/Indiana/Vevay.generic.long=\u00D6stliche Zeitzone -America/Indiana/Vincennes.generic.long=\u00D6stliche Zeitzone -America/Indiana/Winamac.generic.long=\u00D6stliche Zeitzone -America/Indianapolis.generic.long=\u00D6stliche Zeitzone -America/Inuvik.generic.long=Zeitzone Mountain -America/Iqaluit.generic.long=\u00D6stliche Zeitzone -America/Jamaica.generic.long=\u00D6stliche Zeitzone -America/Jujuy.generic.long=Argentinische Zeit -America/Juneau.generic.long=Zeitzone f\u00FCr Alaska -America/Kentucky/Louisville.generic.long=\u00D6stliche Zeitzone -America/Kentucky/Monticello.generic.long=\u00D6stliche Zeitzone -America/Knox_IN.generic.long=Zentrale Zeitzone -America/Kralendijk.generic.long=Zeitzone Atlantik -America/La_Paz.generic.long=Bolivianische Zeit -America/Lima.generic.long=Peruanische Zeit -America/Los_Angeles.generic.long=Zeitzone Pazifik -America/Louisville.generic.long=\u00D6stliche Zeitzone -America/Lower_Princes.generic.long=Zeitzone Atlantik -America/Maceio.generic.long=Brasilianische Zeit -America/Managua.generic.long=Zentrale Zeitzone -America/Manaus.generic.long=Amazonas Normalzeit -America/Marigot.generic.long=Zeitzone Atlantik -America/Martinique.generic.long=Zeitzone Atlantik -America/Matamoros.generic.long=Zentrale Zeitzone -America/Mazatlan.generic.long=Zeitzone Mountain -America/Mendoza.generic.long=Argentinische Zeit -America/Menominee.generic.long=Zentrale Zeitzone -America/Merida.generic.long=Zentrale Zeitzone -America/Metlakatla.daylight.long=Metlakatla Sommerzeit -America/Metlakatla.generic.long=Metlakatla Normalzeit -America/Metlakatla.standard.long=Metlakatla Normalzeit -America/Mexico_City.generic.long=Zentrale Zeitzone -America/Miquelon.generic.long=Zeitzone f\u00FCr St. Pierre und Miquelon -America/Moncton.generic.long=Zeitzone Atlantik -America/Monterrey.generic.long=Zentrale Zeitzone -America/Montevideo.generic.long=Uruguayanische Zeit -America/Montreal.generic.long=\u00D6stliche Zeitzone -America/Montserrat.generic.long=Zeitzone Atlantik -America/Nassau.generic.long=\u00D6stliche Zeitzone -America/New_York.generic.long=\u00D6stliche Zeitzone -America/Nipigon.generic.long=\u00D6stliche Zeitzone -America/Nome.generic.long=Zeitzone f\u00FCr Alaska -America/Noronha.generic.long=Fernando de Noronha Zeit -America/North_Dakota/Beulah.generic.long=Zentrale Zeitzone -America/North_Dakota/Center.generic.long=Zentrale Zeitzone -America/North_Dakota/New_Salem.generic.long=Zentrale Zeitzone -America/Ojinaga.generic.long=Zeitzone Mountain -America/Panama.generic.long=\u00D6stliche Zeitzone -America/Pangnirtung.generic.long=\u00D6stliche Zeitzone -America/Paramaribo.generic.long=Suriname Zeit -America/Phoenix.generic.long=Zeitzone Mountain -America/Port-au-Prince.generic.long=\u00D6stliche Zeitzone -America/Port_of_Spain.generic.long=Zeitzone Atlantik -America/Porto_Acre.generic.long=Acre Normalzeit -America/Porto_Velho.generic.long=Amazonas Normalzeit -America/Puerto_Rico.generic.long=Zeitzone Atlantik -America/Rainy_River.generic.long=Zentrale Zeitzone -America/Rankin_Inlet.generic.long=Zentrale Zeitzone -America/Recife.generic.long=Brasilianische Zeit -America/Regina.generic.long=Zentrale Zeitzone -America/Resolute.generic.long=Zentrale Zeitzone -America/Rio_Branco.generic.long=Acre Normalzeit -America/Rosario.generic.long=Argentinische Zeit -America/Santa_Isabel.generic.long=Zeitzone Pazifik -America/Santarem.generic.long=Brasilianische Zeit -America/Santiago.generic.long=Chilenische Zeit -America/Santo_Domingo.generic.long=Zeitzone Atlantik -America/Sao_Paulo.generic.long=Brasilianische Zeit -America/Scoresbysund.generic.long=Ostgr\u00F6nl\u00E4ndische Zeit -America/Shiprock.generic.long=Zeitzone Mountain -America/Sitka.generic.long=Zeitzone f\u00FCr Alaska -America/St_Barthelemy.generic.long=Zeitzone Atlantik -America/St_Johns.generic.long=Zeitzone f\u00FCr Neufundland -America/St_Kitts.generic.long=Zeitzone Atlantik -America/St_Lucia.generic.long=Zeitzone Atlantik -America/St_Thomas.generic.long=Zeitzone Atlantik -America/St_Vincent.generic.long=Zeitzone Atlantik -America/Swift_Current.generic.long=Zentrale Zeitzone -America/Tegucigalpa.generic.long=Zentrale Zeitzone -America/Thule.generic.long=Zeitzone Atlantik -America/Thunder_Bay.generic.long=\u00D6stliche Zeitzone -America/Tijuana.generic.long=Zeitzone Pazifik -America/Toronto.generic.long=\u00D6stliche Zeitzone -America/Tortola.generic.long=Zeitzone Atlantik -America/Vancouver.generic.long=Zeitzone Pazifik -America/Virgin.generic.long=Zeitzone Atlantik -America/Whitehorse.generic.long=Zeitzone Pazifik -America/Winnipeg.generic.long=Zentrale Zeitzone -America/Yakutat.generic.long=Zeitzone f\u00FCr Alaska -America/Yellowknife.generic.long=Zeitzone Mountain -Antarctica/Casey.daylight.long=Westliche Sommerzeit (Australien) -Antarctica/Casey.generic.long=Westliche Zeitzone (Australien) -Antarctica/Casey.standard.long=Westliche Normalzeit (Australien) -Antarctica/Davis.generic.long=Davis Zeit -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville Zeit -Antarctica/Macquarie.daylight.long=Macquarieinsel Sommerzeit -Antarctica/Macquarie.generic.long=Macquarieinsel Zeit -Antarctica/Macquarie.standard.long=Macquarieinsel Zeit -Antarctica/Mawson.generic.long=Mawson Zeit -Antarctica/McMurdo.generic.long=Zeitzone f\u00FCr Neuseeland -Antarctica/Palmer.generic.long=Chilenische Zeit -Antarctica/Rothera.generic.long=Rothera Zeit -Antarctica/South_Pole.generic.long=Zeitzone f\u00FCr Neuseeland -Antarctica/Syowa.generic.long=Syowa Zeit -Antarctica/Vostok.generic.long=Vostok Zeit -Arctic/Longyearbyen.generic.long=Mitteleurop\u00E4ische Zeit -Asia/Aden.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Almaty.generic.long=Alma Ata Zeit -Asia/Amman.generic.long=Zeitzone f\u00fcr Arabische Halbinsel -Asia/Anadyr.generic.long=Anadyr Zeit -Asia/Aqtau.generic.long=Aqtau Zeit -Asia/Aqtobe.generic.long=Aqtobe Zeit -Asia/Ashgabat.generic.long=Turkmenische Zeit -Asia/Ashkhabad.generic.long=Turkmenische Zeit -Asia/Baghdad.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Bahrain.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Baku.generic.long=Aserbaidschanische Zeit -Asia/Bangkok.generic.long=Indochina Zeit -Asia/Beirut.generic.long=Osteurop\u00E4ische Zeit -Asia/Bishkek.generic.long=Kirgisische Zeit -Asia/Brunei.generic.long=Brunei Zeit -Asia/Calcutta.generic.long=Zeitzone f\u00FCr Indien -Asia/Choibalsan.generic.long=Choibalsan Zeit -Asia/Chongqing.generic.long=Zeitzone f\u00FCr China -Asia/Chungking.generic.long=Zeitzone f\u00FCr China -Asia/Colombo.generic.long=Zeitzone f\u00FCr Indien -Asia/Dacca.generic.long=Bangladesch Zeit -Asia/Damascus.generic.long=Osteurop\u00E4ische Zeit -Asia/Dhaka.generic.long=Bangladesch Zeit -Asia/Dili.generic.long=Timor-Leste Normalzeit -Asia/Dubai.generic.long=Zeitzone f\u00FCr Persischen Golf -Asia/Dushanbe.generic.long=Tadschikische Zeit -Asia/Gaza.generic.long=Osteurop\u00E4ische Zeit -Asia/Harbin.generic.long=Zeitzone f\u00FCr China -Asia/Hebron.generic.long=Osteurop\u00E4ische Zeit -Asia/Ho_Chi_Minh.generic.long=Indochina Zeit -Asia/Hong_Kong.generic.long=Hongkong Zeit -Asia/Hovd.generic.long=Hovd Zeit -Asia/Irkutsk.generic.long=Irkutsk Zeit -Asia/Istanbul.generic.long=Osteurop\u00E4ische Zeit -Asia/Jakarta.generic.long=Westindonesische Zeit -Asia/Jayapura.generic.long=Ostindonesische Zeit -Asia/Jerusalem.generic.long=Zeitzone f\u00FCr Israel -Asia/Kabul.generic.long=Afghanistanische Zeit -Asia/Kamchatka.generic.long=Petropawlowsk-Kamtschatkische Zeit -Asia/Karachi.generic.long=Pakistanische Zeit -Asia/Kashgar.generic.long=Zeitzone f\u00FCr China -Asia/Kathmandu.generic.long=Nepalesische Zeit -Asia/Katmandu.generic.long=Nepalesische Zeit -Asia/Khandyga.daylight.long=Chandyga Sommerzeit -Asia/Khandyga.generic.long=Chandyga Zeit -Asia/Khandyga.standard.long=Chandyga Zeit -Asia/Kolkata.generic.long=Zeitzone f\u00FCr Indien -Asia/Krasnoyarsk.generic.long=Krasnojarsker Zeit -Asia/Kuala_Lumpur.generic.long=Malaysische Zeit -Asia/Kuching.generic.long=Malaysische Zeit -Asia/Kuwait.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Macao.generic.long=Zeitzone f\u00FCr China -Asia/Macau.generic.long=Zeitzone f\u00FCr China -Asia/Magadan.generic.long=Magadanische Zeit -Asia/Makassar.generic.long=Zentralindonesische Zeit -Asia/Manila.generic.long=Philippinische Zeit -Asia/Muscat.generic.long=Zeitzone f\u00FCr Persischen Golf -Asia/Nicosia.generic.long=Osteurop\u00E4ische Zeit -Asia/Novokuznetsk.generic.long=Nowosibirsker Zeit -Asia/Novosibirsk.generic.long=Nowosibirsker Zeit -Asia/Omsk.generic.long=Omsk Zeit -Asia/Oral.generic.long=Oral Zeit -Asia/Phnom_Penh.generic.long=Indochina Zeit -Asia/Pontianak.generic.long=Westindonesische Zeit -Asia/Pyongyang.generic.long=Zeitzone f\u00FCr Korea -Asia/Qatar.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Qyzylorda.generic.long=Qyzylorda Zeit -Asia/Rangoon.generic.long=Myanmar Zeit -Asia/Saigon.generic.long=Indochina Zeit -Asia/Sakhalin.generic.long=Sakhalin Zeit -Asia/Samarkand.generic.long=Usbekistan Zeit -Asia/Seoul.generic.long=Zeitzone f\u00FCr Korea -Asia/Shanghai.generic.long=Zeitzone f\u00FCr China -Asia/Singapore.generic.long=Singapur Zeit -Asia/Taipei.generic.long=Zeitzone f\u00FCr China -Asia/Tashkent.generic.long=Usbekistan Zeit -Asia/Tbilisi.generic.long=Georgische Zeit -Asia/Tehran.generic.long=Iranische Zeit -Asia/Tel_Aviv.generic.long=Zeitzone f\u00FCr Israel -Asia/Thimbu.generic.long=Bhutanische Zeit -Asia/Thimphu.generic.long=Bhutanische Zeit -Asia/Tokyo.generic.long=Zeitzone f\u00FCr Japan -Asia/Ujung_Pandang.generic.long=Zentralindonesische Zeit -Asia/Ulaanbaatar.generic.long=Ulaanbaatar Zeit -Asia/Ulan_Bator.generic.long=Ulaanbaatar Zeit -Asia/Urumqi.generic.long=Zeitzone f\u00FCr China -Asia/Ust-Nera.daylight.long=Ust-Nera Sommerzeit -Asia/Ust-Nera.generic.long=Ust-Nera Zeit -Asia/Ust-Nera.standard.long=Ust-Nera Zeit -Asia/Vientiane.generic.long=Indochina Zeit -Asia/Vladivostok.generic.long=Wladiwostok Zeit -Asia/Yakutsk.generic.long=Jakutsk Zeit -Asia/Yekaterinburg.generic.long=Jekaterinburger Zeit -Asia/Yerevan.generic.long=Armenische Zeit -Atlantic/Azores.generic.long=Azoren Zeit -Atlantic/Bermuda.generic.long=Zeitzone Atlantik -Atlantic/Canary.generic.long=Westeurop\u00E4ische Zeit -Atlantic/Cape_Verde.generic.long=Kap Verde Zeit -Atlantic/Faeroe.generic.long=Westeurop\u00E4ische Zeit -Atlantic/Faroe.generic.long=Westeurop\u00E4ische Zeit -Atlantic/Jan_Mayen.generic.long=Mitteleurop\u00E4ische Zeit -Atlantic/Madeira.generic.long=Westeurop\u00E4ische Zeit -Atlantic/Reykjavik.generic.long=Greenwich Zeit -Atlantic/South_Georgia.generic.long=Zeitzone f\u00FCr S\u00FCdgeorgien -Atlantic/St_Helena.generic.long=Greenwich Zeit -Atlantic/Stanley.generic.long=Falkland Inseln Zeit -Australia/ACT.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/ACT.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/ACT.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/Adelaide.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien) -Australia/Adelaide.generic.long=Zentrale Zeitzone (S\u00FCdaustralien) -Australia/Adelaide.standard.long=Zentrale Normalzeit (S\u00FCdaustralien) -Australia/Brisbane.daylight.long=\u00D6stliche Sommerzeit (Queensland) -Australia/Brisbane.generic.long=\u00D6stliche Zeitzone (Queensland) -Australia/Brisbane.standard.long=\u00D6stliche Normalzeit (Queensland) -Australia/Broken_Hill.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales) -Australia/Broken_Hill.generic.long=Zentrale Zeitzone (S\u00FCdaustralien/New South Wales) -Australia/Broken_Hill.standard.long=Zentrale Normalzeit (S\u00FCdaustralien/New South Wales) -Australia/Canberra.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/Canberra.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/Canberra.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/Currie.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/Currie.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/Currie.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/Darwin.daylight.long=Zentrale Sommerzeit (Northern Territory) -Australia/Darwin.generic.long=Zentrale Zeitzone (Northern Territory) -Australia/Darwin.standard.long=Zentrale Normalzeit (Northern Territory) -Australia/Eucla.daylight.long=Zentral-Westliche Sommerzeit (Australien) -Australia/Eucla.generic.long=Zentral-Westliche Normalzeit (Australien) -Australia/Eucla.standard.long=Zentral-Westliche Normalzeit (Australien) -Australia/Hobart.daylight.long=\u00D6stliche Sommerzeit (Tasmanien) -Australia/Hobart.generic.long=\u00D6stliche Zeitzone (Tasmanien) -Australia/Hobart.standard.long=\u00D6stliche Normalzeit (Tasmanien) -Australia/LHI.generic.long=Lord-Howe Normalzeit -Australia/Lindeman.daylight.long=\u00D6stliche Sommerzeit (Queensland) -Australia/Lindeman.generic.long=\u00D6stliche Zeitzone (Queensland) -Australia/Lindeman.standard.long=\u00D6stliche Normalzeit (Queensland) -Australia/Lord_Howe.generic.long=Lord-Howe Normalzeit -Australia/Melbourne.daylight.long=\u00D6stliche Sommerzeit (Victoria) -Australia/Melbourne.generic.long=\u00D6stliche Zeitzone (Victoria) -Australia/Melbourne.standard.long=\u00D6stliche Normalzeit (Victoria) -Australia/NSW.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/NSW.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/NSW.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/North.daylight.long=Zentrale Sommerzeit (Northern Territory) -Australia/North.generic.long=Zentrale Zeitzone (Northern Territory) -Australia/North.standard.long=Zentrale Normalzeit (Northern Territory) -Australia/Perth.daylight.long=Westliche Sommerzeit (Australien) -Australia/Perth.generic.long=Westliche Zeitzone (Australien) -Australia/Perth.standard.long=Westliche Normalzeit (Australien) -Australia/Queensland.daylight.long=\u00D6stliche Sommerzeit (Queensland) -Australia/Queensland.generic.long=\u00D6stliche Zeitzone (Queensland) -Australia/Queensland.standard.long=\u00D6stliche Normalzeit (Queensland) -Australia/South.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien) -Australia/South.generic.long=Zentrale Zeitzone (S\u00FCdaustralien) -Australia/South.standard.long=Zentrale Normalzeit (S\u00FCdaustralien) -Australia/Sydney.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/Sydney.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/Sydney.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/Tasmania.daylight.long=\u00D6stliche Sommerzeit (Tasmanien) -Australia/Tasmania.generic.long=\u00D6stliche Zeitzone (Tasmanien) -Australia/Tasmania.standard.long=\u00D6stliche Normalzeit (Tasmanien) -Australia/Victoria.daylight.long=\u00D6stliche Sommerzeit (Victoria) -Australia/Victoria.generic.long=\u00D6stliche Zeitzone (Victoria) -Australia/Victoria.standard.long=\u00D6stliche Normalzeit (Victoria) -Australia/West.daylight.long=Westliche Sommerzeit (Australien) -Australia/West.generic.long=Westliche Zeitzone (Australien) -Australia/West.standard.long=Westliche Normalzeit (Australien) -Australia/Yancowinna.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales) -Australia/Yancowinna.generic.long=Zentrale Zeitzone (S\u00FCdaustralien/New South Wales) -Australia/Yancowinna.standard.long=Zentrale Normalzeit (S\u00FCdaustralien/New South Wales) -BET.generic.long=Brasilianische Zeit -BST.generic.long=Bangladesch Zeit -Brazil/Acre.generic.long=Acre Normalzeit -Brazil/DeNoronha.generic.long=Fernando de Noronha Zeit -Brazil/East.generic.long=Brasilianische Zeit -Brazil/West.generic.long=Amazonas Normalzeit -CAT.generic.long=Zentralafrikanische Zeit -CET.generic.long=Mitteleurop\u00e4ische Zeit -CNT.generic.long=Zeitzone f\u00FCr Neufundland -CST.generic.long=Zentrale Zeitzone -CST6CDT.generic.long=Zentrale Zeitzone -CTT.generic.long=Zeitzone f\u00FCr China -Canada/Atlantic.generic.long=Zeitzone Atlantik -Canada/Central.generic.long=Zentrale Zeitzone -Canada/East-Saskatchewan.generic.long=Zentrale Zeitzone -Canada/Eastern.generic.long=\u00D6stliche Zeitzone -Canada/Mountain.generic.long=Zeitzone Mountain -Canada/Newfoundland.generic.long=Zeitzone f\u00FCr Neufundland -Canada/Pacific.generic.long=Zeitzone Pazifik -Canada/Saskatchewan.generic.long=Zentrale Zeitzone -Canada/Yukon.generic.long=Zeitzone Pazifik -Chile/Continental.generic.long=Chilenische Zeit -Chile/EasterIsland.generic.long=Osterinseln Zeit -Cuba.generic.long=Kubanische Normalzeit -EAT.generic.long=Ostafrikanische Zeit -ECT.generic.long=Mitteleurop\u00E4ische Zeit -EET.generic.long=Osteurop\u00e4ische Zeit -EST.generic.long=\u00d6stliche Zeitzone -EST5EDT.generic.long=\u00d6stliche Zeitzone -Egypt.generic.long=Osteurop\u00E4ische Zeit -Eire.generic.long=Irische Zeit -Etc/Greenwich.generic.long=Greenwich Zeit -Etc/UCT.generic.long=Koordinierte Universalzeit -Etc/UTC.generic.long=Koordinierte Universalzeit -Etc/Universal.generic.long=Koordinierte Universalzeit -Etc/Zulu.generic.long=Koordinierte Universalzeit -Europe/Amsterdam.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Andorra.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Athens.generic.long=Osteurop\u00E4ische Zeit -Europe/Belfast.generic.long=Britische Zeit -Europe/Belgrade.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Berlin.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Bratislava.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Brussels.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Bucharest.generic.long=Osteurop\u00E4ische Zeit -Europe/Budapest.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Busingen.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Chisinau.generic.long=Osteurop\u00E4ische Zeit -Europe/Copenhagen.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Dublin.generic.long=Irische Zeit -Europe/Gibraltar.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Guernsey.generic.long=Britische Zeit -Europe/Helsinki.generic.long=Osteurop\u00E4ische Zeit -Europe/Isle_of_Man.generic.long=Britische Zeit -Europe/Istanbul.generic.long=Osteurop\u00E4ische Zeit -Europe/Jersey.generic.long=Britische Zeit -Europe/Kaliningrad.daylight.long=Kaliningrader Sommerzeit -Europe/Kaliningrad.generic.long=Kaliningrader Zeit -Europe/Kaliningrad.standard.long=Kaliningrader Zeit -Europe/Kiev.generic.long=Osteurop\u00E4ische Zeit -Europe/Lisbon.generic.long=Westeurop\u00E4ische Zeit -Europe/Ljubljana.generic.long=Mitteleurop\u00E4ische Zeit -Europe/London.generic.long=Britische Zeit -Europe/Luxembourg.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Madrid.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Malta.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Mariehamn.generic.long=Osteurop\u00E4ische Zeit -Europe/Minsk.daylight.long=Kaliningrader Sommerzeit -Europe/Minsk.generic.long=Kaliningrader Zeit -Europe/Minsk.standard.long=Kaliningrader Zeit -Europe/Monaco.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Moscow.generic.long=Zeitzone f\u00FCr Moskau -Europe/Nicosia.generic.long=Osteurop\u00E4ische Zeit -Europe/Oslo.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Paris.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Podgorica.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Prague.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Riga.generic.long=Osteurop\u00E4ische Zeit -Europe/Rome.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Samara.generic.long=Samarische Zeit -Europe/San_Marino.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Sarajevo.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Simferopol.generic.long=Osteurop\u00E4ische Zeit -Europe/Skopje.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Sofia.generic.long=Osteurop\u00E4ische Zeit -Europe/Stockholm.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Tallinn.generic.long=Osteurop\u00E4ische Zeit -Europe/Tirane.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Tiraspol.generic.long=Osteurop\u00E4ische Zeit -Europe/Uzhgorod.generic.long=Osteurop\u00E4ische Zeit -Europe/Vaduz.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Vatican.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Vienna.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Vilnius.generic.long=Osteurop\u00E4ische Zeit -Europe/Volgograd.generic.long=Wolgograder Zeit -Europe/Warsaw.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Zagreb.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Zaporozhye.generic.long=Osteurop\u00E4ische Zeit -Europe/Zurich.generic.long=Mitteleurop\u00E4ische Zeit -GB-Eire.generic.long=Britische Zeit -GB.generic.long=Britische Zeit -GMT.generic.long=Greenwich Zeit -Greenwich.generic.long=Greenwich Zeit -HST.generic.long=Zeitzone f\u00fcr Hawaii -Hongkong.generic.long=Hongkong Zeit -IET.generic.long=\u00D6stliche Zeitzone -IST.generic.long=Zeitzone f\u00FCr Indien -Iceland.generic.long=Greenwich Zeit -Indian/Antananarivo.generic.long=Ostafrikanische Zeit -Indian/Chagos.generic.long=Indischer Ozean Territorium Zeit -Indian/Christmas.generic.long=Weihnachtsinseln Zeit -Indian/Cocos.generic.long=Kokos-Inseln Zeit -Indian/Comoro.generic.long=Ostafrikanische Zeit -Indian/Kerguelen.generic.long=Franz\u00F6sisch S\u00FCd- u. Antarktische Landzeit -Indian/Mahe.generic.long=Seychellen Zeit -Indian/Maldives.generic.long=Maledivische Zeit -Indian/Mauritius.generic.long=Mauritius Zeit -Indian/Mayotte.generic.long=Ostafrikanische Zeit -Indian/Reunion.generic.long=R\u00E9union Zeit -Iran.generic.long=Iranische Zeit -Israel.generic.long=Zeitzone f\u00FCr Israel -JST.generic.long=Zeitzone f\u00FCr Japan -Jamaica.generic.long=\u00D6stliche Zeitzone -Japan.generic.long=Zeitzone f\u00FCr Japan -Kwajalein.generic.long=Marshallinseln Zeit -Libya.generic.long=Osteurop\u00e4ische Zeit -MET.generic.long=MET -MIT.generic.long=West Samoa Zeit -MST.generic.long=Zeitzone Mountain -MST7MDT.generic.long=Zeitzone Mountain -Mexico/BajaNorte.generic.long=Zeitzone Pazifik -Mexico/BajaSur.generic.long=Zeitzone Mountain -Mexico/General.generic.long=Zentrale Zeitzone -NET.generic.long=Armenische Zeit -NST.generic.long=Zeitzone f\u00FCr Neuseeland -NZ-CHAT.generic.long=Zeitzone f\u00FCr Chatham-Inseln -NZ.generic.long=Zeitzone f\u00FCr Neuseeland -Navajo.generic.long=Zeitzone Mountain -PLT.generic.long=Pakistanische Zeit -PNT.generic.long=Zeitzone Mountain -PRC.generic.long=Zeitzone f\u00FCr China -PRT.generic.long=Zeitzone Atlantik -PST.generic.long=Zeitzone Pazifik -PST8PDT.generic.long=Zeitzone Pazifik -Pacific/Apia.generic.long=West Samoa Zeit -Pacific/Auckland.generic.long=Zeitzone f\u00FCr Neuseeland -Pacific/Chatham.generic.long=Zeitzone f\u00FCr Chatham-Inseln -Pacific/Chuuk.daylight.long=Chuuk Sommerzeit -Pacific/Chuuk.generic.long=Chuuk Zeit -Pacific/Chuuk.standard.long=Chuuk Zeit -Pacific/Easter.generic.long=Osterinseln Zeit -Pacific/Efate.generic.long=Vanuatu Zeit -Pacific/Enderbury.generic.long=Phoenix Inseln Zeit -Pacific/Fakaofo.generic.long=Tokelau Zeit -Pacific/Fiji.generic.long=Fidschi Zeit -Pacific/Funafuti.generic.long=Tuvalu Zeit -Pacific/Galapagos.generic.long=Galapagos Zeit -Pacific/Gambier.generic.long=Gambier Zeit -Pacific/Guadalcanal.generic.long=Salomoninseln Zeit -Pacific/Guam.generic.long=Zeitzone f\u00FCr die Marianen -Pacific/Honolulu.generic.long=Zeitzone f\u00FCr Hawaii -Pacific/Johnston.generic.long=Zeitzone f\u00FCr Hawaii -Pacific/Kiritimati.generic.long=Line Inseln Zeit -Pacific/Kosrae.generic.long=Kosrae Zeit -Pacific/Kwajalein.generic.long=Marshallinseln Zeit -Pacific/Majuro.generic.long=Marshallinseln Zeit -Pacific/Marquesas.generic.long=Marquesas Zeit -Pacific/Midway.generic.long=Zeitzone f\u00FCr Samoa -Pacific/Nauru.generic.long=Nauru Zeit -Pacific/Niue.generic.long=Niue Zeit -Pacific/Norfolk.generic.long=Norfolk Zeit -Pacific/Noumea.generic.long=Neukaledonische Zeit -Pacific/Pago_Pago.generic.long=Zeitzone f\u00FCr Samoa -Pacific/Palau.generic.long=Palau Zeit -Pacific/Pitcairn.generic.long=Zeitzone f\u00FCr Pitcairn -Pacific/Pohnpei.daylight.long=Pohnpei Sommerzeit -Pacific/Pohnpei.generic.long=Pohnpei-Inseln Zeit -Pacific/Pohnpei.standard.long=Pohnpei Zeit -Pacific/Ponape.daylight.long=Pohnpei Sommerzeit -Pacific/Ponape.generic.long=Pohnpei-Inseln Zeit -Pacific/Ponape.standard.long=Pohnpei Zeit -Pacific/Port_Moresby.generic.long=Papua-Neuguinea Zeit -Pacific/Rarotonga.generic.long=Cook-Inseln Zeit -Pacific/Saipan.generic.long=Zeitzone f\u00FCr die Marianen -Pacific/Samoa.generic.long=Zeitzone f\u00FCr Samoa -Pacific/Tahiti.generic.long=Tahiti Zeit -Pacific/Tarawa.generic.long=Gilbert-Inseln Zeit -Pacific/Tongatapu.generic.long=Tonga Zeit -Pacific/Truk.daylight.long=Chuuk Sommerzeit -Pacific/Truk.generic.long=Chuuk Zeit -Pacific/Truk.standard.long=Chuuk Zeit -Pacific/Wake.generic.long=Wake Zeit -Pacific/Wallis.generic.long=Wallis u. Futuna Zeit -Pacific/Yap.daylight.long=Chuuk Sommerzeit -Pacific/Yap.generic.long=Chuuk Zeit -Pacific/Yap.standard.long=Chuuk Zeit -Poland.generic.long=Mitteleurop\u00E4ische Zeit -Portugal.generic.long=Westeurop\u00E4ische Zeit -ROK.generic.long=Zeitzone f\u00FCr Korea -SST.generic.long=Salomoninseln Zeit -Singapore.generic.long=Singapur Zeit -SystemV/AST4.generic.long=Zeitzone Atlantik -SystemV/AST4ADT.generic.long=Zeitzone Atlantik -SystemV/CST6.generic.long=Zentrale Zeitzone -SystemV/CST6CDT.generic.long=Zentrale Zeitzone -SystemV/EST5.generic.long=\u00D6stliche Zeitzone -SystemV/EST5EDT.generic.long=\u00D6stliche Zeitzone -SystemV/HST10.generic.long=Zeitzone f\u00FCr Hawaii -SystemV/MST7.generic.long=Zeitzone Mountain -SystemV/MST7MDT.generic.long=Zeitzone Mountain -SystemV/PST8.generic.long=Zeitzone Pazifik -SystemV/PST8PDT.generic.long=Zeitzone Pazifik -SystemV/YST9.generic.long=Zeitzone f\u00FCr Alaska -SystemV/YST9YDT.generic.long=Zeitzone f\u00FCr Alaska -Turkey.generic.long=Osteurop\u00E4ische Zeit -UCT.generic.long=Koordinierte Universalzeit -US/Alaska.generic.long=Zeitzone f\u00FCr Alaska -US/Aleutian.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen -US/Arizona.generic.long=Zeitzone Mountain -US/Central.generic.long=Zentrale Zeitzone -US/East-Indiana.generic.long=\u00D6stliche Zeitzone -US/Eastern.generic.long=\u00D6stliche Zeitzone -US/Hawaii.generic.long=Zeitzone f\u00FCr Hawaii -US/Indiana-Starke.generic.long=Zentrale Zeitzone -US/Michigan.generic.long=\u00D6stliche Zeitzone -US/Mountain.generic.long=Zeitzone Mountain -US/Pacific-New.generic.long=Zeitzone Pazifik -US/Pacific.generic.long=Zeitzone Pazifik -US/Samoa.generic.long=Zeitzone f\u00FCr Samoa -UTC.generic.long=Koordinierte Universalzeit -Universal.generic.long=Koordinierte Universalzeit -VST.generic.long=Indochina Zeit -W-SU.generic.long=Zeitzone f\u00FCr Moskau -WET.generic.long=Westeurop\u00e4ische Zeit -Zulu.generic.long=Koordinierte Universalzeit diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties deleted file mode 100644 index 8bbaeb45160..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=MESZ -Africa/Algiers.generic.short=MEZ -Africa/Algiers.standard.short=MEZ -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=OESZ -Africa/Cairo.generic.short=OEZ -Africa/Cairo.standard.short=OEZ -Africa/Casablanca.daylight.short=WESZ -Africa/Casablanca.generic.short=WEZ -Africa/Casablanca.standard.short=WEZ -Africa/Ceuta.daylight.short=MESZ -Africa/Ceuta.generic.short=MEZ -Africa/Ceuta.standard.short=MEZ -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WESZ -Africa/El_Aaiun.generic.short=WEZ -Africa/El_Aaiun.standard.short=WEZ -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=OESZ -Africa/Tripoli.generic.short=OEZ -Africa/Tripoli.standard.short=OEZ -Africa/Tunis.daylight.short=MESZ -Africa/Tunis.generic.short=MEZ -Africa/Tunis.standard.short=MEZ -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=MESZ -Arctic/Longyearbyen.generic.short=MEZ -Arctic/Longyearbyen.standard.short=MEZ -ART.daylight.short=OESZ -ART.generic.short=OEZ -ART.standard.short=OEZ -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=OESZ -Asia/Beirut.generic.short=OEZ -Asia/Beirut.standard.short=OEZ -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=OESZ -Asia/Damascus.generic.short=OEZ -Asia/Damascus.standard.short=OEZ -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=OESZ -Asia/Gaza.generic.short=OEZ -Asia/Gaza.standard.short=OEZ -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=OESZ -Asia/Hebron.generic.short=OEZ -Asia/Hebron.standard.short=OEZ -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=OESZ -Asia/Istanbul.generic.short=OEZ -Asia/Istanbul.standard.short=OEZ -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=OESZ -Asia/Nicosia.generic.short=OEZ -Asia/Nicosia.standard.short=OEZ -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WESZ -Atlantic/Canary.generic.short=WEZ -Atlantic/Canary.standard.short=WEZ -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WESZ -Atlantic/Faeroe.generic.short=WEZ -Atlantic/Faeroe.standard.short=WEZ -Atlantic/Faroe.daylight.short=WESZ -Atlantic/Faroe.generic.short=WEZ -Atlantic/Faroe.standard.short=WEZ -Atlantic/Jan_Mayen.daylight.short=MESZ -Atlantic/Jan_Mayen.generic.short=MEZ -Atlantic/Jan_Mayen.standard.short=MEZ -Atlantic/Madeira.daylight.short=WESZ -Atlantic/Madeira.generic.short=WEZ -Atlantic/Madeira.standard.short=WEZ -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=MESZ -CET.generic.short=MEZ -CET.standard.short=MEZ -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=MESZ -ECT.generic.short=MEZ -ECT.standard.short=MEZ -EET.daylight.short=OESZ -EET.generic.short=OEZ -EET.standard.short=OEZ -Egypt.daylight.short=OESZ -Egypt.generic.short=OEZ -Egypt.standard.short=OEZ -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=MESZ -Europe/Amsterdam.generic.short=MEZ -Europe/Amsterdam.standard.short=MEZ -Europe/Andorra.daylight.short=MESZ -Europe/Andorra.generic.short=MEZ -Europe/Andorra.standard.short=MEZ -Europe/Athens.daylight.short=OESZ -Europe/Athens.generic.short=OEZ -Europe/Athens.standard.short=OEZ -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=MESZ -Europe/Belgrade.generic.short=MEZ -Europe/Belgrade.standard.short=MEZ -Europe/Berlin.daylight.short=MESZ -Europe/Berlin.generic.short=MEZ -Europe/Berlin.standard.short=MEZ -Europe/Bratislava.daylight.short=MESZ -Europe/Bratislava.generic.short=MEZ -Europe/Bratislava.standard.short=MEZ -Europe/Brussels.daylight.short=MESZ -Europe/Brussels.generic.short=MEZ -Europe/Brussels.standard.short=MEZ -Europe/Bucharest.daylight.short=OESZ -Europe/Bucharest.generic.short=OEZ -Europe/Bucharest.standard.short=OEZ -Europe/Budapest.daylight.short=MESZ -Europe/Budapest.generic.short=MEZ -Europe/Budapest.standard.short=MEZ -Europe/Busingen.daylight.short=MESZ -Europe/Busingen.generic.short=MEZ -Europe/Busingen.standard.short=MEZ -Europe/Chisinau.daylight.short=OESZ -Europe/Chisinau.generic.short=OEZ -Europe/Chisinau.standard.short=OEZ -Europe/Copenhagen.daylight.short=MESZ -Europe/Copenhagen.generic.short=MEZ -Europe/Copenhagen.standard.short=MEZ -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=MESZ -Europe/Gibraltar.generic.short=MEZ -Europe/Gibraltar.standard.short=MEZ -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=OESZ -Europe/Helsinki.generic.short=OEZ -Europe/Helsinki.standard.short=OEZ -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=OESZ -Europe/Istanbul.generic.short=OEZ -Europe/Istanbul.standard.short=OEZ -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=OESZ -Europe/Kiev.generic.short=OEZ -Europe/Kiev.standard.short=OEZ -Europe/Lisbon.daylight.short=WESZ -Europe/Lisbon.generic.short=WEZ -Europe/Lisbon.standard.short=WEZ -Europe/Ljubljana.daylight.short=MESZ -Europe/Ljubljana.generic.short=MEZ -Europe/Ljubljana.standard.short=MEZ -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=MESZ -Europe/Luxembourg.generic.short=MEZ -Europe/Luxembourg.standard.short=MEZ -Europe/Madrid.daylight.short=MESZ -Europe/Madrid.generic.short=MEZ -Europe/Madrid.standard.short=MEZ -Europe/Malta.daylight.short=MESZ -Europe/Malta.generic.short=MEZ -Europe/Malta.standard.short=MEZ -Europe/Mariehamn.daylight.short=OESZ -Europe/Mariehamn.generic.short=OEZ -Europe/Mariehamn.standard.short=OEZ -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=MESZ -Europe/Monaco.generic.short=MEZ -Europe/Monaco.standard.short=MEZ -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=OESZ -Europe/Nicosia.generic.short=OEZ -Europe/Nicosia.standard.short=OEZ -Europe/Oslo.daylight.short=MESZ -Europe/Oslo.generic.short=MEZ -Europe/Oslo.standard.short=MEZ -Europe/Paris.daylight.short=MESZ -Europe/Paris.generic.short=MEZ -Europe/Paris.standard.short=MEZ -Europe/Podgorica.daylight.short=MESZ -Europe/Podgorica.generic.short=MEZ -Europe/Podgorica.standard.short=MEZ -Europe/Prague.daylight.short=MESZ -Europe/Prague.generic.short=MEZ -Europe/Prague.standard.short=MEZ -Europe/Riga.daylight.short=OESZ -Europe/Riga.generic.short=OEZ -Europe/Riga.standard.short=OEZ -Europe/Rome.daylight.short=MESZ -Europe/Rome.generic.short=MEZ -Europe/Rome.standard.short=MEZ -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=MESZ -Europe/San_Marino.generic.short=MEZ -Europe/San_Marino.standard.short=MEZ -Europe/Sarajevo.daylight.short=MESZ -Europe/Sarajevo.generic.short=MEZ -Europe/Sarajevo.standard.short=MEZ -Europe/Simferopol.daylight.short=OESZ -Europe/Simferopol.generic.short=OEZ -Europe/Simferopol.standard.short=OEZ -Europe/Skopje.daylight.short=MESZ -Europe/Skopje.generic.short=MEZ -Europe/Skopje.standard.short=MEZ -Europe/Sofia.daylight.short=OESZ -Europe/Sofia.generic.short=OEZ -Europe/Sofia.standard.short=OEZ -Europe/Stockholm.daylight.short=MESZ -Europe/Stockholm.generic.short=MEZ -Europe/Stockholm.standard.short=MEZ -Europe/Tallinn.daylight.short=OESZ -Europe/Tallinn.generic.short=OEZ -Europe/Tallinn.standard.short=OEZ -Europe/Tirane.daylight.short=MESZ -Europe/Tirane.generic.short=MEZ -Europe/Tirane.standard.short=MEZ -Europe/Tiraspol.daylight.short=OESZ -Europe/Tiraspol.generic.short=OEZ -Europe/Tiraspol.standard.short=OEZ -Europe/Uzhgorod.daylight.short=OESZ -Europe/Uzhgorod.generic.short=OEZ -Europe/Uzhgorod.standard.short=OEZ -Europe/Vaduz.daylight.short=MESZ -Europe/Vaduz.generic.short=MEZ -Europe/Vaduz.standard.short=MEZ -Europe/Vatican.daylight.short=MESZ -Europe/Vatican.generic.short=MEZ -Europe/Vatican.standard.short=MEZ -Europe/Vienna.daylight.short=MESZ -Europe/Vienna.generic.short=MEZ -Europe/Vienna.standard.short=MEZ -Europe/Vilnius.daylight.short=OESZ -Europe/Vilnius.generic.short=OEZ -Europe/Vilnius.standard.short=OEZ -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=MESZ -Europe/Warsaw.generic.short=MEZ -Europe/Warsaw.standard.short=MEZ -Europe/Zagreb.daylight.short=MESZ -Europe/Zagreb.generic.short=MEZ -Europe/Zagreb.standard.short=MEZ -Europe/Zaporozhye.daylight.short=OESZ -Europe/Zaporozhye.generic.short=OEZ -Europe/Zaporozhye.standard.short=OEZ -Europe/Zurich.daylight.short=MESZ -Europe/Zurich.generic.short=MEZ -Europe/Zurich.standard.short=MEZ -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=OESZ -Libya.generic.short=OEZ -Libya.standard.short=OEZ -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=MESZ -Poland.generic.short=MEZ -Poland.standard.short=MEZ -Portugal.daylight.short=WESZ -Portugal.generic.short=WEZ -Portugal.standard.short=WEZ -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=OESZ -Turkey.generic.short=OEZ -Turkey.standard.short=OEZ -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WESZ -WET.generic.short=WEZ -WET.standard.short=WEZ -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties deleted file mode 100644 index 830f0d21e0d..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Hora de verano Central (territorio del Norte) -ACT.generic.long=Hora Central (Territorio Septentrional) -ACT.standard.long=Hora est\u00E1ndar Central (territorio del Norte) -AET.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -AET.generic.long=Hora Oriental (Nueva Gales del Sur) -AET.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -AGT.generic.long=Hora de Argentina -ART.generic.long=Hora de Europa Oriental -AST.generic.long=Hora de Alaska -Africa/Abidjan.generic.long=Hora del Meridiano de Greenwich -Africa/Accra.generic.long=Hora central de Ghana -Africa/Addis_Ababa.generic.long=Hora de \u00C1frica Oriental -Africa/Algiers.generic.long=Hora de Europa Central -Africa/Asmara.generic.long=Hora de \u00C1frica Oriental -Africa/Asmera.generic.long=Hora de \u00C1frica Oriental -Africa/Bamako.generic.long=Hora del Meridiano de Greenwich -Africa/Bangui.generic.long=Hora de \u00C1frica Occidental -Africa/Banjul.generic.long=Hora del Meridiano de Greenwich -Africa/Bissau.generic.long=Hora del Meridiano de Greenwich -Africa/Blantyre.generic.long=Hora de \u00C1frica Central -Africa/Brazzaville.generic.long=Hora de \u00C1frica Occidental -Africa/Bujumbura.generic.long=Hora de \u00C1frica Central -Africa/Cairo.generic.long=Hora de Europa Oriental -Africa/Casablanca.generic.long=Hora de Europa Occidental -Africa/Ceuta.generic.long=Hora de Europa Central -Africa/Conakry.generic.long=Hora del Meridiano de Greenwich -Africa/Dakar.generic.long=Hora del Meridiano de Greenwich -Africa/Dar_es_Salaam.generic.long=Hora de \u00C1frica Oriental -Africa/Djibouti.generic.long=Hora de \u00C1frica Oriental -Africa/Douala.generic.long=Hora de \u00C1frica Occidental -Africa/El_Aaiun.generic.long=Hora de Europa Occidental -Africa/Freetown.generic.long=Horario de Sierra Leona -Africa/Gaborone.generic.long=Hora de \u00C1frica Central -Africa/Harare.generic.long=Hora de \u00C1frica Central -Africa/Johannesburg.generic.long=Hora de Sud\u00E1frica -Africa/Juba.generic.long=Hora de \u00C1frica Oriental -Africa/Kampala.generic.long=Hora de \u00C1frica Oriental -Africa/Khartoum.generic.long=Hora de \u00C1frica Oriental -Africa/Kigali.generic.long=Hora de \u00C1frica Central -Africa/Kinshasa.generic.long=Hora de \u00C1frica Occidental -Africa/Lagos.generic.long=Hora de \u00C1frica Occidental -Africa/Libreville.generic.long=Hora de \u00C1frica Occidental -Africa/Lome.generic.long=Hora del Meridiano de Greenwich -Africa/Luanda.generic.long=Hora de \u00C1frica Occidental -Africa/Lubumbashi.generic.long=Hora de \u00C1frica Central -Africa/Lusaka.generic.long=Hora de \u00C1frica Central -Africa/Malabo.generic.long=Hora de \u00C1frica Occidental -Africa/Maputo.generic.long=Hora de \u00C1frica Central -Africa/Maseru.generic.long=Hora de Sud\u00E1frica -Africa/Mbabane.generic.long=Hora de Sud\u00E1frica -Africa/Mogadishu.generic.long=Hora de \u00C1frica Oriental -Africa/Monrovia.generic.long=Hora del Meridiano de Greenwich -Africa/Nairobi.generic.long=Hora de \u00C1frica Oriental -Africa/Ndjamena.generic.long=Hora de \u00C1frica Occidental -Africa/Niamey.generic.long=Hora de \u00C1frica Occidental -Africa/Nouakchott.generic.long=Hora del Meridiano de Greenwich -Africa/Ouagadougou.generic.long=Hora del Meridiano de Greenwich -Africa/Porto-Novo.generic.long=Hora de \u00C1frica Occidental -Africa/Sao_Tome.generic.long=Hora del Meridiano de Greenwich -Africa/Timbuktu.generic.long=Hora del Meridiano de Greenwich -Africa/Tripoli.generic.long=Hora de Europa Oriental -Africa/Tunis.generic.long=Hora de Europa Central -Africa/Windhoek.generic.long=Hora de \u00C1frica Occidental -America/Adak.generic.long=Hora de Hawaii-Aleutian -America/Anchorage.generic.long=Hora de Alaska -America/Anguilla.generic.long=Hora del Atl\u00E1ntico -America/Antigua.generic.long=Hora del Atl\u00E1ntico -America/Araguaina.generic.long=Hora de Brasil -America/Argentina/Buenos_Aires.generic.long=Hora de Argentina -America/Argentina/Catamarca.generic.long=Hora de Argentina -America/Argentina/ComodRivadavia.generic.long=Hora de Argentina -America/Argentina/Cordoba.generic.long=Hora de Argentina -America/Argentina/Jujuy.generic.long=Hora de Argentina -America/Argentina/La_Rioja.generic.long=Hora de Argentina -America/Argentina/Mendoza.generic.long=Hora de Argentina -America/Argentina/Rio_Gallegos.generic.long=Hora de Argentina -America/Argentina/Salta.generic.long=Hora de Argentina -America/Argentina/San_Juan.generic.long=Hora de Argentina -America/Argentina/San_Luis.generic.long=Hora de Argentina -America/Argentina/Tucuman.generic.long=Hora de Argentina -America/Argentina/Ushuaia.generic.long=Hora de Argentina -America/Aruba.generic.long=Hora del Atl\u00E1ntico -America/Asuncion.generic.long=Hora de Paraguay -America/Atikokan.generic.long=Hora Oriental -America/Atka.generic.long=Hora de Hawaii-Aleutian -America/Bahia.generic.long=Hora de Brasil -America/Bahia_Banderas.generic.long=Hora Central -America/Barbados.generic.long=Hora del Atl\u00E1ntico -America/Belem.generic.long=Hora de Brasil -America/Belize.generic.long=Hora Central -America/Blanc-Sablon.generic.long=Hora del Atl\u00E1ntico -America/Boa_Vista.generic.long=Hora est\u00E1ndar de Amazonia -America/Bogota.generic.long=Hora de Colombia -America/Boise.generic.long=Hora de las Monta\u00F1as Rocosas -America/Buenos_Aires.generic.long=Hora de Argentina -America/Cambridge_Bay.generic.long=Hora de las Monta\u00F1as Rocosas -America/Campo_Grande.generic.long=Hora est\u00E1ndar de Amazonia -America/Cancun.generic.long=Hora Central -America/Caracas.generic.long=Hora de Venezuela -America/Catamarca.generic.long=Hora de Argentina -America/Cayenne.generic.long=Hora de la Guayana Francesa -America/Cayman.generic.long=Hora Oriental -America/Chicago.generic.long=Hora Central -America/Chihuahua.generic.long=Hora de las Monta\u00F1as Rocosas -America/Coral_Harbour.generic.long=Hora Oriental -America/Cordoba.generic.long=Hora de Argentina -America/Costa_Rica.generic.long=Hora Central -America/Creston.generic.long=Hora de las Monta\u00F1as Rocosas -America/Cuiaba.generic.long=Hora est\u00E1ndar de Amazonia -America/Curacao.generic.long=Hora del Atl\u00E1ntico -America/Danmarkshavn.generic.long=Hora del Meridiano de Greenwich -America/Dawson.generic.long=Hora del Pac\u00EDfico -America/Dawson_Creek.generic.long=Hora de las Monta\u00F1as Rocosas -America/Denver.generic.long=Hora de las Monta\u00F1as Rocosas -America/Detroit.generic.long=Hora Oriental -America/Dominica.generic.long=Hora del Atl\u00E1ntico -America/Edmonton.generic.long=Hora de las Monta\u00F1as Rocosas -America/Eirunepe.generic.long=Hora de Acre -America/El_Salvador.generic.long=Hora Central -America/Ensenada.generic.long=Hora del Pac\u00EDfico -America/Fort_Wayne.generic.long=Hora Oriental -America/Fortaleza.generic.long=Hora de Brasil -America/Glace_Bay.generic.long=Hora del Atl\u00E1ntico -America/Godthab.generic.long=Hora de Groenlandia Occidental -America/Goose_Bay.generic.long=Hora del Atl\u00E1ntico -America/Grand_Turk.generic.long=Hora Oriental -America/Grenada.generic.long=Hora del Atl\u00E1ntico -America/Guadeloupe.generic.long=Hora del Atl\u00E1ntico -America/Guatemala.generic.long=Hora Central -America/Guayaquil.generic.long=Hora de Ecuador -America/Guyana.generic.long=Hora de Guyana -America/Halifax.generic.long=Hora del Atl\u00E1ntico -America/Havana.generic.long=Hora de Cuba -America/Hermosillo.generic.long=Hora de las Monta\u00F1as Rocosas -America/Indiana/Indianapolis.generic.long=Hora Oriental -America/Indiana/Knox.generic.long=Hora Central -America/Indiana/Marengo.generic.long=Hora Oriental -America/Indiana/Petersburg.generic.long=Hora Oriental -America/Indiana/Tell_City.generic.long=Hora Central -America/Indiana/Vevay.generic.long=Hora Oriental -America/Indiana/Vincennes.generic.long=Hora Oriental -America/Indiana/Winamac.generic.long=Hora Oriental -America/Indianapolis.generic.long=Hora Oriental -America/Inuvik.generic.long=Hora de las Monta\u00F1as Rocosas -America/Iqaluit.generic.long=Hora Oriental -America/Jamaica.generic.long=Hora Oriental -America/Jujuy.generic.long=Hora de Argentina -America/Juneau.generic.long=Hora de Alaska -America/Kentucky/Louisville.generic.long=Hora Oriental -America/Kentucky/Monticello.generic.long=Hora Oriental -America/Knox_IN.generic.long=Hora Central -America/Kralendijk.generic.long=Hora del Atl\u00E1ntico -America/La_Paz.generic.long=Hora de Bolivia -America/Lima.generic.long=Hora de Per\u00FA -America/Los_Angeles.generic.long=Hora del Pac\u00EDfico -America/Louisville.generic.long=Hora Oriental -America/Lower_Princes.generic.long=Hora del Atl\u00E1ntico -America/Maceio.generic.long=Hora de Brasil -America/Managua.generic.long=Hora Central -America/Manaus.generic.long=Hora est\u00E1ndar de Amazonia -America/Marigot.generic.long=Hora del Atl\u00E1ntico -America/Martinique.generic.long=Hora del Atl\u00E1ntico -America/Matamoros.generic.long=Hora Central -America/Mazatlan.generic.long=Hora de las Monta\u00F1as Rocosas -America/Mendoza.generic.long=Hora de Argentina -America/Menominee.generic.long=Hora Central -America/Merida.generic.long=Hora Central -America/Metlakatla.daylight.long=Hora de verano de Metlakatla -America/Metlakatla.generic.long=Metlakatla Time -America/Metlakatla.standard.long=Hora de Metlakatla -America/Mexico_City.generic.long=Hora Central -America/Miquelon.generic.long=Hora de San Pedro y Miquel\u00F3n -America/Moncton.generic.long=Hora del Atl\u00E1ntico -America/Monterrey.generic.long=Hora Central -America/Montevideo.generic.long=Hora de Uruguay -America/Montreal.generic.long=Hora Oriental -America/Montserrat.generic.long=Hora del Atl\u00E1ntico -America/Nassau.generic.long=Hora Oriental -America/New_York.generic.long=Hora Oriental -America/Nipigon.generic.long=Hora Oriental -America/Nome.generic.long=Hora de Alaska -America/Noronha.generic.long=Hora de Fernando de Noronha -America/North_Dakota/Beulah.generic.long=Hora Central -America/North_Dakota/Center.generic.long=Hora Central -America/North_Dakota/New_Salem.generic.long=Hora Central -America/Ojinaga.generic.long=Hora de las Monta\u00F1as Rocosas -America/Panama.generic.long=Hora Oriental -America/Pangnirtung.generic.long=Hora Oriental -America/Paramaribo.generic.long=Hora de Surinam -America/Phoenix.generic.long=Hora de las Monta\u00F1as Rocosas -America/Port-au-Prince.generic.long=Hora Oriental -America/Port_of_Spain.generic.long=Hora del Atl\u00E1ntico -America/Porto_Acre.generic.long=Hora de Acre -America/Porto_Velho.generic.long=Hora est\u00E1ndar de Amazonia -America/Puerto_Rico.generic.long=Hora del Atl\u00E1ntico -America/Rainy_River.generic.long=Hora Central -America/Rankin_Inlet.generic.long=Hora Central -America/Recife.generic.long=Hora de Brasil -America/Regina.generic.long=Hora Central -America/Resolute.generic.long=Hora Central -America/Rio_Branco.generic.long=Hora de Acre -America/Rosario.generic.long=Hora de Argentina -America/Santa_Isabel.generic.long=Hora del Pac\u00EDfico -America/Santarem.generic.long=Hora de Brasil -America/Santiago.generic.long=Hora de Chile -America/Santo_Domingo.generic.long=Hora del Atl\u00E1ntico -America/Sao_Paulo.generic.long=Hora de Brasil -America/Scoresbysund.generic.long=Hora de Groenlandia Oriental -America/Shiprock.generic.long=Hora de las Monta\u00F1as Rocosas -America/Sitka.generic.long=Hora de Alaska -America/St_Barthelemy.generic.long=Hora del Atl\u00E1ntico -America/St_Johns.generic.long=Hora de Terranova -America/St_Kitts.generic.long=Hora del Atl\u00E1ntico -America/St_Lucia.generic.long=Hora del Atl\u00E1ntico -America/St_Thomas.generic.long=Hora del Atl\u00E1ntico -America/St_Vincent.generic.long=Hora del Atl\u00E1ntico -America/Swift_Current.generic.long=Hora Central -America/Tegucigalpa.generic.long=Hora Central -America/Thule.generic.long=Hora del Atl\u00E1ntico -America/Thunder_Bay.generic.long=Hora Oriental -America/Tijuana.generic.long=Hora del Pac\u00EDfico -America/Toronto.generic.long=Hora Oriental -America/Tortola.generic.long=Hora del Atl\u00E1ntico -America/Vancouver.generic.long=Hora del Pac\u00EDfico -America/Virgin.generic.long=Hora del Atl\u00E1ntico -America/Whitehorse.generic.long=Hora del Pac\u00EDfico -America/Winnipeg.generic.long=Hora Central -America/Yakutat.generic.long=Hora de Alaska -America/Yellowknife.generic.long=Hora de las Monta\u00F1as Rocosas -Antarctica/Casey.daylight.long=Hora de verano Occidental (Australia) -Antarctica/Casey.generic.long=Hora Occidental (Australia) -Antarctica/Casey.standard.long=Hora est\u00E1ndar Occidental (Australia) -Antarctica/Davis.generic.long=Hora de Davis -Antarctica/DumontDUrville.generic.long=Hora de Dumont-d'Urville -Antarctica/Macquarie.daylight.long=Hora de verano de Isla Macquarie -Antarctica/Macquarie.generic.long=Hora de Isla Macquarie -Antarctica/Macquarie.standard.long=Hora de Isla Macquarie -Antarctica/Mawson.generic.long=Hora de Mawson -Antarctica/McMurdo.generic.long=Hora de Nueva Zelanda -Antarctica/Palmer.generic.long=Hora de Chile -Antarctica/Rothera.generic.long=Hora de Rothera -Antarctica/South_Pole.generic.long=Hora de Nueva Zelanda -Antarctica/Syowa.generic.long=Hora de Syowa -Antarctica/Vostok.generic.long=Hora de Vostok -Arctic/Longyearbyen.generic.long=Hora de Europa Central -Asia/Aden.generic.long=Hora de Arabia -Asia/Almaty.generic.long=Hora de Alma-Ata -Asia/Amman.generic.long=Hora de Arabia -Asia/Anadyr.generic.long=Hora de Anadyr -Asia/Aqtau.generic.long=Hora de Aqtau -Asia/Aqtobe.generic.long=Hora de Aqtobe -Asia/Ashgabat.generic.long=Hora de Turkmenist\u00E1n -Asia/Ashkhabad.generic.long=Hora de Turkmenist\u00E1n -Asia/Baghdad.generic.long=Hora de Arabia -Asia/Bahrain.generic.long=Hora de Arabia -Asia/Baku.generic.long=Hora de Azerbaiy\u00E1n -Asia/Bangkok.generic.long=Hora de Indochina -Asia/Beirut.generic.long=Hora de Europa Oriental -Asia/Bishkek.generic.long=Hora de Kirguizist\u00E1n -Asia/Brunei.generic.long=Hora de Brunei -Asia/Calcutta.generic.long=Hora de India -Asia/Choibalsan.generic.long=Hora de Choibalsan -Asia/Chongqing.generic.long=Hora de China -Asia/Chungking.generic.long=Hora de China -Asia/Colombo.generic.long=Hora de India -Asia/Dacca.generic.long=Hora de Bangladesh -Asia/Damascus.generic.long=Hora de Europa Oriental -Asia/Dhaka.generic.long=Hora de Bangladesh -Asia/Dili.generic.long=Hora de Timor Leste -Asia/Dubai.generic.long=Hora del Golfo -Asia/Dushanbe.generic.long=Hora de Tajikist\u00E1n -Asia/Gaza.generic.long=Hora de Europa Oriental -Asia/Harbin.generic.long=Hora de China -Asia/Hebron.generic.long=Hora de Europa Oriental -Asia/Ho_Chi_Minh.generic.long=Hora de Indochina -Asia/Hong_Kong.generic.long=Hora de Hong Kong -Asia/Hovd.generic.long=Hora de Hovd -Asia/Irkutsk.generic.long=Hora de Irkutsk -Asia/Istanbul.generic.long=Hora de Europa Oriental -Asia/Jakarta.generic.long=Hora de Indonesia Occidental -Asia/Jayapura.generic.long=Hora de Indonesia Oriental -Asia/Jerusalem.generic.long=Hora de Israel -Asia/Kabul.generic.long=Hora de Afganist\u00E1n -Asia/Kamchatka.generic.long=Hora de Petropavlovsk-Kamchatski -Asia/Karachi.generic.long=Hora de Pakist\u00E1n -Asia/Kashgar.generic.long=Hora de China -Asia/Kathmandu.generic.long=Hora de Nepal -Asia/Katmandu.generic.long=Hora de Nepal -Asia/Khandyga.daylight.long=Hora de verano de Khandyga -Asia/Khandyga.generic.long=Hora de Khandyga -Asia/Khandyga.standard.long=Hora de Khandyga -Asia/Kolkata.generic.long=Hora de India -Asia/Krasnoyarsk.generic.long=Hora de Krasnoyarsk -Asia/Kuala_Lumpur.generic.long=Hora de Malasia -Asia/Kuching.generic.long=Hora de Malasia -Asia/Kuwait.generic.long=Hora de Arabia -Asia/Macao.generic.long=Hora de China -Asia/Macau.generic.long=Hora de China -Asia/Magadan.generic.long=Hora de Magad\u00E1n -Asia/Makassar.generic.long=Hora de Indonesia Central -Asia/Manila.generic.long=Hora de Filipinas -Asia/Muscat.generic.long=Hora del Golfo -Asia/Nicosia.generic.long=Hora de Europa Oriental -Asia/Novokuznetsk.generic.long=Hora de Novosibirsk -Asia/Novosibirsk.generic.long=Hora de Novosibirsk -Asia/Omsk.generic.long=Hora de Omsk -Asia/Oral.generic.long=Hora de Uralsk -Asia/Phnom_Penh.generic.long=Hora de Indochina -Asia/Pontianak.generic.long=Hora de Indonesia Occidental -Asia/Pyongyang.generic.long=Hora de Corea -Asia/Qatar.generic.long=Hora de Arabia -Asia/Qyzylorda.generic.long=Hora de Qyzylorda -Asia/Rangoon.generic.long=Hora de Myanmar -Asia/Saigon.generic.long=Hora de Indochina -Asia/Sakhalin.generic.long=Hora de Sajalin -Asia/Samarkand.generic.long=Hora de Uzbekist\u00E1n -Asia/Seoul.generic.long=Hora de Corea -Asia/Shanghai.generic.long=Hora de China -Asia/Singapore.generic.long=Hora de Singapur -Asia/Taipei.generic.long=Hora de China -Asia/Tashkent.generic.long=Hora de Uzbekist\u00E1n -Asia/Tbilisi.generic.long=Hora de Georgia -Asia/Tehran.generic.long=Hora de Ir\u00E1n -Asia/Tel_Aviv.generic.long=Hora de Israel -Asia/Thimbu.generic.long=Hora de But\u00E1n -Asia/Thimphu.generic.long=Hora de But\u00E1n -Asia/Tokyo.generic.long=Hora de Jap\u00F3n -Asia/Ujung_Pandang.generic.long=Hora de Indonesia Central -Asia/Ulaanbaatar.generic.long=Hora de Ulan Bator -Asia/Ulan_Bator.generic.long=Hora de Ulan Bator -Asia/Urumqi.generic.long=Hora de China -Asia/Ust-Nera.daylight.long=Hora de verano de Ust-Nera -Asia/Ust-Nera.generic.long=Hora de Ust-Nera -Asia/Ust-Nera.standard.long=Hora de Ust-Nera -Asia/Vientiane.generic.long=Hora de Indochina -Asia/Vladivostok.generic.long=Hora de Vladivostok -Asia/Yakutsk.generic.long=Hora de Yakutsk -Asia/Yekaterinburg.generic.long=Hora de Ekaterinburgo -Asia/Yerevan.generic.long=Hora de Armenia -Atlantic/Azores.generic.long=Hora de Azores -Atlantic/Bermuda.generic.long=Hora del Atl\u00E1ntico -Atlantic/Canary.generic.long=Hora de Europa Occidental -Atlantic/Cape_Verde.generic.long=Hora de Cabo Verde -Atlantic/Faeroe.generic.long=Hora de Europa Occidental -Atlantic/Faroe.generic.long=Hora de Europa Occidental -Atlantic/Jan_Mayen.generic.long=Hora de Europa Central -Atlantic/Madeira.generic.long=Hora de Europa Occidental -Atlantic/Reykjavik.generic.long=Hora del Meridiano de Greenwich -Atlantic/South_Georgia.generic.long=Hora de Georgia del Sur -Atlantic/St_Helena.generic.long=Hora del Meridiano de Greenwich -Atlantic/Stanley.generic.long=Hora de las islas Malvinas -Australia/ACT.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/ACT.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/ACT.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/Adelaide.daylight.long=Hora de verano Central (Sur de Australia) -Australia/Adelaide.generic.long=Hora Central (Australia del Sur) -Australia/Adelaide.standard.long=Hora est\u00E1ndar Central (Sur de Australia) -Australia/Brisbane.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland) -Australia/Brisbane.generic.long=Hora Oriental (Queensland) -Australia/Brisbane.standard.long=Hora est\u00E1ndar del Este (Queensland) -Australia/Broken_Hill.daylight.long=Hora de verano Central (Sur de Australia/Nueva Gales del Sur) -Australia/Broken_Hill.generic.long=Hora Central (Australia del Sur/Nueva Gales del Sur) -Australia/Broken_Hill.standard.long=Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur) -Australia/Canberra.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/Canberra.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/Canberra.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/Currie.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/Currie.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/Currie.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/Darwin.daylight.long=Hora de verano Central (territorio del Norte) -Australia/Darwin.generic.long=Hora Central (Territorio Septentrional) -Australia/Darwin.standard.long=Hora est\u00E1ndar Central (territorio del Norte) -Australia/Eucla.daylight.long=Hora est\u00E1ndar de verano de Australia Central y Occidental -Australia/Eucla.generic.long=Hora de Australia Central y Occidental -Australia/Eucla.standard.long=Hora est\u00E1ndar de Australia Central y Occidental -Australia/Hobart.daylight.long=Hora de verano del Este (Tasmania) -Australia/Hobart.generic.long=Hora Oriental (Tasmania) -Australia/Hobart.standard.long=Hora est\u00E1ndar del Este (Tasmania) -Australia/LHI.generic.long=Hora de Lord Howe -Australia/Lindeman.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland) -Australia/Lindeman.generic.long=Hora Oriental (Queensland) -Australia/Lindeman.standard.long=Hora est\u00E1ndar del Este (Queensland) -Australia/Lord_Howe.generic.long=Hora de Lord Howe -Australia/Melbourne.daylight.long=Hora de verano del Este (Victoria) -Australia/Melbourne.generic.long=Hora Oriental (Victoria) -Australia/Melbourne.standard.long=Hora est\u00E1ndar del Este (Victoria) -Australia/NSW.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/NSW.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/NSW.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/North.daylight.long=Hora de verano Central (territorio del Norte) -Australia/North.generic.long=Hora Central (Territorio Septentrional) -Australia/North.standard.long=Hora est\u00E1ndar Central (territorio del Norte) -Australia/Perth.daylight.long=Hora de verano Occidental (Australia) -Australia/Perth.generic.long=Hora Occidental (Australia) -Australia/Perth.standard.long=Hora est\u00E1ndar Occidental (Australia) -Australia/Queensland.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland) -Australia/Queensland.generic.long=Hora Oriental (Queensland) -Australia/Queensland.standard.long=Hora est\u00E1ndar del Este (Queensland) -Australia/South.daylight.long=Hora de verano Central (Sur de Australia) -Australia/South.generic.long=Hora Central (Australia del Sur) -Australia/South.standard.long=Hora est\u00E1ndar Central (Sur de Australia) -Australia/Sydney.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/Sydney.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/Sydney.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/Tasmania.daylight.long=Hora de verano del Este (Tasmania) -Australia/Tasmania.generic.long=Hora Oriental (Tasmania) -Australia/Tasmania.standard.long=Hora est\u00E1ndar del Este (Tasmania) -Australia/Victoria.daylight.long=Hora de verano del Este (Victoria) -Australia/Victoria.generic.long=Hora Oriental (Victoria) -Australia/Victoria.standard.long=Hora est\u00E1ndar del Este (Victoria) -Australia/West.daylight.long=Hora de verano Occidental (Australia) -Australia/West.generic.long=Hora Occidental (Australia) -Australia/West.standard.long=Hora est\u00E1ndar Occidental (Australia) -Australia/Yancowinna.daylight.long=Hora de verano Central (Sur de Australia/Nueva Gales del Sur) -Australia/Yancowinna.generic.long=Hora Central (Australia del Sur/Nueva Gales del Sur) -Australia/Yancowinna.standard.long=Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur) -BET.generic.long=Hora de Brasil -BST.generic.long=Hora de Bangladesh -Brazil/Acre.generic.long=Hora de Acre -Brazil/DeNoronha.generic.long=Hora de Fernando de Noronha -Brazil/East.generic.long=Hora de Brasil -Brazil/West.generic.long=Hora est\u00E1ndar de Amazonia -CAT.generic.long=Hora de \u00C1frica Central -CET.generic.long=Hora de Europa Central -CNT.generic.long=Hora de Terranova -CST.generic.long=Hora Central -CST6CDT.generic.long=Hora Central -CTT.generic.long=Hora de China -Canada/Atlantic.generic.long=Hora del Atl\u00E1ntico -Canada/Central.generic.long=Hora Central -Canada/East-Saskatchewan.generic.long=Hora Central -Canada/Eastern.generic.long=Hora Oriental -Canada/Mountain.generic.long=Hora de las Monta\u00F1as Rocosas -Canada/Newfoundland.generic.long=Hora de Terranova -Canada/Pacific.generic.long=Hora del Pac\u00EDfico -Canada/Saskatchewan.generic.long=Hora Central -Canada/Yukon.generic.long=Hora del Pac\u00EDfico -Chile/Continental.generic.long=Hora de Chile -Chile/EasterIsland.generic.long=Hora de la Isla de Pascua -Cuba.generic.long=Hora de Cuba -EAT.generic.long=Hora de \u00C1frica Oriental -ECT.generic.long=Hora de Europa Central -EET.generic.long=Hora de Europa Oriental -EST.generic.long=Hora Oriental -EST5EDT.generic.long=Hora Oriental -Egypt.generic.long=Hora de Europa Oriental -Eire.generic.long=Hora de Irlanda -Etc/Greenwich.generic.long=Hora del Meridiano de Greenwich -Etc/UCT.generic.long=Hora Universal Coordinada -Etc/UTC.generic.long=Hora Universal Coordinada -Etc/Universal.generic.long=Hora Universal Coordinada -Etc/Zulu.generic.long=Hora Universal Coordinada -Europe/Amsterdam.generic.long=Hora de Europa Central -Europe/Andorra.generic.long=Hora de Europa Central -Europe/Athens.generic.long=Hora de Europa Oriental -Europe/Belfast.generic.long=Hora de Gran Breta\u00F1a -Europe/Belgrade.generic.long=Hora de Europa Central -Europe/Berlin.generic.long=Hora de Europa Central -Europe/Bratislava.generic.long=Hora de Europa Central -Europe/Brussels.generic.long=Hora de Europa Central -Europe/Bucharest.generic.long=Hora de Europa Oriental -Europe/Budapest.generic.long=Hora de Europa Central -Europe/Busingen.generic.long=Hora de Europa Central -Europe/Chisinau.generic.long=Hora de Europa Oriental -Europe/Copenhagen.generic.long=Hora de Europa Central -Europe/Dublin.generic.long=Hora de Irlanda -Europe/Gibraltar.generic.long=Hora de Europa Central -Europe/Guernsey.generic.long=Hora de Gran Breta\u00F1a -Europe/Helsinki.generic.long=Hora de Europa Oriental -Europe/Isle_of_Man.generic.long=Hora de Gran Breta\u00F1a -Europe/Istanbul.generic.long=Hora de Europa Oriental -Europe/Jersey.generic.long=Hora de Gran Breta\u00F1a -Europe/Kaliningrad.daylight.long=Hora de verano de Europa m\u00E1s Oriental -Europe/Kaliningrad.generic.long=Hora de Europa m\u00E1s Oriental -Europe/Kaliningrad.standard.long=Hora de Europa m\u00E1s Oriental -Europe/Kiev.generic.long=Hora de Europa Oriental -Europe/Lisbon.generic.long=Hora de Europa Occidental -Europe/Ljubljana.generic.long=Hora de Europa Central -Europe/London.generic.long=Hora de Gran Breta\u00F1a -Europe/Luxembourg.generic.long=Hora de Europa Central -Europe/Madrid.generic.long=Hora de Europa Central -Europe/Malta.generic.long=Hora de Europa Central -Europe/Mariehamn.generic.long=Hora de Europa Oriental -Europe/Minsk.daylight.long=Hora de verano de Europa m\u00E1s Oriental -Europe/Minsk.generic.long=Hora de Europa m\u00E1s Oriental -Europe/Minsk.standard.long=Hora de Europa m\u00E1s Oriental -Europe/Monaco.generic.long=Hora de Europa Central -Europe/Moscow.generic.long=Hora de Mosc\u00FA -Europe/Nicosia.generic.long=Hora de Europa Oriental -Europe/Oslo.generic.long=Hora de Europa Central -Europe/Paris.generic.long=Hora de Europa Central -Europe/Podgorica.generic.long=Hora de Europa Central -Europe/Prague.generic.long=Hora de Europa Central -Europe/Riga.generic.long=Hora de Europa Oriental -Europe/Rome.generic.long=Hora de Europa Central -Europe/Samara.generic.long=Hora de Samara -Europe/San_Marino.generic.long=Hora de Europa Central -Europe/Sarajevo.generic.long=Hora de Europa Central -Europe/Simferopol.generic.long=Hora de Europa Oriental -Europe/Skopje.generic.long=Hora de Europa Central -Europe/Sofia.generic.long=Hora de Europa Oriental -Europe/Stockholm.generic.long=Hora de Europa Central -Europe/Tallinn.generic.long=Hora de Europa Oriental -Europe/Tirane.generic.long=Hora de Europa Central -Europe/Tiraspol.generic.long=Hora de Europa Oriental -Europe/Uzhgorod.generic.long=Hora de Europa Oriental -Europe/Vaduz.generic.long=Hora de Europa Central -Europe/Vatican.generic.long=Hora de Europa Central -Europe/Vienna.generic.long=Hora de Europa Central -Europe/Vilnius.generic.long=Hora de Europa Oriental -Europe/Volgograd.generic.long=Hora de Volgogrado -Europe/Warsaw.generic.long=Hora de Europa Central -Europe/Zagreb.generic.long=Hora de Europa Central -Europe/Zaporozhye.generic.long=Hora de Europa Oriental -Europe/Zurich.generic.long=Hora de Europa Central -GB-Eire.generic.long=Hora de Gran Breta\u00F1a -GB.generic.long=Hora de Gran Breta\u00F1a -GMT.generic.long=Hora del Meridiano de Greenwich -Greenwich.generic.long=Hora del Meridiano de Greenwich -HST.generic.long=Hora de Hawaii -Hongkong.generic.long=Hora de Hong Kong -IET.generic.long=Hora Oriental -IST.generic.long=Hora de India -Iceland.generic.long=Hora del Meridiano de Greenwich -Indian/Antananarivo.generic.long=Hora de \u00C1frica Oriental -Indian/Chagos.generic.long=Hora del Territorio del Oc\u00E9ano \u00CDndico -Indian/Christmas.generic.long=Hora de la isla de Christmas -Indian/Cocos.generic.long=Hora de las islas Cocos -Indian/Comoro.generic.long=Hora de \u00C1frica Oriental -Indian/Kerguelen.generic.long=Hora de los Territorios Franceses del Sur y de la Ant\u00E1rtida -Indian/Mahe.generic.long=Hora de Seychelles -Indian/Maldives.generic.long=Hora de Maldivas -Indian/Mauritius.generic.long=Hora de Mauricio -Indian/Mayotte.generic.long=Hora de \u00C1frica Oriental -Indian/Reunion.generic.long=Hora de Reuni\u00F3n -Iran.generic.long=Hora de Ir\u00E1n -Israel.generic.long=Hora de Israel -JST.generic.long=Hora de Jap\u00F3n -Jamaica.generic.long=Hora Oriental -Japan.generic.long=Hora de Jap\u00F3n -Kwajalein.generic.long=Hora de Islas Marshall -Libya.generic.long=Hora de Europa Oriental -MET.generic.long=MET -MIT.generic.long=Hora de Samoa Occidental -MST.generic.long=Hora de las Monta\u00f1as Rocosas -MST7MDT.generic.long=Hora de las Monta\u00f1as Rocosas -Mexico/BajaNorte.generic.long=Hora del Pac\u00EDfico -Mexico/BajaSur.generic.long=Hora de las Monta\u00F1as Rocosas -Mexico/General.generic.long=Hora Central -NET.generic.long=Hora de Armenia -NST.generic.long=Hora de Nueva Zelanda -NZ-CHAT.generic.long=Hora de Chatam -NZ.generic.long=Hora de Nueva Zelanda -Navajo.generic.long=Hora de las Monta\u00F1as Rocosas -PLT.generic.long=Hora de Pakist\u00E1n -PNT.generic.long=Hora de las Monta\u00F1as Rocosas -PRC.generic.long=Hora de China -PRT.generic.long=Hora del Atl\u00E1ntico -PST.generic.long=Hora del Pac\u00EDfico -PST8PDT.generic.long=Hora del Pac\u00edfico -Pacific/Apia.generic.long=Hora de Samoa Occidental -Pacific/Auckland.generic.long=Hora de Nueva Zelanda -Pacific/Chatham.generic.long=Hora de Chatam -Pacific/Chuuk.daylight.long=Hora de verano de Chuuk -Pacific/Chuuk.generic.long=Hora de Chuuk -Pacific/Chuuk.standard.long=Hora de Chuuk -Pacific/Easter.generic.long=Hora de la Isla de Pascua -Pacific/Efate.generic.long=Hora de Vanuatu -Pacific/Enderbury.generic.long=Hora de la isla Phoenix -Pacific/Fakaofo.generic.long=Hora de Tokelau -Pacific/Fiji.generic.long=Hora de Fiji -Pacific/Funafuti.generic.long=Hora de Tuvalu -Pacific/Galapagos.generic.long=Hora de Gal\u00E1pagos -Pacific/Gambier.generic.long=Hora de Gambier -Pacific/Guadalcanal.generic.long=Hora de las Islas Solomon -Pacific/Guam.generic.long=Hora de Chamorro -Pacific/Honolulu.generic.long=Hora de Hawaii -Pacific/Johnston.generic.long=Hora de Hawaii -Pacific/Kiritimati.generic.long=Hora de las islas Line -Pacific/Kosrae.generic.long=Hora de Kosrae -Pacific/Kwajalein.generic.long=Hora de Islas Marshall -Pacific/Majuro.generic.long=Hora de Islas Marshall -Pacific/Marquesas.generic.long=Hora de Marquesas -Pacific/Midway.generic.long=Hora de Samoa -Pacific/Nauru.generic.long=Hora de Nauru -Pacific/Niue.generic.long=Hora de Niue -Pacific/Norfolk.generic.long=Hora de Norfolk -Pacific/Noumea.generic.long=Hora de Nueva Caledonia -Pacific/Pago_Pago.generic.long=Hora de Samoa -Pacific/Palau.generic.long=Hora de Palau -Pacific/Pitcairn.generic.long=Hora de Islas Pitcairn -Pacific/Pohnpei.daylight.long=Hora de verano de Pohnpei -Pacific/Pohnpei.generic.long=Hora de Pohnpei -Pacific/Pohnpei.standard.long=Hora de Pohnpei -Pacific/Ponape.daylight.long=Hora de verano de Pohnpei -Pacific/Ponape.generic.long=Hora de Pohnpei -Pacific/Ponape.standard.long=Hora de Pohnpei -Pacific/Port_Moresby.generic.long=Hora de Pap\u00FAa-Nueva Guinea -Pacific/Rarotonga.generic.long=Hora de las islas Cook -Pacific/Saipan.generic.long=Hora de Chamorro -Pacific/Samoa.generic.long=Hora de Samoa -Pacific/Tahiti.generic.long=Hora de Tahit\u00ED -Pacific/Tarawa.generic.long=Hora de las islas Gilbert -Pacific/Tongatapu.generic.long=Hora de Tonga -Pacific/Truk.daylight.long=Hora de verano de Chuuk -Pacific/Truk.generic.long=Hora de Chuuk -Pacific/Truk.standard.long=Hora de Chuuk -Pacific/Wake.generic.long=Hora de Wake -Pacific/Wallis.generic.long=Hora de Wallis y Futuna -Pacific/Yap.daylight.long=Hora de verano de Chuuk -Pacific/Yap.generic.long=Hora de Chuuk -Pacific/Yap.standard.long=Hora de Chuuk -Poland.generic.long=Hora de Europa Central -Portugal.generic.long=Hora de Europa Occidental -ROK.generic.long=Hora de Corea -SST.generic.long=Hora de las Islas Solomon -Singapore.generic.long=Hora de Singapur -SystemV/AST4.generic.long=Hora del Atl\u00E1ntico -SystemV/AST4ADT.generic.long=Hora del Atl\u00E1ntico -SystemV/CST6.generic.long=Hora Central -SystemV/CST6CDT.generic.long=Hora Central -SystemV/EST5.generic.long=Hora Oriental -SystemV/EST5EDT.generic.long=Hora Oriental -SystemV/HST10.generic.long=Hora de Hawaii -SystemV/MST7.generic.long=Hora de las Monta\u00F1as Rocosas -SystemV/MST7MDT.generic.long=Hora de las Monta\u00F1as Rocosas -SystemV/PST8.generic.long=Hora del Pac\u00EDfico -SystemV/PST8PDT.generic.long=Hora del Pac\u00EDfico -SystemV/YST9.generic.long=Hora de Alaska -SystemV/YST9YDT.generic.long=Hora de Alaska -Turkey.generic.long=Hora de Europa Oriental -UCT.generic.long=Hora Universal Coordinada -US/Alaska.generic.long=Hora de Alaska -US/Aleutian.generic.long=Hora de Hawaii-Aleutian -US/Arizona.generic.long=Hora de las Monta\u00F1as Rocosas -US/Central.generic.long=Hora Central -US/East-Indiana.generic.long=Hora Oriental -US/Eastern.generic.long=Hora Oriental -US/Hawaii.generic.long=Hora de Hawaii -US/Indiana-Starke.generic.long=Hora Central -US/Michigan.generic.long=Hora Oriental -US/Mountain.generic.long=Hora de las Monta\u00F1as Rocosas -US/Pacific-New.generic.long=Hora del Pac\u00EDfico -US/Pacific.generic.long=Hora del Pac\u00EDfico -US/Samoa.generic.long=Hora de Samoa -UTC.generic.long=Hora Universal Coordinada -Universal.generic.long=Hora Universal Coordinada -VST.generic.long=Hora de Indochina -W-SU.generic.long=Hora de Mosc\u00FA -WET.generic.long=Hora de Europa Occidental -Zulu.generic.long=Hora Universal Coordinada diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties deleted file mode 100644 index 6389940bbab..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord) -ACT.generic.long=Centre (Territoire du Nord) -ACT.standard.long=Heure standard d'Australie centrale (Territoire du Nord) -AET.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -AET.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -AET.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -AGT.generic.long=Heure d'Argentine -ART.generic.long=Heure d'Europe de l'Est -AST.generic.long=Alaska -Africa/Abidjan.generic.long=Heure de Greenwich -Africa/Accra.generic.long=Heure du Ghana -Africa/Addis_Ababa.generic.long=Heure d'Afrique de l'Est -Africa/Algiers.generic.long=Heure d'Europe centrale -Africa/Asmara.generic.long=Heure d'Afrique de l'Est -Africa/Asmera.generic.long=Heure d'Afrique de l'Est -Africa/Bamako.generic.long=Heure de Greenwich -Africa/Bangui.generic.long=Heure d'Afrique de l'Ouest -Africa/Banjul.generic.long=Heure de Greenwich -Africa/Bissau.generic.long=Heure de Greenwich -Africa/Blantyre.generic.long=Heure d'Afrique centrale -Africa/Brazzaville.generic.long=Heure d'Afrique de l'Ouest -Africa/Bujumbura.generic.long=Heure d'Afrique centrale -Africa/Cairo.generic.long=Heure d'Europe de l'Est -Africa/Casablanca.generic.long=Heure d'Europe de l'Ouest -Africa/Ceuta.generic.long=Heure d'Europe centrale -Africa/Conakry.generic.long=Heure de Greenwich -Africa/Dakar.generic.long=Heure de Greenwich -Africa/Dar_es_Salaam.generic.long=Heure d'Afrique de l'Est -Africa/Djibouti.generic.long=Heure d'Afrique de l'Est -Africa/Douala.generic.long=Heure d'Afrique de l'Ouest -Africa/El_Aaiun.generic.long=Heure d'Europe de l'Ouest -Africa/Freetown.generic.long=Heure de Sierra Leone -Africa/Gaborone.generic.long=Heure d'Afrique centrale -Africa/Harare.generic.long=Heure d'Afrique centrale -Africa/Johannesburg.generic.long=Afrique du Sud -Africa/Juba.generic.long=Heure d'Afrique de l'Est -Africa/Kampala.generic.long=Heure d'Afrique de l'Est -Africa/Khartoum.generic.long=Heure d'Afrique de l'Est -Africa/Kigali.generic.long=Heure d'Afrique centrale -Africa/Kinshasa.generic.long=Heure d'Afrique de l'Ouest -Africa/Lagos.generic.long=Heure d'Afrique de l'Ouest -Africa/Libreville.generic.long=Heure d'Afrique de l'Ouest -Africa/Lome.generic.long=Heure de Greenwich -Africa/Luanda.generic.long=Heure d'Afrique de l'Ouest -Africa/Lubumbashi.generic.long=Heure d'Afrique centrale -Africa/Lusaka.generic.long=Heure d'Afrique centrale -Africa/Malabo.generic.long=Heure d'Afrique de l'Ouest -Africa/Maputo.generic.long=Heure d'Afrique centrale -Africa/Maseru.generic.long=Afrique du Sud -Africa/Mbabane.generic.long=Afrique du Sud -Africa/Mogadishu.generic.long=Heure d'Afrique de l'Est -Africa/Monrovia.generic.long=Heure de Greenwich -Africa/Nairobi.generic.long=Heure d'Afrique de l'Est -Africa/Ndjamena.generic.long=Heure d'Afrique de l'Ouest -Africa/Niamey.generic.long=Heure d'Afrique de l'Ouest -Africa/Nouakchott.generic.long=Heure de Greenwich -Africa/Ouagadougou.generic.long=Heure de Greenwich -Africa/Porto-Novo.generic.long=Heure d'Afrique de l'Ouest -Africa/Sao_Tome.generic.long=Heure de Greenwich -Africa/Timbuktu.generic.long=Heure de Greenwich -Africa/Tripoli.generic.long=Heure d'Europe de l'Est -Africa/Tunis.generic.long=Heure d'Europe centrale -Africa/Windhoek.generic.long=Heure d'Afrique de l'Ouest -America/Adak.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes -America/Anchorage.generic.long=Alaska -America/Anguilla.generic.long=Atlantique -America/Antigua.generic.long=Atlantique -America/Araguaina.generic.long=Heure du Br\u00E9sil -America/Argentina/Buenos_Aires.generic.long=Heure d'Argentine -America/Argentina/Catamarca.generic.long=Heure d'Argentine -America/Argentina/ComodRivadavia.generic.long=Heure d'Argentine -America/Argentina/Cordoba.generic.long=Heure d'Argentine -America/Argentina/Jujuy.generic.long=Heure d'Argentine -America/Argentina/La_Rioja.generic.long=Heure d'Argentine -America/Argentina/Mendoza.generic.long=Heure d'Argentine -America/Argentina/Rio_Gallegos.generic.long=Heure d'Argentine -America/Argentina/Salta.generic.long=Heure d'Argentine -America/Argentina/San_Juan.generic.long=Heure d'Argentine -America/Argentina/San_Luis.generic.long=Heure d'Argentine -America/Argentina/Tucuman.generic.long=Heure d'Argentine -America/Argentina/Ushuaia.generic.long=Heure d'Argentine -America/Aruba.generic.long=Atlantique -America/Asuncion.generic.long=Heure du Paraguay -America/Atikokan.generic.long=C\u00F4te Est -America/Atka.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes -America/Bahia.generic.long=Heure du Br\u00E9sil -America/Bahia_Banderas.generic.long=Centre -America/Barbados.generic.long=Atlantique -America/Belem.generic.long=Heure du Br\u00E9sil -America/Belize.generic.long=Centre -America/Blanc-Sablon.generic.long=Atlantique -America/Boa_Vista.generic.long=Heure d'Amazonie -America/Bogota.generic.long=Heure de Colombie -America/Boise.generic.long=Rocheuses -America/Buenos_Aires.generic.long=Heure d'Argentine -America/Cambridge_Bay.generic.long=Rocheuses -America/Campo_Grande.generic.long=Heure d'Amazonie -America/Cancun.generic.long=Centre -America/Caracas.generic.long=Heure du Venezuela -America/Catamarca.generic.long=Heure d'Argentine -America/Cayenne.generic.long=Heure de Guyane fran\u00E7aise -America/Cayman.generic.long=C\u00F4te Est -America/Chicago.generic.long=Centre -America/Chihuahua.generic.long=Rocheuses -America/Coral_Harbour.generic.long=C\u00F4te Est -America/Cordoba.generic.long=Heure d'Argentine -America/Costa_Rica.generic.long=Centre -America/Creston.generic.long=Rocheuses -America/Cuiaba.generic.long=Heure d'Amazonie -America/Curacao.generic.long=Atlantique -America/Danmarkshavn.generic.long=Heure de Greenwich -America/Dawson.generic.long=Pacifique -America/Dawson_Creek.generic.long=Rocheuses -America/Denver.generic.long=Rocheuses -America/Detroit.generic.long=C\u00F4te Est -America/Dominica.generic.long=Atlantique -America/Edmonton.generic.long=Rocheuses -America/Eirunepe.generic.long=Heure de l'Acre -America/El_Salvador.generic.long=Centre -America/Ensenada.generic.long=Pacifique -America/Fort_Wayne.generic.long=C\u00F4te Est -America/Fortaleza.generic.long=Heure du Br\u00E9sil -America/Glace_Bay.generic.long=Atlantique -America/Godthab.generic.long=Heure du Groenland de l'Ouest -America/Goose_Bay.generic.long=Atlantique -America/Grand_Turk.generic.long=C\u00F4te Est -America/Grenada.generic.long=Atlantique -America/Guadeloupe.generic.long=Atlantique -America/Guatemala.generic.long=Centre -America/Guayaquil.generic.long=Heure de l'Equateur -America/Guyana.generic.long=Heure de Guyana -America/Halifax.generic.long=Atlantique -America/Havana.generic.long=Heure de Cuba -America/Hermosillo.generic.long=Rocheuses -America/Indiana/Indianapolis.generic.long=C\u00F4te Est -America/Indiana/Knox.generic.long=Centre -America/Indiana/Marengo.generic.long=C\u00F4te Est -America/Indiana/Petersburg.generic.long=C\u00F4te Est -America/Indiana/Tell_City.generic.long=Centre -America/Indiana/Vevay.generic.long=C\u00F4te Est -America/Indiana/Vincennes.generic.long=C\u00F4te Est -America/Indiana/Winamac.generic.long=C\u00F4te Est -America/Indianapolis.generic.long=C\u00F4te Est -America/Inuvik.generic.long=Rocheuses -America/Iqaluit.generic.long=C\u00F4te Est -America/Jamaica.generic.long=C\u00F4te Est -America/Jujuy.generic.long=Heure d'Argentine -America/Juneau.generic.long=Alaska -America/Kentucky/Louisville.generic.long=C\u00F4te Est -America/Kentucky/Monticello.generic.long=C\u00F4te Est -America/Knox_IN.generic.long=Centre -America/Kralendijk.generic.long=Atlantique -America/La_Paz.generic.long=Heure de Bolivie -America/Lima.generic.long=Heure du P\u00E9rou -America/Los_Angeles.generic.long=Pacifique -America/Louisville.generic.long=C\u00F4te Est -America/Lower_Princes.generic.long=Atlantique -America/Maceio.generic.long=Heure du Br\u00E9sil -America/Managua.generic.long=Centre -America/Manaus.generic.long=Heure d'Amazonie -America/Marigot.generic.long=Atlantique -America/Martinique.generic.long=Atlantique -America/Matamoros.generic.long=Centre -America/Mazatlan.generic.long=Rocheuses -America/Mendoza.generic.long=Heure d'Argentine -America/Menominee.generic.long=Centre -America/Merida.generic.long=Centre -America/Metlakatla.daylight.long=Heure avanc\u00E9e de Metlakatla -America/Metlakatla.generic.long=Heure de Metlakatla -America/Metlakatla.standard.long=Heure normale de Metlakatla -America/Mexico_City.generic.long=Centre -America/Miquelon.generic.long=Saint-Pierre-et-Miquelon -America/Moncton.generic.long=Atlantique -America/Monterrey.generic.long=Centre -America/Montevideo.generic.long=Heure de l'Uruguay -America/Montreal.generic.long=C\u00F4te Est -America/Montserrat.generic.long=Atlantique -America/Nassau.generic.long=C\u00F4te Est -America/New_York.generic.long=C\u00F4te Est -America/Nipigon.generic.long=C\u00F4te Est -America/Nome.generic.long=Alaska -America/Noronha.generic.long=Heure de Fernando de Noronha -America/North_Dakota/Beulah.generic.long=Centre -America/North_Dakota/Center.generic.long=Centre -America/North_Dakota/New_Salem.generic.long=Centre -America/Ojinaga.generic.long=Rocheuses -America/Panama.generic.long=C\u00F4te Est -America/Pangnirtung.generic.long=C\u00F4te Est -America/Paramaribo.generic.long=Heure du Surinam -America/Phoenix.generic.long=Rocheuses -America/Port-au-Prince.generic.long=C\u00F4te Est -America/Port_of_Spain.generic.long=Atlantique -America/Porto_Acre.generic.long=Heure de l'Acre -America/Porto_Velho.generic.long=Heure d'Amazonie -America/Puerto_Rico.generic.long=Atlantique -America/Rainy_River.generic.long=Centre -America/Rankin_Inlet.generic.long=Centre -America/Recife.generic.long=Heure du Br\u00E9sil -America/Regina.generic.long=Centre -America/Resolute.generic.long=Centre -America/Rio_Branco.generic.long=Heure de l'Acre -America/Rosario.generic.long=Heure d'Argentine -America/Santa_Isabel.generic.long=Pacifique -America/Santarem.generic.long=Heure du Br\u00E9sil -America/Santiago.generic.long=Heure du Chili -America/Santo_Domingo.generic.long=Atlantique -America/Sao_Paulo.generic.long=Heure du Br\u00E9sil -America/Scoresbysund.generic.long=Heure du Groenland de l'Est -America/Shiprock.generic.long=Rocheuses -America/Sitka.generic.long=Alaska -America/St_Barthelemy.generic.long=Atlantique -America/St_Johns.generic.long=Terre-Neuve -America/St_Kitts.generic.long=Atlantique -America/St_Lucia.generic.long=Atlantique -America/St_Thomas.generic.long=Atlantique -America/St_Vincent.generic.long=Atlantique -America/Swift_Current.generic.long=Centre -America/Tegucigalpa.generic.long=Centre -America/Thule.generic.long=Atlantique -America/Thunder_Bay.generic.long=C\u00F4te Est -America/Tijuana.generic.long=Pacifique -America/Toronto.generic.long=C\u00F4te Est -America/Tortola.generic.long=Atlantique -America/Vancouver.generic.long=Pacifique -America/Virgin.generic.long=Atlantique -America/Whitehorse.generic.long=Pacifique -America/Winnipeg.generic.long=Centre -America/Yakutat.generic.long=Alaska -America/Yellowknife.generic.long=Rocheuses -Antarctica/Casey.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie) -Antarctica/Casey.generic.long=Ouest (Australie) -Antarctica/Casey.standard.long=Heure normale de l'Ouest (Australie) -Antarctica/Davis.generic.long=Heure de Davis -Antarctica/DumontDUrville.generic.long=Heure de Dumont-d'Urville -Antarctica/Macquarie.daylight.long=Heure d'\u00E9t\u00E9 de l'Ile Macquarie -Antarctica/Macquarie.generic.long=Heure de l'Ile Macquarie -Antarctica/Macquarie.standard.long=Heure de l'Ile Macquarie -Antarctica/Mawson.generic.long=Heure de Mawson -Antarctica/McMurdo.generic.long=Nouvelle-Z\u00E9lande -Antarctica/Palmer.generic.long=Heure du Chili -Antarctica/Rothera.generic.long=Heure de Rothera -Antarctica/South_Pole.generic.long=Nouvelle-Z\u00E9lande -Antarctica/Syowa.generic.long=Heure de Syowa -Antarctica/Vostok.generic.long=Heure de Vostok -Arctic/Longyearbyen.generic.long=Heure d'Europe centrale -Asia/Aden.generic.long=Arabie -Asia/Almaty.generic.long=Heure d'Alma-Ata -Asia/Amman.generic.long=Arabie -Asia/Anadyr.generic.long=Heure d'Anadyr -Asia/Aqtau.generic.long=Heure d'Aqtau -Asia/Aqtobe.generic.long=Heure d'Aqtobe -Asia/Ashgabat.generic.long=Heure du Turkm\u00E9nistan -Asia/Ashkhabad.generic.long=Heure du Turkm\u00E9nistan -Asia/Baghdad.generic.long=Arabie -Asia/Bahrain.generic.long=Arabie -Asia/Baku.generic.long=Heure d'Azerba\u00EFdjan -Asia/Bangkok.generic.long=Heure d'Indochine -Asia/Beirut.generic.long=Heure d'Europe de l'Est -Asia/Bishkek.generic.long=Heure du Kirghizistan -Asia/Brunei.generic.long=Heure du Brunei -Asia/Calcutta.generic.long=Inde -Asia/Choibalsan.generic.long=Heure de Choibalsan -Asia/Chongqing.generic.long=Chine -Asia/Chungking.generic.long=Chine -Asia/Colombo.generic.long=Inde -Asia/Dacca.generic.long=Heure du Bangladesh -Asia/Damascus.generic.long=Heure d'Europe de l'Est -Asia/Dhaka.generic.long=Heure du Bangladesh -Asia/Dili.generic.long=Heure de Timor-Leste -Asia/Dubai.generic.long=Golfe -Asia/Dushanbe.generic.long=Heure du Tadjikistan -Asia/Gaza.generic.long=Heure d'Europe de l'Est -Asia/Harbin.generic.long=Chine -Asia/Hebron.generic.long=Heure d'Europe de l'Est -Asia/Ho_Chi_Minh.generic.long=Heure d'Indochine -Asia/Hong_Kong.generic.long=Heure de Hong-Kong -Asia/Hovd.generic.long=Heure de Hovd -Asia/Irkutsk.generic.long=Heure d'Irkutsk -Asia/Istanbul.generic.long=Heure d'Europe de l'Est -Asia/Jakarta.generic.long=Heure de l'Indon\u00E9sie occidentale -Asia/Jayapura.generic.long=Heure d'Indon\u00E9sie orientale -Asia/Jerusalem.generic.long=Isra\u00EBl -Asia/Kabul.generic.long=Heure d'Afghanistan -Asia/Kamchatka.generic.long=Heure de Petropavlovsk-Kamchatski -Asia/Karachi.generic.long=Heure du Pakistan -Asia/Kashgar.generic.long=Chine -Asia/Kathmandu.generic.long=Heure du N\u00E9pal -Asia/Katmandu.generic.long=Heure du N\u00E9pal -Asia/Khandyga.daylight.long=Heure d'\u00E9t\u00E9 de Khandyga -Asia/Khandyga.generic.long=Heure de Khandyga -Asia/Khandyga.standard.long=Heure de Khandyga -Asia/Kolkata.generic.long=Inde -Asia/Krasnoyarsk.generic.long=Heure de Krasno\u00EFarsk -Asia/Kuala_Lumpur.generic.long=Heure de Malaisie -Asia/Kuching.generic.long=Heure de Malaisie -Asia/Kuwait.generic.long=Arabie -Asia/Macao.generic.long=Chine -Asia/Macau.generic.long=Chine -Asia/Magadan.generic.long=Heure de Magadan -Asia/Makassar.generic.long=Heure d'Indon\u00E9sie centrale -Asia/Manila.generic.long=Heure des Philippines -Asia/Muscat.generic.long=Golfe -Asia/Nicosia.generic.long=Heure d'Europe de l'Est -Asia/Novokuznetsk.generic.long=Heure de Novossibirsk -Asia/Novosibirsk.generic.long=Heure de Novossibirsk -Asia/Omsk.generic.long=Heure d'Omsk -Asia/Oral.generic.long=Heure d'Oral -Asia/Phnom_Penh.generic.long=Heure d'Indochine -Asia/Pontianak.generic.long=Heure de l'Indon\u00E9sie occidentale -Asia/Pyongyang.generic.long=Cor\u00E9e -Asia/Qatar.generic.long=Arabie -Asia/Qyzylorda.generic.long=Heure de Kyzylorda -Asia/Rangoon.generic.long=Heure de Myanmar -Asia/Saigon.generic.long=Heure d'Indochine -Asia/Sakhalin.generic.long=Heure de Sakhalin -Asia/Samarkand.generic.long=Heure de l'Ouzb\u00E9kistan -Asia/Seoul.generic.long=Cor\u00E9e -Asia/Shanghai.generic.long=Chine -Asia/Singapore.generic.long=Heure de Singapour -Asia/Taipei.generic.long=Chine -Asia/Tashkent.generic.long=Heure de l'Ouzb\u00E9kistan -Asia/Tbilisi.generic.long=Heure de G\u00E9orgie -Asia/Tehran.generic.long=Heure d'Iran -Asia/Tel_Aviv.generic.long=Isra\u00EBl -Asia/Thimbu.generic.long=Heure du Bhoutan -Asia/Thimphu.generic.long=Heure du Bhoutan -Asia/Tokyo.generic.long=Japon -Asia/Ujung_Pandang.generic.long=Heure d'Indon\u00E9sie centrale -Asia/Ulaanbaatar.generic.long=Heure de l'Ulaanbaatar -Asia/Ulan_Bator.generic.long=Heure de l'Ulaanbaatar -Asia/Urumqi.generic.long=Chine -Asia/Ust-Nera.daylight.long=Heure d'\u00E9t\u00E9 d'Ust-Nera -Asia/Ust-Nera.generic.long=Heure d'Ust-Nera -Asia/Ust-Nera.standard.long=Heure d'Ust-Nera -Asia/Vientiane.generic.long=Heure d'Indochine -Asia/Vladivostok.generic.long=Heure de Vladivostok -Asia/Yakutsk.generic.long=Heure du Iakoutsk -Asia/Yekaterinburg.generic.long=Heure de Yekaterinburg -Asia/Yerevan.generic.long=Heure d'Arm\u00E9nie -Atlantic/Azores.generic.long=Heure des A\u00E7ores -Atlantic/Bermuda.generic.long=Atlantique -Atlantic/Canary.generic.long=Heure d'Europe de l'Ouest -Atlantic/Cape_Verde.generic.long=Heure de Cap-Vert -Atlantic/Faeroe.generic.long=Heure d'Europe de l'Ouest -Atlantic/Faroe.generic.long=Heure d'Europe de l'Ouest -Atlantic/Jan_Mayen.generic.long=Heure d'Europe centrale -Atlantic/Madeira.generic.long=Heure d'Europe de l'Ouest -Atlantic/Reykjavik.generic.long=Heure de Greenwich -Atlantic/South_Georgia.generic.long=G\u00E9orgie du Sud -Atlantic/St_Helena.generic.long=Heure de Greenwich -Atlantic/Stanley.generic.long=Heure des \u00EEles Falkland -Australia/ACT.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/ACT.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/ACT.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/Adelaide.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud) -Australia/Adelaide.generic.long=Centre (Australie-M\u00E9ridionale) -Australia/Adelaide.standard.long=Heure standard d'Australie centrale (Australie du sud) -Australia/Brisbane.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland) -Australia/Brisbane.generic.long=C\u00F4te Est (Queensland) -Australia/Brisbane.standard.long=Heure standard d'Australie orientale (Queensland) -Australia/Broken_Hill.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud) -Australia/Broken_Hill.generic.long=Centre (Australie-M\u00E9ridionale/Nouvelle-Galles du Sud) -Australia/Broken_Hill.standard.long=Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud) -Australia/Canberra.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/Canberra.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/Canberra.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/Currie.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/Currie.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/Currie.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/Darwin.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord) -Australia/Darwin.generic.long=Centre (Territoire du Nord) -Australia/Darwin.standard.long=Heure standard d'Australie centrale (Territoire du Nord) -Australia/Eucla.daylight.long=Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre) -Australia/Eucla.generic.long=Heure de l'Australie occidentale (centre) -Australia/Eucla.standard.long=Heure standard de l'Australie occidentale (centre) -Australia/Hobart.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie) -Australia/Hobart.generic.long=C\u00F4te Est (Tasmanie) -Australia/Hobart.standard.long=Heure standard d'Australie orientale (Tasmanie) -Australia/LHI.generic.long=Heure de Lord Howe -Australia/Lindeman.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland) -Australia/Lindeman.generic.long=C\u00F4te Est (Queensland) -Australia/Lindeman.standard.long=Heure standard d'Australie orientale (Queensland) -Australia/Lord_Howe.generic.long=Heure de Lord Howe -Australia/Melbourne.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria) -Australia/Melbourne.generic.long=C\u00F4te Est (Victoria) -Australia/Melbourne.standard.long=Heure standard d'Australie orientale (Victoria) -Australia/NSW.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/NSW.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/NSW.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/North.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord) -Australia/North.generic.long=Centre (Territoire du Nord) -Australia/North.standard.long=Heure standard d'Australie centrale (Territoire du Nord) -Australia/Perth.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie) -Australia/Perth.generic.long=Ouest (Australie) -Australia/Perth.standard.long=Heure normale de l'Ouest (Australie) -Australia/Queensland.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland) -Australia/Queensland.generic.long=C\u00F4te Est (Queensland) -Australia/Queensland.standard.long=Heure standard d'Australie orientale (Queensland) -Australia/South.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud) -Australia/South.generic.long=Centre (Australie-M\u00E9ridionale) -Australia/South.standard.long=Heure standard d'Australie centrale (Australie du sud) -Australia/Sydney.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/Sydney.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/Sydney.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/Tasmania.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie) -Australia/Tasmania.generic.long=C\u00F4te Est (Tasmanie) -Australia/Tasmania.standard.long=Heure standard d'Australie orientale (Tasmanie) -Australia/Victoria.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria) -Australia/Victoria.generic.long=C\u00F4te Est (Victoria) -Australia/Victoria.standard.long=Heure standard d'Australie orientale (Victoria) -Australia/West.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie) -Australia/West.generic.long=Ouest (Australie) -Australia/West.standard.long=Heure normale de l'Ouest (Australie) -Australia/Yancowinna.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud) -Australia/Yancowinna.generic.long=Centre (Australie-M\u00E9ridionale/Nouvelle-Galles du Sud) -Australia/Yancowinna.standard.long=Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud) -BET.generic.long=Heure du Br\u00E9sil -BST.generic.long=Heure du Bangladesh -Brazil/Acre.generic.long=Heure de l'Acre -Brazil/DeNoronha.generic.long=Heure de Fernando de Noronha -Brazil/East.generic.long=Heure du Br\u00E9sil -Brazil/West.generic.long=Heure d'Amazonie -CAT.generic.long=Heure d'Afrique centrale -CET.generic.long=Heure d'Europe centrale -CNT.generic.long=Terre-Neuve -CST.generic.long=Centre -CST6CDT.generic.long=Centre -CTT.generic.long=Chine -Canada/Atlantic.generic.long=Atlantique -Canada/Central.generic.long=Centre -Canada/East-Saskatchewan.generic.long=Centre -Canada/Eastern.generic.long=C\u00F4te Est -Canada/Mountain.generic.long=Rocheuses -Canada/Newfoundland.generic.long=Terre-Neuve -Canada/Pacific.generic.long=Pacifique -Canada/Saskatchewan.generic.long=Centre -Canada/Yukon.generic.long=Pacifique -Chile/Continental.generic.long=Heure du Chili -Chile/EasterIsland.generic.long=Heure de l'Ile de P\u00E2ques -Cuba.generic.long=Heure de Cuba -EAT.generic.long=Heure d'Afrique de l'Est -ECT.generic.long=Heure d'Europe centrale -EET.generic.long=Heure d'Europe de l'Est -EST.generic.long=C\u00f4te Est -EST5EDT.generic.long=C\u00f4te Est -Egypt.generic.long=Heure d'Europe de l'Est -Eire.generic.long=Heure irlandaise -Etc/Greenwich.generic.long=Heure de Greenwich -Etc/UCT.generic.long=Temps universel coordonn\u00E9 -Etc/UTC.generic.long=Temps universel coordonn\u00E9 -Etc/Universal.generic.long=Temps universel coordonn\u00E9 -Etc/Zulu.generic.long=Temps universel coordonn\u00E9 -Europe/Amsterdam.generic.long=Heure d'Europe centrale -Europe/Andorra.generic.long=Heure d'Europe centrale -Europe/Athens.generic.long=Heure d'Europe de l'Est -Europe/Belfast.generic.long=Heure britannique -Europe/Belgrade.generic.long=Heure d'Europe centrale -Europe/Berlin.generic.long=Heure d'Europe centrale -Europe/Bratislava.generic.long=Heure d'Europe centrale -Europe/Brussels.generic.long=Heure d'Europe centrale -Europe/Bucharest.generic.long=Heure d'Europe de l'Est -Europe/Budapest.generic.long=Heure d'Europe centrale -Europe/Busingen.generic.long=Heure d'Europe centrale -Europe/Chisinau.generic.long=Heure d'Europe de l'Est -Europe/Copenhagen.generic.long=Heure d'Europe centrale -Europe/Dublin.generic.long=Heure irlandaise -Europe/Gibraltar.generic.long=Heure d'Europe centrale -Europe/Guernsey.generic.long=Heure britannique -Europe/Helsinki.generic.long=Heure d'Europe de l'Est -Europe/Isle_of_Man.generic.long=Heure britannique -Europe/Istanbul.generic.long=Heure d'Europe de l'Est -Europe/Jersey.generic.long=Heure britannique -Europe/Kaliningrad.daylight.long=Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3 -Europe/Kaliningrad.generic.long=Heure d'Europe de l'Est UTC+3 -Europe/Kaliningrad.standard.long=Heure d'Europe de l'Est UTC+3 -Europe/Kiev.generic.long=Heure d'Europe de l'Est -Europe/Lisbon.generic.long=Heure d'Europe de l'Ouest -Europe/Ljubljana.generic.long=Heure d'Europe centrale -Europe/London.generic.long=Heure britannique -Europe/Luxembourg.generic.long=Heure d'Europe centrale -Europe/Madrid.generic.long=Heure d'Europe centrale -Europe/Malta.generic.long=Heure d'Europe centrale -Europe/Mariehamn.generic.long=Heure d'Europe de l'Est -Europe/Minsk.daylight.long=Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3 -Europe/Minsk.generic.long=Heure d'Europe de l'Est UTC+3 -Europe/Minsk.standard.long=Heure d'Europe de l'Est UTC+3 -Europe/Monaco.generic.long=Heure d'Europe centrale -Europe/Moscow.generic.long=Moscou -Europe/Nicosia.generic.long=Heure d'Europe de l'Est -Europe/Oslo.generic.long=Heure d'Europe centrale -Europe/Paris.generic.long=Heure d'Europe centrale -Europe/Podgorica.generic.long=Heure d'Europe centrale -Europe/Prague.generic.long=Heure d'Europe centrale -Europe/Riga.generic.long=Heure d'Europe de l'Est -Europe/Rome.generic.long=Heure d'Europe centrale -Europe/Samara.generic.long=Heure de Samara -Europe/San_Marino.generic.long=Heure d'Europe centrale -Europe/Sarajevo.generic.long=Heure d'Europe centrale -Europe/Simferopol.generic.long=Heure d'Europe de l'Est -Europe/Skopje.generic.long=Heure d'Europe centrale -Europe/Sofia.generic.long=Heure d'Europe de l'Est -Europe/Stockholm.generic.long=Heure d'Europe centrale -Europe/Tallinn.generic.long=Heure d'Europe de l'Est -Europe/Tirane.generic.long=Heure d'Europe centrale -Europe/Tiraspol.generic.long=Heure d'Europe de l'Est -Europe/Uzhgorod.generic.long=Heure d'Europe de l'Est -Europe/Vaduz.generic.long=Heure d'Europe centrale -Europe/Vatican.generic.long=Heure d'Europe centrale -Europe/Vienna.generic.long=Heure d'Europe centrale -Europe/Vilnius.generic.long=Heure d'Europe de l'Est -Europe/Volgograd.generic.long=Heure de Volgograd -Europe/Warsaw.generic.long=Heure d'Europe centrale -Europe/Zagreb.generic.long=Heure d'Europe centrale -Europe/Zaporozhye.generic.long=Heure d'Europe de l'Est -Europe/Zurich.generic.long=Heure d'Europe centrale -GB-Eire.generic.long=Heure britannique -GB.generic.long=Heure britannique -GMT.generic.long=Heure de Greenwich -Greenwich.generic.long=Heure de Greenwich -HST.generic.long=Hawa\u00ef -Hongkong.generic.long=Heure de Hong-Kong -IET.generic.long=C\u00F4te Est -IST.generic.long=Inde -Iceland.generic.long=Heure de Greenwich -Indian/Antananarivo.generic.long=Heure d'Afrique de l'Est -Indian/Chagos.generic.long=Heure de l'oc\u00E9an Indien -Indian/Christmas.generic.long=Heure de l'Ile Christmas -Indian/Cocos.generic.long=Heure des Iles Cocos -Indian/Comoro.generic.long=Heure d'Afrique de l'Est -Indian/Kerguelen.generic.long=Heure des Terres australes antarctiques fran\u00E7aises -Indian/Mahe.generic.long=Heure des Seychelles -Indian/Maldives.generic.long=Heure des Maldives -Indian/Mauritius.generic.long=Heure de Maurice -Indian/Mayotte.generic.long=Heure d'Afrique de l'Est -Indian/Reunion.generic.long=Heure de la R\u00E9union -Iran.generic.long=Heure d'Iran -Israel.generic.long=Isra\u00EBl -JST.generic.long=Japon -Jamaica.generic.long=C\u00F4te Est -Japan.generic.long=Japon -Kwajalein.generic.long=Heure des Iles Marshall -Libya.generic.long=Heure d'Europe de l'Est -MET.generic.long=MET -MIT.generic.long=Heure des Samoas occidentales -MST.generic.long=Rocheuses -MST7MDT.generic.long=Rocheuses -Mexico/BajaNorte.generic.long=Pacifique -Mexico/BajaSur.generic.long=Rocheuses -Mexico/General.generic.long=Centre -NET.generic.long=Heure d'Arm\u00E9nie -NST.generic.long=Nouvelle-Z\u00E9lande -NZ-CHAT.generic.long=Chatham -NZ.generic.long=Nouvelle-Z\u00E9lande -Navajo.generic.long=Rocheuses -PLT.generic.long=Heure du Pakistan -PNT.generic.long=Rocheuses -PRC.generic.long=Chine -PRT.generic.long=Atlantique -PST.generic.long=Pacifique -PST8PDT.generic.long=Pacifique -Pacific/Apia.generic.long=Heure des Samoas occidentales -Pacific/Auckland.generic.long=Nouvelle-Z\u00E9lande -Pacific/Chatham.generic.long=Chatham -Pacific/Chuuk.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk -Pacific/Chuuk.generic.long=Heure de Chuuk -Pacific/Chuuk.standard.long=Heure de Chuuk -Pacific/Easter.generic.long=Heure de l'Ile de P\u00E2ques -Pacific/Efate.generic.long=Heure du Vanuatu -Pacific/Enderbury.generic.long=Heure de l'Ile de Phoenix -Pacific/Fakaofo.generic.long=Heure de Tokelau -Pacific/Fiji.generic.long=Heure de Fidji -Pacific/Funafuti.generic.long=Heure de Tuvalu -Pacific/Galapagos.generic.long=Heure des Galapagos -Pacific/Gambier.generic.long=Heure de Gambi -Pacific/Guadalcanal.generic.long=Heure des Iles Salomon -Pacific/Guam.generic.long=Chamorro -Pacific/Honolulu.generic.long=Hawa\u00EF -Pacific/Johnston.generic.long=Hawa\u00EF -Pacific/Kiritimati.generic.long=Heure de l'Ile de Line -Pacific/Kosrae.generic.long=Heure de Kusaie -Pacific/Kwajalein.generic.long=Heure des Iles Marshall -Pacific/Majuro.generic.long=Heure des Iles Marshall -Pacific/Marquesas.generic.long=Heure des Marquises -Pacific/Midway.generic.long=Samoa -Pacific/Nauru.generic.long=Heure de Nauru -Pacific/Niue.generic.long=Heure de Niue -Pacific/Norfolk.generic.long=Heure de Norfolk -Pacific/Noumea.generic.long=Heure de Nouvelle-Cal\u00E9donie -Pacific/Pago_Pago.generic.long=Samoa -Pacific/Palau.generic.long=Heure de Palaos -Pacific/Pitcairn.generic.long=Pitcairn -Pacific/Pohnpei.daylight.long=Heure d'\u00E9t\u00E9 de Pohnpei -Pacific/Pohnpei.generic.long=Ponape -Pacific/Pohnpei.standard.long=Heure de Pohnpei -Pacific/Ponape.daylight.long=Heure d'\u00E9t\u00E9 de Pohnpei -Pacific/Ponape.generic.long=Ponape -Pacific/Ponape.standard.long=Heure de Pohnpei -Pacific/Port_Moresby.generic.long=Heure de Papouasie-Nouvelle-Guin\u00E9e -Pacific/Rarotonga.generic.long=Heure des Iles Cook -Pacific/Saipan.generic.long=Chamorro -Pacific/Samoa.generic.long=Samoa -Pacific/Tahiti.generic.long=Heure de Tahiti -Pacific/Tarawa.generic.long=Heure de Kiribati -Pacific/Tongatapu.generic.long=Heure de Tonga -Pacific/Truk.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk -Pacific/Truk.generic.long=Heure de Chuuk -Pacific/Truk.standard.long=Heure de Chuuk -Pacific/Wake.generic.long=Heure de Wake -Pacific/Wallis.generic.long=Heure de Wallis-et-Futuna -Pacific/Yap.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk -Pacific/Yap.generic.long=Heure de Chuuk -Pacific/Yap.standard.long=Heure de Chuuk -Poland.generic.long=Heure d'Europe centrale -Portugal.generic.long=Heure d'Europe de l'Ouest -ROK.generic.long=Cor\u00E9e -SST.generic.long=Heure des Iles Salomon -Singapore.generic.long=Heure de Singapour -SystemV/AST4.generic.long=Atlantique -SystemV/AST4ADT.generic.long=Atlantique -SystemV/CST6.generic.long=Centre -SystemV/CST6CDT.generic.long=Centre -SystemV/EST5.generic.long=C\u00F4te Est -SystemV/EST5EDT.generic.long=C\u00F4te Est -SystemV/HST10.generic.long=Hawa\u00EF -SystemV/MST7.generic.long=Rocheuses -SystemV/MST7MDT.generic.long=Rocheuses -SystemV/PST8.generic.long=Pacifique -SystemV/PST8PDT.generic.long=Pacifique -SystemV/YST9.generic.long=Alaska -SystemV/YST9YDT.generic.long=Alaska -Turkey.generic.long=Heure d'Europe de l'Est -UCT.generic.long=Temps universel coordonn\u00E9 -US/Alaska.generic.long=Alaska -US/Aleutian.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes -US/Arizona.generic.long=Rocheuses -US/Central.generic.long=Centre -US/East-Indiana.generic.long=C\u00F4te Est -US/Eastern.generic.long=C\u00F4te Est -US/Hawaii.generic.long=Hawa\u00EF -US/Indiana-Starke.generic.long=Centre -US/Michigan.generic.long=C\u00F4te Est -US/Mountain.generic.long=Rocheuses -US/Pacific-New.generic.long=Pacifique -US/Pacific.generic.long=Pacifique -US/Samoa.generic.long=Samoa -UTC.generic.long=Temps universel coordonn\u00E9 -Universal.generic.long=Temps universel coordonn\u00E9 -VST.generic.long=Heure d'Indochine -W-SU.generic.long=Moscou -WET.generic.long=Heure d'Europe de l'Ouest -Zulu.generic.long=Temps universel coordonn\u00E9 diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties deleted file mode 100644 index 6a4c8280ced..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Ora estiva centrale (Territori del Nord) -ACT.generic.long=Ora fuso centrale (Territori del Nord) -ACT.standard.long=Ora standard centrale (Territori del Nord) -AET.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -AET.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -AET.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -AGT.generic.long=Ora dell'Argentina -ART.generic.long=Ora dell'Europa orientale -AST.generic.long=Ora Alaska -Africa/Abidjan.generic.long=Ora media di Greenwich -Africa/Accra.generic.long=Ora media del Ghana -Africa/Addis_Ababa.generic.long=Ora dell'Africa orientale -Africa/Algiers.generic.long=Ora dell'Europa centrale -Africa/Asmara.generic.long=Ora dell'Africa orientale -Africa/Asmera.generic.long=Ora dell'Africa orientale -Africa/Bamako.generic.long=Ora media di Greenwich -Africa/Bangui.generic.long=Ora dell'Africa occidentale -Africa/Banjul.generic.long=Ora media di Greenwich -Africa/Bissau.generic.long=Ora media di Greenwich -Africa/Blantyre.generic.long=Ora dell'Africa centrale -Africa/Brazzaville.generic.long=Ora dell'Africa occidentale -Africa/Bujumbura.generic.long=Ora dell'Africa centrale -Africa/Cairo.generic.long=Ora dell'Europa orientale -Africa/Casablanca.generic.long=Ora dell'Europa occidentale -Africa/Ceuta.generic.long=Ora dell'Europa centrale -Africa/Conakry.generic.long=Ora media di Greenwich -Africa/Dakar.generic.long=Ora media di Greenwich -Africa/Dar_es_Salaam.generic.long=Ora dell'Africa orientale -Africa/Djibouti.generic.long=Ora dell'Africa orientale -Africa/Douala.generic.long=Ora dell'Africa occidentale -Africa/El_Aaiun.generic.long=Ora dell'Europa occidentale -Africa/Freetown.generic.long=Ora della Sierra Leone -Africa/Gaborone.generic.long=Ora dell'Africa centrale -Africa/Harare.generic.long=Ora dell'Africa centrale -Africa/Johannesburg.generic.long=Ora Sudafrica -Africa/Juba.generic.long=Ora dell'Africa orientale -Africa/Kampala.generic.long=Ora dell'Africa orientale -Africa/Khartoum.generic.long=Ora dell'Africa orientale -Africa/Kigali.generic.long=Ora dell'Africa centrale -Africa/Kinshasa.generic.long=Ora dell'Africa occidentale -Africa/Lagos.generic.long=Ora dell'Africa occidentale -Africa/Libreville.generic.long=Ora dell'Africa occidentale -Africa/Lome.generic.long=Ora media di Greenwich -Africa/Luanda.generic.long=Ora dell'Africa occidentale -Africa/Lubumbashi.generic.long=Ora dell'Africa centrale -Africa/Lusaka.generic.long=Ora dell'Africa centrale -Africa/Malabo.generic.long=Ora dell'Africa occidentale -Africa/Maputo.generic.long=Ora dell'Africa centrale -Africa/Maseru.generic.long=Ora Sudafrica -Africa/Mbabane.generic.long=Ora Sudafrica -Africa/Mogadishu.generic.long=Ora dell'Africa orientale -Africa/Monrovia.generic.long=Ora media di Greenwich -Africa/Nairobi.generic.long=Ora dell'Africa orientale -Africa/Ndjamena.generic.long=Ora dell'Africa occidentale -Africa/Niamey.generic.long=Ora dell'Africa occidentale -Africa/Nouakchott.generic.long=Ora media di Greenwich -Africa/Ouagadougou.generic.long=Ora media di Greenwich -Africa/Porto-Novo.generic.long=Ora dell'Africa occidentale -Africa/Sao_Tome.generic.long=Ora media di Greenwich -Africa/Timbuktu.generic.long=Ora media di Greenwich -Africa/Tripoli.generic.long=Ora dell'Europa orientale -Africa/Tunis.generic.long=Ora dell'Europa centrale -Africa/Windhoek.generic.long=Ora dell'Africa occidentale -America/Adak.generic.long=Ora Hawaii-Aleutine -America/Anchorage.generic.long=Ora Alaska -America/Anguilla.generic.long=Fuso dell'Atlantico -America/Antigua.generic.long=Fuso dell'Atlantico -America/Araguaina.generic.long=Ora di Brasilia -America/Argentina/Buenos_Aires.generic.long=Ora dell'Argentina -America/Argentina/Catamarca.generic.long=Ora dell'Argentina -America/Argentina/ComodRivadavia.generic.long=Ora dell'Argentina -America/Argentina/Cordoba.generic.long=Ora dell'Argentina -America/Argentina/Jujuy.generic.long=Ora dell'Argentina -America/Argentina/La_Rioja.generic.long=Ora dell'Argentina -America/Argentina/Mendoza.generic.long=Ora dell'Argentina -America/Argentina/Rio_Gallegos.generic.long=Ora dell'Argentina -America/Argentina/Salta.generic.long=Ora dell'Argentina -America/Argentina/San_Juan.generic.long=Ora dell'Argentina -America/Argentina/San_Luis.generic.long=Ora dell'Argentina -America/Argentina/Tucuman.generic.long=Ora dell'Argentina -America/Argentina/Ushuaia.generic.long=Ora dell'Argentina -America/Aruba.generic.long=Fuso dell'Atlantico -America/Asuncion.generic.long=Ora del Paraguay -America/Atikokan.generic.long=Fuso orientale -America/Atka.generic.long=Ora Hawaii-Aleutine -America/Bahia.generic.long=Ora di Brasilia -America/Bahia_Banderas.generic.long=Ora fuso centrale -America/Barbados.generic.long=Fuso dell'Atlantico -America/Belem.generic.long=Ora di Brasilia -America/Belize.generic.long=Ora fuso centrale -America/Blanc-Sablon.generic.long=Fuso dell'Atlantico -America/Boa_Vista.generic.long=Ora dell'Amazzonia -America/Bogota.generic.long=Ora della Colombia -America/Boise.generic.long=Ora fuso occidentale -America/Buenos_Aires.generic.long=Ora dell'Argentina -America/Cambridge_Bay.generic.long=Ora fuso occidentale -America/Campo_Grande.generic.long=Ora dell'Amazzonia -America/Cancun.generic.long=Ora fuso centrale -America/Caracas.generic.long=Ora del Venezuela -America/Catamarca.generic.long=Ora dell'Argentina -America/Cayenne.generic.long=Ora della Guyana Francese -America/Cayman.generic.long=Fuso orientale -America/Chicago.generic.long=Ora fuso centrale -America/Chihuahua.generic.long=Ora fuso occidentale -America/Coral_Harbour.generic.long=Fuso orientale -America/Cordoba.generic.long=Ora dell'Argentina -America/Costa_Rica.generic.long=Ora fuso centrale -America/Creston.generic.long=Ora fuso occidentale -America/Cuiaba.generic.long=Ora dell'Amazzonia -America/Curacao.generic.long=Fuso dell'Atlantico -America/Danmarkshavn.generic.long=Ora media di Greenwich -America/Dawson.generic.long=Fuso del Pacifico -America/Dawson_Creek.generic.long=Ora fuso occidentale -America/Denver.generic.long=Ora fuso occidentale -America/Detroit.generic.long=Fuso orientale -America/Dominica.generic.long=Fuso dell'Atlantico -America/Edmonton.generic.long=Ora fuso occidentale -America/Eirunepe.generic.long=Ora di Acre -America/El_Salvador.generic.long=Ora fuso centrale -America/Ensenada.generic.long=Fuso del Pacifico -America/Fort_Wayne.generic.long=Fuso orientale -America/Fortaleza.generic.long=Ora di Brasilia -America/Glace_Bay.generic.long=Fuso dell'Atlantico -America/Godthab.generic.long=Ora della Groenlandia occidentale -America/Goose_Bay.generic.long=Fuso dell'Atlantico -America/Grand_Turk.generic.long=Fuso orientale -America/Grenada.generic.long=Fuso dell'Atlantico -America/Guadeloupe.generic.long=Fuso dell'Atlantico -America/Guatemala.generic.long=Ora fuso centrale -America/Guayaquil.generic.long=Ora dell'Ecuador -America/Guyana.generic.long=Ora della Guyana -America/Halifax.generic.long=Fuso dell'Atlantico -America/Havana.generic.long=Ora di Cuba -America/Hermosillo.generic.long=Ora fuso occidentale -America/Indiana/Indianapolis.generic.long=Fuso orientale -America/Indiana/Knox.generic.long=Ora fuso centrale -America/Indiana/Marengo.generic.long=Fuso orientale -America/Indiana/Petersburg.generic.long=Fuso orientale -America/Indiana/Tell_City.generic.long=Ora fuso centrale -America/Indiana/Vevay.generic.long=Fuso orientale -America/Indiana/Vincennes.generic.long=Fuso orientale -America/Indiana/Winamac.generic.long=Fuso orientale -America/Indianapolis.generic.long=Fuso orientale -America/Inuvik.generic.long=Ora fuso occidentale -America/Iqaluit.generic.long=Fuso orientale -America/Jamaica.generic.long=Fuso orientale -America/Jujuy.generic.long=Ora dell'Argentina -America/Juneau.generic.long=Ora Alaska -America/Kentucky/Louisville.generic.long=Fuso orientale -America/Kentucky/Monticello.generic.long=Fuso orientale -America/Knox_IN.generic.long=Ora fuso centrale -America/Kralendijk.generic.long=Fuso dell'Atlantico -America/La_Paz.generic.long=Ora della Bolivia -America/Lima.generic.long=Ora del Per\u00F9 -America/Los_Angeles.generic.long=Fuso del Pacifico -America/Louisville.generic.long=Fuso orientale -America/Lower_Princes.generic.long=Fuso dell'Atlantico -America/Maceio.generic.long=Ora di Brasilia -America/Managua.generic.long=Ora fuso centrale -America/Manaus.generic.long=Ora dell'Amazzonia -America/Marigot.generic.long=Fuso dell'Atlantico -America/Martinique.generic.long=Fuso dell'Atlantico -America/Matamoros.generic.long=Ora fuso centrale -America/Mazatlan.generic.long=Ora fuso occidentale -America/Mendoza.generic.long=Ora dell'Argentina -America/Menominee.generic.long=Ora fuso centrale -America/Merida.generic.long=Ora fuso centrale -America/Metlakatla.daylight.long=Ora legale di Metlakatla -America/Metlakatla.generic.long=Ora di Metlakatla -America/Metlakatla.standard.long=Ora standard di Metlakatla -America/Mexico_City.generic.long=Ora fuso centrale -America/Miquelon.generic.long=Ora Saint-Pierre e Miquelon -America/Moncton.generic.long=Fuso dell'Atlantico -America/Monterrey.generic.long=Ora fuso centrale -America/Montevideo.generic.long=Ora dell'Uruguay -America/Montreal.generic.long=Fuso orientale -America/Montserrat.generic.long=Fuso dell'Atlantico -America/Nassau.generic.long=Fuso orientale -America/New_York.generic.long=Fuso orientale -America/Nipigon.generic.long=Fuso orientale -America/Nome.generic.long=Ora Alaska -America/Noronha.generic.long=Ora di Fernando de Noronha -America/North_Dakota/Beulah.generic.long=Ora fuso centrale -America/North_Dakota/Center.generic.long=Ora fuso centrale -America/North_Dakota/New_Salem.generic.long=Ora fuso centrale -America/Ojinaga.generic.long=Ora fuso occidentale -America/Panama.generic.long=Fuso orientale -America/Pangnirtung.generic.long=Fuso orientale -America/Paramaribo.generic.long=Ora di Suriname -America/Phoenix.generic.long=Ora fuso occidentale -America/Port-au-Prince.generic.long=Fuso orientale -America/Port_of_Spain.generic.long=Fuso dell'Atlantico -America/Porto_Acre.generic.long=Ora di Acre -America/Porto_Velho.generic.long=Ora dell'Amazzonia -America/Puerto_Rico.generic.long=Fuso dell'Atlantico -America/Rainy_River.generic.long=Ora fuso centrale -America/Rankin_Inlet.generic.long=Ora fuso centrale -America/Recife.generic.long=Ora di Brasilia -America/Regina.generic.long=Ora fuso centrale -America/Resolute.generic.long=Ora fuso centrale -America/Rio_Branco.generic.long=Ora di Acre -America/Rosario.generic.long=Ora dell'Argentina -America/Santa_Isabel.generic.long=Fuso del Pacifico -America/Santarem.generic.long=Ora di Brasilia -America/Santiago.generic.long=Ora del Cile -America/Santo_Domingo.generic.long=Fuso dell'Atlantico -America/Sao_Paulo.generic.long=Ora di Brasilia -America/Scoresbysund.generic.long=Ora della Groenlandia orientale -America/Shiprock.generic.long=Ora fuso occidentale -America/Sitka.generic.long=Ora Alaska -America/St_Barthelemy.generic.long=Fuso dell'Atlantico -America/St_Johns.generic.long=Ora Terranova -America/St_Kitts.generic.long=Fuso dell'Atlantico -America/St_Lucia.generic.long=Fuso dell'Atlantico -America/St_Thomas.generic.long=Fuso dell'Atlantico -America/St_Vincent.generic.long=Fuso dell'Atlantico -America/Swift_Current.generic.long=Ora fuso centrale -America/Tegucigalpa.generic.long=Ora fuso centrale -America/Thule.generic.long=Fuso dell'Atlantico -America/Thunder_Bay.generic.long=Fuso orientale -America/Tijuana.generic.long=Fuso del Pacifico -America/Toronto.generic.long=Fuso orientale -America/Tortola.generic.long=Fuso dell'Atlantico -America/Vancouver.generic.long=Fuso del Pacifico -America/Virgin.generic.long=Fuso dell'Atlantico -America/Whitehorse.generic.long=Fuso del Pacifico -America/Winnipeg.generic.long=Ora fuso centrale -America/Yakutat.generic.long=Ora Alaska -America/Yellowknife.generic.long=Ora fuso occidentale -Antarctica/Casey.daylight.long=Ora estiva dell'Australia occidentale -Antarctica/Casey.generic.long=Ora Australia occidentale -Antarctica/Casey.standard.long=Ora standard dell'Australia occidentale -Antarctica/Davis.generic.long=Ora di Davis -Antarctica/DumontDUrville.generic.long=Ora di Dumont-d'Urville -Antarctica/Macquarie.daylight.long=Ora estiva dell'Isola Macquarie -Antarctica/Macquarie.generic.long=Ora dell'Isola Macquarie -Antarctica/Macquarie.standard.long=Ora dell'Isola Macquarie -Antarctica/Mawson.generic.long=Ora di Mawson -Antarctica/McMurdo.generic.long=Ora Nuova Zelanda -Antarctica/Palmer.generic.long=Ora del Cile -Antarctica/Rothera.generic.long=Ora di Rothera -Antarctica/South_Pole.generic.long=Ora Nuova Zelanda -Antarctica/Syowa.generic.long=Ora di Syowa -Antarctica/Vostok.generic.long=Ora di Vostok -Arctic/Longyearbyen.generic.long=Ora dell'Europa centrale -Asia/Aden.generic.long=Ora Arabia Saudita -Asia/Almaty.generic.long=Ora di Alma-Ata -Asia/Amman.generic.long=Ora Arabia Saudita -Asia/Anadyr.generic.long=Ora di Anadyr -Asia/Aqtau.generic.long=Ora di Aqtau -Asia/Aqtobe.generic.long=Ora di Aqtobe -Asia/Ashgabat.generic.long=Ora del Turkmenistan -Asia/Ashkhabad.generic.long=Ora del Turkmenistan -Asia/Baghdad.generic.long=Ora Arabia Saudita -Asia/Bahrain.generic.long=Ora Arabia Saudita -Asia/Baku.generic.long=Ora dell'Azerbaigian -Asia/Bangkok.generic.long=Ora dell'Indocina -Asia/Beirut.generic.long=Ora dell'Europa orientale -Asia/Bishkek.generic.long=Ora del Kirghizistan -Asia/Brunei.generic.long=Ora del Brunei -Asia/Calcutta.generic.long=Ora India -Asia/Choibalsan.generic.long=Ora di Choibalsan -Asia/Chongqing.generic.long=Ora Cina -Asia/Chungking.generic.long=Ora Cina -Asia/Colombo.generic.long=Ora India -Asia/Dacca.generic.long=Ora del Bangladesh -Asia/Damascus.generic.long=Ora dell'Europa orientale -Asia/Dhaka.generic.long=Ora del Bangladesh -Asia/Dili.generic.long=Ora di Timor Est -Asia/Dubai.generic.long=Ora del golfo -Asia/Dushanbe.generic.long=Ora del Tagikistan -Asia/Gaza.generic.long=Ora dell'Europa orientale -Asia/Harbin.generic.long=Ora Cina -Asia/Hebron.generic.long=Ora dell'Europa orientale -Asia/Ho_Chi_Minh.generic.long=Ora dell'Indocina -Asia/Hong_Kong.generic.long=Ora di Hong Kong -Asia/Hovd.generic.long=Ora di Hovd -Asia/Irkutsk.generic.long=Ora di Irkutsk -Asia/Istanbul.generic.long=Ora dell'Europa orientale -Asia/Jakarta.generic.long=Ora dell'Indonesia occidentale -Asia/Jayapura.generic.long=Ora dell'Indonesia orientale -Asia/Jerusalem.generic.long=Ora Israele -Asia/Kabul.generic.long=Ora dell'Afghanistan -Asia/Kamchatka.generic.long=Ora di Petropavlovsk-Kamchatski -Asia/Karachi.generic.long=Ora del Pakistan -Asia/Kashgar.generic.long=Ora Cina -Asia/Kathmandu.generic.long=Ora del Nepal -Asia/Katmandu.generic.long=Ora del Nepal -Asia/Khandyga.daylight.long=Ora estiva di Khandyga -Asia/Khandyga.generic.long=Ora di Khandyga -Asia/Khandyga.standard.long=Ora di Khandyga -Asia/Kolkata.generic.long=Ora India -Asia/Krasnoyarsk.generic.long=Ora di Krasnojarsk -Asia/Kuala_Lumpur.generic.long=Ora della Malaysia -Asia/Kuching.generic.long=Ora della Malaysia -Asia/Kuwait.generic.long=Ora Arabia Saudita -Asia/Macao.generic.long=Ora Cina -Asia/Macau.generic.long=Ora Cina -Asia/Magadan.generic.long=Ora di Magadan -Asia/Makassar.generic.long=Ora dell'Indonesia centrale -Asia/Manila.generic.long=Ora delle Filippine -Asia/Muscat.generic.long=Ora del golfo -Asia/Nicosia.generic.long=Ora dell'Europa orientale -Asia/Novokuznetsk.generic.long=Ora di Novosibirsk -Asia/Novosibirsk.generic.long=Ora di Novosibirsk -Asia/Omsk.generic.long=Ora di Omsk -Asia/Oral.generic.long=Ora di Oral -Asia/Phnom_Penh.generic.long=Ora dell'Indocina -Asia/Pontianak.generic.long=Ora dell'Indonesia occidentale -Asia/Pyongyang.generic.long=Ora Corea -Asia/Qatar.generic.long=Ora Arabia Saudita -Asia/Qyzylorda.generic.long=Ora di Qyzylorda -Asia/Rangoon.generic.long=Ora della Birmania/Myanmar -Asia/Saigon.generic.long=Ora dell'Indocina -Asia/Sakhalin.generic.long=Ora di Sakhalin -Asia/Samarkand.generic.long=Ora dell'Uzbekistan -Asia/Seoul.generic.long=Ora Corea -Asia/Shanghai.generic.long=Ora Cina -Asia/Singapore.generic.long=Ora di Singapore -Asia/Taipei.generic.long=Ora Cina -Asia/Tashkent.generic.long=Ora dell'Uzbekistan -Asia/Tbilisi.generic.long=Ora della Georgia -Asia/Tehran.generic.long=Ora Iran -Asia/Tel_Aviv.generic.long=Ora Israele -Asia/Thimbu.generic.long=Ora del Bhutan -Asia/Thimphu.generic.long=Ora del Bhutan -Asia/Tokyo.generic.long=Ora Giappone -Asia/Ujung_Pandang.generic.long=Ora dell'Indonesia centrale -Asia/Ulaanbaatar.generic.long=Ora di Ulaanbaatar -Asia/Ulan_Bator.generic.long=Ora di Ulaanbaatar -Asia/Urumqi.generic.long=Ora Cina -Asia/Ust-Nera.daylight.long=Ora estiva di Ust-Nera -Asia/Ust-Nera.generic.long=Ora di Ust-Nera -Asia/Ust-Nera.standard.long=Ora di Ust-Nera -Asia/Vientiane.generic.long=Ora dell'Indocina -Asia/Vladivostok.generic.long=Ora di Vladivostok -Asia/Yakutsk.generic.long=Ora di Yakutsk -Asia/Yekaterinburg.generic.long=Ora di Ekaterinburg -Asia/Yerevan.generic.long=Ora dell'Armenia -Atlantic/Azores.generic.long=Ora delle Azzorre -Atlantic/Bermuda.generic.long=Fuso dell'Atlantico -Atlantic/Canary.generic.long=Ora dell'Europa occidentale -Atlantic/Cape_Verde.generic.long=Ora di Capo Verde -Atlantic/Faeroe.generic.long=Ora dell'Europa occidentale -Atlantic/Faroe.generic.long=Ora dell'Europa occidentale -Atlantic/Jan_Mayen.generic.long=Ora dell'Europa centrale -Atlantic/Madeira.generic.long=Ora dell'Europa occidentale -Atlantic/Reykjavik.generic.long=Ora media di Greenwich -Atlantic/South_Georgia.generic.long=Ora Georgia del Sud -Atlantic/St_Helena.generic.long=Ora media di Greenwich -Atlantic/Stanley.generic.long=Ora delle Falkland -Australia/ACT.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/ACT.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/ACT.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/Adelaide.daylight.long=Ora estiva centrale (Australia del Sud) -Australia/Adelaide.generic.long=Ora fuso centrale (Australia del Sud) -Australia/Adelaide.standard.long=Ora standard centrale (Australia del Sud) -Australia/Brisbane.daylight.long=Ora estiva orientale (Queensland) -Australia/Brisbane.generic.long=Ora fuso orientale (Queensland) -Australia/Brisbane.standard.long=Ora standard orientale (Queensland) -Australia/Broken_Hill.daylight.long=Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Broken_Hill.generic.long=Ora fuso centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Broken_Hill.standard.long=Ora standard centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Canberra.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/Canberra.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/Canberra.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/Currie.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/Currie.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/Currie.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/Darwin.daylight.long=Ora estiva centrale (Territori del Nord) -Australia/Darwin.generic.long=Ora fuso centrale (Territori del Nord) -Australia/Darwin.standard.long=Ora standard centrale (Territori del Nord) -Australia/Eucla.daylight.long=Ora estiva Australia centro-occidentale -Australia/Eucla.generic.long=Ora Australia centro-occidentale -Australia/Eucla.standard.long=Ora standard Australia centro-occidentale -Australia/Hobart.daylight.long=Ora estiva orientale (Tasmania) -Australia/Hobart.generic.long=Ora fuso orientale (Tasmania) -Australia/Hobart.standard.long=Ora standard orientale (Tasmania) -Australia/LHI.generic.long=Ora di Lord Howe -Australia/Lindeman.daylight.long=Ora estiva orientale (Queensland) -Australia/Lindeman.generic.long=Ora fuso orientale (Queensland) -Australia/Lindeman.standard.long=Ora standard orientale (Queensland) -Australia/Lord_Howe.generic.long=Ora di Lord Howe -Australia/Melbourne.daylight.long=Ora estiva orientale (Victoria) -Australia/Melbourne.generic.long=Ora fuso orientale (Victoria) -Australia/Melbourne.standard.long=Ora standard orientale (Victoria) -Australia/NSW.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/NSW.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/NSW.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/North.daylight.long=Ora estiva centrale (Territori del Nord) -Australia/North.generic.long=Ora fuso centrale (Territori del Nord) -Australia/North.standard.long=Ora standard centrale (Territori del Nord) -Australia/Perth.daylight.long=Ora estiva dell'Australia occidentale -Australia/Perth.generic.long=Ora Australia occidentale -Australia/Perth.standard.long=Ora standard dell'Australia occidentale -Australia/Queensland.daylight.long=Ora estiva orientale (Queensland) -Australia/Queensland.generic.long=Ora fuso orientale (Queensland) -Australia/Queensland.standard.long=Ora standard orientale (Queensland) -Australia/South.daylight.long=Ora estiva centrale (Australia del Sud) -Australia/South.generic.long=Ora fuso centrale (Australia del Sud) -Australia/South.standard.long=Ora standard centrale (Australia del Sud) -Australia/Sydney.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/Sydney.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/Sydney.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/Tasmania.daylight.long=Ora estiva orientale (Tasmania) -Australia/Tasmania.generic.long=Ora fuso orientale (Tasmania) -Australia/Tasmania.standard.long=Ora standard orientale (Tasmania) -Australia/Victoria.daylight.long=Ora estiva orientale (Victoria) -Australia/Victoria.generic.long=Ora fuso orientale (Victoria) -Australia/Victoria.standard.long=Ora standard orientale (Victoria) -Australia/West.daylight.long=Ora estiva dell'Australia occidentale -Australia/West.generic.long=Ora Australia occidentale -Australia/West.standard.long=Ora standard dell'Australia occidentale -Australia/Yancowinna.daylight.long=Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Yancowinna.generic.long=Ora fuso centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Yancowinna.standard.long=Ora standard centrale (Australia del Sud/Nuovo Galles del Sud) -BET.generic.long=Ora di Brasilia -BST.generic.long=Ora del Bangladesh -Brazil/Acre.generic.long=Ora di Acre -Brazil/DeNoronha.generic.long=Ora di Fernando de Noronha -Brazil/East.generic.long=Ora di Brasilia -Brazil/West.generic.long=Ora dell'Amazzonia -CAT.generic.long=Ora dell'Africa centrale -CET.generic.long=Ora dell'Europa centrale -CNT.generic.long=Ora Terranova -CST.generic.long=Ora fuso centrale -CST6CDT.generic.long=Ora fuso centrale -CTT.generic.long=Ora Cina -Canada/Atlantic.generic.long=Fuso dell'Atlantico -Canada/Central.generic.long=Ora fuso centrale -Canada/East-Saskatchewan.generic.long=Ora fuso centrale -Canada/Eastern.generic.long=Fuso orientale -Canada/Mountain.generic.long=Ora fuso occidentale -Canada/Newfoundland.generic.long=Ora Terranova -Canada/Pacific.generic.long=Fuso del Pacifico -Canada/Saskatchewan.generic.long=Ora fuso centrale -Canada/Yukon.generic.long=Fuso del Pacifico -Chile/Continental.generic.long=Ora del Cile -Chile/EasterIsland.generic.long=Ora dell'Isola di Pasqua -Cuba.generic.long=Ora di Cuba -EAT.generic.long=Ora dell'Africa orientale -ECT.generic.long=Ora dell'Europa centrale -EET.generic.long=Ora dell'Europa orientale -EST.generic.long=Fuso orientale -EST5EDT.generic.long=Fuso orientale -Egypt.generic.long=Ora dell'Europa orientale -Eire.generic.long=Ora irlandese -Etc/Greenwich.generic.long=Ora media di Greenwich -Etc/UCT.generic.long=Tempo universale coordinato -Etc/UTC.generic.long=Tempo universale coordinato -Etc/Universal.generic.long=Tempo universale coordinato -Etc/Zulu.generic.long=Tempo universale coordinato -Europe/Amsterdam.generic.long=Ora dell'Europa centrale -Europe/Andorra.generic.long=Ora dell'Europa centrale -Europe/Athens.generic.long=Ora dell'Europa orientale -Europe/Belfast.generic.long=Ora britannica -Europe/Belgrade.generic.long=Ora dell'Europa centrale -Europe/Berlin.generic.long=Ora dell'Europa centrale -Europe/Bratislava.generic.long=Ora dell'Europa centrale -Europe/Brussels.generic.long=Ora dell'Europa centrale -Europe/Bucharest.generic.long=Ora dell'Europa orientale -Europe/Budapest.generic.long=Ora dell'Europa centrale -Europe/Busingen.generic.long=Ora dell'Europa centrale -Europe/Chisinau.generic.long=Ora dell'Europa orientale -Europe/Copenhagen.generic.long=Ora dell'Europa centrale -Europe/Dublin.generic.long=Ora irlandese -Europe/Gibraltar.generic.long=Ora dell'Europa centrale -Europe/Guernsey.generic.long=Ora britannica -Europe/Helsinki.generic.long=Ora dell'Europa orientale -Europe/Isle_of_Man.generic.long=Ora britannica -Europe/Istanbul.generic.long=Ora dell'Europa orientale -Europe/Jersey.generic.long=Ora britannica -Europe/Kaliningrad.daylight.long=Ora estiva dei paesi europei pi\u00F9 orientali -Europe/Kaliningrad.generic.long=Ora dei paesi europei pi\u00F9 orientali -Europe/Kaliningrad.standard.long=Ora dei paesi europei pi\u00F9 orientali -Europe/Kiev.generic.long=Ora dell'Europa orientale -Europe/Lisbon.generic.long=Ora dell'Europa occidentale -Europe/Ljubljana.generic.long=Ora dell'Europa centrale -Europe/London.generic.long=Ora britannica -Europe/Luxembourg.generic.long=Ora dell'Europa centrale -Europe/Madrid.generic.long=Ora dell'Europa centrale -Europe/Malta.generic.long=Ora dell'Europa centrale -Europe/Mariehamn.generic.long=Ora dell'Europa orientale -Europe/Minsk.daylight.long=Ora estiva dei paesi europei pi\u00F9 orientali -Europe/Minsk.generic.long=Ora dei paesi europei pi\u00F9 orientali -Europe/Minsk.standard.long=Ora dei paesi europei pi\u00F9 orientali -Europe/Monaco.generic.long=Ora dell'Europa centrale -Europe/Moscow.generic.long=Ora Mosca -Europe/Nicosia.generic.long=Ora dell'Europa orientale -Europe/Oslo.generic.long=Ora dell'Europa centrale -Europe/Paris.generic.long=Ora dell'Europa centrale -Europe/Podgorica.generic.long=Ora dell'Europa centrale -Europe/Prague.generic.long=Ora dell'Europa centrale -Europe/Riga.generic.long=Ora dell'Europa orientale -Europe/Rome.generic.long=Ora dell'Europa centrale -Europe/Samara.generic.long=Ora di Samara -Europe/San_Marino.generic.long=Ora dell'Europa centrale -Europe/Sarajevo.generic.long=Ora dell'Europa centrale -Europe/Simferopol.generic.long=Ora dell'Europa orientale -Europe/Skopje.generic.long=Ora dell'Europa centrale -Europe/Sofia.generic.long=Ora dell'Europa orientale -Europe/Stockholm.generic.long=Ora dell'Europa centrale -Europe/Tallinn.generic.long=Ora dell'Europa orientale -Europe/Tirane.generic.long=Ora dell'Europa centrale -Europe/Tiraspol.generic.long=Ora dell'Europa orientale -Europe/Uzhgorod.generic.long=Ora dell'Europa orientale -Europe/Vaduz.generic.long=Ora dell'Europa centrale -Europe/Vatican.generic.long=Ora dell'Europa centrale -Europe/Vienna.generic.long=Ora dell'Europa centrale -Europe/Vilnius.generic.long=Ora dell'Europa orientale -Europe/Volgograd.generic.long=Ora di Volgograd -Europe/Warsaw.generic.long=Ora dell'Europa centrale -Europe/Zagreb.generic.long=Ora dell'Europa centrale -Europe/Zaporozhye.generic.long=Ora dell'Europa orientale -Europe/Zurich.generic.long=Ora dell'Europa centrale -GB-Eire.generic.long=Ora britannica -GB.generic.long=Ora britannica -GMT.generic.long=Ora media di Greenwich -Greenwich.generic.long=Ora media di Greenwich -HST.generic.long=Ora Hawaii -Hongkong.generic.long=Ora di Hong Kong -IET.generic.long=Fuso orientale -IST.generic.long=Ora India -Iceland.generic.long=Ora media di Greenwich -Indian/Antananarivo.generic.long=Ora dell'Africa orientale -Indian/Chagos.generic.long=Ora del Territorio Britannico dell'Oceano Indiano -Indian/Christmas.generic.long=Ora dell'Isola Christmas -Indian/Cocos.generic.long=Ora delle Isole Cocos -Indian/Comoro.generic.long=Ora dell'Africa orientale -Indian/Kerguelen.generic.long=Ora delle Terre Australi e Antartiche Francesi -Indian/Mahe.generic.long=Ora delle Seychelles -Indian/Maldives.generic.long=Ora delle Maldive -Indian/Mauritius.generic.long=Ora di Mauritius -Indian/Mayotte.generic.long=Ora dell'Africa orientale -Indian/Reunion.generic.long=Ora di Reunion -Iran.generic.long=Ora Iran -Israel.generic.long=Ora Israele -JST.generic.long=Ora Giappone -Jamaica.generic.long=Fuso orientale -Japan.generic.long=Ora Giappone -Kwajalein.generic.long=Ora delle Isole Marshall -Libya.generic.long=Ora dell'Europa orientale -MET.generic.long=MET -MIT.generic.long=Ora di Samoa occidentale -MST.generic.long=Ora fuso occidentale -MST7MDT.generic.long=Ora fuso occidentale -Mexico/BajaNorte.generic.long=Fuso del Pacifico -Mexico/BajaSur.generic.long=Ora fuso occidentale -Mexico/General.generic.long=Ora fuso centrale -NET.generic.long=Ora dell'Armenia -NST.generic.long=Ora Nuova Zelanda -NZ-CHAT.generic.long=Ora Chatham -NZ.generic.long=Ora Nuova Zelanda -Navajo.generic.long=Ora fuso occidentale -PLT.generic.long=Ora del Pakistan -PNT.generic.long=Ora fuso occidentale -PRC.generic.long=Ora Cina -PRT.generic.long=Fuso dell'Atlantico -PST.generic.long=Fuso del Pacifico -PST8PDT.generic.long=Fuso del Pacifico -Pacific/Apia.generic.long=Ora di Samoa occidentale -Pacific/Auckland.generic.long=Ora Nuova Zelanda -Pacific/Chatham.generic.long=Ora Chatham -Pacific/Chuuk.daylight.long=Ora estiva di Chuuk -Pacific/Chuuk.generic.long=Ora di Chuuk -Pacific/Chuuk.standard.long=Ora di Chuuk -Pacific/Easter.generic.long=Ora dell'Isola di Pasqua -Pacific/Efate.generic.long=Ora di Vanuatu -Pacific/Enderbury.generic.long=Ora delle Isole Phoenix -Pacific/Fakaofo.generic.long=Ora di Tokelau -Pacific/Fiji.generic.long=Ora di Figi -Pacific/Funafuti.generic.long=Ora di Tuvalu -Pacific/Galapagos.generic.long=Ora delle Galapagos -Pacific/Gambier.generic.long=Ora di Gambier -Pacific/Guadalcanal.generic.long=Ora delle Isole Salomone -Pacific/Guam.generic.long=Ora Chamorro -Pacific/Honolulu.generic.long=Ora Hawaii -Pacific/Johnston.generic.long=Ora Hawaii -Pacific/Kiritimati.generic.long=Ora delle Line Islands -Pacific/Kosrae.generic.long=Ora di Kosrae -Pacific/Kwajalein.generic.long=Ora delle Isole Marshall -Pacific/Majuro.generic.long=Ora delle Isole Marshall -Pacific/Marquesas.generic.long=Ora delle Isole Marchesi -Pacific/Midway.generic.long=Ora Samoa -Pacific/Nauru.generic.long=Ora di Nauru -Pacific/Niue.generic.long=Ora di Niue -Pacific/Norfolk.generic.long=Ora di Norfolk -Pacific/Noumea.generic.long=Ora della Nuova Caledonia -Pacific/Pago_Pago.generic.long=Ora Samoa -Pacific/Palau.generic.long=Ora di Palau -Pacific/Pitcairn.generic.long=Ora Pitcairn -Pacific/Pohnpei.daylight.long=Ora estiva di Pohnpei -Pacific/Pohnpei.generic.long=Ora Ponape -Pacific/Pohnpei.standard.long=Ora di Pohnpei -Pacific/Ponape.daylight.long=Ora estiva di Pohnpei -Pacific/Ponape.generic.long=Ora Ponape -Pacific/Ponape.standard.long=Ora di Pohnpei -Pacific/Port_Moresby.generic.long=Ora di Papua Nuova Guinea -Pacific/Rarotonga.generic.long=Ora delle Isole Cook -Pacific/Saipan.generic.long=Ora Chamorro -Pacific/Samoa.generic.long=Ora Samoa -Pacific/Tahiti.generic.long=Ora di Tahiti -Pacific/Tarawa.generic.long=Ora delle Isole Gilbert -Pacific/Tongatapu.generic.long=Ora di Tonga -Pacific/Truk.daylight.long=Ora estiva di Chuuk -Pacific/Truk.generic.long=Ora di Chuuk -Pacific/Truk.standard.long=Ora di Chuuk -Pacific/Wake.generic.long=Ora di Wake -Pacific/Wallis.generic.long=Ora di Wallis e Futuna -Pacific/Yap.daylight.long=Ora estiva di Chuuk -Pacific/Yap.generic.long=Ora di Chuuk -Pacific/Yap.standard.long=Ora di Chuuk -Poland.generic.long=Ora dell'Europa centrale -Portugal.generic.long=Ora dell'Europa occidentale -ROK.generic.long=Ora Corea -SST.generic.long=Ora delle Isole Salomone -Singapore.generic.long=Ora di Singapore -SystemV/AST4.generic.long=Fuso dell'Atlantico -SystemV/AST4ADT.generic.long=Fuso dell'Atlantico -SystemV/CST6.generic.long=Ora fuso centrale -SystemV/CST6CDT.generic.long=Ora fuso centrale -SystemV/EST5.generic.long=Fuso orientale -SystemV/EST5EDT.generic.long=Fuso orientale -SystemV/HST10.generic.long=Ora Hawaii -SystemV/MST7.generic.long=Ora fuso occidentale -SystemV/MST7MDT.generic.long=Ora fuso occidentale -SystemV/PST8.generic.long=Fuso del Pacifico -SystemV/PST8PDT.generic.long=Fuso del Pacifico -SystemV/YST9.generic.long=Ora Alaska -SystemV/YST9YDT.generic.long=Ora Alaska -Turkey.generic.long=Ora dell'Europa orientale -UCT.generic.long=Tempo universale coordinato -US/Alaska.generic.long=Ora Alaska -US/Aleutian.generic.long=Ora Hawaii-Aleutine -US/Arizona.generic.long=Ora fuso occidentale -US/Central.generic.long=Ora fuso centrale -US/East-Indiana.generic.long=Fuso orientale -US/Eastern.generic.long=Fuso orientale -US/Hawaii.generic.long=Ora Hawaii -US/Indiana-Starke.generic.long=Ora fuso centrale -US/Michigan.generic.long=Fuso orientale -US/Mountain.generic.long=Ora fuso occidentale -US/Pacific-New.generic.long=Fuso del Pacifico -US/Pacific.generic.long=Fuso del Pacifico -US/Samoa.generic.long=Ora Samoa -UTC.generic.long=Tempo universale coordinato -Universal.generic.long=Tempo universale coordinato -VST.generic.long=Ora dell'Indocina -W-SU.generic.long=Ora Mosca -WET.generic.long=Ora dell'Europa occidentale -Zulu.generic.long=Tempo universale coordinato diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties deleted file mode 100644 index ac5a86d36ba..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -ACT.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -ACT.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -AET.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -AET.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -AET.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -AGT.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -ART.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -AST.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -Africa/Abidjan.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Accra.generic.long=\u30AC\u30FC\u30CA\u6A19\u6E96\u6642 -Africa/Addis_Ababa.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Algiers.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Asmara.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Asmera.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Bamako.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Bangui.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Banjul.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Bissau.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Blantyre.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Brazzaville.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Bujumbura.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Cairo.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Casablanca.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Ceuta.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Conakry.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Dakar.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Dar_es_Salaam.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Djibouti.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Douala.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/El_Aaiun.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Freetown.generic.long=\u30B7\u30A8\u30E9\u30EC\u30AA\u30CD\u6642\u9593 -Africa/Gaborone.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Harare.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Johannesburg.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Juba.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Kampala.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Khartoum.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Kigali.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Kinshasa.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Lagos.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Libreville.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Lome.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Luanda.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Lubumbashi.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Lusaka.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Malabo.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Maputo.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Maseru.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Mbabane.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Mogadishu.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Monrovia.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Nairobi.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Ndjamena.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Niamey.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Nouakchott.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Ouagadougou.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Porto-Novo.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Sao_Tome.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Timbuktu.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Tripoli.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -Africa/Tunis.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Windhoek.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -America/Adak.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593 -America/Anchorage.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/Anguilla.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Antigua.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Araguaina.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Argentina/Buenos_Aires.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Catamarca.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/ComodRivadavia.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Cordoba.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Jujuy.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/La_Rioja.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Mendoza.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Rio_Gallegos.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Salta.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/San_Juan.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/San_Luis.generic.long=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593 -America/Argentina/Tucuman.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Ushuaia.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Aruba.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Asuncion.generic.long=\u30D1\u30E9\u30B0\u30A2\u30A4\u6642\u9593 -America/Atikokan.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Atka.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593 -America/Bahia.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Bahia_Banderas.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Barbados.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Belem.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Belize.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Boa_Vista.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Bogota.generic.long=\u30B3\u30ED\u30F3\u30D3\u30A2\u6642\u9593 -America/Boise.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Buenos_Aires.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Cambridge_Bay.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Campo_Grande.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Cancun.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Caracas.generic.long=\u30D9\u30CD\u30BA\u30A8\u30E9\u6642\u9593 -America/Catamarca.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Cayenne.generic.long=\u30D5\u30E9\u30F3\u30B9\u9818\u30AE\u30A2\u30CA\u6642\u9593 -America/Cayman.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Chicago.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Chihuahua.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Coral_Harbour.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Cordoba.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Costa_Rica.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Creston.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Cuiaba.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Curacao.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Danmarkshavn.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -America/Dawson.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Dawson_Creek.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Denver.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Detroit.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Dominica.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Edmonton.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Eirunepe.generic.long=\u30a2\u30af\u30ec\u6642\u9593 -America/El_Salvador.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Fort_Wayne.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Fortaleza.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Godthab.generic.long=\u897F\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593 -America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Grand_Turk.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Grenada.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Guatemala.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Guayaquil.generic.long=\u30A8\u30AF\u30A2\u30C9\u30EB\u6642\u9593 -America/Guyana.generic.long=\u30AC\u30A4\u30A2\u30CA\u6642\u9593 -America/Halifax.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Havana.generic.long=\u30AD\u30E5\u30FC\u30D0\u6642\u9593 -America/Hermosillo.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Indiana/Indianapolis.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Knox.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Indiana/Marengo.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Petersburg.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Tell_City.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Indiana/Vevay.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Vincennes.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Winamac.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indianapolis.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Inuvik.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Iqaluit.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Jamaica.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Jujuy.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Juneau.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/Kentucky/Louisville.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Kentucky/Monticello.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Knox_IN.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/La_Paz.generic.long=\u30DC\u30EA\u30D3\u30A2\u6642\u9593 -America/Lima.generic.long=\u30DA\u30EB\u30FC\u6642\u9593 -America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Louisville.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Maceio.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Managua.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Manaus.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Marigot.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Martinique.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Matamoros.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Mazatlan.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Mendoza.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Menominee.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Merida.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Metlakatla.daylight.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u590F\u6642\u9593 -America/Metlakatla.generic.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6642\u9593 -America/Metlakatla.standard.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6A19\u6E96\u6642\u9593 -America/Mexico_City.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Miquelon.generic.long=\u30D4\u30A8\u30FC\u30EB\u30FB\u30DF\u30AF\u30ED\u30F3\u6642\u9593 -America/Moncton.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Monterrey.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Montevideo.generic.long=\u30A6\u30EB\u30B0\u30A2\u30A4\u6642\u9593 -America/Montreal.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Montserrat.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Nassau.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/New_York.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Nipigon.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Nome.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/Noronha.generic.long=\u30D5\u30A7\u30EB\u30CA\u30F3\u30C9\u30FB\u30C7\u30FB\u30CE\u30ED\u30FC\u30CB\u30E3\u6642\u9593 -America/North_Dakota/Beulah.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/North_Dakota/Center.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/North_Dakota/New_Salem.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Ojinaga.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Panama.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Pangnirtung.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Paramaribo.generic.long=\u30B9\u30EA\u30CA\u30E0\u6642\u9593 -America/Phoenix.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Port-au-Prince.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Porto_Acre.generic.long=\u30a2\u30af\u30ec\u6642\u9593 -America/Porto_Velho.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Rainy_River.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Rankin_Inlet.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Recife.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Regina.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Resolute.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Rio_Branco.generic.long=\u30a2\u30af\u30ec\u6642\u9593 -America/Rosario.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Santarem.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Santiago.generic.long=\u30C1\u30EA\u6642\u9593 -America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Sao_Paulo.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Scoresbysund.generic.long=\u6771\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593 -America/Shiprock.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Sitka.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/St_Johns.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593 -America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Swift_Current.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Tegucigalpa.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Thule.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Thunder_Bay.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Toronto.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Tortola.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Virgin.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Winnipeg.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Yakutat.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/Yellowknife.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Antarctica/Casey.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Antarctica/Casey.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Antarctica/Davis.generic.long=\u30C7\u30FC\u30D3\u30B9\u6642\u9593 -Antarctica/DumontDUrville.generic.long=\u30C7\u30E5\u30E2\u30F3\u30FB\u30C7\u30E5\u30EB\u30D3\u30EB\u6642\u9593 -Antarctica/Macquarie.daylight.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593 -Antarctica/Macquarie.generic.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593 -Antarctica/Macquarie.standard.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593 -Antarctica/Mawson.generic.long=\u30E2\u30FC\u30BD\u30F3\u6642\u9593 -Antarctica/McMurdo.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -Antarctica/Palmer.generic.long=\u30C1\u30EA\u6642\u9593 -Antarctica/Rothera.generic.long=\u30ED\u30BC\u30E9\u6642\u9593 -Antarctica/South_Pole.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -Antarctica/Syowa.generic.long=\u662D\u548C\u57FA\u5730\u6642\u9593 -Antarctica/Vostok.generic.long=\u30DC\u30B9\u30C8\u30FC\u30AF\u6642\u9593 -Arctic/Longyearbyen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Aden.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Almaty.generic.long=\u30A2\u30EB\u30DE\u30A2\u30BF\u6642\u9593 -Asia/Amman.generic.long=\u30a2\u30e9\u30d3\u30a2\u6642\u9593 -Asia/Anadyr.generic.long=\u30A2\u30CA\u30C7\u30A3\u30EA\u6642\u9593 -Asia/Aqtau.generic.long=\u30A2\u30AF\u30BF\u30A6\u6642\u9593 -Asia/Aqtobe.generic.long=\u30A2\u30AF\u30C8\u30D9\u6642\u9593 -Asia/Ashgabat.generic.long=\u30C8\u30EB\u30AF\u30E1\u30CB\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Ashkhabad.generic.long=\u30C8\u30EB\u30AF\u30E1\u30CB\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Baghdad.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Bahrain.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Baku.generic.long=\u30A2\u30BC\u30EB\u30D0\u30A4\u30B8\u30E3\u30F3\u6642\u9593 -Asia/Bangkok.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Beirut.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Bishkek.generic.long=\u30AD\u30EB\u30AE\u30B9\u6642\u9593 -Asia/Brunei.generic.long=\u30D6\u30EB\u30CD\u30A4\u6642\u9593 -Asia/Calcutta.generic.long=\u30A4\u30F3\u30C9\u6642\u9593 -Asia/Choibalsan.generic.long=\u30C1\u30E7\u30A4\u30D0\u30EB\u30B5\u30F3\u6642\u9593 -Asia/Chongqing.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Chungking.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Colombo.generic.long=\u30A4\u30F3\u30C9\u6642\u9593 -Asia/Dacca.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593 -Asia/Damascus.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Dhaka.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593 -Asia/Dili.generic.long=\u6771\u30C6\u30A3\u30E2\u30FC\u30EB\u6642\u9593 -Asia/Dubai.generic.long=\u6E7E\u5CB8\u6642\u9593 -Asia/Dushanbe.generic.long=\u30BF\u30B8\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Gaza.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Harbin.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Hebron.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Ho_Chi_Minh.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Hong_Kong.generic.long=\u9999\u6E2F\u6642\u9593 -Asia/Hovd.generic.long=\u30DB\u30D6\u30C9\u6642\u9593 -Asia/Irkutsk.generic.long=\u30A4\u30EB\u30AF\u30FC\u30C4\u30AF\u6642\u9593 -Asia/Istanbul.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Jakarta.generic.long=\u897F\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Jayapura.generic.long=\u6771\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Jerusalem.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593 -Asia/Kabul.generic.long=\u30A2\u30D5\u30AC\u30CB\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Kamchatka.generic.long=\u30DA\u30C8\u30ED\u30D1\u30D6\u30ED\u30D5\u30B9\u30AF\u30FB\u30AB\u30E0\u30C1\u30E3\u30C4\u30AD\u30FC\u6642\u9593 -Asia/Karachi.generic.long=\u30D1\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Kashgar.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Kathmandu.generic.long=\u30CD\u30D1\u30FC\u30EB\u6642\u9593 -Asia/Katmandu.generic.long=\u30CD\u30D1\u30FC\u30EB\u6642\u9593 -Asia/Khandyga.daylight.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593 -Asia/Khandyga.generic.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593 -Asia/Khandyga.standard.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593 -Asia/Kolkata.generic.long=\u30A4\u30F3\u30C9\u6642\u9593 -Asia/Krasnoyarsk.generic.long=\u30AF\u30E9\u30B9\u30CE\u30E4\u30EB\u30B9\u30AF\u6642\u9593 -Asia/Kuala_Lumpur.generic.long=\u30DE\u30EC\u30FC\u30B7\u30A2\u6642\u9593 -Asia/Kuching.generic.long=\u30DE\u30EC\u30FC\u30B7\u30A2\u6642\u9593 -Asia/Kuwait.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Macao.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Macau.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Magadan.generic.long=\u30DE\u30AC\u30C0\u30F3\u6642\u9593 -Asia/Makassar.generic.long=\u4E2D\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Manila.generic.long=\u30D5\u30A3\u30EA\u30D4\u30F3\u6642\u9593 -Asia/Muscat.generic.long=\u6E7E\u5CB8\u6642\u9593 -Asia/Nicosia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Novokuznetsk.generic.long=\u30CE\u30F4\u30A9\u30B7\u30D3\u30EB\u30B9\u30AF\u6642\u9593 -Asia/Novosibirsk.generic.long=\u30CE\u30F4\u30A9\u30B7\u30D3\u30EB\u30B9\u30AF\u6642\u9593 -Asia/Omsk.generic.long=\u30AA\u30E0\u30B9\u30AF\u6642\u9593 -Asia/Oral.generic.long=\u30AA\u30E9\u30EB\u6642\u9593 -Asia/Phnom_Penh.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Pontianak.generic.long=\u897F\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Pyongyang.generic.long=\u97D3\u56FD\u6642\u9593 -Asia/Qatar.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Qyzylorda.generic.long=\u30AF\u30BA\u30ED\u30EB\u30C0\u6642\u9593 -Asia/Rangoon.generic.long=\u30DF\u30E3\u30F3\u30DE\u30FC\u6642\u9593 -Asia/Saigon.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Sakhalin.generic.long=\u30B5\u30CF\u30EA\u30F3\u6642\u9593 -Asia/Samarkand.generic.long=\u30A6\u30BA\u30D9\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Seoul.generic.long=\u97D3\u56FD\u6642\u9593 -Asia/Shanghai.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Singapore.generic.long=\u30B7\u30F3\u30AC\u30DD\u30FC\u30EB\u6642\u9593 -Asia/Taipei.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Tashkent.generic.long=\u30A6\u30BA\u30D9\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Tbilisi.generic.long=\u30B0\u30EB\u30B8\u30A2\u6642\u9593 -Asia/Tehran.generic.long=\u30A4\u30E9\u30F3\u6642\u9593 -Asia/Tel_Aviv.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593 -Asia/Thimbu.generic.long=\u30D6\u30FC\u30BF\u30F3\u6642\u9593 -Asia/Thimphu.generic.long=\u30D6\u30FC\u30BF\u30F3\u6642\u9593 -Asia/Tokyo.generic.long=\u65E5\u672C\u6642\u9593 -Asia/Ujung_Pandang.generic.long=\u4E2D\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Ulaanbaatar.generic.long=\u30A6\u30E9\u30F3\u30D0\u30FC\u30C8\u30EB\u6642\u9593 -Asia/Ulan_Bator.generic.long=\u30A6\u30E9\u30F3\u30D0\u30FC\u30C8\u30EB\u6642\u9593 -Asia/Urumqi.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Ust-Nera.daylight.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u590F\u6642\u9593 -Asia/Ust-Nera.generic.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593 -Asia/Ust-Nera.standard.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593 -Asia/Vientiane.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Vladivostok.generic.long=\u30A6\u30E9\u30B8\u30AA\u30B9\u30C8\u30AF\u6642\u9593 -Asia/Yakutsk.generic.long=\u30E4\u30AF\u30FC\u30C4\u30AF\u6642\u9593 -Asia/Yekaterinburg.generic.long=\u30A8\u30AB\u30C6\u30EA\u30F3\u30D6\u30EB\u30AF\u6642\u9593 -Asia/Yerevan.generic.long=\u30A2\u30EB\u30E1\u30CB\u30A2\u6642\u9593 -Atlantic/Azores.generic.long=\u30A2\u30BE\u30EC\u30B9\u6642\u9593 -Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -Atlantic/Canary.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Cape_Verde.generic.long=\u30AB\u30FC\u30DC\u30D9\u30EB\u30C7\u6642\u9593 -Atlantic/Faeroe.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Faroe.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Jan_Mayen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Madeira.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Reykjavik.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Atlantic/South_Georgia.generic.long=\u5357\u30B8\u30E7\u30FC\u30B8\u30A2\u6642\u9593 -Atlantic/St_Helena.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Atlantic/Stanley.generic.long=\u30D5\u30A9\u30FC\u30AF\u30E9\u30F3\u30C9\u8AF8\u5CF6\u6642\u9593 -Australia/ACT.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/ACT.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/ACT.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Adelaide.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Adelaide.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Adelaide.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Brisbane.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Brisbane.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Brisbane.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Broken_Hill.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Broken_Hill.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Canberra.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Canberra.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Canberra.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Currie.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Currie.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Currie.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Darwin.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/Darwin.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/Darwin.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Hobart.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Hobart.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Hobart.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/LHI.generic.long=\u30ED\u30FC\u30C9\u30CF\u30A6\u6642\u9593 -Australia/Lindeman.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Lindeman.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Lindeman.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Lord_Howe.generic.long=\u30ED\u30FC\u30C9\u30CF\u30A6\u6642\u9593 -Australia/Melbourne.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/Melbourne.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/Melbourne.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/NSW.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/NSW.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/NSW.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/North.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/North.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/North.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/Perth.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Perth.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Perth.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Queensland.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Queensland.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Queensland.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/South.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/South.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/South.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Sydney.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Sydney.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Sydney.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Tasmania.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Tasmania.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Tasmania.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Victoria.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/Victoria.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/Victoria.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/West.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/West.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/West.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Yancowinna.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Yancowinna.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Yancowinna.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -BET.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -BST.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593 -Brazil/Acre.generic.long=\u30a2\u30af\u30ec\u6642\u9593 -Brazil/DeNoronha.generic.long=\u30D5\u30A7\u30EB\u30CA\u30F3\u30C9\u30FB\u30C7\u30FB\u30CE\u30ED\u30FC\u30CB\u30E3\u6642\u9593 -Brazil/East.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -Brazil/West.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -CAT.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -CET.generic.long=\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -CNT.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593 -CST.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -CST6CDT.generic.long=\u4e2d\u90e8\u6a19\u6e96\u6642 -CTT.generic.long=\u4E2D\u56FD\u6642\u9593 -Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -Canada/Central.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -Canada/East-Saskatchewan.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -Canada/Eastern.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -Canada/Mountain.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -Canada/Newfoundland.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593 -Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -Canada/Saskatchewan.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -Chile/Continental.generic.long=\u30C1\u30EA\u6642\u9593 -Chile/EasterIsland.generic.long=\u30A4\u30FC\u30B9\u30BF\u30FC\u5CF6\u6642\u9593 -Cuba.generic.long=\u30AD\u30E5\u30FC\u30D0\u6642\u9593 -EAT.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -ECT.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -EET.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -EST.generic.long=\u6771\u90e8\u6a19\u6e96\u6642 -EST5EDT.generic.long=\u6771\u90e8\u6a19\u6e96\u6642 -Egypt.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Eire.generic.long=\u30A2\u30A4\u30EB\u30E9\u30F3\u30C9\u6642\u9593 -Etc/Greenwich.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Etc/UCT.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Etc/UTC.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Etc/Universal.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Etc/Zulu.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Europe/Amsterdam.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Andorra.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Athens.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Belfast.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Belgrade.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Berlin.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Bratislava.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Brussels.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Bucharest.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Budapest.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Busingen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Chisinau.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Copenhagen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Dublin.generic.long=\u30A2\u30A4\u30EB\u30E9\u30F3\u30C9\u6642\u9593 -Europe/Gibraltar.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Guernsey.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Helsinki.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Isle_of_Man.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Istanbul.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Jersey.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Kaliningrad.daylight.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593 -Europe/Kaliningrad.generic.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Kaliningrad.standard.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Kiev.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Lisbon.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Ljubljana.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/London.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Luxembourg.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Madrid.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Malta.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Mariehamn.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Minsk.daylight.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593 -Europe/Minsk.generic.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Minsk.standard.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Monaco.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Moscow.generic.long=\u30E2\u30B9\u30AF\u30EF\u6642\u9593 -Europe/Nicosia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Oslo.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Paris.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Podgorica.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Prague.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Riga.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Rome.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Samara.generic.long=\u30B5\u30DE\u30E9\u6642\u9593 -Europe/San_Marino.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Sarajevo.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Simferopol.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Skopje.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Sofia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Stockholm.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Tallinn.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Tirane.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Tiraspol.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Uzhgorod.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Vaduz.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Vatican.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Vienna.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Vilnius.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Volgograd.generic.long=\u30DC\u30EB\u30B4\u30B0\u30E9\u30FC\u30C9\u6642\u9593 -Europe/Warsaw.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Zagreb.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Zaporozhye.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Zurich.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -GB-Eire.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -GB.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -GMT.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Greenwich.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -HST.generic.long=\u30cf\u30ef\u30a4\u6642\u9593 -Hongkong.generic.long=\u9999\u6E2F\u6642\u9593 -IET.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -IST.generic.long=\u30A4\u30F3\u30C9\u6642\u9593 -Iceland.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Indian/Antananarivo.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Indian/Chagos.generic.long=\u30A4\u30F3\u30C9\u6D0B\u5730\u57DF\u6642\u9593 -Indian/Christmas.generic.long=\u30AF\u30EA\u30B9\u30DE\u30B9\u5CF6\u6642\u9593 -Indian/Cocos.generic.long=\u30B3\u30B3\u30B9\u8AF8\u5CF6\u6642\u9593 -Indian/Comoro.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Indian/Kerguelen.generic.long=\u30D5\u30E9\u30F3\u30B9\u9818\u5357\u65B9\u304A\u3088\u3073\u5357\u6975\u5927\u9678\u6642\u9593 -Indian/Mahe.generic.long=\u30BB\u30FC\u30B7\u30A7\u30EB\u6642\u9593 -Indian/Maldives.generic.long=\u30E2\u30EB\u30B8\u30D6\u6642\u9593 -Indian/Mauritius.generic.long=\u30E2\u30FC\u30EA\u30B7\u30E3\u30B9\u6642\u9593 -Indian/Mayotte.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Indian/Reunion.generic.long=\u30EC\u30E6\u30CB\u30AA\u30F3\u6642\u9593 -Iran.generic.long=\u30A4\u30E9\u30F3\u6642\u9593 -Israel.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593 -JST.generic.long=\u65E5\u672C\u6642\u9593 -Jamaica.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -Japan.generic.long=\u65E5\u672C\u6642\u9593 -Kwajalein.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593 -Libya.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -MET.generic.long=MET -MIT.generic.long=\u897F\u30B5\u30E2\u30A2\u6642\u9593 -MST.generic.long=\u5c71\u5730\u6a19\u6e96\u6642 -MST7MDT.generic.long=\u5c71\u5730\u6a19\u6e96\u6642 -Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -Mexico/BajaSur.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -Mexico/General.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -NET.generic.long=\u30A2\u30EB\u30E1\u30CB\u30A2\u6642\u9593 -NST.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -NZ-CHAT.generic.long=\u30C1\u30E3\u30BF\u30E0\u6642\u9593 -NZ.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -Navajo.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -PLT.generic.long=\u30D1\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -PNT.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -PRC.generic.long=\u4E2D\u56FD\u6642\u9593 -PRT.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -PST.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -PST8PDT.generic.long=\u592a\u5e73\u6d0b\u6a19\u6e96\u6642 -Pacific/Apia.generic.long=\u897F\u30B5\u30E2\u30A2\u6642\u9593 -Pacific/Auckland.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -Pacific/Chatham.generic.long=\u30C1\u30E3\u30BF\u30E0\u6642\u9593 -Pacific/Chuuk.daylight.long=Chuuk Time -Pacific/Chuuk.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Chuuk.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Easter.generic.long=\u30A4\u30FC\u30B9\u30BF\u30FC\u5CF6\u6642\u9593 -Pacific/Efate.generic.long=\u30D0\u30CC\u30A2\u30C4\u6642\u9593 -Pacific/Enderbury.generic.long=\u30D5\u30A7\u30CB\u30C3\u30AF\u30B9\u8AF8\u5CF6\u6642\u9593 -Pacific/Fakaofo.generic.long=\u30C8\u30B1\u30E9\u30A6\u6642\u9593 -Pacific/Fiji.generic.long=\u30D5\u30A3\u30B8\u30FC\u6642\u9593 -Pacific/Funafuti.generic.long=\u30C4\u30D0\u30EB\u6642\u9593 -Pacific/Galapagos.generic.long=\u30AC\u30E9\u30D1\u30B4\u30B9\u6642\u9593 -Pacific/Gambier.generic.long=\u30AC\u30F3\u30D3\u30A8\u6642\u9593 -Pacific/Guadalcanal.generic.long=\u30BD\u30ED\u30E2\u30F3\u8AF8\u5CF6\u6642\u9593 -Pacific/Guam.generic.long=\u30C1\u30E3\u30E2\u30ED\u6642\u9593 -Pacific/Honolulu.generic.long=\u30CF\u30EF\u30A4\u6642\u9593 -Pacific/Johnston.generic.long=\u30CF\u30EF\u30A4\u6642\u9593 -Pacific/Kiritimati.generic.long=\u30E9\u30A4\u30F3\u8AF8\u5CF6\u6642\u9593 -Pacific/Kosrae.generic.long=\u30B3\u30B9\u30E9\u30A8\u6642\u9593 -Pacific/Kwajalein.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593 -Pacific/Majuro.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593 -Pacific/Marquesas.generic.long=\u30DE\u30EB\u30AD\u30FC\u30BA\u6642\u9593 -Pacific/Midway.generic.long=\u30B5\u30E2\u30A2\u6642\u9593 -Pacific/Nauru.generic.long=\u30CA\u30A6\u30EB\u6642\u9593 -Pacific/Niue.generic.long=\u30CB\u30A6\u30A8\u6642\u9593 -Pacific/Norfolk.generic.long=\u30CE\u30FC\u30D5\u30A9\u30FC\u30AF\u6642\u9593 -Pacific/Noumea.generic.long=\u30CB\u30E5\u30FC\u30AB\u30EC\u30C9\u30CB\u30A2\u6642\u9593 -Pacific/Pago_Pago.generic.long=\u30B5\u30E2\u30A2\u6642\u9593 -Pacific/Palau.generic.long=\u30D1\u30E9\u30AA\u6642\u9593 -Pacific/Pitcairn.generic.long=\u30D4\u30C8\u30B1\u30A2\u30F3\u6642\u9593 -Pacific/Pohnpei.daylight.long=\u30DD\u30F3\u30DA\u30A4\u590F\u6642\u9593 -Pacific/Pohnpei.generic.long=\u30DD\u30CA\u30DA\u6642\u9593 -Pacific/Pohnpei.standard.long=\u30DD\u30F3\u30DA\u30A4\u6642\u9593 -Pacific/Ponape.daylight.long=\u30DD\u30F3\u30DA\u30A4\u590F\u6642\u9593 -Pacific/Ponape.generic.long=\u30DD\u30CA\u30DA\u6642\u9593 -Pacific/Ponape.standard.long=\u30DD\u30F3\u30DA\u30A4\u6642\u9593 -Pacific/Port_Moresby.generic.long=\u30D1\u30D7\u30A2\u30CB\u30E5\u30FC\u30AE\u30CB\u30A2\u6642\u9593 -Pacific/Rarotonga.generic.long=\u30AF\u30C3\u30AF\u8AF8\u5CF6\u6642\u9593 -Pacific/Saipan.generic.long=\u30C1\u30E3\u30E2\u30ED\u6642\u9593 -Pacific/Samoa.generic.long=\u30B5\u30E2\u30A2\u6642\u9593 -Pacific/Tahiti.generic.long=\u30BF\u30D2\u30C1\u6642\u9593 -Pacific/Tarawa.generic.long=\u30AE\u30EB\u30D0\u30FC\u30C8\u8AF8\u5CF6\u6642\u9593 -Pacific/Tongatapu.generic.long=\u30C8\u30F3\u30AC\u6642\u9593 -Pacific/Truk.daylight.long=Chuuk Time -Pacific/Truk.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Truk.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Wake.generic.long=\u30A6\u30A7\u30FC\u30AF\u6642\u9593 -Pacific/Wallis.generic.long=\u30A6\u30A9\u30EA\u30B9\u30FB\u30D5\u30C4\u30CA\u6642\u9593 -Pacific/Yap.daylight.long=Chuuk Time -Pacific/Yap.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Yap.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Poland.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Portugal.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -ROK.generic.long=\u97D3\u56FD\u6642\u9593 -SST.generic.long=\u30BD\u30ED\u30E2\u30F3\u8AF8\u5CF6\u6642\u9593 -Singapore.generic.long=\u30B7\u30F3\u30AC\u30DD\u30FC\u30EB\u6642\u9593 -SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -SystemV/CST6.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -SystemV/CST6CDT.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -SystemV/EST5.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -SystemV/EST5EDT.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -SystemV/HST10.generic.long=\u30CF\u30EF\u30A4\u6642\u9593 -SystemV/MST7.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -SystemV/MST7MDT.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -SystemV/YST9.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -SystemV/YST9YDT.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -Turkey.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -UCT.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -US/Alaska.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -US/Aleutian.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593 -US/Arizona.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -US/Central.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -US/East-Indiana.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -US/Eastern.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -US/Hawaii.generic.long=\u30CF\u30EF\u30A4\u6642\u9593 -US/Indiana-Starke.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -US/Michigan.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -US/Mountain.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -US/Pacific.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -US/Samoa.generic.long=\u30B5\u30E2\u30A2\u6642\u9593 -UTC.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Universal.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -VST.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -W-SU.generic.long=\u30E2\u30B9\u30AF\u30EF\u6642\u9593 -WET.generic.long=\u897f\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -Zulu.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties deleted file mode 100644 index 52c2bc820ad..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED) -ACT.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -ACT.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -AET.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -AET.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -AET.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -AGT.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -ART.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -AST.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -Africa/Abidjan.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Accra.generic.long=\uAC00\uB098 \uD45C\uC900\uC2DC -Africa/Addis_Ababa.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Algiers.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Asmara.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Asmera.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Bamako.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Bangui.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Banjul.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Bissau.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Blantyre.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Brazzaville.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Bujumbura.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Cairo.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Casablanca.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Ceuta.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Conakry.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Dakar.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Dar_es_Salaam.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Djibouti.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Douala.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/El_Aaiun.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Freetown.generic.long=\uC2DC\uC5D0\uB77C\uB9AC\uC628 \uD45C\uC900\uC2DC -Africa/Gaborone.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Harare.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Johannesburg.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Juba.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Kampala.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Khartoum.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Kigali.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Kinshasa.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Lagos.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Libreville.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Lome.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Luanda.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Lubumbashi.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Lusaka.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Malabo.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Maputo.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Maseru.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Mbabane.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Mogadishu.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Monrovia.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Nairobi.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Ndjamena.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Niamey.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Nouakchott.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Ouagadougou.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Porto-Novo.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Sao_Tome.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Timbuktu.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Tripoli.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc -Africa/Tunis.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Windhoek.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -America/Adak.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC -America/Anchorage.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/Anguilla.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Antigua.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Araguaina.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Argentina/Buenos_Aires.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Catamarca.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/ComodRivadavia.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Cordoba.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Jujuy.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/La_Rioja.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Mendoza.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Rio_Gallegos.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Salta.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/San_Juan.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/San_Luis.generic.long=\uc544\ub974\ud5e8\ud2f0\ub098 \ud45c\uc900\uc2dc -America/Argentina/Tucuman.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Ushuaia.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Aruba.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Asuncion.generic.long=\uD30C\uB77C\uACFC\uC774 \uD45C\uC900\uC2DC -America/Atikokan.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Atka.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC -America/Bahia.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Bahia_Banderas.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Barbados.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Belem.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Belize.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Blanc-Sablon.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Boa_Vista.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Bogota.generic.long=\uCF5C\uB86C\uBE44\uC544 \uD45C\uC900\uC2DC -America/Boise.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Buenos_Aires.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Cambridge_Bay.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Campo_Grande.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Cancun.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Caracas.generic.long=\uBCA0\uB124\uC218\uC5D8\uB77C \uD45C\uC900\uC2DC -America/Catamarca.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Cayenne.generic.long=\uD504\uB791\uC2A4\uB839 \uAE30\uC544\uB098 \uD45C\uC900\uC2DC -America/Cayman.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Chicago.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Chihuahua.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Coral_Harbour.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Cordoba.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Costa_Rica.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Creston.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Cuiaba.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Curacao.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Danmarkshavn.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -America/Dawson.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Dawson_Creek.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Denver.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Detroit.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Dominica.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Edmonton.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Eirunepe.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04 -America/El_Salvador.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Ensenada.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Fort_Wayne.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Fortaleza.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Glace_Bay.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Godthab.generic.long=\uC11C\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC -America/Goose_Bay.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Grand_Turk.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Grenada.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Guadeloupe.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Guatemala.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Guayaquil.generic.long=\uC5D0\uCF70\uB3C4\uB974 \uD45C\uC900\uC2DC -America/Guyana.generic.long=\uAC00\uC774\uC544\uB098 \uD45C\uC900\uC2DC -America/Halifax.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Havana.generic.long=\uCFE0\uBC14 \uD45C\uC900\uC2DC -America/Hermosillo.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Indiana/Indianapolis.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Knox.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Marengo.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Petersburg.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Tell_City.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Vevay.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Vincennes.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Winamac.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indianapolis.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Inuvik.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Iqaluit.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Jamaica.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Jujuy.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Juneau.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/Kentucky/Louisville.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Kentucky/Monticello.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Knox_IN.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Kralendijk.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/La_Paz.generic.long=\uBCFC\uB9AC\uBE44\uC544 \uD45C\uC900\uC2DC -America/Lima.generic.long=\uD398\uB8E8 \uD45C\uC900\uC2DC -America/Los_Angeles.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Louisville.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Lower_Princes.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Maceio.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Managua.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Manaus.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Marigot.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Martinique.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Matamoros.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Mazatlan.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Mendoza.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Menominee.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Merida.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Metlakatla.daylight.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -America/Metlakatla.generic.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC -America/Metlakatla.standard.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC -America/Mexico_City.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Miquelon.generic.long=\uD53C\uC5D0\uB974 \uBBF8\uD074\uB871 \uD45C\uC900\uC2DC -America/Moncton.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Monterrey.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Montevideo.generic.long=\uC6B0\uB8E8\uACFC\uC774 \uD45C\uC900\uC2DC -America/Montreal.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Montserrat.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Nassau.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/New_York.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Nipigon.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Nome.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/Noronha.generic.long=\uD398\uB974\uB09C\uB3C4 \uB4DC \uB178\uB85C\uD558 \uD45C\uC900\uC2DC -America/North_Dakota/Beulah.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/North_Dakota/Center.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/North_Dakota/New_Salem.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Ojinaga.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Panama.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Pangnirtung.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Paramaribo.generic.long=\uC218\uB9AC\uB0A8 \uD45C\uC900\uC2DC -America/Phoenix.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Port-au-Prince.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Port_of_Spain.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Porto_Acre.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04 -America/Porto_Velho.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Puerto_Rico.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Rainy_River.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Rankin_Inlet.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Recife.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Regina.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Resolute.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Rio_Branco.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04 -America/Rosario.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Santa_Isabel.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Santarem.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Santiago.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC -America/Santo_Domingo.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Sao_Paulo.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Scoresbysund.generic.long=\uB3D9\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC -America/Shiprock.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Sitka.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/St_Barthelemy.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/St_Johns.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC -America/St_Kitts.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/St_Lucia.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/St_Thomas.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/St_Vincent.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Swift_Current.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Tegucigalpa.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Thule.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Thunder_Bay.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Tijuana.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Toronto.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Tortola.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Vancouver.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Virgin.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Whitehorse.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Winnipeg.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Yakutat.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/Yellowknife.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -Antarctica/Casey.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Antarctica/Casey.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Antarctica/Casey.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Antarctica/Davis.generic.long=\uB370\uC774\uBE44\uC2A4 \uD45C\uC900\uC2DC -Antarctica/DumontDUrville.generic.long=\uB450\uBAAC\uD2B8\uC6B0\uB974\uBE4C \uD45C\uC900\uC2DC -Antarctica/Macquarie.daylight.long=\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Antarctica/Macquarie.generic.long=\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC -Antarctica/Macquarie.standard.long=\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC -Antarctica/Mawson.generic.long=\uB9C8\uC2A8 \uD45C\uC900\uC2DC -Antarctica/McMurdo.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -Antarctica/Palmer.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC -Antarctica/Rothera.generic.long=\uB85C\uB354\uB77C \uD45C\uC900\uC2DC -Antarctica/South_Pole.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -Antarctica/Syowa.generic.long=\uC1FC\uC640 \uD45C\uC900\uC2DC -Antarctica/Vostok.generic.long=\uBCF4\uC2A4\uD1A1 \uD45C\uC900\uC2DC -Arctic/Longyearbyen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Aden.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Almaty.generic.long=\uC54C\uB9C8\uC544\uD0C0 \uD45C\uC900\uC2DC -Asia/Amman.generic.long=\uc544\ub77c\ube44\uc544 \ud45c\uc900\uc2dc -Asia/Anadyr.generic.long=\uC544\uB098\uB514\uB9AC \uD45C\uC900\uC2DC -Asia/Aqtau.generic.long=\uC544\uD06C\uD0C0\uC6B0 \uD45C\uC900\uC2DC -Asia/Aqtobe.generic.long=\uC544\uD06C\uD1A0\uBCA0 \uD45C\uC900\uC2DC -Asia/Ashgabat.generic.long=\uD22C\uB974\uD06C\uBA54\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Ashkhabad.generic.long=\uD22C\uB974\uD06C\uBA54\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Baghdad.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Bahrain.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Baku.generic.long=\uC544\uC81C\uB974\uBC14\uC774\uC794 \uD45C\uC900\uC2DC -Asia/Bangkok.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Beirut.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Bishkek.generic.long=\uD0A4\uB974\uAE30\uC2A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Brunei.generic.long=\uBE0C\uB8E8\uB098\uC774 \uD45C\uC900\uC2DC -Asia/Calcutta.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC -Asia/Choibalsan.generic.long=\uCD08\uC774\uBC1C\uC0B0 \uD45C\uC900\uC2DC -Asia/Chongqing.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Chungking.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Colombo.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC -Asia/Dacca.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC -Asia/Damascus.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Dhaka.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC -Asia/Dili.generic.long=\uB3D9\uD2F0\uBAA8\uB974 \uD45C\uC900\uC2DC -Asia/Dubai.generic.long=\uAC78\uD504\uB9CC \uD45C\uC900\uC2DC -Asia/Dushanbe.generic.long=\uD0C0\uC9C0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Gaza.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Harbin.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Hebron.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Ho_Chi_Minh.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Hong_Kong.generic.long=\uD64D\uCF69 \uD45C\uC900\uC2DC -Asia/Hovd.generic.long=\uD638\uBE0C\uB4DC \uD45C\uC900\uC2DC -Asia/Irkutsk.generic.long=\uC774\uB974\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC -Asia/Istanbul.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Jakarta.generic.long=\uC11C\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Jayapura.generic.long=\uB3D9\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Jerusalem.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC -Asia/Kabul.generic.long=\uC544\uD504\uAC00\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Kamchatka.generic.long=\uD398\uD2B8\uB85C\uD30C\uBE0C\uB85C\uD504\uC2A4\uD06C-\uCE84\uCC28\uCE20\uD0A4 \uD45C\uC900\uC2DC -Asia/Karachi.generic.long=\uD30C\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Kashgar.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Kathmandu.generic.long=\uB124\uD314 \uD45C\uC900\uC2DC -Asia/Katmandu.generic.long=\uB124\uD314 \uD45C\uC900\uC2DC -Asia/Khandyga.daylight.long=\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Asia/Khandyga.generic.long=\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC -Asia/Khandyga.standard.long=\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC -Asia/Kolkata.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC -Asia/Krasnoyarsk.generic.long=\uD06C\uB77C\uC2A4\uB178\uC57C\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC -Asia/Kuala_Lumpur.generic.long=\uB9D0\uB808\uC774\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Kuching.generic.long=\uB9D0\uB808\uC774\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Kuwait.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Macao.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Macau.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Magadan.generic.long=\uB9C8\uAC00\uB2E8 \uD45C\uC900\uC2DC -Asia/Makassar.generic.long=\uC911\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Manila.generic.long=\uD544\uB9AC\uD540 \uD45C\uC900\uC2DC -Asia/Muscat.generic.long=\uAC78\uD504\uB9CC \uD45C\uC900\uC2DC -Asia/Nicosia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Novokuznetsk.generic.long=\uB178\uBCF4\uC2DC\uBE44\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC -Asia/Novosibirsk.generic.long=\uB178\uBCF4\uC2DC\uBE44\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC -Asia/Omsk.generic.long=\uC634\uC2A4\uD06C \uD45C\uC900\uC2DC -Asia/Oral.generic.long=\uC624\uB7F4 \uD45C\uC900\uC2DC -Asia/Phnom_Penh.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Pontianak.generic.long=\uC11C\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Pyongyang.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC -Asia/Qatar.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Qyzylorda.generic.long=\uD0A4\uC9C8\uB85C\uB974\uB2E4 \uD45C\uC900\uC2DC -Asia/Rangoon.generic.long=\uBBF8\uC580\uB9C8 \uD45C\uC900\uC2DC -Asia/Saigon.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Sakhalin.generic.long=\uC0AC\uD560\uB9B0 \uD45C\uC900\uC2DC -Asia/Samarkand.generic.long=\uC6B0\uC988\uBCA0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Seoul.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC -Asia/Shanghai.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Singapore.generic.long=\uC2F1\uAC00\uD3EC\uB974 \uD45C\uC900\uC2DC -Asia/Taipei.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Tashkent.generic.long=\uC6B0\uC988\uBCA0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Tbilisi.generic.long=\uADF8\uB8E8\uC9C0\uC57C \uD45C\uC900\uC2DC -Asia/Tehran.generic.long=\uC774\uB780 \uD45C\uC900\uC2DC -Asia/Tel_Aviv.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC -Asia/Thimbu.generic.long=\uBD80\uD0C4 \uD45C\uC900\uC2DC -Asia/Thimphu.generic.long=\uBD80\uD0C4 \uD45C\uC900\uC2DC -Asia/Tokyo.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC -Asia/Ujung_Pandang.generic.long=\uC911\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Ulaanbaatar.generic.long=\uC6B8\uB780\uBC14\uD1A0\uB974 \uD45C\uC900\uC2DC -Asia/Ulan_Bator.generic.long=\uC6B8\uB780\uBC14\uD1A0\uB974 \uD45C\uC900\uC2DC -Asia/Urumqi.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Ust-Nera.daylight.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Asia/Ust-Nera.generic.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC -Asia/Ust-Nera.standard.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC -Asia/Vientiane.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Vladivostok.generic.long=\uBE14\uB77C\uB514\uBCF4\uC2A4\uD1A1 \uD45C\uC900\uC2DC -Asia/Yakutsk.generic.long=\uC57C\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC -Asia/Yekaterinburg.generic.long=\uC608\uCE74\uD14C\uB9B0\uBD80\uB974\uD06C \uD45C\uC900\uC2DC -Asia/Yerevan.generic.long=\uC544\uB974\uBA54\uB2C8\uC544 \uD45C\uC900\uC2DC -Atlantic/Azores.generic.long=\uC544\uC870\uB808\uC2A4 \uD45C\uC900\uC2DC -Atlantic/Bermuda.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -Atlantic/Canary.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Cape_Verde.generic.long=\uCF00\uC774\uD504\uBCA0\uB974\uB370 \uD45C\uC900\uC2DC -Atlantic/Faeroe.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Faroe.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Jan_Mayen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Madeira.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Reykjavik.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Atlantic/South_Georgia.generic.long=\uC0AC\uC6B0\uC2A4\uC870\uC9C0\uC544 \uD45C\uC900\uC2DC -Atlantic/St_Helena.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Atlantic/Stanley.generic.long=\uD3EC\uD074\uB79C\uB4DC \uC81C\uB3C4 \uD45C\uC900\uC2DC -Australia/ACT.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/ACT.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/ACT.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Adelaide.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Adelaide.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Adelaide.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Brisbane.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC) -Australia/Brisbane.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Brisbane.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Broken_Hill.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Broken_Hill.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Broken_Hill.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Canberra.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Canberra.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Canberra.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Currie.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Currie.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Currie.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Darwin.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/Darwin.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/Darwin.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/Eucla.daylight.long=\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Eucla.generic.long=\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Eucla.standard.long=\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Hobart.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Hobart.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Hobart.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/LHI.generic.long=\uB85C\uB4DC\uD558\uC6B0 \uD45C\uC900\uC2DC -Australia/Lindeman.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC) -Australia/Lindeman.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Lindeman.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Lord_Howe.generic.long=\uB85C\uB4DC\uD558\uC6B0 \uD45C\uC900\uC2DC -Australia/Melbourne.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544) -Australia/Melbourne.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544) -Australia/Melbourne.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544) -Australia/NSW.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/NSW.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/NSW.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/North.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/North.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/North.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/Perth.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Perth.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Perth.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Queensland.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC) -Australia/Queensland.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Queensland.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/South.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/South.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/South.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Sydney.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Sydney.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Sydney.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Tasmania.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Tasmania.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Tasmania.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Victoria.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544) -Australia/Victoria.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544) -Australia/Victoria.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544) -Australia/West.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/West.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/West.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Yancowinna.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Yancowinna.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Yancowinna.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -BET.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -BST.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC -Brazil/Acre.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04 -Brazil/DeNoronha.generic.long=\uD398\uB974\uB09C\uB3C4 \uB4DC \uB178\uB85C\uD558 \uD45C\uC900\uC2DC -Brazil/East.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -Brazil/West.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -CAT.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -CET.generic.long=\uc911\uc559 \uc720\ub7fd \ud45c\uc900\uc2dc -CNT.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC -CST.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -CST6CDT.generic.long=\uc911\ubd80 \ud45c\uc900\uc2dc -CTT.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Canada/Atlantic.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -Canada/Central.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -Canada/East-Saskatchewan.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -Canada/Eastern.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -Canada/Mountain.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -Canada/Newfoundland.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC -Canada/Pacific.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -Canada/Saskatchewan.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -Canada/Yukon.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -Chile/Continental.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC -Chile/EasterIsland.generic.long=\uC774\uC2A4\uD130 \uC12C \uD45C\uC900\uC2DC -Cuba.generic.long=\uCFE0\uBC14 \uD45C\uC900\uC2DC -EAT.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -ECT.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -EET.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc -EST.generic.long=\ub3d9\ubd80 \ud45c\uc900\uc2dc -EST5EDT.generic.long=\ub3d9\ubd80 \ud45c\uc900\uc2dc -Egypt.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Eire.generic.long=\uC544\uC77C\uB79C\uB4DC \uD45C\uC900\uC2DC -Etc/Greenwich.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Etc/UCT.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Etc/UTC.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Etc/Universal.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Etc/Zulu.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Europe/Amsterdam.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Andorra.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Athens.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Belfast.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Belgrade.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Berlin.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Bratislava.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Brussels.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Bucharest.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Budapest.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Busingen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Chisinau.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Copenhagen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Dublin.generic.long=\uC544\uC77C\uB79C\uB4DC \uD45C\uC900\uC2DC -Europe/Gibraltar.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Guernsey.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Helsinki.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Isle_of_Man.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Istanbul.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Jersey.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Kaliningrad.daylight.long=\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Europe/Kaliningrad.generic.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Kaliningrad.standard.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Kiev.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Lisbon.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Ljubljana.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/London.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Luxembourg.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Madrid.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Malta.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Mariehamn.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Minsk.daylight.long=\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Europe/Minsk.generic.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Minsk.standard.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Monaco.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Moscow.generic.long=\uBAA8\uC2A4\uD06C\uBC14 \uD45C\uC900\uC2DC -Europe/Nicosia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Oslo.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Paris.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Podgorica.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Prague.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Riga.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Rome.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Samara.generic.long=\uC0AC\uB9C8\uB77C \uD45C\uC900\uC2DC -Europe/San_Marino.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Sarajevo.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Simferopol.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Skopje.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Sofia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Stockholm.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Tallinn.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Tirane.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Tiraspol.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Uzhgorod.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Vaduz.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Vatican.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Vienna.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Vilnius.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Volgograd.generic.long=\uBCFC\uACE0\uADF8\uB77C\uB4DC \uD45C\uC900\uC2DC -Europe/Warsaw.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Zagreb.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Zaporozhye.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Zurich.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -GB-Eire.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -GB.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -GMT.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Greenwich.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -HST.generic.long=\ud558\uc640\uc774 \ud45c\uc900\uc2dc -Hongkong.generic.long=\uD64D\uCF69 \uD45C\uC900\uC2DC -IET.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -IST.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC -Iceland.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Indian/Antananarivo.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Indian/Chagos.generic.long=\uC778\uB3C4\uC591 \uC2DD\uBBFC\uC9C0 \uD45C\uC900\uC2DC -Indian/Christmas.generic.long=\uD06C\uB9AC\uC2A4\uB9C8\uC2A4 \uC12C \uD45C\uC900\uC2DC -Indian/Cocos.generic.long=\uCF54\uCF54\uC2A4 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Indian/Comoro.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Indian/Kerguelen.generic.long=\uD504\uB791\uC2A4\uB839 \uB0A8\uBD80 \uBC0F \uB0A8\uADF9 \uB300\uB959 \uD45C\uC900\uC2DC -Indian/Mahe.generic.long=\uC138\uC774\uC178 \uD45C\uC900\uC2DC -Indian/Maldives.generic.long=\uBAB0\uB514\uBE0C \uD45C\uC900\uC2DC -Indian/Mauritius.generic.long=\uBAA8\uB9AC\uC154\uC2A4 \uD45C\uC900\uC2DC -Indian/Mayotte.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Indian/Reunion.generic.long=\uB808\uC704\uB2C8\uC639 \uD45C\uC900\uC2DC -Iran.generic.long=\uC774\uB780 \uD45C\uC900\uC2DC -Israel.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC -JST.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC -Jamaica.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -Japan.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC -Kwajalein.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC -Libya.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc -MET.generic.long=MET -MIT.generic.long=\uC11C\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -MST.generic.long=\uc0b0\uc9c0 \ud45c\uc900\uc2dc -MST7MDT.generic.long=\uc0b0\uc9c0 \ud45c\uc900\uc2dc -Mexico/BajaNorte.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -Mexico/BajaSur.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -Mexico/General.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -NET.generic.long=\uC544\uB974\uBA54\uB2C8\uC544 \uD45C\uC900\uC2DC -NST.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -NZ-CHAT.generic.long=\uCC44\uD140 \uD45C\uC900\uC2DC -NZ.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -Navajo.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -PLT.generic.long=\uD30C\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -PNT.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -PRC.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -PRT.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -PST.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -PST8PDT.generic.long=\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc -Pacific/Apia.generic.long=\uC11C\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -Pacific/Auckland.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -Pacific/Chatham.generic.long=\uCC44\uD140 \uD45C\uC900\uC2DC -Pacific/Chuuk.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Chuuk.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Chuuk.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Easter.generic.long=\uC774\uC2A4\uD130 \uC12C \uD45C\uC900\uC2DC -Pacific/Efate.generic.long=\uBC14\uB204\uC544\uD22C \uD45C\uC900\uC2DC -Pacific/Enderbury.generic.long=\uD53C\uB2C9\uC2A4 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Fakaofo.generic.long=\uD1A0\uCF08\uB77C\uC6B0 \uD45C\uC900\uC2DC -Pacific/Fiji.generic.long=\uD53C\uC9C0 \uD45C\uC900\uC2DC -Pacific/Funafuti.generic.long=\uD22C\uBC1C\uB8E8 \uD45C\uC900\uC2DC -Pacific/Galapagos.generic.long=\uAC08\uB77C\uD30C\uACE0\uC2A4 \uD45C\uC900\uC2DC -Pacific/Gambier.generic.long=\uC7A0\uBE44\uC544 \uD45C\uC900\uC2DC -Pacific/Guadalcanal.generic.long=\uC194\uB85C\uBAAC \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Guam.generic.long=\uCC28\uBAA8\uB974 \uD45C\uC900\uC2DC -Pacific/Honolulu.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC -Pacific/Johnston.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC -Pacific/Kiritimati.generic.long=\uB77C\uC778 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Kosrae.generic.long=\uCF54\uC2A4\uB808 \uD45C\uC900\uC2DC -Pacific/Kwajalein.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Majuro.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Marquesas.generic.long=\uB9C8\uD0A4\uC800\uC2A4 \uD45C\uC900\uC2DC -Pacific/Midway.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -Pacific/Nauru.generic.long=\uB098\uC6B0\uB8E8 \uD45C\uC900\uC2DC -Pacific/Niue.generic.long=\uB2C8\uC6B0\uC5D0 \uD45C\uC900\uC2DC -Pacific/Norfolk.generic.long=\uB178\uD37D \uD45C\uC900\uC2DC -Pacific/Noumea.generic.long=\uB274 \uCE7C\uB808\uB3C4\uB2C8\uC544 \uD45C\uC900\uC2DC -Pacific/Pago_Pago.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -Pacific/Palau.generic.long=\uD314\uB77C\uC6B0 \uD45C\uC900\uC2DC -Pacific/Pitcairn.generic.long=\uD54F\uCF00\uC5B8 \uD45C\uC900\uC2DC -Pacific/Pohnpei.daylight.long=\uD3F0\uD398\uC774 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Pohnpei.generic.long=\uD3EC\uB098\uD398 \uD45C\uC900\uC2DC -Pacific/Pohnpei.standard.long=\uD3F0\uD398\uC774 \uD45C\uC900\uC2DC -Pacific/Ponape.daylight.long=\uD3F0\uD398\uC774 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Ponape.generic.long=\uD3EC\uB098\uD398 \uD45C\uC900\uC2DC -Pacific/Ponape.standard.long=\uD3F0\uD398\uC774 \uD45C\uC900\uC2DC -Pacific/Port_Moresby.generic.long=\uD30C\uD478\uC544 \uB274\uAE30\uB2C8\uC544 \uD45C\uC900\uC2DC -Pacific/Rarotonga.generic.long=\uCFE1 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Saipan.generic.long=\uCC28\uBAA8\uB974 \uD45C\uC900\uC2DC -Pacific/Samoa.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -Pacific/Tahiti.generic.long=\uD0C0\uD788\uD2F0 \uD45C\uC900\uC2DC -Pacific/Tarawa.generic.long=\uAE38\uBC84\uD2B8 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Tongatapu.generic.long=\uD1B5\uAC00 \uD45C\uC900\uC2DC -Pacific/Truk.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Truk.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Truk.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Wake.generic.long=\uC6E8\uC774\uD06C \uD45C\uC900\uC2DC -Pacific/Wallis.generic.long=\uC6D4\uB9AC\uC2A4 \uD478\uD22C\uB098 \uD45C\uC900\uC2DC -Pacific/Yap.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Yap.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Yap.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Poland.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Portugal.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -ROK.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC -SST.generic.long=\uC194\uB85C\uBAAC \uC81C\uB3C4 \uD45C\uC900\uC2DC -Singapore.generic.long=\uC2F1\uAC00\uD3EC\uB974 \uD45C\uC900\uC2DC -SystemV/AST4.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -SystemV/AST4ADT.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -SystemV/CST6.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -SystemV/CST6CDT.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -SystemV/EST5.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -SystemV/EST5EDT.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -SystemV/HST10.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC -SystemV/MST7.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -SystemV/MST7MDT.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -SystemV/PST8.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -SystemV/PST8PDT.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -SystemV/YST9.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -SystemV/YST9YDT.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -Turkey.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -UCT.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -US/Alaska.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -US/Aleutian.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC -US/Arizona.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -US/Central.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -US/East-Indiana.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -US/Eastern.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -US/Hawaii.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC -US/Indiana-Starke.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -US/Michigan.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -US/Mountain.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -US/Pacific-New.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -US/Pacific.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -US/Samoa.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -UTC.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Universal.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -VST.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -W-SU.generic.long=\uBAA8\uC2A4\uD06C\uBC14 \uD45C\uC900\uC2DC -WET.generic.long=\uc11c\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc -Zulu.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties deleted file mode 100644 index 763311b50ca..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte) -ACT.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte) -ACT.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte) -AET.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -AET.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -AET.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -AGT.generic.long=Hor\u00E1rio da Argentina -ART.generic.long=Hor\u00E1rio da Europa Oriental -AST.generic.long=Hor\u00E1rio do Alasca -Africa/Abidjan.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Accra.generic.long=Fuso Hor\u00E1rio do Meridiano de Gana -Africa/Addis_Ababa.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Algiers.generic.long=Hor\u00E1rio da Europa Central -Africa/Asmara.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Asmera.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Bamako.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Bangui.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Banjul.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Bissau.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Blantyre.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Brazzaville.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Bujumbura.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Cairo.generic.long=Hor\u00E1rio da Europa Oriental -Africa/Casablanca.generic.long=Hor\u00E1rio da Europa Ocidental -Africa/Ceuta.generic.long=Hor\u00E1rio da Europa Central -Africa/Conakry.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Dakar.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Dar_es_Salaam.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Djibouti.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Douala.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/El_Aaiun.generic.long=Hor\u00E1rio da Europa Ocidental -Africa/Freetown.generic.long=Hor\u00E1rio de Serra Leoa -Africa/Gaborone.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Harare.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Johannesburg.generic.long=Hor\u00E1rio da \u00C1frica do Sul -Africa/Juba.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Kampala.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Khartoum.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Kigali.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Kinshasa.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Lagos.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Libreville.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Lome.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Luanda.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Lubumbashi.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Lusaka.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Malabo.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Maputo.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Maseru.generic.long=Hor\u00E1rio da \u00C1frica do Sul -Africa/Mbabane.generic.long=Hor\u00E1rio da \u00C1frica do Sul -Africa/Mogadishu.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Monrovia.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Nairobi.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Ndjamena.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Niamey.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Nouakchott.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Ouagadougou.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Porto-Novo.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Sao_Tome.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Timbuktu.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Tripoli.generic.long=Hor\u00e1rio da Europa Oriental -Africa/Tunis.generic.long=Hor\u00E1rio da Europa Central -Africa/Windhoek.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -America/Adak.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas -America/Anchorage.generic.long=Hor\u00E1rio do Alasca -America/Anguilla.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Antigua.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Araguaina.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Argentina/Buenos_Aires.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Catamarca.generic.long=Hor\u00E1rio da Argentina -America/Argentina/ComodRivadavia.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Cordoba.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Jujuy.generic.long=Hor\u00E1rio da Argentina -America/Argentina/La_Rioja.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Mendoza.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Rio_Gallegos.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Salta.generic.long=Hor\u00E1rio da Argentina -America/Argentina/San_Juan.generic.long=Hor\u00E1rio da Argentina -America/Argentina/San_Luis.generic.long=Hor\u00e1rio da Argentina -America/Argentina/Tucuman.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Ushuaia.generic.long=Hor\u00E1rio da Argentina -America/Aruba.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Asuncion.generic.long=Hor\u00E1rio do Paraguai -America/Atikokan.generic.long=Hor\u00E1rio do Leste -America/Atka.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas -America/Bahia.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Bahia_Banderas.generic.long=Hor\u00E1rio Central -America/Barbados.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Belem.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Belize.generic.long=Hor\u00E1rio Central -America/Blanc-Sablon.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Boa_Vista.generic.long=Hor\u00E1rio do Amazonas -America/Bogota.generic.long=Hor\u00E1rio da Col\u00F4mbia -America/Boise.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Buenos_Aires.generic.long=Hor\u00E1rio da Argentina -America/Cambridge_Bay.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Campo_Grande.generic.long=Hor\u00E1rio do Amazonas -America/Cancun.generic.long=Hor\u00E1rio Central -America/Caracas.generic.long=Hor\u00E1rio da Venezuela -America/Catamarca.generic.long=Hor\u00E1rio da Argentina -America/Cayenne.generic.long=Hor\u00E1rio da Guiana Francesa -America/Cayman.generic.long=Hor\u00E1rio do Leste -America/Chicago.generic.long=Hor\u00E1rio Central -America/Chihuahua.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Coral_Harbour.generic.long=Hor\u00E1rio do Leste -America/Cordoba.generic.long=Hor\u00E1rio da Argentina -America/Costa_Rica.generic.long=Hor\u00E1rio Central -America/Creston.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Cuiaba.generic.long=Hor\u00E1rio do Amazonas -America/Curacao.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Danmarkshavn.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -America/Dawson.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Dawson_Creek.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Denver.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Detroit.generic.long=Hor\u00E1rio do Leste -America/Dominica.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Edmonton.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Eirunepe.generic.long=Fuso hor\u00e1rio do Acre -America/El_Salvador.generic.long=Hor\u00E1rio Central -America/Ensenada.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Fort_Wayne.generic.long=Hor\u00E1rio do Leste -America/Fortaleza.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Glace_Bay.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Godthab.generic.long=Hor\u00E1rio da Groenl\u00E2ndia Ocidental -America/Goose_Bay.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Grand_Turk.generic.long=Hor\u00E1rio do Leste -America/Grenada.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Guadeloupe.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Guatemala.generic.long=Hor\u00E1rio Central -America/Guayaquil.generic.long=Hor\u00E1rio do Equador -America/Guyana.generic.long=Hor\u00E1rios da Guiana -America/Halifax.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Havana.generic.long=Hor\u00E1rio de Cuba -America/Hermosillo.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Indiana/Indianapolis.generic.long=Hor\u00E1rio do Leste -America/Indiana/Knox.generic.long=Hor\u00E1rio Central -America/Indiana/Marengo.generic.long=Hor\u00E1rio do Leste -America/Indiana/Petersburg.generic.long=Hor\u00E1rio do Leste -America/Indiana/Tell_City.generic.long=Hor\u00E1rio Central -America/Indiana/Vevay.generic.long=Hor\u00E1rio do Leste -America/Indiana/Vincennes.generic.long=Hor\u00E1rio do Leste -America/Indiana/Winamac.generic.long=Hor\u00E1rio do Leste -America/Indianapolis.generic.long=Hor\u00E1rio do Leste -America/Inuvik.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Iqaluit.generic.long=Hor\u00E1rio do Leste -America/Jamaica.generic.long=Hor\u00E1rio do Leste -America/Jujuy.generic.long=Hor\u00E1rio da Argentina -America/Juneau.generic.long=Hor\u00E1rio do Alasca -America/Kentucky/Louisville.generic.long=Hor\u00E1rio do Leste -America/Kentucky/Monticello.generic.long=Hor\u00E1rio do Leste -America/Knox_IN.generic.long=Hor\u00E1rio Central -America/Kralendijk.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/La_Paz.generic.long=Hor\u00E1rio da Bol\u00EDvia -America/Lima.generic.long=Hor\u00E1rio do Peru -America/Los_Angeles.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Louisville.generic.long=Hor\u00E1rio do Leste -America/Lower_Princes.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Maceio.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Managua.generic.long=Hor\u00E1rio Central -America/Manaus.generic.long=Hor\u00E1rio do Amazonas -America/Marigot.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Martinique.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Matamoros.generic.long=Hor\u00E1rio Central -America/Mazatlan.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Mendoza.generic.long=Hor\u00E1rio da Argentina -America/Menominee.generic.long=Hor\u00E1rio Central -America/Merida.generic.long=Hor\u00E1rio Central -America/Metlakatla.daylight.long=Hor\u00E1rio de Luz Natural de Metlakatla -America/Metlakatla.generic.long=Hor\u00E1rio de Metlakatla -America/Metlakatla.standard.long=Hor\u00E1rio Padr\u00E3o de Metlakatla -America/Mexico_City.generic.long=Hor\u00E1rio Central -America/Miquelon.generic.long=Hor\u00E1rio de Saint Pierre e Miquelon -America/Moncton.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Monterrey.generic.long=Hor\u00E1rio Central -America/Montevideo.generic.long=Hor\u00E1rio do Uruguai -America/Montreal.generic.long=Hor\u00E1rio do Leste -America/Montserrat.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Nassau.generic.long=Hor\u00E1rio do Leste -America/New_York.generic.long=Hor\u00E1rio do Leste -America/Nipigon.generic.long=Hor\u00E1rio do Leste -America/Nome.generic.long=Hor\u00E1rio do Alasca -America/Noronha.generic.long=Hor\u00E1rio de Fernando de Noronha -America/North_Dakota/Beulah.generic.long=Hor\u00E1rio Central -America/North_Dakota/Center.generic.long=Hor\u00E1rio Central -America/North_Dakota/New_Salem.generic.long=Hor\u00E1rio Central -America/Ojinaga.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Panama.generic.long=Hor\u00E1rio do Leste -America/Pangnirtung.generic.long=Hor\u00E1rio do Leste -America/Paramaribo.generic.long=Hor\u00E1rio do Suriname -America/Phoenix.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Port-au-Prince.generic.long=Hor\u00E1rio do Leste -America/Port_of_Spain.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Porto_Acre.generic.long=Fuso hor\u00e1rio do Acre -America/Porto_Velho.generic.long=Hor\u00E1rio do Amazonas -America/Puerto_Rico.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Rainy_River.generic.long=Hor\u00E1rio Central -America/Rankin_Inlet.generic.long=Hor\u00E1rio Central -America/Recife.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Regina.generic.long=Hor\u00E1rio Central -America/Resolute.generic.long=Hor\u00E1rio Central -America/Rio_Branco.generic.long=Fuso hor\u00e1rio do Acre -America/Rosario.generic.long=Hor\u00E1rio da Argentina -America/Santa_Isabel.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Santarem.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Santiago.generic.long=Hor\u00E1rio do Chile -America/Santo_Domingo.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Sao_Paulo.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Scoresbysund.generic.long=Hor\u00E1rio da Groenl\u00E2ndia Oriental -America/Shiprock.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Sitka.generic.long=Hor\u00E1rio do Alasca -America/St_Barthelemy.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/St_Johns.generic.long=Hor\u00E1rio de Terra Nova -America/St_Kitts.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/St_Lucia.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/St_Thomas.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/St_Vincent.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Swift_Current.generic.long=Hor\u00E1rio Central -America/Tegucigalpa.generic.long=Hor\u00E1rio Central -America/Thule.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Thunder_Bay.generic.long=Hor\u00E1rio do Leste -America/Tijuana.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Toronto.generic.long=Hor\u00E1rio do Leste -America/Tortola.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Vancouver.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Virgin.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Whitehorse.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Winnipeg.generic.long=Hor\u00E1rio Central -America/Yakutat.generic.long=Hor\u00E1rio do Alasca -America/Yellowknife.generic.long=Hor\u00E1rio das Montanhas Rochosas -Antarctica/Casey.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia) -Antarctica/Casey.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia) -Antarctica/Casey.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia) -Antarctica/Davis.generic.long=Hor\u00E1rio de Davis -Antarctica/DumontDUrville.generic.long=Fuso Hor\u00E1rio de Dumont-d'Urville -Antarctica/Macquarie.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie -Antarctica/Macquarie.generic.long=Fuso Hor\u00E1rio da Ilha de Macquarie -Antarctica/Macquarie.standard.long=Fuso Hor\u00E1rio da Ilha de Macquarie -Antarctica/Mawson.generic.long=Hor\u00E1rio de Mawson -Antarctica/McMurdo.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -Antarctica/Palmer.generic.long=Hor\u00E1rio do Chile -Antarctica/Rothera.generic.long=Hor\u00E1rio de Rothera -Antarctica/South_Pole.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -Antarctica/Syowa.generic.long=Hor\u00E1rio de Syowa -Antarctica/Vostok.generic.long=Hor\u00E1rio de Vostok -Arctic/Longyearbyen.generic.long=Hor\u00E1rio da Europa Central -Asia/Aden.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Almaty.generic.long=Hor\u00E1rio de Alma-Ata -Asia/Amman.generic.long=Hor\u00e1rio da Ar\u00e1bia -Asia/Anadyr.generic.long=Hor\u00E1rio de Anadyr -Asia/Aqtau.generic.long=Hor\u00E1rio de Aqtau -Asia/Aqtobe.generic.long=Hor\u00E1rio de Aqtobe -Asia/Ashgabat.generic.long=Hor\u00E1rio do Turcomenist\u00E3o -Asia/Ashkhabad.generic.long=Hor\u00E1rio do Turcomenist\u00E3o -Asia/Baghdad.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Bahrain.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Baku.generic.long=Hor\u00E1rio do Azerbaij\u00E3o -Asia/Bangkok.generic.long=Hor\u00E1rio da Indochina -Asia/Beirut.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Bishkek.generic.long=Hor\u00E1rio do Quirguist\u00E3o -Asia/Brunei.generic.long=Hor\u00E1rio de Brunei -Asia/Calcutta.generic.long=Hor\u00E1rio da \u00CDndia -Asia/Choibalsan.generic.long=Hor\u00E1rio de Choibalsan -Asia/Chongqing.generic.long=Hor\u00E1rio da China -Asia/Chungking.generic.long=Hor\u00E1rio da China -Asia/Colombo.generic.long=Hor\u00E1rio da \u00CDndia -Asia/Dacca.generic.long=Hor\u00E1rio de Bangladesh -Asia/Damascus.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Dhaka.generic.long=Hor\u00E1rio de Bangladesh -Asia/Dili.generic.long=Hor\u00E1rio do Timor-Leste -Asia/Dubai.generic.long=Hor\u00E1rio do Golfo -Asia/Dushanbe.generic.long=Hor\u00E1rio do Tadjiquist\u00E3o -Asia/Gaza.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Harbin.generic.long=Hor\u00E1rio da China -Asia/Hebron.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Ho_Chi_Minh.generic.long=Hor\u00E1rio da Indochina -Asia/Hong_Kong.generic.long=Hor\u00E1rio de Hong Kong -Asia/Hovd.generic.long=Hor\u00E1rio de Hovd -Asia/Irkutsk.generic.long=Hor\u00E1rio de Irkutsk -Asia/Istanbul.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Jakarta.generic.long=Hor\u00E1rio da Indon\u00E9sia Ocidental -Asia/Jayapura.generic.long=Hor\u00E1rio da Indon\u00E9sia Oriental -Asia/Jerusalem.generic.long=Hor\u00E1rio de Israel -Asia/Kabul.generic.long=Hor\u00E1rio do Afeganist\u00E3o -Asia/Kamchatka.generic.long=Hor\u00E1rio de Petropavlovsk-Kamchatski -Asia/Karachi.generic.long=Hor\u00E1rio do Paquist\u00E3o -Asia/Kashgar.generic.long=Hor\u00E1rio da China -Asia/Kathmandu.generic.long=Hor\u00E1rio do Nepal -Asia/Katmandu.generic.long=Hor\u00E1rio do Nepal -Asia/Khandyga.daylight.long=Hor\u00E1rio de Ver\u00E3o de Khandyga -Asia/Khandyga.generic.long=Hor\u00E1rio de Khandyga -Asia/Khandyga.standard.long=Hor\u00E1rio de Khandyga -Asia/Kolkata.generic.long=Hor\u00E1rio da \u00CDndia -Asia/Krasnoyarsk.generic.long=Hor\u00E1rio de Krasnoyarsk -Asia/Kuala_Lumpur.generic.long=Hor\u00E1rio da Mal\u00E1sia -Asia/Kuching.generic.long=Hor\u00E1rio da Mal\u00E1sia -Asia/Kuwait.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Macao.generic.long=Hor\u00E1rio da China -Asia/Macau.generic.long=Hor\u00E1rio da China -Asia/Magadan.generic.long=Hor\u00E1rio de Magadan -Asia/Makassar.generic.long=Hor\u00E1rio da Indon\u00E9sia Central -Asia/Manila.generic.long=Hor\u00E1rio das Filipinas -Asia/Muscat.generic.long=Hor\u00E1rio do Golfo -Asia/Nicosia.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Novokuznetsk.generic.long=Hor\u00E1rio de Novosibirsk -Asia/Novosibirsk.generic.long=Hor\u00E1rio de Novosibirsk -Asia/Omsk.generic.long=Hor\u00E1rio de Omsk -Asia/Oral.generic.long=Hor\u00E1rio de Uralsk -Asia/Phnom_Penh.generic.long=Hor\u00E1rio da Indochina -Asia/Pontianak.generic.long=Hor\u00E1rio da Indon\u00E9sia Ocidental -Asia/Pyongyang.generic.long=Hor\u00E1rio da Coreia -Asia/Qatar.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Qyzylorda.generic.long=Hor\u00E1rio de Qyzylorda -Asia/Rangoon.generic.long=Hor\u00E1rio de Mianmar -Asia/Saigon.generic.long=Hor\u00E1rio da Indochina -Asia/Sakhalin.generic.long=Hor\u00E1rio de Sakhalin -Asia/Samarkand.generic.long=Hor\u00E1rio do Uzbequist\u00E3o -Asia/Seoul.generic.long=Hor\u00E1rio da Coreia -Asia/Shanghai.generic.long=Hor\u00E1rio da China -Asia/Singapore.generic.long=Hor\u00E1rio de Cingapura -Asia/Taipei.generic.long=Hor\u00E1rio da China -Asia/Tashkent.generic.long=Hor\u00E1rio do Uzbequist\u00E3o -Asia/Tbilisi.generic.long=Hor\u00E1rio da Ge\u00F3rgia -Asia/Tehran.generic.long=Hor\u00E1rio do Ir\u00E3 -Asia/Tel_Aviv.generic.long=Hor\u00E1rio de Israel -Asia/Thimbu.generic.long=Hor\u00E1rio do But\u00E3o -Asia/Thimphu.generic.long=Hor\u00E1rio do But\u00E3o -Asia/Tokyo.generic.long=Hor\u00E1rio do Jap\u00E3o -Asia/Ujung_Pandang.generic.long=Hor\u00E1rio da Indon\u00E9sia Central -Asia/Ulaanbaatar.generic.long=Hor\u00E1rio de Ulaanbaatar -Asia/Ulan_Bator.generic.long=Hor\u00E1rio de Ulaanbaatar -Asia/Urumqi.generic.long=Hor\u00E1rio da China -Asia/Ust-Nera.daylight.long=Hor\u00E1rio de Ver\u00E3o de Ust-Nera -Asia/Ust-Nera.generic.long=Hor\u00E1rio de Ust-Nera -Asia/Ust-Nera.standard.long=Hor\u00E1rio de Ust-Nera -Asia/Vientiane.generic.long=Hor\u00E1rio da Indochina -Asia/Vladivostok.generic.long=Hor\u00E1rio de Vladivostok -Asia/Yakutsk.generic.long=Hor\u00E1rio de Yakutsk -Asia/Yekaterinburg.generic.long=Hor\u00E1rio de Yekaterinburg -Asia/Yerevan.generic.long=Hor\u00E1rio da Arm\u00EAnia -Atlantic/Azores.generic.long=Hor\u00E1rio de A\u00E7ores -Atlantic/Bermuda.generic.long=Hor\u00E1rio do Atl\u00E2ntico -Atlantic/Canary.generic.long=Hor\u00E1rio da Europa Ocidental -Atlantic/Cape_Verde.generic.long=Hor\u00E1rio de Cabo Verde -Atlantic/Faeroe.generic.long=Hor\u00E1rio da Europa Ocidental -Atlantic/Faroe.generic.long=Hor\u00E1rio da Europa Ocidental -Atlantic/Jan_Mayen.generic.long=Hor\u00E1rio da Europa Central -Atlantic/Madeira.generic.long=Hor\u00E1rio da Europa Ocidental -Atlantic/Reykjavik.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Atlantic/South_Georgia.generic.long=Hor\u00E1rio da Ge\u00F3rgia do Sul -Atlantic/St_Helena.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Atlantic/Stanley.generic.long=Hor\u00E1rio das Ilhas Malvinas -Australia/ACT.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/ACT.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/ACT.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/Adelaide.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul) -Australia/Adelaide.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul) -Australia/Adelaide.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul) -Australia/Brisbane.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland) -Australia/Brisbane.generic.long=Hor\u00E1rio do Leste (Queensland) -Australia/Brisbane.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland) -Australia/Broken_Hill.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Broken_Hill.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Broken_Hill.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Canberra.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/Canberra.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/Canberra.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/Currie.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/Currie.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/Currie.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/Darwin.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte) -Australia/Darwin.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte) -Australia/Darwin.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte) -Australia/Eucla.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia) -Australia/Eucla.generic.long=Hor\u00E1rio Ocidental Central (Austr\u00E1lia) -Australia/Eucla.standard.long=Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia) -Australia/Hobart.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia) -Australia/Hobart.generic.long=Hor\u00E1rio do Leste (Tasm\u00E2nia) -Australia/Hobart.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia) -Australia/LHI.generic.long=Hor\u00E1rio de Lord Howe -Australia/Lindeman.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland) -Australia/Lindeman.generic.long=Hor\u00E1rio do Leste (Queensland) -Australia/Lindeman.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland) -Australia/Lord_Howe.generic.long=Hor\u00E1rio de Lord Howe -Australia/Melbourne.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria) -Australia/Melbourne.generic.long=Hor\u00E1rio do Leste (Victoria) -Australia/Melbourne.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Victoria) -Australia/NSW.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/NSW.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/NSW.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/North.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte) -Australia/North.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte) -Australia/North.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte) -Australia/Perth.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia) -Australia/Perth.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia) -Australia/Perth.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia) -Australia/Queensland.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland) -Australia/Queensland.generic.long=Hor\u00E1rio do Leste (Queensland) -Australia/Queensland.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland) -Australia/South.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul) -Australia/South.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul) -Australia/South.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul) -Australia/Sydney.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/Sydney.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/Sydney.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/Tasmania.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia) -Australia/Tasmania.generic.long=Hor\u00E1rio do Leste (Tasm\u00E2nia) -Australia/Tasmania.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia) -Australia/Victoria.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria) -Australia/Victoria.generic.long=Hor\u00E1rio do Leste (Victoria) -Australia/Victoria.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Victoria) -Australia/West.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia) -Australia/West.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia) -Australia/West.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia) -Australia/Yancowinna.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Yancowinna.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Yancowinna.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -BET.generic.long=Hor\u00E1rio de Bras\u00EDlia -BST.generic.long=Hor\u00E1rio de Bangladesh -Brazil/Acre.generic.long=Fuso hor\u00e1rio do Acre -Brazil/DeNoronha.generic.long=Hor\u00E1rio de Fernando de Noronha -Brazil/East.generic.long=Hor\u00E1rio de Bras\u00EDlia -Brazil/West.generic.long=Hor\u00E1rio do Amazonas -CAT.generic.long=Hor\u00E1rio da \u00C1frica Central -CET.generic.long=Hor\u00e1rio da Europa Central -CNT.generic.long=Hor\u00E1rio de Terra Nova -CST.generic.long=Hor\u00E1rio Central -CST6CDT.generic.long=Hor\u00e1rio Central -CTT.generic.long=Hor\u00E1rio da China -Canada/Atlantic.generic.long=Hor\u00E1rio do Atl\u00E2ntico -Canada/Central.generic.long=Hor\u00E1rio Central -Canada/East-Saskatchewan.generic.long=Hor\u00E1rio Central -Canada/Eastern.generic.long=Hor\u00E1rio do Leste -Canada/Mountain.generic.long=Hor\u00E1rio das Montanhas Rochosas -Canada/Newfoundland.generic.long=Hor\u00E1rio de Terra Nova -Canada/Pacific.generic.long=Hor\u00E1rio do Pac\u00EDfico -Canada/Saskatchewan.generic.long=Hor\u00E1rio Central -Canada/Yukon.generic.long=Hor\u00E1rio do Pac\u00EDfico -Chile/Continental.generic.long=Hor\u00E1rio do Chile -Chile/EasterIsland.generic.long=Hor\u00E1rio da Ilha de P\u00E1scoa -Cuba.generic.long=Hor\u00E1rio de Cuba -EAT.generic.long=Hor\u00E1rio do Leste da \u00C1frica -ECT.generic.long=Hor\u00E1rio da Europa Central -EET.generic.long=Hor\u00e1rio da Europa Oriental -EST.generic.long=Hor\u00e1rio do Leste -EST5EDT.generic.long=Hor\u00e1rio do Leste -Egypt.generic.long=Hor\u00E1rio da Europa Oriental -Eire.generic.long=Hor\u00E1rio da Rep\u00FAblica da Irlanda -Etc/Greenwich.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Etc/UCT.generic.long=Hor\u00E1rio Universal Coordenado -Etc/UTC.generic.long=Hor\u00E1rio Universal Coordenado -Etc/Universal.generic.long=Hor\u00E1rio Universal Coordenado -Etc/Zulu.generic.long=Hor\u00E1rio Universal Coordenado -Europe/Amsterdam.generic.long=Hor\u00E1rio da Europa Central -Europe/Andorra.generic.long=Hor\u00E1rio da Europa Central -Europe/Athens.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Belfast.generic.long=Hor\u00E1rio do Reino Unido -Europe/Belgrade.generic.long=Hor\u00E1rio da Europa Central -Europe/Berlin.generic.long=Hor\u00E1rio da Europa Central -Europe/Bratislava.generic.long=Hor\u00E1rio da Europa Central -Europe/Brussels.generic.long=Hor\u00E1rio da Europa Central -Europe/Bucharest.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Budapest.generic.long=Hor\u00E1rio da Europa Central -Europe/Busingen.generic.long=Hor\u00E1rio da Europa Central -Europe/Chisinau.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Copenhagen.generic.long=Hor\u00E1rio da Europa Central -Europe/Dublin.generic.long=Hor\u00E1rio da Rep\u00FAblica da Irlanda -Europe/Gibraltar.generic.long=Hor\u00E1rio da Europa Central -Europe/Guernsey.generic.long=Hor\u00E1rio do Reino Unido -Europe/Helsinki.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Isle_of_Man.generic.long=Hor\u00E1rio do Reino Unido -Europe/Istanbul.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Jersey.generic.long=Hor\u00E1rio do Reino Unido -Europe/Kaliningrad.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu -Europe/Kaliningrad.generic.long=Hor\u00E1rio do Extremo Leste Europeu (FET) -Europe/Kaliningrad.standard.long=Hor\u00E1rio do Extremo Leste Europeu (FET) -Europe/Kiev.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Lisbon.generic.long=Hor\u00E1rio da Europa Ocidental -Europe/Ljubljana.generic.long=Hor\u00E1rio da Europa Central -Europe/London.generic.long=Hor\u00E1rio do Reino Unido -Europe/Luxembourg.generic.long=Hor\u00E1rio da Europa Central -Europe/Madrid.generic.long=Hor\u00E1rio da Europa Central -Europe/Malta.generic.long=Hor\u00E1rio da Europa Central -Europe/Mariehamn.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Minsk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu -Europe/Minsk.generic.long=Hor\u00E1rio do Extremo Leste Europeu (FET) -Europe/Minsk.standard.long=Hor\u00E1rio do Extremo Leste Europeu (FET) -Europe/Monaco.generic.long=Hor\u00E1rio da Europa Central -Europe/Moscow.generic.long=Hor\u00E1rio de Moscou -Europe/Nicosia.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Oslo.generic.long=Hor\u00E1rio da Europa Central -Europe/Paris.generic.long=Hor\u00E1rio da Europa Central -Europe/Podgorica.generic.long=Hor\u00E1rio da Europa Central -Europe/Prague.generic.long=Hor\u00E1rio da Europa Central -Europe/Riga.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Rome.generic.long=Hor\u00E1rio da Europa Central -Europe/Samara.generic.long=Hor\u00E1rio de Samara -Europe/San_Marino.generic.long=Hor\u00E1rio da Europa Central -Europe/Sarajevo.generic.long=Hor\u00E1rio da Europa Central -Europe/Simferopol.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Skopje.generic.long=Hor\u00E1rio da Europa Central -Europe/Sofia.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Stockholm.generic.long=Hor\u00E1rio da Europa Central -Europe/Tallinn.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Tirane.generic.long=Hor\u00E1rio da Europa Central -Europe/Tiraspol.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Uzhgorod.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Vaduz.generic.long=Hor\u00E1rio da Europa Central -Europe/Vatican.generic.long=Hor\u00E1rio da Europa Central -Europe/Vienna.generic.long=Hor\u00E1rio da Europa Central -Europe/Vilnius.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Volgograd.generic.long=Hor\u00E1rio de Volgogrado -Europe/Warsaw.generic.long=Hor\u00E1rio da Europa Central -Europe/Zagreb.generic.long=Hor\u00E1rio da Europa Central -Europe/Zaporozhye.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Zurich.generic.long=Hor\u00E1rio da Europa Central -GB-Eire.generic.long=Hor\u00E1rio do Reino Unido -GB.generic.long=Hor\u00E1rio do Reino Unido -GMT.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Greenwich.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -HST.generic.long=Hor\u00e1rio do Hava\u00ed -Hongkong.generic.long=Hor\u00E1rio de Hong Kong -IET.generic.long=Hor\u00E1rio do Leste -IST.generic.long=Hor\u00E1rio da \u00CDndia -Iceland.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Indian/Antananarivo.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Indian/Chagos.generic.long=Hor\u00E1rio do Territ\u00F3rio do Oceano \u00CDndico -Indian/Christmas.generic.long=Hor\u00E1rio da Ilha Christmas -Indian/Cocos.generic.long=Hor\u00E1rio das Ilhas Cocos -Indian/Comoro.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Indian/Kerguelen.generic.long=Hor\u00E1rio do Territ\u00F3rio Franc\u00EAs no Sul da Ant\u00E1rtica -Indian/Mahe.generic.long=Hor\u00E1rio de Seychelles -Indian/Maldives.generic.long=Hor\u00E1rio das Maldivas -Indian/Mauritius.generic.long=Hor\u00E1rio de Maur\u00EDcio -Indian/Mayotte.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Indian/Reunion.generic.long=Hor\u00E1rio das Ilhas Reuni\u00E3o -Iran.generic.long=Hor\u00E1rio do Ir\u00E3 -Israel.generic.long=Hor\u00E1rio de Israel -JST.generic.long=Hor\u00E1rio do Jap\u00E3o -Jamaica.generic.long=Hor\u00E1rio do Leste -Japan.generic.long=Hor\u00E1rio do Jap\u00E3o -Kwajalein.generic.long=Hor\u00E1rio das Ilhas Marshall -Libya.generic.long=Hor\u00e1rio da Europa Oriental -MET.generic.long=MET -MIT.generic.long=Fuso Hor\u00E1rio de Samoa Ocidental -MST.generic.long=Hor\u00e1rio das Montanhas Rochosas -MST7MDT.generic.long=Hor\u00e1rio das Montanhas Rochosas -Mexico/BajaNorte.generic.long=Hor\u00E1rio do Pac\u00EDfico -Mexico/BajaSur.generic.long=Hor\u00E1rio das Montanhas Rochosas -Mexico/General.generic.long=Hor\u00E1rio Central -NET.generic.long=Hor\u00E1rio da Arm\u00EAnia -NST.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -NZ-CHAT.generic.long=Hor\u00E1rio de Chatham -NZ.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -Navajo.generic.long=Hor\u00E1rio das Montanhas Rochosas -PLT.generic.long=Hor\u00E1rio do Paquist\u00E3o -PNT.generic.long=Hor\u00E1rio das Montanhas Rochosas -PRC.generic.long=Hor\u00E1rio da China -PRT.generic.long=Hor\u00E1rio do Atl\u00E2ntico -PST.generic.long=Hor\u00E1rio do Pac\u00EDfico -PST8PDT.generic.long=Hor\u00e1rio do Pac\u00edfico -Pacific/Apia.generic.long=Fuso Hor\u00E1rio de Samoa Ocidental -Pacific/Auckland.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -Pacific/Chatham.generic.long=Hor\u00E1rio de Chatham -Pacific/Chuuk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk -Pacific/Chuuk.generic.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Chuuk.standard.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Easter.generic.long=Hor\u00E1rio da Ilha de P\u00E1scoa -Pacific/Efate.generic.long=Hor\u00E1rio de Vanuatu -Pacific/Enderbury.generic.long=Hor\u00E1rio da Ilha Phoenix -Pacific/Fakaofo.generic.long=Hor\u00E1rio de Toquelau -Pacific/Fiji.generic.long=Hor\u00E1rio de Fiji -Pacific/Funafuti.generic.long=Hor\u00E1rio de Tuvalu -Pacific/Galapagos.generic.long=Hor\u00E1rio de Gal\u00E1pagos -Pacific/Gambier.generic.long=Hor\u00E1rio de Gambier -Pacific/Guadalcanal.generic.long=Hor\u00E1rio das Ilhas Salom\u00E3o -Pacific/Guam.generic.long=Hor\u00E1rio de Chamorro -Pacific/Honolulu.generic.long=Hor\u00E1rio do Hava\u00ED -Pacific/Johnston.generic.long=Hor\u00E1rio do Hava\u00ED -Pacific/Kiritimati.generic.long=Hor\u00E1rio das Ilhas Line -Pacific/Kosrae.generic.long=Hor\u00E1rio de Kosrae -Pacific/Kwajalein.generic.long=Hor\u00E1rio das Ilhas Marshall -Pacific/Majuro.generic.long=Hor\u00E1rio das Ilhas Marshall -Pacific/Marquesas.generic.long=Hor\u00E1rio das Ilhas Marquesas -Pacific/Midway.generic.long=Hor\u00E1rio da Samoa -Pacific/Nauru.generic.long=Hor\u00E1rio de Nauru -Pacific/Niue.generic.long=Hor\u00E1rio de Niue -Pacific/Norfolk.generic.long=Hor\u00E1rio de Norfolk -Pacific/Noumea.generic.long=Hor\u00E1rio da Nova Caled\u00F4nia -Pacific/Pago_Pago.generic.long=Hor\u00E1rio da Samoa -Pacific/Palau.generic.long=Hor\u00E1rio de Palau -Pacific/Pitcairn.generic.long=Hor\u00E1rio de Pitcairn -Pacific/Pohnpei.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Pohnpei -Pacific/Pohnpei.generic.long=Hor\u00E1rio de Ponape -Pacific/Pohnpei.standard.long=Fuso Hor\u00E1rio de Pohnpei -Pacific/Ponape.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Pohnpei -Pacific/Ponape.generic.long=Hor\u00E1rio de Ponape -Pacific/Ponape.standard.long=Fuso Hor\u00E1rio de Pohnpei -Pacific/Port_Moresby.generic.long=Hor\u00E1rio de Papua-Nova Guin\u00E9 -Pacific/Rarotonga.generic.long=Hor\u00E1rio das Ilhas Cook -Pacific/Saipan.generic.long=Hor\u00E1rio de Chamorro -Pacific/Samoa.generic.long=Hor\u00E1rio da Samoa -Pacific/Tahiti.generic.long=Hor\u00E1rio do Tahiti -Pacific/Tarawa.generic.long=Hor\u00E1rio das Ilhas Gilbert -Pacific/Tongatapu.generic.long=Hor\u00E1rio de Tonga -Pacific/Truk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk -Pacific/Truk.generic.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Truk.standard.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Wake.generic.long=Hor\u00E1rio de Wake -Pacific/Wallis.generic.long=Hor\u00E1rio das Ilhas Wallis e Futuna -Pacific/Yap.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk -Pacific/Yap.generic.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Yap.standard.long=Fuso Hor\u00E1rio de Chuuk -Poland.generic.long=Hor\u00E1rio da Europa Central -Portugal.generic.long=Hor\u00E1rio da Europa Ocidental -ROK.generic.long=Hor\u00E1rio da Coreia -SST.generic.long=Hor\u00E1rio das Ilhas Salom\u00E3o -Singapore.generic.long=Hor\u00E1rio de Cingapura -SystemV/AST4.generic.long=Hor\u00E1rio do Atl\u00E2ntico -SystemV/AST4ADT.generic.long=Hor\u00E1rio do Atl\u00E2ntico -SystemV/CST6.generic.long=Hor\u00E1rio Central -SystemV/CST6CDT.generic.long=Hor\u00E1rio Central -SystemV/EST5.generic.long=Hor\u00E1rio do Leste -SystemV/EST5EDT.generic.long=Hor\u00E1rio do Leste -SystemV/HST10.generic.long=Hor\u00E1rio do Hava\u00ED -SystemV/MST7.generic.long=Hor\u00E1rio das Montanhas Rochosas -SystemV/MST7MDT.generic.long=Hor\u00E1rio das Montanhas Rochosas -SystemV/PST8.generic.long=Hor\u00E1rio do Pac\u00EDfico -SystemV/PST8PDT.generic.long=Hor\u00E1rio do Pac\u00EDfico -SystemV/YST9.generic.long=Hor\u00E1rio do Alasca -SystemV/YST9YDT.generic.long=Hor\u00E1rio do Alasca -Turkey.generic.long=Hor\u00E1rio da Europa Oriental -UCT.generic.long=Hor\u00E1rio Universal Coordenado -US/Alaska.generic.long=Hor\u00E1rio do Alasca -US/Aleutian.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas -US/Arizona.generic.long=Hor\u00E1rio das Montanhas Rochosas -US/Central.generic.long=Hor\u00E1rio Central -US/East-Indiana.generic.long=Hor\u00E1rio do Leste -US/Eastern.generic.long=Hor\u00E1rio do Leste -US/Hawaii.generic.long=Hor\u00E1rio do Hava\u00ED -US/Indiana-Starke.generic.long=Hor\u00E1rio Central -US/Michigan.generic.long=Hor\u00E1rio do Leste -US/Mountain.generic.long=Hor\u00E1rio das Montanhas Rochosas -US/Pacific-New.generic.long=Hor\u00E1rio do Pac\u00EDfico -US/Pacific.generic.long=Hor\u00E1rio do Pac\u00EDfico -US/Samoa.generic.long=Hor\u00E1rio da Samoa -UTC.generic.long=Hor\u00E1rio Universal Coordenado -Universal.generic.long=Hor\u00E1rio Universal Coordenado -VST.generic.long=Hor\u00E1rio da Indochina -W-SU.generic.long=Hor\u00E1rio de Moscou -WET.generic.long=Hor\u00e1rio da Europa Ocidental -Zulu.generic.long=Hor\u00E1rio Universal Coordenado diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties deleted file mode 100644 index e1db445c4a4..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Central sommartid (Nordterritoriet) -ACT.generic.long=Central tid (Nordterritoriet) -ACT.standard.long=Central standardtid (Nordterritoriet) -AET.daylight.long=\u00D6stlig sommartid (New South Wales) -AET.generic.long=\u00D6stlig tid (New South Wales) -AET.standard.long=\u00D6stlig standardtid (New South Wales) -AGT.generic.long=Argentinsk tid -ART.generic.long=\u00D6steuropeisk tid -AST.generic.long=Alaskisk tid -Africa/Abidjan.generic.long=Greenwichtid -Africa/Accra.generic.long=Ghana, normaltid -Africa/Addis_Ababa.generic.long=\u00D6stafrikansk tid -Africa/Algiers.generic.long=Centraleuropeisk tid -Africa/Asmara.generic.long=\u00D6stafrikansk tid -Africa/Asmera.generic.long=\u00D6stafrikansk tid -Africa/Bamako.generic.long=Greenwichtid -Africa/Bangui.generic.long=V\u00E4stafrikansk tid -Africa/Banjul.generic.long=Greenwichtid -Africa/Bissau.generic.long=Greenwichtid -Africa/Blantyre.generic.long=Centralafrikansk tid -Africa/Brazzaville.generic.long=V\u00E4stafrikansk tid -Africa/Bujumbura.generic.long=Centralafrikansk tid -Africa/Cairo.generic.long=\u00D6steuropeisk tid -Africa/Casablanca.generic.long=V\u00E4steuropeisk tid -Africa/Ceuta.generic.long=Centraleuropeisk tid -Africa/Conakry.generic.long=Greenwichtid -Africa/Dakar.generic.long=Greenwichtid -Africa/Dar_es_Salaam.generic.long=\u00D6stafrikansk tid -Africa/Djibouti.generic.long=\u00D6stafrikansk tid -Africa/Douala.generic.long=V\u00E4stafrikansk tid -Africa/El_Aaiun.generic.long=V\u00E4steuropeisk tid -Africa/Freetown.generic.long=Sierra Leone-tid -Africa/Gaborone.generic.long=Centralafrikansk tid -Africa/Harare.generic.long=Centralafrikansk tid -Africa/Johannesburg.generic.long=Sydafrikansk tid -Africa/Juba.generic.long=\u00D6stafrikansk tid -Africa/Kampala.generic.long=\u00D6stafrikansk tid -Africa/Khartoum.generic.long=\u00D6stafrikansk tid -Africa/Kigali.generic.long=Centralafrikansk tid -Africa/Kinshasa.generic.long=V\u00E4stafrikansk tid -Africa/Lagos.generic.long=V\u00E4stafrikansk tid -Africa/Libreville.generic.long=V\u00E4stafrikansk tid -Africa/Lome.generic.long=Greenwichtid -Africa/Luanda.generic.long=V\u00E4stafrikansk tid -Africa/Lubumbashi.generic.long=Centralafrikansk tid -Africa/Lusaka.generic.long=Centralafrikansk tid -Africa/Malabo.generic.long=V\u00E4stafrikansk tid -Africa/Maputo.generic.long=Centralafrikansk tid -Africa/Maseru.generic.long=Sydafrikansk tid -Africa/Mbabane.generic.long=Sydafrikansk tid -Africa/Mogadishu.generic.long=\u00D6stafrikansk tid -Africa/Monrovia.generic.long=Greenwichtid -Africa/Nairobi.generic.long=\u00D6stafrikansk tid -Africa/Ndjamena.generic.long=V\u00E4stafrikansk tid -Africa/Niamey.generic.long=V\u00E4stafrikansk tid -Africa/Nouakchott.generic.long=Greenwichtid -Africa/Ouagadougou.generic.long=Greenwichtid -Africa/Porto-Novo.generic.long=V\u00E4stafrikansk tid -Africa/Sao_Tome.generic.long=Greenwichtid -Africa/Timbuktu.generic.long=Greenwichtid -Africa/Tripoli.generic.long=\u00d6steuropeisk tid -Africa/Tunis.generic.long=Centraleuropeisk tid -Africa/Windhoek.generic.long=V\u00E4stafrikansk tid -America/Adak.generic.long=Hawaiiansk-aleutisk tid -America/Anchorage.generic.long=Alaskisk tid -America/Anguilla.generic.long=Atlantisk tid -America/Antigua.generic.long=Atlantisk tid -America/Araguaina.generic.long=Brasiliansk tid -America/Argentina/Buenos_Aires.generic.long=Argentinsk tid -America/Argentina/Catamarca.generic.long=Argentinsk tid -America/Argentina/ComodRivadavia.generic.long=Argentinsk tid -America/Argentina/Cordoba.generic.long=Argentinsk tid -America/Argentina/Jujuy.generic.long=Argentinsk tid -America/Argentina/La_Rioja.generic.long=Argentinsk tid -America/Argentina/Mendoza.generic.long=Argentinsk tid -America/Argentina/Rio_Gallegos.generic.long=Argentinsk tid -America/Argentina/Salta.generic.long=Argentinsk tid -America/Argentina/San_Juan.generic.long=Argentinsk tid -America/Argentina/San_Luis.generic.long=Argentinsk tid -America/Argentina/Tucuman.generic.long=Argentinsk tid -America/Argentina/Ushuaia.generic.long=Argentinsk tid -America/Aruba.generic.long=Atlantisk tid -America/Asuncion.generic.long=Paraguayansk tid -America/Atikokan.generic.long=\u00D6stlig tid -America/Atka.generic.long=Hawaiiansk-aleutisk tid -America/Bahia.generic.long=Brasiliansk tid -America/Bahia_Banderas.generic.long=Central tid -America/Barbados.generic.long=Atlantisk tid -America/Belem.generic.long=Brasiliansk tid -America/Belize.generic.long=Central tid -America/Blanc-Sablon.generic.long=Atlantisk tid -America/Boa_Vista.generic.long=Amazonas-tid -America/Bogota.generic.long=Kolombiansk tid -America/Boise.generic.long=Mountain-tid -America/Buenos_Aires.generic.long=Argentinsk tid -America/Cambridge_Bay.generic.long=Mountain-tid -America/Campo_Grande.generic.long=Amazonas-tid -America/Cancun.generic.long=Central tid -America/Caracas.generic.long=Venezuelansk tid -America/Catamarca.generic.long=Argentinsk tid -America/Cayenne.generic.long=Franska Guyana-tid -America/Cayman.generic.long=\u00D6stlig tid -America/Chicago.generic.long=Central tid -America/Chihuahua.generic.long=Mountain-tid -America/Coral_Harbour.generic.long=\u00D6stlig tid -America/Cordoba.generic.long=Argentinsk tid -America/Costa_Rica.generic.long=Central tid -America/Creston.generic.long=Mountain-tid -America/Cuiaba.generic.long=Amazonas-tid -America/Curacao.generic.long=Atlantisk tid -America/Danmarkshavn.generic.long=Greenwichtid -America/Dawson.generic.long=Stillahavet -America/Dawson_Creek.generic.long=Mountain-tid -America/Denver.generic.long=Mountain-tid -America/Detroit.generic.long=\u00D6stlig tid -America/Dominica.generic.long=Atlantisk tid -America/Edmonton.generic.long=Mountain-tid -America/Eirunepe.generic.long=Acre, normaltid -America/El_Salvador.generic.long=Central tid -America/Ensenada.generic.long=Stillahavet -America/Fort_Wayne.generic.long=\u00D6stlig tid -America/Fortaleza.generic.long=Brasiliansk tid -America/Glace_Bay.generic.long=Atlantisk tid -America/Godthab.generic.long=V\u00E4stgr\u00F6nl\u00E4ndsk tid -America/Goose_Bay.generic.long=Atlantisk tid -America/Grand_Turk.generic.long=\u00D6stlig tid -America/Grenada.generic.long=Atlantisk tid -America/Guadeloupe.generic.long=Atlantisk tid -America/Guatemala.generic.long=Central tid -America/Guayaquil.generic.long=Ecuadoriansk tid -America/Guyana.generic.long=Guyansk tid -America/Halifax.generic.long=Atlantisk tid -America/Havana.generic.long=Kubansk tid -America/Hermosillo.generic.long=Mountain-tid -America/Indiana/Indianapolis.generic.long=\u00D6stlig tid -America/Indiana/Knox.generic.long=Central tid -America/Indiana/Marengo.generic.long=\u00D6stlig tid -America/Indiana/Petersburg.generic.long=\u00D6stlig tid -America/Indiana/Tell_City.generic.long=Central tid -America/Indiana/Vevay.generic.long=\u00D6stlig tid -America/Indiana/Vincennes.generic.long=\u00D6stlig tid -America/Indiana/Winamac.generic.long=\u00D6stlig tid -America/Indianapolis.generic.long=\u00D6stlig tid -America/Inuvik.generic.long=Mountain-tid -America/Iqaluit.generic.long=\u00D6stlig tid -America/Jamaica.generic.long=\u00D6stlig tid -America/Jujuy.generic.long=Argentinsk tid -America/Juneau.generic.long=Alaskisk tid -America/Kentucky/Louisville.generic.long=\u00D6stlig tid -America/Kentucky/Monticello.generic.long=\u00D6stlig tid -America/Knox_IN.generic.long=Central tid -America/Kralendijk.generic.long=Atlantisk tid -America/La_Paz.generic.long=Boliviansk tid -America/Lima.generic.long=Peruansk tid -America/Los_Angeles.generic.long=Stillahavet -America/Louisville.generic.long=\u00D6stlig tid -America/Lower_Princes.generic.long=Atlantisk tid -America/Maceio.generic.long=Brasiliansk tid -America/Managua.generic.long=Central tid -America/Manaus.generic.long=Amazonas-tid -America/Marigot.generic.long=Atlantisk tid -America/Martinique.generic.long=Atlantisk tid -America/Matamoros.generic.long=Central tid -America/Mazatlan.generic.long=Mountain-tid -America/Mendoza.generic.long=Argentinsk tid -America/Menominee.generic.long=Central tid -America/Merida.generic.long=Central tid -America/Metlakatla.daylight.long=Metlakatla, sommartid -America/Metlakatla.generic.long=Metlakatla-tid -America/Metlakatla.standard.long=Metlakatla, normaltid -America/Mexico_City.generic.long=Central tid -America/Miquelon.generic.long=Saint-Pierre och Miquelons tid -America/Moncton.generic.long=Atlantisk tid -America/Monterrey.generic.long=Central tid -America/Montevideo.generic.long=Uruguayansk tid -America/Montreal.generic.long=\u00D6stlig tid -America/Montserrat.generic.long=Atlantisk tid -America/Nassau.generic.long=\u00D6stlig tid -America/New_York.generic.long=\u00D6stlig tid -America/Nipigon.generic.long=\u00D6stlig tid -America/Nome.generic.long=Alaskisk tid -America/Noronha.generic.long=Fernando de Noronha-tid -America/North_Dakota/Beulah.generic.long=Central tid -America/North_Dakota/Center.generic.long=Central tid -America/North_Dakota/New_Salem.generic.long=Central tid -America/Ojinaga.generic.long=Mountain-tid -America/Panama.generic.long=\u00D6stlig tid -America/Pangnirtung.generic.long=\u00D6stlig tid -America/Paramaribo.generic.long=Surinamsk tid -America/Phoenix.generic.long=Mountain-tid -America/Port-au-Prince.generic.long=\u00D6stlig tid -America/Port_of_Spain.generic.long=Atlantisk tid -America/Porto_Acre.generic.long=Acre, normaltid -America/Porto_Velho.generic.long=Amazonas-tid -America/Puerto_Rico.generic.long=Atlantisk tid -America/Rainy_River.generic.long=Central tid -America/Rankin_Inlet.generic.long=Central tid -America/Recife.generic.long=Brasiliansk tid -America/Regina.generic.long=Central tid -America/Resolute.generic.long=Central tid -America/Rio_Branco.generic.long=Acre, normaltid -America/Rosario.generic.long=Argentinsk tid -America/Santa_Isabel.generic.long=Stillahavet -America/Santarem.generic.long=Brasiliansk tid -America/Santiago.generic.long=Chilensk tid -America/Santo_Domingo.generic.long=Atlantisk tid -America/Sao_Paulo.generic.long=Brasiliansk tid -America/Scoresbysund.generic.long=\u00D6stgr\u00F6nl\u00E4ndsk tid -America/Shiprock.generic.long=Mountain-tid -America/Sitka.generic.long=Alaskisk tid -America/St_Barthelemy.generic.long=Atlantisk tid -America/St_Johns.generic.long=Newfoundl\u00E4ndsk tid -America/St_Kitts.generic.long=Atlantisk tid -America/St_Lucia.generic.long=Atlantisk tid -America/St_Thomas.generic.long=Atlantisk tid -America/St_Vincent.generic.long=Atlantisk tid -America/Swift_Current.generic.long=Central tid -America/Tegucigalpa.generic.long=Central tid -America/Thule.generic.long=Atlantisk tid -America/Thunder_Bay.generic.long=\u00D6stlig tid -America/Tijuana.generic.long=Stillahavet -America/Toronto.generic.long=\u00D6stlig tid -America/Tortola.generic.long=Atlantisk tid -America/Vancouver.generic.long=Stillahavet -America/Virgin.generic.long=Atlantisk tid -America/Whitehorse.generic.long=Stillahavet -America/Winnipeg.generic.long=Central tid -America/Yakutat.generic.long=Alaskisk tid -America/Yellowknife.generic.long=Mountain-tid -Antarctica/Casey.daylight.long=V\u00E4stlig sommartid (Australien) -Antarctica/Casey.generic.long=V\u00E4stlig tid (Australien) -Antarctica/Casey.standard.long=Western Standard Time (Australien) -Antarctica/Davis.generic.long=Davis-tid -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville-tid -Antarctica/Macquarie.daylight.long=Macquarie\u00F6n, sommartid -Antarctica/Macquarie.generic.long=Macquarie\u00F6n, normaltid -Antarctica/Macquarie.standard.long=Macquarie\u00F6n, normaltid -Antarctica/Mawson.generic.long=Mawson-tid -Antarctica/McMurdo.generic.long=Nyzeel\u00E4ndsk tid -Antarctica/Palmer.generic.long=Chilensk tid -Antarctica/Rothera.generic.long=Rothera-tid -Antarctica/South_Pole.generic.long=Nyzeel\u00E4ndsk tid -Antarctica/Syowa.generic.long=Syowa-tid -Antarctica/Vostok.generic.long=Vostok-tid -Arctic/Longyearbyen.generic.long=Centraleuropeisk tid -Asia/Aden.generic.long=Arabisk tid -Asia/Almaty.generic.long=Alma-Ata-tid -Asia/Amman.generic.long=Arabisk tid -Asia/Anadyr.generic.long=Anadyr-tid -Asia/Aqtau.generic.long=Aqtau-tid -Asia/Aqtobe.generic.long=Aqtobe-tid -Asia/Ashgabat.generic.long=Turkmensk tid -Asia/Ashkhabad.generic.long=Turkmensk tid -Asia/Baghdad.generic.long=Arabisk tid -Asia/Bahrain.generic.long=Arabisk tid -Asia/Baku.generic.long=Azerbajdzjansk tid -Asia/Bangkok.generic.long=Indokinesisk tid -Asia/Beirut.generic.long=\u00D6steuropeisk tid -Asia/Bishkek.generic.long=Kirgizisk tid -Asia/Brunei.generic.long=Bruneisk tid -Asia/Calcutta.generic.long=Indisk tid -Asia/Choibalsan.generic.long=Choibalsan-tid -Asia/Chongqing.generic.long=Kinesisk tid -Asia/Chungking.generic.long=Kinesisk tid -Asia/Colombo.generic.long=Indisk tid -Asia/Dacca.generic.long=Bangladeshisk tid -Asia/Damascus.generic.long=\u00D6steuropeisk tid -Asia/Dhaka.generic.long=Bangladeshisk tid -Asia/Dili.generic.long=\u00D6sttimor, normaltid -Asia/Dubai.generic.long=Golfens tid -Asia/Dushanbe.generic.long=Tadzjikisk tid -Asia/Gaza.generic.long=\u00D6steuropeisk tid -Asia/Harbin.generic.long=Kinesisk tid -Asia/Hebron.generic.long=\u00D6steuropeisk tid -Asia/Ho_Chi_Minh.generic.long=Indokinesisk tid -Asia/Hong_Kong.generic.long=Hongkong-tid -Asia/Hovd.generic.long=Hovd-tid -Asia/Irkutsk.generic.long=Irkutsk-tid -Asia/Istanbul.generic.long=\u00D6steuropeisk tid -Asia/Jakarta.generic.long=V\u00E4stindonesisk tid -Asia/Jayapura.generic.long=\u00D6stindonesisk tid -Asia/Jerusalem.generic.long=Israelisk tid -Asia/Kabul.generic.long=Afghansk tid -Asia/Kamchatka.generic.long=Petropavlovsk-Kamtjatskij-tid -Asia/Karachi.generic.long=Pakistansk tid -Asia/Kashgar.generic.long=Kinesisk tid -Asia/Kathmandu.generic.long=Nepalesisk tid -Asia/Katmandu.generic.long=Nepalesisk tid -Asia/Khandyga.daylight.long=Khandyga, sommartid -Asia/Khandyga.generic.long=Khandyga, normaltid -Asia/Khandyga.standard.long=Khandyga, normaltid -Asia/Kolkata.generic.long=Indisk tid -Asia/Krasnoyarsk.generic.long=Krasnojarsk-tid -Asia/Kuala_Lumpur.generic.long=Malaysisk tid -Asia/Kuching.generic.long=Malaysisk tid -Asia/Kuwait.generic.long=Arabisk tid -Asia/Macao.generic.long=Kinesisk tid -Asia/Macau.generic.long=Kinesisk tid -Asia/Magadan.generic.long=Magadan-tid -Asia/Makassar.generic.long=Centralindonesisk tid -Asia/Manila.generic.long=Filippinsk tid -Asia/Muscat.generic.long=Golfens tid -Asia/Nicosia.generic.long=\u00D6steuropeisk tid -Asia/Novokuznetsk.generic.long=Sibirisk tid -Asia/Novosibirsk.generic.long=Sibirisk tid -Asia/Omsk.generic.long=Omsk-tid -Asia/Oral.generic.long=Oral-tid -Asia/Phnom_Penh.generic.long=Indokinesisk tid -Asia/Pontianak.generic.long=V\u00E4stindonesisk tid -Asia/Pyongyang.generic.long=Koreansk tid -Asia/Qatar.generic.long=Arabisk tid -Asia/Qyzylorda.generic.long=Qyzylorda-tid -Asia/Rangoon.generic.long=Myanmar-tid -Asia/Saigon.generic.long=Indokinesisk tid -Asia/Sakhalin.generic.long=Sakhalin-tid -Asia/Samarkand.generic.long=Uzbekisk tid -Asia/Seoul.generic.long=Koreansk tid -Asia/Shanghai.generic.long=Kinesisk tid -Asia/Singapore.generic.long=Singapore-tid -Asia/Taipei.generic.long=Kinesisk tid -Asia/Tashkent.generic.long=Uzbekisk tid -Asia/Tbilisi.generic.long=Georgisk tid -Asia/Tehran.generic.long=Iransk tid -Asia/Tel_Aviv.generic.long=Israelisk tid -Asia/Thimbu.generic.long=Bhutanesisk tid -Asia/Thimphu.generic.long=Bhutanesisk tid -Asia/Tokyo.generic.long=Japansk tid -Asia/Ujung_Pandang.generic.long=Centralindonesisk tid -Asia/Ulaanbaatar.generic.long=Ulaanbaatar-tid -Asia/Ulan_Bator.generic.long=Ulaanbaatar-tid -Asia/Urumqi.generic.long=Kinesisk tid -Asia/Ust-Nera.daylight.long=Ust-Nera, sommartid -Asia/Ust-Nera.generic.long=Ust-Nera, normaltid -Asia/Ust-Nera.standard.long=Ust-Nera, normaltid -Asia/Vientiane.generic.long=Indokinesisk tid -Asia/Vladivostok.generic.long=Vladivostok-tid -Asia/Yakutsk.generic.long=Jakutsk-tid -Asia/Yekaterinburg.generic.long=Jekaterinburg-tid -Asia/Yerevan.generic.long=Armenisk tid -Atlantic/Azores.generic.long=Azorerna-tid -Atlantic/Bermuda.generic.long=Atlantisk tid -Atlantic/Canary.generic.long=V\u00E4steuropeisk tid -Atlantic/Cape_Verde.generic.long=Kap Verde-tid -Atlantic/Faeroe.generic.long=V\u00E4steuropeisk tid -Atlantic/Faroe.generic.long=V\u00E4steuropeisk tid -Atlantic/Jan_Mayen.generic.long=Centraleuropeisk tid -Atlantic/Madeira.generic.long=V\u00E4steuropeisk tid -Atlantic/Reykjavik.generic.long=Greenwichtid -Atlantic/South_Georgia.generic.long=Sydgeorgisk tid -Atlantic/St_Helena.generic.long=Greenwichtid -Atlantic/Stanley.generic.long=Falklands\u00F6arna-tid -Australia/ACT.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/ACT.generic.long=\u00D6stlig tid (New South Wales) -Australia/ACT.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/Adelaide.daylight.long=Central sommartid (South Australia) -Australia/Adelaide.generic.long=Central tid (Sydaustralien) -Australia/Adelaide.standard.long=Central standardtid (Sydaustralien) -Australia/Brisbane.daylight.long=\u00D6stlig sommartid (Queensland) -Australia/Brisbane.generic.long=\u00D6stlig tid (Queensland) -Australia/Brisbane.standard.long=\u00D6stlig standardtid (Queensland) -Australia/Broken_Hill.daylight.long=Central sommartid (South Australia/New South Wales) -Australia/Broken_Hill.generic.long=Central tid (Sydaustralien/New South Wales) -Australia/Broken_Hill.standard.long=Central standardtid (Sydaustralien/New South Wales) -Australia/Canberra.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/Canberra.generic.long=\u00D6stlig tid (New South Wales) -Australia/Canberra.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/Currie.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/Currie.generic.long=\u00D6stlig tid (New South Wales) -Australia/Currie.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/Darwin.daylight.long=Central sommartid (Nordterritoriet) -Australia/Darwin.generic.long=Central tid (Nordterritoriet) -Australia/Darwin.standard.long=Central standardtid (Nordterritoriet) -Australia/Eucla.daylight.long=Central v\u00E4stlig sommartid (Australien) -Australia/Eucla.generic.long=Central v\u00E4stlig tid (Australien) -Australia/Eucla.standard.long=Central v\u00E4stlig normaltid (Australien) -Australia/Hobart.daylight.long=\u00D6stlig sommartid (Tasmanien) -Australia/Hobart.generic.long=\u00D6stlig tid (Tasmania) -Australia/Hobart.standard.long=\u00D6stlig standardtid (Tasmania) -Australia/LHI.generic.long=Lord Howe-tid -Australia/Lindeman.daylight.long=\u00D6stlig sommartid (Queensland) -Australia/Lindeman.generic.long=\u00D6stlig tid (Queensland) -Australia/Lindeman.standard.long=\u00D6stlig standardtid (Queensland) -Australia/Lord_Howe.generic.long=Lord Howe-tid -Australia/Melbourne.daylight.long=\u00D6stlig sommartid (Victoria) -Australia/Melbourne.generic.long=\u00D6stlig tid (Victoria) -Australia/Melbourne.standard.long=\u00D6stlig standardtid (Victoria) -Australia/NSW.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/NSW.generic.long=\u00D6stlig tid (New South Wales) -Australia/NSW.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/North.daylight.long=Central sommartid (Nordterritoriet) -Australia/North.generic.long=Central tid (Nordterritoriet) -Australia/North.standard.long=Central standardtid (Nordterritoriet) -Australia/Perth.daylight.long=V\u00E4stlig sommartid (Australien) -Australia/Perth.generic.long=V\u00E4stlig tid (Australien) -Australia/Perth.standard.long=Western Standard Time (Australien) -Australia/Queensland.daylight.long=\u00D6stlig sommartid (Queensland) -Australia/Queensland.generic.long=\u00D6stlig tid (Queensland) -Australia/Queensland.standard.long=\u00D6stlig standardtid (Queensland) -Australia/South.daylight.long=Central sommartid (South Australia) -Australia/South.generic.long=Central tid (Sydaustralien) -Australia/South.standard.long=Central standardtid (Sydaustralien) -Australia/Sydney.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/Sydney.generic.long=\u00D6stlig tid (New South Wales) -Australia/Sydney.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/Tasmania.daylight.long=\u00D6stlig sommartid (Tasmanien) -Australia/Tasmania.generic.long=\u00D6stlig tid (Tasmania) -Australia/Tasmania.standard.long=\u00D6stlig standardtid (Tasmania) -Australia/Victoria.daylight.long=\u00D6stlig sommartid (Victoria) -Australia/Victoria.generic.long=\u00D6stlig tid (Victoria) -Australia/Victoria.standard.long=\u00D6stlig standardtid (Victoria) -Australia/West.daylight.long=V\u00E4stlig sommartid (Australien) -Australia/West.generic.long=V\u00E4stlig tid (Australien) -Australia/West.standard.long=Western Standard Time (Australien) -Australia/Yancowinna.daylight.long=Central sommartid (South Australia/New South Wales) -Australia/Yancowinna.generic.long=Central tid (Sydaustralien/New South Wales) -Australia/Yancowinna.standard.long=Central standardtid (Sydaustralien/New South Wales) -BET.generic.long=Brasiliansk tid -BST.generic.long=Bangladeshisk tid -Brazil/Acre.generic.long=Acre, normaltid -Brazil/DeNoronha.generic.long=Fernando de Noronha-tid -Brazil/East.generic.long=Brasiliansk tid -Brazil/West.generic.long=Amazonas-tid -CAT.generic.long=Centralafrikansk tid -CET.generic.long=Centraleuropeisk tid -CNT.generic.long=Newfoundl\u00E4ndsk tid -CST.generic.long=Central tid -CST6CDT.generic.long=Central tid -CTT.generic.long=Kinesisk tid -Canada/Atlantic.generic.long=Atlantisk tid -Canada/Central.generic.long=Central tid -Canada/East-Saskatchewan.generic.long=Central tid -Canada/Eastern.generic.long=\u00D6stlig tid -Canada/Mountain.generic.long=Mountain-tid -Canada/Newfoundland.generic.long=Newfoundl\u00E4ndsk tid -Canada/Pacific.generic.long=Stillahavet -Canada/Saskatchewan.generic.long=Central tid -Canada/Yukon.generic.long=Stillahavet -Chile/Continental.generic.long=Chilensk tid -Chile/EasterIsland.generic.long=P\u00E5sk\u00F6n-tid -Cuba.generic.long=Kubansk tid -EAT.generic.long=\u00D6stafrikansk tid -ECT.generic.long=Centraleuropeisk tid -EET.generic.long=\u00d6steuropeisk tid -EST.generic.long=\u00d6stlig tid -EST5EDT.generic.long=\u00d6stlig tid -Egypt.generic.long=\u00D6steuropeisk tid -Eire.generic.long=Irl\u00E4ndsk tid -Etc/Greenwich.generic.long=Greenwichtid -Etc/UCT.generic.long=UTC (koordinerad v\u00E4rldstid) -Etc/UTC.generic.long=UTC (koordinerad v\u00E4rldstid) -Etc/Universal.generic.long=UTC (koordinerad v\u00E4rldstid) -Etc/Zulu.generic.long=UTC (koordinerad v\u00E4rldstid) -Europe/Amsterdam.generic.long=Centraleuropeisk tid -Europe/Andorra.generic.long=Centraleuropeisk tid -Europe/Athens.generic.long=\u00D6steuropeisk tid -Europe/Belfast.generic.long=Brittisk tid -Europe/Belgrade.generic.long=Centraleuropeisk tid -Europe/Berlin.generic.long=Centraleuropeisk tid -Europe/Bratislava.generic.long=Centraleuropeisk tid -Europe/Brussels.generic.long=Centraleuropeisk tid -Europe/Bucharest.generic.long=\u00D6steuropeisk tid -Europe/Budapest.generic.long=Centraleuropeisk tid -Europe/Busingen.generic.long=Centraleuropeisk tid -Europe/Chisinau.generic.long=\u00D6steuropeisk tid -Europe/Copenhagen.generic.long=Centraleuropeisk tid -Europe/Dublin.generic.long=Irl\u00E4ndsk tid -Europe/Gibraltar.generic.long=Centraleuropeisk tid -Europe/Guernsey.generic.long=Brittisk tid -Europe/Helsinki.generic.long=\u00D6steuropeisk tid -Europe/Isle_of_Man.generic.long=Brittisk tid -Europe/Istanbul.generic.long=\u00D6steuropeisk tid -Europe/Jersey.generic.long=Brittisk tid -Europe/Kaliningrad.daylight.long=\u00D6steuropeisk sommartid -Europe/Kaliningrad.generic.long=Kaliningradtid -Europe/Kaliningrad.standard.long=Kaliningradtid -Europe/Kiev.generic.long=\u00D6steuropeisk tid -Europe/Lisbon.generic.long=V\u00E4steuropeisk tid -Europe/Ljubljana.generic.long=Centraleuropeisk tid -Europe/London.generic.long=Brittisk tid -Europe/Luxembourg.generic.long=Centraleuropeisk tid -Europe/Madrid.generic.long=Centraleuropeisk tid -Europe/Malta.generic.long=Centraleuropeisk tid -Europe/Mariehamn.generic.long=\u00D6steuropeisk tid -Europe/Minsk.daylight.long=\u00D6steuropeisk sommartid -Europe/Minsk.generic.long=Kaliningradtid -Europe/Minsk.standard.long=Kaliningradtid -Europe/Monaco.generic.long=Centraleuropeisk tid -Europe/Moscow.generic.long=Moskvas tid -Europe/Nicosia.generic.long=\u00D6steuropeisk tid -Europe/Oslo.generic.long=Centraleuropeisk tid -Europe/Paris.generic.long=Centraleuropeisk tid -Europe/Podgorica.generic.long=Centraleuropeisk tid -Europe/Prague.generic.long=Centraleuropeisk tid -Europe/Riga.generic.long=\u00D6steuropeisk tid -Europe/Rome.generic.long=Centraleuropeisk tid -Europe/Samara.generic.long=Samara-tid -Europe/San_Marino.generic.long=Centraleuropeisk tid -Europe/Sarajevo.generic.long=Centraleuropeisk tid -Europe/Simferopol.generic.long=\u00D6steuropeisk tid -Europe/Skopje.generic.long=Centraleuropeisk tid -Europe/Sofia.generic.long=\u00D6steuropeisk tid -Europe/Stockholm.generic.long=Centraleuropeisk tid -Europe/Tallinn.generic.long=\u00D6steuropeisk tid -Europe/Tirane.generic.long=Centraleuropeisk tid -Europe/Tiraspol.generic.long=\u00D6steuropeisk tid -Europe/Uzhgorod.generic.long=\u00D6steuropeisk tid -Europe/Vaduz.generic.long=Centraleuropeisk tid -Europe/Vatican.generic.long=Centraleuropeisk tid -Europe/Vienna.generic.long=Centraleuropeisk tid -Europe/Vilnius.generic.long=\u00D6steuropeisk tid -Europe/Volgograd.generic.long=Volgograd, normaltid -Europe/Warsaw.generic.long=Centraleuropeisk tid -Europe/Zagreb.generic.long=Centraleuropeisk tid -Europe/Zaporozhye.generic.long=\u00D6steuropeisk tid -Europe/Zurich.generic.long=Centraleuropeisk tid -GB-Eire.generic.long=Brittisk tid -GB.generic.long=Brittisk tid -GMT.generic.long=Greenwichtid -Greenwich.generic.long=Greenwichtid -HST.generic.long=Hawaiiansk tid -Hongkong.generic.long=Hongkong-tid -IET.generic.long=\u00D6stlig tid -IST.generic.long=Indisk tid -Iceland.generic.long=Greenwichtid -Indian/Antananarivo.generic.long=\u00D6stafrikansk tid -Indian/Chagos.generic.long=Indiska Ocean\u00F6arna-tid -Indian/Christmas.generic.long=Jul\u00F6n-tid -Indian/Cocos.generic.long=Kokos\u00F6arna-tid -Indian/Comoro.generic.long=\u00D6stafrikansk tid -Indian/Kerguelen.generic.long=Franska s\u00F6dra och antarktiska \u00F6arna-tid -Indian/Mahe.generic.long=Seychellisk tid -Indian/Maldives.generic.long=Maldivisk tid -Indian/Mauritius.generic.long=Mauritiansk tid -Indian/Mayotte.generic.long=\u00D6stafrikansk tid -Indian/Reunion.generic.long=Reunion-tid -Iran.generic.long=Iransk tid -Israel.generic.long=Israelisk tid -JST.generic.long=Japansk tid -Jamaica.generic.long=\u00D6stlig tid -Japan.generic.long=Japansk tid -Kwajalein.generic.long=Marshall\u00F6arna-tid -Libya.generic.long=\u00d6steuropeisk tid -MET.generic.long=MET -MIT.generic.long=V\u00E4stsamoansk tid -MST.generic.long=Mountain-tid -MST7MDT.generic.long=Mountain-tid -Mexico/BajaNorte.generic.long=Stillahavet -Mexico/BajaSur.generic.long=Mountain-tid -Mexico/General.generic.long=Central tid -NET.generic.long=Armenisk tid -NST.generic.long=Nyzeel\u00E4ndsk tid -NZ-CHAT.generic.long=Chathams tid -NZ.generic.long=Nyzeel\u00E4ndsk tid -Navajo.generic.long=Mountain-tid -PLT.generic.long=Pakistansk tid -PNT.generic.long=Mountain-tid -PRC.generic.long=Kinesisk tid -PRT.generic.long=Atlantisk tid -PST.generic.long=Stillahavet -PST8PDT.generic.long=Stillahavet -Pacific/Apia.generic.long=V\u00E4stsamoansk tid -Pacific/Auckland.generic.long=Nyzeel\u00E4ndsk tid -Pacific/Chatham.generic.long=Chathams tid -Pacific/Chuuk.daylight.long=Chuuk, sommartid -Pacific/Chuuk.generic.long=Chuuk, normaltid -Pacific/Chuuk.standard.long=Chuuk, normaltid -Pacific/Easter.generic.long=P\u00E5sk\u00F6n-tid -Pacific/Efate.generic.long=Vanuatu-tid -Pacific/Enderbury.generic.long=Phoenix\u00F6arna-tid -Pacific/Fakaofo.generic.long=Tokelau-tid -Pacific/Fiji.generic.long=Fijiansk tid -Pacific/Funafuti.generic.long=Tuvalu-tid -Pacific/Galapagos.generic.long=Galapagos-tid -Pacific/Gambier.generic.long=Gambier\u00F6arna-tid -Pacific/Guadalcanal.generic.long=Salomon\u00F6arna-tid -Pacific/Guam.generic.long=Chamorros tid -Pacific/Honolulu.generic.long=Hawaiiansk tid -Pacific/Johnston.generic.long=Hawaiiansk tid -Pacific/Kiritimati.generic.long=Line Islands-tid -Pacific/Kosrae.generic.long=Kosrae-tid -Pacific/Kwajalein.generic.long=Marshall\u00F6arna-tid -Pacific/Majuro.generic.long=Marshall\u00F6arna-tid -Pacific/Marquesas.generic.long=Marquesas\u00F6arna-tid -Pacific/Midway.generic.long=Samoansk tid -Pacific/Nauru.generic.long=Nauruansk tid -Pacific/Niue.generic.long=Niue-tid -Pacific/Norfolk.generic.long=Norfolk-tid -Pacific/Noumea.generic.long=Nya Kaledonien-tid -Pacific/Pago_Pago.generic.long=Samoansk tid -Pacific/Palau.generic.long=Palau-tid -Pacific/Pitcairn.generic.long=Pitcairn-tid -Pacific/Pohnpei.daylight.long=Pohnpei, sommartid -Pacific/Pohnpei.generic.long=Ponape-tid -Pacific/Pohnpei.standard.long=Pohnpei, normaltid -Pacific/Ponape.daylight.long=Pohnpei, sommartid -Pacific/Ponape.generic.long=Ponape-tid -Pacific/Ponape.standard.long=Pohnpei, normaltid -Pacific/Port_Moresby.generic.long=Papua Nya Guinea-tid -Pacific/Rarotonga.generic.long=Cook\u00F6arna-tid -Pacific/Saipan.generic.long=Chamorros tid -Pacific/Samoa.generic.long=Samoansk tid -Pacific/Tahiti.generic.long=Tahiti-tid -Pacific/Tarawa.generic.long=Gilbert\u00F6arna-tid -Pacific/Tongatapu.generic.long=Tonga-tid -Pacific/Truk.daylight.long=Chuuk, sommartid -Pacific/Truk.generic.long=Chuuk, normaltid -Pacific/Truk.standard.long=Chuuk, normaltid -Pacific/Wake.generic.long=Wake-tid -Pacific/Wallis.generic.long=Wallis- och Futuna\u00F6arna-tid -Pacific/Yap.daylight.long=Chuuk, sommartid -Pacific/Yap.generic.long=Chuuk, normaltid -Pacific/Yap.standard.long=Chuuk, normaltid -Poland.generic.long=Centraleuropeisk tid -Portugal.generic.long=V\u00E4steuropeisk tid -ROK.generic.long=Koreansk tid -SST.generic.long=Salomon\u00F6arna-tid -Singapore.generic.long=Singapore-tid -SystemV/AST4.generic.long=Atlantisk tid -SystemV/AST4ADT.generic.long=Atlantisk tid -SystemV/CST6.generic.long=Central tid -SystemV/CST6CDT.generic.long=Central tid -SystemV/EST5.generic.long=\u00D6stlig tid -SystemV/EST5EDT.generic.long=\u00D6stlig tid -SystemV/HST10.generic.long=Hawaiiansk tid -SystemV/MST7.generic.long=Mountain-tid -SystemV/MST7MDT.generic.long=Mountain-tid -SystemV/PST8.generic.long=Stillahavet -SystemV/PST8PDT.generic.long=Stillahavet -SystemV/YST9.generic.long=Alaskisk tid -SystemV/YST9YDT.generic.long=Alaskisk tid -Turkey.generic.long=\u00D6steuropeisk tid -UCT.generic.long=UTC (koordinerad v\u00E4rldstid) -US/Alaska.generic.long=Alaskisk tid -US/Aleutian.generic.long=Hawaiiansk-aleutisk tid -US/Arizona.generic.long=Mountain-tid -US/Central.generic.long=Central tid -US/East-Indiana.generic.long=\u00D6stlig tid -US/Eastern.generic.long=\u00D6stlig tid -US/Hawaii.generic.long=Hawaiiansk tid -US/Indiana-Starke.generic.long=Central tid -US/Michigan.generic.long=\u00D6stlig tid -US/Mountain.generic.long=Mountain-tid -US/Pacific-New.generic.long=Stillahavet -US/Pacific.generic.long=Stillahavet -US/Samoa.generic.long=Samoansk tid -UTC.generic.long=UTC (koordinerad v\u00E4rldstid) -Universal.generic.long=UTC (koordinerad v\u00E4rldstid) -VST.generic.long=Indokinesisk tid -W-SU.generic.long=Moskvas tid -WET.generic.long=V\u00e4steuropeisk tid -Zulu.generic.long=UTC (koordinerad v\u00E4rldstid) diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties deleted file mode 100644 index 62ccf2936e0..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730) -ACT.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A) -ACT.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730) -AET.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -AET.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -AET.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -AGT.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -ART.generic.long=\u4E1C\u6B27\u65F6\u95F4 -AST.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -Africa/Abidjan.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Accra.generic.long=\u52A0\u7EB3\u65F6\u95F4 -Africa/Addis_Ababa.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Algiers.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Africa/Asmara.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Asmera.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Bamako.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Bangui.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Banjul.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Bissau.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Blantyre.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Brazzaville.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Bujumbura.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Cairo.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Africa/Casablanca.generic.long=\u897F\u6B27\u65F6\u95F4 -Africa/Ceuta.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Africa/Conakry.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Dakar.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Dar_es_Salaam.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Djibouti.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Douala.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/El_Aaiun.generic.long=\u897F\u6B27\u65F6\u95F4 -Africa/Freetown.generic.long=\u585E\u62C9\u91CC\u6602\u65F6\u95F4 -Africa/Gaborone.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Harare.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Johannesburg.generic.long=\u5357\u975E\u65F6\u95F4 -Africa/Juba.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Kampala.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Khartoum.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Kigali.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Kinshasa.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Lagos.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Libreville.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Lome.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Luanda.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Lubumbashi.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Lusaka.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Malabo.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Maputo.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Maseru.generic.long=\u5357\u975E\u65F6\u95F4 -Africa/Mbabane.generic.long=\u5357\u975E\u65F6\u95F4 -Africa/Mogadishu.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Monrovia.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Nairobi.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Ndjamena.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Niamey.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Nouakchott.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Ouagadougou.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Porto-Novo.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Sao_Tome.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Timbuktu.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Tripoli.generic.long=\u4e1c\u6b27\u65f6\u95f4 -Africa/Tunis.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Africa/Windhoek.generic.long=\u897F\u975E\u65F6\u95F4 -America/Adak.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4 -America/Anchorage.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/Anguilla.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Antigua.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Araguaina.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Argentina/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Catamarca.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/ComodRivadavia.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Cordoba.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Jujuy.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/La_Rioja.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Mendoza.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Rio_Gallegos.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Salta.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/San_Juan.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/San_Luis.generic.long=\u963f\u6839\u5ef7\u65f6\u95f4 -America/Argentina/Tucuman.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Ushuaia.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Aruba.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Asuncion.generic.long=\u5DF4\u62C9\u572D\u65F6\u95F4 -America/Atikokan.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Atka.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4 -America/Bahia.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Bahia_Banderas.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Barbados.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Belem.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Belize.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Boa_Vista.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Bogota.generic.long=\u54E5\u4F26\u6BD4\u4E9A\u65F6\u95F4 -America/Boise.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Cambridge_Bay.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Campo_Grande.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Cancun.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Caracas.generic.long=\u59D4\u5185\u745E\u62C9\u65F6\u95F4 -America/Catamarca.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Cayenne.generic.long=\u6CD5\u5C5E\u572D\u4E9A\u90A3\u65F6\u95F4 -America/Cayman.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Chicago.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Chihuahua.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Coral_Harbour.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Cordoba.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Costa_Rica.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Creston.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Cuiaba.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Curacao.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Danmarkshavn.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -America/Dawson.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Dawson_Creek.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Denver.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Detroit.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Dominica.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Edmonton.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Eirunepe.generic.long=Acre \u65f6\u95f4 -America/El_Salvador.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Fort_Wayne.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Fortaleza.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Godthab.generic.long=\u897F\u683C\u6797\u5170\u5C9B\u65F6\u95F4 -America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Grand_Turk.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Grenada.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Guatemala.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Guayaquil.generic.long=\u5384\u74DC\u591A\u5C14\u65F6\u95F4 -America/Guyana.generic.long=\u572D\u4E9A\u90A3\u65F6\u95F4 -America/Halifax.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Havana.generic.long=\u53E4\u5DF4\u65F6\u95F4 -America/Hermosillo.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Indiana/Indianapolis.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Knox.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Indiana/Marengo.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Petersburg.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Tell_City.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Indiana/Vevay.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Vincennes.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Winamac.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indianapolis.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Inuvik.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Iqaluit.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Jamaica.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Jujuy.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Juneau.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/Kentucky/Louisville.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Kentucky/Monticello.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Knox_IN.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/La_Paz.generic.long=\u73BB\u5229\u7EF4\u4E9A\u65F6\u95F4 -America/Lima.generic.long=\u79D8\u9C81\u65F6\u95F4 -America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Louisville.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Maceio.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Managua.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Manaus.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Marigot.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Martinique.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Matamoros.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Mazatlan.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Mendoza.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Menominee.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Merida.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Metlakatla.daylight.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u590F\u4EE4\u65F6 -America/Metlakatla.generic.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u65F6\u95F4 -America/Metlakatla.standard.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6807\u51C6\u65F6\u95F4 -America/Mexico_City.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Miquelon.generic.long=\u76AE\u57C3\u5C14\u548C\u5BC6\u514B\u9686\u5C9B\u65F6\u95F4 -America/Moncton.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Monterrey.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Montevideo.generic.long=\u4E4C\u62C9\u572D\u65F6\u95F4 -America/Montreal.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Montserrat.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Nassau.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/New_York.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Nipigon.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Nome.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/Noronha.generic.long=\u8D39\u5C14\u5357\u591A\u5FB7\u8BFA\u7F57\u5C3C\u4E9A\u65F6\u95F4 -America/North_Dakota/Beulah.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/North_Dakota/Center.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/North_Dakota/New_Salem.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Ojinaga.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Panama.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Pangnirtung.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Paramaribo.generic.long=\u82CF\u5229\u5357\u65F6\u95F4 -America/Phoenix.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Port-au-Prince.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Porto_Acre.generic.long=Acre \u65f6\u95f4 -America/Porto_Velho.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Rainy_River.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Rankin_Inlet.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Recife.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Regina.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Resolute.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Rio_Branco.generic.long=Acre \u65f6\u95f4 -America/Rosario.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Santarem.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Santiago.generic.long=\u667A\u5229\u65F6\u95F4 -America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Sao_Paulo.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Scoresbysund.generic.long=\u4E1C\u683C\u6797\u5C9B\u65F6\u95F4 -America/Shiprock.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Sitka.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/St_Johns.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4 -America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Swift_Current.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Tegucigalpa.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Thule.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Thunder_Bay.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Toronto.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Tortola.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Virgin.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Winnipeg.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Yakutat.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/Yellowknife.generic.long=\u5C71\u5730\u65F6\u95F4 -Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A) -Antarctica/Casey.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Antarctica/Casey.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Antarctica/Davis.generic.long=\u6234\u7EF4\u65AF\u65F6\u95F4 -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville \u65F6\u95F4 -Antarctica/Macquarie.daylight.long=\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6 -Antarctica/Macquarie.generic.long=\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4 -Antarctica/Macquarie.standard.long=\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4 -Antarctica/Mawson.generic.long=\u83AB\u68EE\u65F6\u95F4 -Antarctica/McMurdo.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -Antarctica/Palmer.generic.long=\u667A\u5229\u65F6\u95F4 -Antarctica/Rothera.generic.long=\u7F57\u745F\u62C9\u65F6\u95F4 -Antarctica/South_Pole.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -Antarctica/Syowa.generic.long=Syowa \u65F6\u95F4 -Antarctica/Vostok.generic.long=\u83AB\u65AF\u6258\u514B\u65F6\u95F4 -Arctic/Longyearbyen.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Asia/Aden.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Almaty.generic.long=Alma-Ata \u65F6\u95F4 -Asia/Amman.generic.long=\u963f\u62c9\u4f2f\u534a\u5c9b\u65f6\u95f4 -Asia/Anadyr.generic.long=\u963F\u90A3\u5E95\u6CB3\u65F6\u95F4 -Asia/Aqtau.generic.long=Aqtau \u65F6\u95F4 -Asia/Aqtobe.generic.long=Aqtobe \u65F6\u95F4 -Asia/Ashgabat.generic.long=\u571F\u5E93\u66FC\u65F6\u95F4 -Asia/Ashkhabad.generic.long=\u571F\u5E93\u66FC\u65F6\u95F4 -Asia/Baghdad.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Bahrain.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Baku.generic.long=\u4E9A\u585E\u62DC\u7136\u65F6\u95F4 -Asia/Bangkok.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Beirut.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Bishkek.generic.long=\u5409\u5C14\u5409\u65AF\u65AF\u5766\u65F6\u95F4 -Asia/Brunei.generic.long=\u6587\u83B1\u65F6\u95F4 -Asia/Calcutta.generic.long=\u5370\u5EA6\u65F6\u95F4 -Asia/Choibalsan.generic.long=Choibalsan \u65F6\u95F4 -Asia/Chongqing.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Chungking.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Colombo.generic.long=\u5370\u5EA6\u65F6\u95F4 -Asia/Dacca.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4 -Asia/Damascus.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Dhaka.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4 -Asia/Dili.generic.long=\u4E1C\u5E1D\u6C76\u65F6\u95F4 -Asia/Dubai.generic.long=\u6D77\u6E7E\u65F6\u95F4 -Asia/Dushanbe.generic.long=\u5854\u5409\u514B\u65AF\u5766\u65F6\u95F4 -Asia/Gaza.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Harbin.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Hebron.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Ho_Chi_Minh.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Hong_Kong.generic.long=\u9999\u6E2F\u65F6\u95F4 -Asia/Hovd.generic.long=\u79D1\u5E03\u591A\u65F6\u95F4 -Asia/Irkutsk.generic.long=\u4F0A\u5C14\u5E93\u6B21\u514B\u65F6\u95F4 -Asia/Istanbul.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Jakarta.generic.long=\u897F\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Jayapura.generic.long=\u4E1C\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Jerusalem.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4 -Asia/Kabul.generic.long=\u963F\u5BCC\u6C57\u65F6\u95F4 -Asia/Kamchatka.generic.long=\u5F7C\u5F97\u7F57\u5DF4\u752B\u6D1B\u592B\u65AF\u514B\u65F6\u95F4 -Asia/Karachi.generic.long=\u5DF4\u57FA\u65AF\u5766\u65F6\u95F4 -Asia/Kashgar.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Kathmandu.generic.long=\u5C3C\u6CCA\u5C14\u65F6\u95F4 -Asia/Katmandu.generic.long=\u5C3C\u6CCA\u5C14\u65F6\u95F4 -Asia/Khandyga.daylight.long=\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6 -Asia/Khandyga.generic.long=\u6C49\u5FB7\u52A0\u65F6\u95F4 -Asia/Khandyga.standard.long=\u6C49\u5FB7\u52A0\u65F6\u95F4 -Asia/Kolkata.generic.long=\u5370\u5EA6\u65F6\u95F4 -Asia/Krasnoyarsk.generic.long=\u514B\u62C9\u65AF\u8BFA\u4E9A\u5C14\u65AF\u514B\u65F6\u95F4 -Asia/Kuala_Lumpur.generic.long=\u9A6C\u6765\u897F\u4E9A\u65F6\u95F4 -Asia/Kuching.generic.long=\u9A6C\u6765\u897F\u4E9A\u65F6\u95F4 -Asia/Kuwait.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Macao.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Macau.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Magadan.generic.long=Magadan \u65F6\u95F4 -Asia/Makassar.generic.long=\u4E2D\u90E8\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Manila.generic.long=\u83F2\u5F8B\u5BBE\u65F6\u95F4 -Asia/Muscat.generic.long=\u6D77\u6E7E\u65F6\u95F4 -Asia/Nicosia.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Novokuznetsk.generic.long=Novosibirsk \u65F6\u95F4 -Asia/Novosibirsk.generic.long=Novosibirsk \u65F6\u95F4 -Asia/Omsk.generic.long=\u9102\u6728\u65AF\u514B\u65F6\u95F4 -Asia/Oral.generic.long=Oral \u65F6\u95F4 -Asia/Phnom_Penh.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Pontianak.generic.long=\u897F\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Pyongyang.generic.long=\u97E9\u56FD\u65F6\u95F4 -Asia/Qatar.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Qyzylorda.generic.long=Qyzylorda \u65F6\u95F4 -Asia/Rangoon.generic.long=\u7F05\u7538\u65F6\u95F4 -Asia/Saigon.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Sakhalin.generic.long=\u5E93\u9875\u5C9B\u65F6\u95F4 -Asia/Samarkand.generic.long=\u4E4C\u5179\u522B\u514B\u65AF\u5766\u65F6\u95F4 -Asia/Seoul.generic.long=\u97E9\u56FD\u65F6\u95F4 -Asia/Shanghai.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Singapore.generic.long=\u65B0\u52A0\u5761\u65F6\u95F4 -Asia/Taipei.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Tashkent.generic.long=\u4E4C\u5179\u522B\u514B\u65AF\u5766\u65F6\u95F4 -Asia/Tbilisi.generic.long=\u4E54\u6CBB\u4E9A\u65F6\u95F4 -Asia/Tehran.generic.long=\u4F0A\u6717\u65F6\u95F4 -Asia/Tel_Aviv.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4 -Asia/Thimbu.generic.long=\u4E0D\u4E39\u65F6\u95F4 -Asia/Thimphu.generic.long=\u4E0D\u4E39\u65F6\u95F4 -Asia/Tokyo.generic.long=\u65E5\u672C\u65F6\u95F4 -Asia/Ujung_Pandang.generic.long=\u4E2D\u90E8\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Ulaanbaatar.generic.long=\u5E93\u4F26\u65F6\u95F4 -Asia/Ulan_Bator.generic.long=\u5E93\u4F26\u65F6\u95F4 -Asia/Urumqi.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Ust-Nera.daylight.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u590F\u4EE4\u65F6 -Asia/Ust-Nera.generic.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4 -Asia/Ust-Nera.standard.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4 -Asia/Vientiane.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Vladivostok.generic.long=\u6D77\u53C2\u5D34\u65F6\u95F4 -Asia/Yakutsk.generic.long=\u4E9A\u5E93\u6B21\u514B\u65F6\u95F4 -Asia/Yekaterinburg.generic.long=Yekaterinburg \u65F6\u95F4 -Asia/Yerevan.generic.long=\u4E9A\u7F8E\u5C3C\u4E9A\u65F6\u95F4 -Atlantic/Azores.generic.long=\u4E9A\u901F\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -Atlantic/Canary.generic.long=\u897F\u6B27\u65F6\u95F4 -Atlantic/Cape_Verde.generic.long=\u4F5B\u5FB7\u89D2\u65F6\u95F4 -Atlantic/Faeroe.generic.long=\u897F\u6B27\u65F6\u95F4 -Atlantic/Faroe.generic.long=\u897F\u6B27\u65F6\u95F4 -Atlantic/Jan_Mayen.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Atlantic/Madeira.generic.long=\u897F\u6B27\u65F6\u95F4 -Atlantic/Reykjavik.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Atlantic/South_Georgia.generic.long=\u5357\u4E54\u6CBB\u4E9A\u5C9B\u65F6\u95F4 -Atlantic/St_Helena.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Atlantic/Stanley.generic.long=\u798F\u514B\u5170\u7FA4\u5C9B\u65F6\u95F4 -Australia/ACT.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/ACT.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/ACT.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Adelaide.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/Adelaide.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/Adelaide.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/Brisbane.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170) -Australia/Brisbane.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Brisbane.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Broken_Hill.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Broken_Hill.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Canberra.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Canberra.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Canberra.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Currie.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Currie.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Currie.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Darwin.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730) -Australia/Darwin.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A) -Australia/Darwin.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730) -Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A) -Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Hobart.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Hobart.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Hobart.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/LHI.generic.long=\u8C6A\u516C\u65F6\u95F4 -Australia/Lindeman.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170) -Australia/Lindeman.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Lindeman.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Lord_Howe.generic.long=\u8C6A\u516C\u65F6\u95F4 -Australia/Melbourne.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A) -Australia/Melbourne.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A) -Australia/Melbourne.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A) -Australia/NSW.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/NSW.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/NSW.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/North.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730) -Australia/North.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A) -Australia/North.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730) -Australia/Perth.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A) -Australia/Perth.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Perth.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Queensland.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170) -Australia/Queensland.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Queensland.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/South.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/South.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/South.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/Sydney.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Sydney.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Sydney.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Tasmania.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Tasmania.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Tasmania.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Victoria.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A) -Australia/Victoria.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A) -Australia/Victoria.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A) -Australia/West.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A) -Australia/West.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/West.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Yancowinna.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Yancowinna.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Yancowinna.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -BET.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -BST.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4 -Brazil/Acre.generic.long=Acre \u65f6\u95f4 -Brazil/DeNoronha.generic.long=\u8D39\u5C14\u5357\u591A\u5FB7\u8BFA\u7F57\u5C3C\u4E9A\u65F6\u95F4 -Brazil/East.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -Brazil/West.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -CAT.generic.long=\u4E2D\u975E\u65F6\u95F4 -CET.generic.long=\u4e2d\u6b27\u65f6\u95f4 -CNT.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4 -CST.generic.long=\u4E2D\u90E8\u65F6\u95F4 -CST6CDT.generic.long=\u4e2d\u90e8\u65f6\u95f4 -CTT.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -Canada/Central.generic.long=\u4E2D\u90E8\u65F6\u95F4 -Canada/East-Saskatchewan.generic.long=\u4E2D\u90E8\u65F6\u95F4 -Canada/Eastern.generic.long=\u4E1C\u90E8\u65F6\u95F4 -Canada/Mountain.generic.long=\u5C71\u5730\u65F6\u95F4 -Canada/Newfoundland.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4 -Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -Canada/Saskatchewan.generic.long=\u4E2D\u90E8\u65F6\u95F4 -Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -Chile/Continental.generic.long=\u667A\u5229\u65F6\u95F4 -Chile/EasterIsland.generic.long=\u590D\u6D3B\u5C9B\u65F6\u95F4 -Cuba.generic.long=\u53E4\u5DF4\u65F6\u95F4 -EAT.generic.long=\u4E1C\u975E\u65F6\u95F4 -ECT.generic.long=\u4E2D\u6B27\u65F6\u95F4 -EET.generic.long=\u4e1c\u6b27\u65f6\u95f4 -EST.generic.long=\u4e1c\u90e8\u65f6\u95f4 -EST5EDT.generic.long=\u4e1c\u90e8\u65f6\u95f4 -Egypt.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Eire.generic.long=\u7231\u5C14\u5170\u65F6\u95F4 -Etc/Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Etc/UCT.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Etc/UTC.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Etc/Universal.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Etc/Zulu.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Europe/Amsterdam.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Andorra.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Athens.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Belfast.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Belgrade.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Berlin.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Bratislava.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Brussels.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Bucharest.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Budapest.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Busingen.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Chisinau.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Copenhagen.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Dublin.generic.long=\u7231\u5C14\u5170\u65F6\u95F4 -Europe/Gibraltar.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Guernsey.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Helsinki.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Isle_of_Man.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Istanbul.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Jersey.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Kaliningrad.daylight.long=\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6 -Europe/Kaliningrad.generic.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4 -Europe/Kaliningrad.standard.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4 -Europe/Kiev.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Lisbon.generic.long=\u897F\u6B27\u65F6\u95F4 -Europe/Ljubljana.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/London.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Luxembourg.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Madrid.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Malta.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Mariehamn.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Minsk.daylight.long=\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6 -Europe/Minsk.generic.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4 -Europe/Minsk.standard.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4 -Europe/Monaco.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Moscow.generic.long=\u83AB\u65AF\u79D1\u65F6\u95F4 -Europe/Nicosia.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Oslo.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Paris.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Podgorica.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Prague.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Riga.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Rome.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Samara.generic.long=\u6C99\u9A6C\u62C9\u65F6\u95F4 -Europe/San_Marino.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Sarajevo.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Simferopol.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Skopje.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Sofia.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Stockholm.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Tallinn.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Tirane.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Tiraspol.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Uzhgorod.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Vaduz.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Vatican.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Vienna.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Vilnius.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Volgograd.generic.long=\u4F0F\u5C14\u52A0\u683C\u52D2\u65F6\u95F4 -Europe/Warsaw.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Zagreb.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Zaporozhye.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Zurich.generic.long=\u4E2D\u6B27\u65F6\u95F4 -GB-Eire.generic.long=\u82F1\u56FD\u65F6\u95F4 -GB.generic.long=\u82F1\u56FD\u65F6\u95F4 -GMT.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -HST.generic.long=\u590f\u5a01\u5937\u65f6\u95f4 -Hongkong.generic.long=\u9999\u6E2F\u65F6\u95F4 -IET.generic.long=\u4E1C\u90E8\u65F6\u95F4 -IST.generic.long=\u5370\u5EA6\u65F6\u95F4 -Iceland.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Indian/Antananarivo.generic.long=\u4E1C\u975E\u65F6\u95F4 -Indian/Chagos.generic.long=\u5370\u5EA6\u6D0B\u5730\u5E26\u65F6\u95F4 -Indian/Christmas.generic.long=\u5723\u8BDE\u5C9B\u65F6\u95F4 -Indian/Cocos.generic.long=\u53EF\u53EF\u65AF\u7FA4\u5C9B\u65F6\u95F4 -Indian/Comoro.generic.long=\u4E1C\u975E\u65F6\u95F4 -Indian/Kerguelen.generic.long=\u6CD5\u5C5E\u5357\u6781\u65F6\u95F4 -Indian/Mahe.generic.long=\u585E\u5E2D\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Indian/Maldives.generic.long=\u9A6C\u5C14\u4EE3\u592B\u65F6\u95F4 -Indian/Mauritius.generic.long=\u6469\u91CC\u897F\u65AF\u65F6\u95F4 -Indian/Mayotte.generic.long=\u4E1C\u975E\u65F6\u95F4 -Indian/Reunion.generic.long=\u7559\u5C3C\u65FA\u5C9B\u65F6\u95F4 -Iran.generic.long=\u4F0A\u6717\u65F6\u95F4 -Israel.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4 -JST.generic.long=\u65E5\u672C\u65F6\u95F4 -Jamaica.generic.long=\u4E1C\u90E8\u65F6\u95F4 -Japan.generic.long=\u65E5\u672C\u65F6\u95F4 -Kwajalein.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Libya.generic.long=\u4e1c\u6b27\u65f6\u95f4 -MET.generic.long=MET -MIT.generic.long=\u897F\u8428\u6469\u4E9A\u65F6\u95F4 -MST.generic.long=\u5c71\u5730\u65f6\u95f4 -MST7MDT.generic.long=\u5c71\u5730\u65f6\u95f4 -Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -Mexico/BajaSur.generic.long=\u5C71\u5730\u65F6\u95F4 -Mexico/General.generic.long=\u4E2D\u90E8\u65F6\u95F4 -NET.generic.long=\u4E9A\u7F8E\u5C3C\u4E9A\u65F6\u95F4 -NST.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -NZ-CHAT.generic.long=\u67E5\u5854\u59C6\u65F6\u95F4 -NZ.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -Navajo.generic.long=\u5C71\u5730\u65F6\u95F4 -PLT.generic.long=\u5DF4\u57FA\u65AF\u5766\u65F6\u95F4 -PNT.generic.long=\u5C71\u5730\u65F6\u95F4 -PRC.generic.long=\u4E2D\u56FD\u65F6\u95F4 -PRT.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -PST.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -PST8PDT.generic.long=\u592a\u5e73\u6d0b\u65f6\u95f4 -Pacific/Apia.generic.long=\u897F\u8428\u6469\u4E9A\u65F6\u95F4 -Pacific/Auckland.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -Pacific/Chatham.generic.long=\u67E5\u5854\u59C6\u65F6\u95F4 -Pacific/Chuuk.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6 -Pacific/Chuuk.generic.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Chuuk.standard.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Easter.generic.long=\u590D\u6D3B\u5C9B\u65F6\u95F4 -Pacific/Efate.generic.long=\u74E6\u5974\u963F\u56FE\u65F6\u95F4 -Pacific/Enderbury.generic.long=\u83F2\u5C3C\u514B\u65AF\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Fakaofo.generic.long=\u6258\u514B\u52B3\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Fiji.generic.long=\u6590\u6D4E\u65F6\u95F4 -Pacific/Funafuti.generic.long=\u5410\u9C81\u74E6\u65F6\u95F4 -Pacific/Galapagos.generic.long=\u52A0\u62C9\u5DF4\u54E5\u65F6\u95F4 -Pacific/Gambier.generic.long=\u5188\u6BD4\u4E9A\u65F6\u95F4 -Pacific/Guadalcanal.generic.long=\u6240\u7F57\u95E8\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Guam.generic.long=\u67E5\u6469\u6D1B\u65F6\u95F4 -Pacific/Honolulu.generic.long=\u590F\u5A01\u5937\u65F6\u95F4 -Pacific/Johnston.generic.long=\u590F\u5A01\u5937\u65F6\u95F4 -Pacific/Kiritimati.generic.long=Line \u5C9B\u65F6\u95F4 -Pacific/Kosrae.generic.long=Kosrae \u65F6\u95F4 -Pacific/Kwajalein.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Majuro.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Marquesas.generic.long=\u9A6C\u514B\u8428\u65AF\u65F6\u95F4 -Pacific/Midway.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4 -Pacific/Nauru.generic.long=\u8BFA\u9C81\u65F6\u95F4 -Pacific/Niue.generic.long=\u7EBD\u5A01\u5C9B\u65F6\u95F4 -Pacific/Norfolk.generic.long=\u8BFA\u798F\u514B\u65F6\u95F4 -Pacific/Noumea.generic.long=\u65B0\u52A0\u52D2\u591A\u5C3C\u4E9A\u65F6\u95F4 -Pacific/Pago_Pago.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4 -Pacific/Palau.generic.long=\u5E1B\u7409\u65F6\u95F4 -Pacific/Pitcairn.generic.long=\u76AE\u7279\u51EF\u6069\u65F6\u95F4 -Pacific/Pohnpei.daylight.long=\u6CE2\u7EB3\u4F69\u590F\u4EE4\u65F6 -Pacific/Pohnpei.generic.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4 -Pacific/Pohnpei.standard.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4 -Pacific/Ponape.daylight.long=\u6CE2\u7EB3\u4F69\u590F\u4EE4\u65F6 -Pacific/Ponape.generic.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4 -Pacific/Ponape.standard.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4 -Pacific/Port_Moresby.generic.long=\u5DF4\u5E03\u4E9A\u65B0\u51E0\u5185\u4E9A\u65F6\u95F4 -Pacific/Rarotonga.generic.long=\u5E93\u514B\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Saipan.generic.long=\u67E5\u6469\u6D1B\u65F6\u95F4 -Pacific/Samoa.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4 -Pacific/Tahiti.generic.long=\u5927\u6EAA\u5730\u5C9B\u65F6\u95F4 -Pacific/Tarawa.generic.long=\u5409\u4F2F\u7279\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Tongatapu.generic.long=\u4E1C\u52A0\u65F6\u95F4 -Pacific/Truk.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6 -Pacific/Truk.generic.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Truk.standard.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Wake.generic.long=\u5A01\u514B\u65F6\u95F4 -Pacific/Wallis.generic.long=\u74E6\u5229\u65AF\u53CA\u798F\u675C\u7EB3\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Yap.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6 -Pacific/Yap.generic.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Yap.standard.long=\u4E18\u514B\u65F6\u95F4 -Poland.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Portugal.generic.long=\u897F\u6B27\u65F6\u95F4 -ROK.generic.long=\u97E9\u56FD\u65F6\u95F4 -SST.generic.long=\u6240\u7F57\u95E8\u7FA4\u5C9B\u65F6\u95F4 -Singapore.generic.long=\u65B0\u52A0\u5761\u65F6\u95F4 -SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -SystemV/CST6.generic.long=\u4E2D\u90E8\u65F6\u95F4 -SystemV/CST6CDT.generic.long=\u4E2D\u90E8\u65F6\u95F4 -SystemV/EST5.generic.long=\u4E1C\u90E8\u65F6\u95F4 -SystemV/EST5EDT.generic.long=\u4E1C\u90E8\u65F6\u95F4 -SystemV/HST10.generic.long=\u590F\u5A01\u5937\u65F6\u95F4 -SystemV/MST7.generic.long=\u5C71\u5730\u65F6\u95F4 -SystemV/MST7MDT.generic.long=\u5C71\u5730\u65F6\u95F4 -SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -SystemV/YST9.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -SystemV/YST9YDT.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -Turkey.generic.long=\u4E1C\u6B27\u65F6\u95F4 -UCT.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -US/Alaska.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -US/Aleutian.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4 -US/Arizona.generic.long=\u5C71\u5730\u65F6\u95F4 -US/Central.generic.long=\u4E2D\u90E8\u65F6\u95F4 -US/East-Indiana.generic.long=\u4E1C\u90E8\u65F6\u95F4 -US/Eastern.generic.long=\u4E1C\u90E8\u65F6\u95F4 -US/Hawaii.generic.long=\u590F\u5A01\u5937\u65F6\u95F4 -US/Indiana-Starke.generic.long=\u4E2D\u90E8\u65F6\u95F4 -US/Michigan.generic.long=\u4E1C\u90E8\u65F6\u95F4 -US/Mountain.generic.long=\u5C71\u5730\u65F6\u95F4 -US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -US/Pacific.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -US/Samoa.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4 -UTC.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Universal.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -VST.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -W-SU.generic.long=\u83AB\u65AF\u79D1\u65F6\u95F4 -WET.generic.long=\u897f\u6b27\u65f6\u95f4 -Zulu.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties deleted file mode 100644 index a9b77a60a66..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -ACT.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF) -ACT.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -AET.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -AET.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -AET.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -AGT.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -ART.generic.long=\u6771\u6B50\u6642\u9593 -AST.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -Africa/Abidjan.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Accra.generic.long=\u8FE6\u7D0D\u6642\u9593 -Africa/Addis_Ababa.generic.long=\u6771\u975E\u6642\u9593 -Africa/Algiers.generic.long=\u4E2D\u6B50\u6642\u9593 -Africa/Asmara.generic.long=\u6771\u975E\u6642\u9593 -Africa/Asmera.generic.long=\u6771\u975E\u6642\u9593 -Africa/Bamako.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Bangui.generic.long=\u897F\u975E\u6642\u9593 -Africa/Banjul.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Bissau.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Blantyre.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Brazzaville.generic.long=\u897F\u975E\u6642\u9593 -Africa/Bujumbura.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Cairo.generic.long=\u6771\u6B50\u6642\u9593 -Africa/Casablanca.generic.long=\u897F\u6B50\u6642\u9593 -Africa/Ceuta.generic.long=\u4E2D\u6B50\u6642\u9593 -Africa/Conakry.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Dakar.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Dar_es_Salaam.generic.long=\u6771\u975E\u6642\u9593 -Africa/Djibouti.generic.long=\u6771\u975E\u6642\u9593 -Africa/Douala.generic.long=\u897F\u975E\u6642\u9593 -Africa/El_Aaiun.generic.long=\u897F\u6B50\u6642\u9593 -Africa/Freetown.generic.long=\u7345\u5B50\u5C71\u6642\u9593 -Africa/Gaborone.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Harare.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Johannesburg.generic.long=\u5357\u975E\u6642\u9593 -Africa/Juba.generic.long=\u6771\u975E\u6642\u9593 -Africa/Kampala.generic.long=\u6771\u975E\u6642\u9593 -Africa/Khartoum.generic.long=\u6771\u975E\u6642\u9593 -Africa/Kigali.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Kinshasa.generic.long=\u897F\u975E\u6642\u9593 -Africa/Lagos.generic.long=\u897F\u975E\u6642\u9593 -Africa/Libreville.generic.long=\u897F\u975E\u6642\u9593 -Africa/Lome.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Luanda.generic.long=\u897F\u975E\u6642\u9593 -Africa/Lubumbashi.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Lusaka.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Malabo.generic.long=\u897F\u975E\u6642\u9593 -Africa/Maputo.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Maseru.generic.long=\u5357\u975E\u6642\u9593 -Africa/Mbabane.generic.long=\u5357\u975E\u6642\u9593 -Africa/Mogadishu.generic.long=\u6771\u975E\u6642\u9593 -Africa/Monrovia.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Nairobi.generic.long=\u6771\u975E\u6642\u9593 -Africa/Ndjamena.generic.long=\u897F\u975E\u6642\u9593 -Africa/Niamey.generic.long=\u897F\u975E\u6642\u9593 -Africa/Nouakchott.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Ouagadougou.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Porto-Novo.generic.long=\u897F\u975E\u6642\u9593 -Africa/Sao_Tome.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Timbuktu.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Tripoli.generic.long=\u6771\u6b50\u6642\u9593 -Africa/Tunis.generic.long=\u4E2D\u6B50\u6642\u9593 -Africa/Windhoek.generic.long=\u897F\u975E\u6642\u9593 -America/Adak.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593 -America/Anchorage.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/Anguilla.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Antigua.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Araguaina.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Argentina/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Catamarca.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/ComodRivadavia.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Cordoba.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Jujuy.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/La_Rioja.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Mendoza.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Rio_Gallegos.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Salta.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/San_Juan.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/San_Luis.generic.long=\u963f\u6839\u5ef7\u6642\u9593 -America/Argentina/Tucuman.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Ushuaia.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Aruba.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Asuncion.generic.long=\u5DF4\u62C9\u572D\u6642\u9593 -America/Atikokan.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Atka.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593 -America/Bahia.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Bahia_Banderas.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Barbados.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Belem.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Belize.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Boa_Vista.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Bogota.generic.long=\u54E5\u502B\u6BD4\u4E9E\u6642\u9593 -America/Boise.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Cambridge_Bay.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Campo_Grande.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Cancun.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Caracas.generic.long=\u59D4\u5167\u745E\u62C9\u6642\u9593 -America/Catamarca.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Cayenne.generic.long=\u6CD5\u5C6C\u572D\u4E9E\u90A3\u6642\u9593 -America/Cayman.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Chicago.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Chihuahua.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Coral_Harbour.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Cordoba.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Costa_Rica.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Creston.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Cuiaba.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Curacao.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Danmarkshavn.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -America/Dawson.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Dawson_Creek.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Denver.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Detroit.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Dominica.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Edmonton.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Eirunepe.generic.long=Acre \u6642\u9593 -America/El_Salvador.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Fort_Wayne.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Fortaleza.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Godthab.generic.long=\u897F\u683C\u9675\u862D\u6642\u9593 -America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Grand_Turk.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Grenada.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Guatemala.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Guayaquil.generic.long=\u5384\u74DC\u591A\u723E\u6642\u9593 -America/Guyana.generic.long=\u84CB\u4E9E\u90A3\u6642\u9593 -America/Halifax.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Havana.generic.long=\u53E4\u5DF4\u6642\u9593 -America/Hermosillo.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Indiana/Indianapolis.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Knox.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Indiana/Marengo.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Petersburg.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Tell_City.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Indiana/Vevay.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Vincennes.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Winamac.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indianapolis.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Inuvik.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Iqaluit.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Jamaica.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Jujuy.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Juneau.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/Kentucky/Louisville.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Kentucky/Monticello.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Knox_IN.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/La_Paz.generic.long=\u73BB\u5229\u7DAD\u4E9E\u6642\u9593 -America/Lima.generic.long=\u7955\u9B6F\u6642\u9593 -America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Louisville.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Maceio.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Managua.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Manaus.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Marigot.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Martinique.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Matamoros.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Mazatlan.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Mendoza.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Menominee.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Merida.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Metlakatla.daylight.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u65E5\u5149\u7BC0\u7D04\u6642\u9593 -America/Metlakatla.generic.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6642\u9593 -America/Metlakatla.standard.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6A19\u6E96\u6642\u9593 -America/Mexico_City.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Miquelon.generic.long=\u8056\u5F7C\u5FB7\u8207\u5BC6\u555F\u5D19\u6642\u9593 -America/Moncton.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Monterrey.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Montevideo.generic.long=\u70CF\u62C9\u572D\u6642\u9593 -America/Montreal.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Montserrat.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Nassau.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/New_York.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Nipigon.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Nome.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/Noronha.generic.long=\u8CBB\u723E\u5357\u591A-\u8FEA\u8AFE\u7F85\u5C3C\u4E9E\u6642\u9593 -America/North_Dakota/Beulah.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/North_Dakota/Center.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/North_Dakota/New_Salem.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Ojinaga.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Panama.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Pangnirtung.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Paramaribo.generic.long=\u8607\u5229\u5357\u6642\u9593 -America/Phoenix.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Port-au-Prince.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Porto_Acre.generic.long=Acre \u6642\u9593 -America/Porto_Velho.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Rainy_River.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Rankin_Inlet.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Recife.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Regina.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Resolute.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Rio_Branco.generic.long=Acre \u6642\u9593 -America/Rosario.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Santarem.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Santiago.generic.long=\u667A\u5229\u6642\u9593 -America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Sao_Paulo.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Scoresbysund.generic.long=\u6771\u683C\u9675\u862D\u6642\u9593 -America/Shiprock.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Sitka.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/St_Johns.generic.long=\u7D10\u82AC\u862D\u6642\u9593 -America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Swift_Current.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Tegucigalpa.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Thule.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Thunder_Bay.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Toronto.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Tortola.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Virgin.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Winnipeg.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Yakutat.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/Yellowknife.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Antarctica/Casey.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Antarctica/Casey.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Antarctica/Davis.generic.long=\u81FA\u7DAD\u65AF\u6642\u9593 -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville \u6642\u9593 -Antarctica/Macquarie.daylight.long=\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593 -Antarctica/Macquarie.generic.long=\u9EA5\u5938\u5229\u5CF6\u6642\u9593 -Antarctica/Macquarie.standard.long=\u9EA5\u5938\u5229\u5CF6\u6642\u9593 -Antarctica/Mawson.generic.long=\u83AB\u68EE\u6642\u9593 -Antarctica/McMurdo.generic.long=\u7D10\u897F\u862D\u6642\u9593 -Antarctica/Palmer.generic.long=\u667A\u5229\u6642\u9593 -Antarctica/Rothera.generic.long=\u7F85\u897F\u62C9\u6642\u9593 -Antarctica/South_Pole.generic.long=\u7D10\u897F\u862D\u6642\u9593 -Antarctica/Syowa.generic.long=\u5915\u6B50\u74E6 (Syowa) \u6642\u9593 -Antarctica/Vostok.generic.long=\u4F5B\u65AF\u6258 (Vostok) \u6642\u9593 -Arctic/Longyearbyen.generic.long=\u4E2D\u6B50\u6642\u9593 -Asia/Aden.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Almaty.generic.long=\u963F\u62C9\u6728\u5716\u6642\u9593 -Asia/Amman.generic.long=\u963f\u62c9\u4f2f\u6642\u9593 -Asia/Anadyr.generic.long=\u963F\u90A3\u5E95\u6CB3\u6642\u9593 -Asia/Aqtau.generic.long=\u963F\u514B\u5957\u6642\u9593 -Asia/Aqtobe.generic.long=\u963F\u514B\u6258\u5225\u6642\u9593 -Asia/Ashgabat.generic.long=\u571F\u5EAB\u66FC\u6642\u9593 -Asia/Ashkhabad.generic.long=\u571F\u5EAB\u66FC\u6642\u9593 -Asia/Baghdad.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Bahrain.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Baku.generic.long=\u4E9E\u585E\u62DC\u7136\u6642\u9593 -Asia/Bangkok.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Beirut.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Bishkek.generic.long=\u5409\u723E\u5409\u65AF\u6642\u9593 -Asia/Brunei.generic.long=\u6C76\u840A\u6642\u9593 -Asia/Calcutta.generic.long=\u5370\u5EA6\u6642\u9593 -Asia/Choibalsan.generic.long=\u5DE7\u5DF4\u5C71 (Choibalsan) \u6642\u9593 -Asia/Chongqing.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Chungking.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Colombo.generic.long=\u5370\u5EA6\u6642\u9593 -Asia/Dacca.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593 -Asia/Damascus.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Dhaka.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593 -Asia/Dili.generic.long=\u6771\u5E1D\u6C76\u6642\u9593 -Asia/Dubai.generic.long=\u6CE2\u65AF\u7063\u6642\u9593 -Asia/Dushanbe.generic.long=\u5854\u5409\u514B\u6642\u9593 -Asia/Gaza.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Harbin.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Hebron.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Ho_Chi_Minh.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Hong_Kong.generic.long=\u9999\u6E2F\u6642\u9593 -Asia/Hovd.generic.long=\u4FAF\u5FB7 (Hovd) \u6642\u9593 -Asia/Irkutsk.generic.long=\u4F0A\u723E\u5EAB\u6B21\u514B\u6642\u9593 -Asia/Istanbul.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Jakarta.generic.long=\u897F\u5370\u5C3C\u6642\u9593 -Asia/Jayapura.generic.long=\u6771\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593 -Asia/Jerusalem.generic.long=\u4EE5\u8272\u5217\u6642\u9593 -Asia/Kabul.generic.long=\u963F\u5BCC\u6C57\u6642\u9593 -Asia/Kamchatka.generic.long=Petropavlovsk-Kamchatski \u6642\u9593 -Asia/Karachi.generic.long=\u5DF4\u57FA\u65AF\u5766\u6642\u9593 -Asia/Kashgar.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Kathmandu.generic.long=\u5C3C\u6CCA\u723E\u6642\u9593 -Asia/Katmandu.generic.long=\u5C3C\u6CCA\u723E\u6642\u9593 -Asia/Khandyga.daylight.long=\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593 -Asia/Khandyga.generic.long=\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593 -Asia/Khandyga.standard.long=\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593 -Asia/Kolkata.generic.long=\u5370\u5EA6\u6642\u9593 -Asia/Krasnoyarsk.generic.long=\u514B\u62C9\u65AF\u8AFE\u4E9E\u723E\u65AF\u514B\u6642\u9593 -Asia/Kuala_Lumpur.generic.long=\u99AC\u4F86\u897F\u4E9E\u6642\u9593 -Asia/Kuching.generic.long=\u99AC\u4F86\u897F\u4E9E\u6642\u9593 -Asia/Kuwait.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Macao.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Macau.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Magadan.generic.long=\u99AC\u52A0\u4E39\u6642\u9593 -Asia/Makassar.generic.long=\u4E2D\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593 -Asia/Manila.generic.long=\u83F2\u5F8B\u8CD3\u6642\u9593 -Asia/Muscat.generic.long=\u6CE2\u65AF\u7063\u6642\u9593 -Asia/Nicosia.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Novokuznetsk.generic.long=\u65B0\u897F\u4F2F\u5229\u4E9E\u6642\u9593 -Asia/Novosibirsk.generic.long=\u65B0\u897F\u4F2F\u5229\u4E9E\u6642\u9593 -Asia/Omsk.generic.long=\u6B50\u59C6\u65AF\u514B (Omsk) \u6642\u9593 -Asia/Oral.generic.long=\u6B50\u4F5B\u6642\u9593 -Asia/Phnom_Penh.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Pontianak.generic.long=\u897F\u5370\u5C3C\u6642\u9593 -Asia/Pyongyang.generic.long=\u97D3\u570B\u6642\u9593 -Asia/Qatar.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Qyzylorda.generic.long=\u514B\u5B5C\u6D1B\u723E\u9054\u6642\u9593 -Asia/Rangoon.generic.long=\u7DEC\u7538\u6642\u9593 -Asia/Saigon.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Sakhalin.generic.long=\u5EAB\u9801\u5CF6\u6642\u9593 -Asia/Samarkand.generic.long=\u70CF\u8332\u5225\u514B\u65AF\u5766\u6642\u9593 -Asia/Seoul.generic.long=\u97D3\u570B\u6642\u9593 -Asia/Shanghai.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Singapore.generic.long=\u65B0\u52A0\u5761\u6642\u9593 -Asia/Taipei.generic.long=\u53f0\u7063\u6642\u9593 -Asia/Tashkent.generic.long=\u70CF\u8332\u5225\u514B\u65AF\u5766\u6642\u9593 -Asia/Tbilisi.generic.long=\u55AC\u6CBB\u4E9E\u6642\u9593 -Asia/Tehran.generic.long=\u4F0A\u6717\u6642\u9593 -Asia/Tel_Aviv.generic.long=\u4EE5\u8272\u5217\u6642\u9593 -Asia/Thimbu.generic.long=\u4E0D\u4E39\u6642\u9593 -Asia/Thimphu.generic.long=\u4E0D\u4E39\u6642\u9593 -Asia/Tokyo.generic.long=\u65E5\u672C\u6642\u9593 -Asia/Ujung_Pandang.generic.long=\u4E2D\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593 -Asia/Ulaanbaatar.generic.long=\u5EAB\u502B\u6642\u9593 -Asia/Ulan_Bator.generic.long=\u5EAB\u502B\u6642\u9593 -Asia/Urumqi.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Ust-Nera.daylight.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u590F\u4EE4\u6642\u9593 -Asia/Ust-Nera.generic.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593 -Asia/Ust-Nera.standard.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593 -Asia/Vientiane.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Vladivostok.generic.long=\u6D77\u53C3\u5D34\u6642\u9593 -Asia/Yakutsk.generic.long=\u4E9E\u5EAB\u6B21\u514B\u6642\u9593 -Asia/Yekaterinburg.generic.long=\u8449\u5361\u6377\u7433\u5821\u6642\u9593 -Asia/Yerevan.generic.long=\u4E9E\u7F8E\u5C3C\u4E9E\u6642\u9593 -Atlantic/Azores.generic.long=\u4E9E\u901F\u723E\u7FA4\u5CF6\u6642\u9593 -Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -Atlantic/Canary.generic.long=\u897F\u6B50\u6642\u9593 -Atlantic/Cape_Verde.generic.long=\u4F5B\u5FB7\u89D2\u6642\u9593 -Atlantic/Faeroe.generic.long=\u897F\u6B50\u6642\u9593 -Atlantic/Faroe.generic.long=\u897F\u6B50\u6642\u9593 -Atlantic/Jan_Mayen.generic.long=\u4E2D\u6B50\u6642\u9593 -Atlantic/Madeira.generic.long=\u897F\u6B50\u6642\u9593 -Atlantic/Reykjavik.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Atlantic/South_Georgia.generic.long=\u5357\u55AC\u6CBB\u4E9E\u6642\u9593 -Atlantic/St_Helena.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Atlantic/Stanley.generic.long=\u798F\u514B\u862D\u7FA4\u5CF6\u6642\u9593 -Australia/ACT.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/ACT.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/ACT.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Adelaide.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340) -Australia/Adelaide.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8) -Australia/Adelaide.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8) -Australia/Brisbane.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Brisbane.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Brisbane.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Broken_Hill.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Broken_Hill.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Canberra.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Canberra.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Canberra.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Currie.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Currie.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Currie.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Darwin.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -Australia/Darwin.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF) -Australia/Darwin.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Hobart.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6) -Australia/Hobart.generic.long=\u6FB3\u5927\u5229\u4E9E\u6771\u90E8\u6642\u9593 (\u5854\u65AF\u99AC\u5C3C\u4E9E\u5CF6) -Australia/Hobart.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6) -Australia/LHI.generic.long=\u8C6A\u52F3\u7235\u5CF6\u6642\u9593 -Australia/Lindeman.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Lindeman.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Lindeman.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Lord_Howe.generic.long=\u8C6A\u52F3\u7235\u5CF6\u6642\u9593 -Australia/Melbourne.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6) -Australia/Melbourne.generic.long=\u6771\u90E8\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E) -Australia/Melbourne.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6) -Australia/NSW.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/NSW.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/NSW.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/North.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -Australia/North.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF) -Australia/North.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -Australia/Perth.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Perth.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Perth.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Queensland.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Queensland.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Queensland.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D) -Australia/South.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340) -Australia/South.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8) -Australia/South.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8) -Australia/Sydney.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Sydney.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Sydney.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Tasmania.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6) -Australia/Tasmania.generic.long=\u6FB3\u5927\u5229\u4E9E\u6771\u90E8\u6642\u9593 (\u5854\u65AF\u99AC\u5C3C\u4E9E\u5CF6) -Australia/Tasmania.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6) -Australia/Victoria.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6) -Australia/Victoria.generic.long=\u6771\u90E8\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E) -Australia/Victoria.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6) -Australia/West.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/West.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/West.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Yancowinna.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Yancowinna.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Yancowinna.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF) -BET.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -BST.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593 -Brazil/Acre.generic.long=Acre \u6642\u9593 -Brazil/DeNoronha.generic.long=\u8CBB\u723E\u5357\u591A-\u8FEA\u8AFE\u7F85\u5C3C\u4E9E\u6642\u9593 -Brazil/East.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -Brazil/West.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -CAT.generic.long=\u4E2D\u975E\u6642\u9593 -CET.generic.long=\u4e2d\u6b50\u6642\u9593 -CNT.generic.long=\u7D10\u82AC\u862D\u6642\u9593 -CST.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -CST6CDT.generic.long=\u7f8e\u570b\u4e2d\u90e8\u6642\u9593 -CTT.generic.long=\u4E2D\u570B\u6642\u9593 -Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -Canada/Central.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -Canada/East-Saskatchewan.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -Canada/Eastern.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -Canada/Mountain.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -Canada/Newfoundland.generic.long=\u7D10\u82AC\u862D\u6642\u9593 -Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -Canada/Saskatchewan.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -Chile/Continental.generic.long=\u667A\u5229\u6642\u9593 -Chile/EasterIsland.generic.long=\u5FA9\u6D3B\u5CF6\u6642\u9593 -Cuba.generic.long=\u53E4\u5DF4\u6642\u9593 -EAT.generic.long=\u6771\u975E\u6642\u9593 -ECT.generic.long=\u4E2D\u6B50\u6642\u9593 -EET.generic.long=\u6771\u6b50\u6642\u9593 -EST.generic.long=\u7f8e\u570b\u6771\u90e8\u6642\u9593 -EST5EDT.generic.long=\u7f8e\u570b\u6771\u90e8\u6642\u9593 -Egypt.generic.long=\u6771\u6B50\u6642\u9593 -Eire.generic.long=\u611B\u723E\u862D\u6587\u6642\u9593 -Etc/Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Etc/UCT.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Etc/UTC.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Etc/Universal.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Etc/Zulu.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Europe/Amsterdam.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Andorra.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Athens.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Belfast.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Belgrade.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Berlin.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Bratislava.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Brussels.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Bucharest.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Budapest.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Busingen.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Chisinau.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Copenhagen.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Dublin.generic.long=\u611B\u723E\u862D\u6587\u6642\u9593 -Europe/Gibraltar.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Guernsey.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Helsinki.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Isle_of_Man.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Istanbul.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Jersey.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Kaliningrad.daylight.long=\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593 -Europe/Kaliningrad.generic.long=\u6771\u6B50\u5167\u9678\u6642\u9593 -Europe/Kaliningrad.standard.long=\u6771\u6B50\u5167\u9678\u6642\u9593 -Europe/Kiev.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Lisbon.generic.long=\u897F\u6B50\u6642\u9593 -Europe/Ljubljana.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/London.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Luxembourg.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Madrid.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Malta.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Mariehamn.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Minsk.daylight.long=\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593 -Europe/Minsk.generic.long=\u6771\u6B50\u5167\u9678\u6642\u9593 -Europe/Minsk.standard.long=\u6771\u6B50\u5167\u9678\u6642\u9593 -Europe/Monaco.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Moscow.generic.long=\u83AB\u65AF\u79D1\u6642\u9593 -Europe/Nicosia.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Oslo.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Paris.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Podgorica.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Prague.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Riga.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Rome.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Samara.generic.long=\u6C99\u99AC\u62C9\u6642\u9593 -Europe/San_Marino.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Sarajevo.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Simferopol.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Skopje.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Sofia.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Stockholm.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Tallinn.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Tirane.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Tiraspol.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Uzhgorod.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Vaduz.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Vatican.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Vienna.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Vilnius.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Volgograd.generic.long=\u4F0F\u723E\u52A0\u683C\u52D2\u6642\u9593 -Europe/Warsaw.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Zagreb.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Zaporozhye.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Zurich.generic.long=\u4E2D\u6B50\u6642\u9593 -GB-Eire.generic.long=\u82F1\u570B\u6642\u9593 -GB.generic.long=\u82F1\u570B\u6642\u9593 -GMT.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -HST.generic.long=\u590f\u5a01\u5937\u6642\u9593 -Hongkong.generic.long=\u9999\u6E2F\u6642\u9593 -IET.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -IST.generic.long=\u5370\u5EA6\u6642\u9593 -Iceland.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Indian/Antananarivo.generic.long=\u6771\u975E\u6642\u9593 -Indian/Chagos.generic.long=\u82F1\u5C6C\u5370\u5EA6\u6D0B\u5730\u5340 -Indian/Christmas.generic.long=\u8056\u8A95\u5CF6\u6642\u9593 -Indian/Cocos.generic.long=\u53EF\u53EF\u65AF\u7FA4\u5CF6\u6642\u9593 -Indian/Comoro.generic.long=\u6771\u975E\u6642\u9593 -Indian/Kerguelen.generic.long=\u6CD5\u570B\u5357\u534A\u7403\u53CA\u5357\u6975\u5C6C\u5730\u6642\u9593 -Indian/Mahe.generic.long=\u585E\u5E2D\u723E\u7FA4\u5CF6\u6642\u9593 -Indian/Maldives.generic.long=\u99AC\u723E\u5730\u592B\u6642\u9593 -Indian/Mauritius.generic.long=\u6469\u91CC\u897F\u65AF\u6642\u9593 -Indian/Mayotte.generic.long=\u6771\u975E\u6642\u9593 -Indian/Reunion.generic.long=\u7559\u5C3C\u65FA\u5CF6\u6642\u9593 -Iran.generic.long=\u4F0A\u6717\u6642\u9593 -Israel.generic.long=\u4EE5\u8272\u5217\u6642\u9593 -JST.generic.long=\u65E5\u672C\u6642\u9593 -Jamaica.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -Japan.generic.long=\u65E5\u672C\u6642\u9593 -Kwajalein.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593 -Libya.generic.long=\u6771\u6b50\u6642\u9593 -MET.generic.long=MET -MIT.generic.long=\u897F\u85A9\u6469\u4E9E\u6642\u9593 -MST.generic.long=\u7f8e\u570b\u5c71\u5340\u6642\u9593 -MST7MDT.generic.long=\u7f8e\u570b\u5c71\u5340\u6642\u9593 -Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -Mexico/BajaSur.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -Mexico/General.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -NET.generic.long=\u4E9E\u7F8E\u5C3C\u4E9E\u6642\u9593 -NST.generic.long=\u7D10\u897F\u862D\u6642\u9593 -NZ-CHAT.generic.long=\u67E5\u5766\u6642\u9593 -NZ.generic.long=\u7D10\u897F\u862D\u6642\u9593 -Navajo.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -PLT.generic.long=\u5DF4\u57FA\u65AF\u5766\u6642\u9593 -PNT.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -PRC.generic.long=\u4E2D\u570B\u6642\u9593 -PRT.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -PST.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -PST8PDT.generic.long=\u592a\u5e73\u6d0b\u6642\u9593 -Pacific/Apia.generic.long=\u897F\u85A9\u6469\u4E9E\u6642\u9593 -Pacific/Auckland.generic.long=\u7D10\u897F\u862D\u6642\u9593 -Pacific/Chatham.generic.long=\u67E5\u5766\u6642\u9593 -Pacific/Chuuk.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593 -Pacific/Chuuk.generic.long=\u695A\u514B\u6642\u9593 -Pacific/Chuuk.standard.long=\u695A\u514B\u6642\u9593 -Pacific/Easter.generic.long=\u5FA9\u6D3B\u5CF6\u6642\u9593 -Pacific/Efate.generic.long=\u74E6\u5974\u963F\u5716\u6642\u9593 -Pacific/Enderbury.generic.long=\u83F2\u5C3C\u514B\u65AF\u7FA4\u5CF6\u6642\u9593 -Pacific/Fakaofo.generic.long=\u6258\u514B\u52DE\u7FA4\u5CF6\u6642\u9593 -Pacific/Fiji.generic.long=\u6590\u6FDF\u6642\u9593 -Pacific/Funafuti.generic.long=\u5410\u74E6\u9B6F\u6642\u9593 -Pacific/Galapagos.generic.long=\u52A0\u62C9\u5DF4\u54E5\u6642\u9593 -Pacific/Gambier.generic.long=\u7518\u6BD4\u723E\u6642\u9593 -Pacific/Guadalcanal.generic.long=\u6240\u7F85\u9580\u7FA4\u5CF6\u6642\u9593 -Pacific/Guam.generic.long=\u67E5\u83AB\u7F85\u6642\u9593 -Pacific/Honolulu.generic.long=\u590F\u5A01\u5937\u6642\u9593 -Pacific/Johnston.generic.long=\u590F\u5A01\u5937\u6642\u9593 -Pacific/Kiritimati.generic.long=\u5217\u5DBC\u7FA4\u5CF6\u6642\u9593 -Pacific/Kosrae.generic.long=Kosrae \u6642\u9593 -Pacific/Kwajalein.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593 -Pacific/Majuro.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593 -Pacific/Marquesas.generic.long=\u99AC\u514B\u85A9\u65AF\u6642\u9593 -Pacific/Midway.generic.long=\u85A9\u6469\u4E9E\u6642\u9593 -Pacific/Nauru.generic.long=\u8AFE\u9B6F\u6642\u9593 -Pacific/Niue.generic.long=\u7D10\u5A01\u5CF6\u6642\u9593 -Pacific/Norfolk.generic.long=\u8AFE\u798F\u514B\u6642\u9593 -Pacific/Noumea.generic.long=\u65B0\u52A0\u52D2\u591A\u5C3C\u4E9E\u6642\u9593 -Pacific/Pago_Pago.generic.long=\u85A9\u6469\u4E9E\u6642\u9593 -Pacific/Palau.generic.long=\u5E1B\u7409\u6642\u9593 -Pacific/Pitcairn.generic.long=\u76AE\u7279\u5EB7\u6642\u9593 -Pacific/Pohnpei.daylight.long=\u6CE2\u7D0D\u4F69\u590F\u4EE4\u6642\u9593 -Pacific/Pohnpei.generic.long=\u6CE2\u7D0D\u4F69\u5CF6\u6642\u9593 -Pacific/Pohnpei.standard.long=\u6CE2\u7D0D\u4F69\u6642\u9593 -Pacific/Ponape.daylight.long=\u6CE2\u7D0D\u4F69\u590F\u4EE4\u6642\u9593 -Pacific/Ponape.generic.long=\u6CE2\u7D0D\u4F69\u5CF6\u6642\u9593 -Pacific/Ponape.standard.long=\u6CE2\u7D0D\u4F69\u6642\u9593 -Pacific/Port_Moresby.generic.long=\u5DF4\u5E03\u4E9E\u65B0\u5E7E\u5167\u4E9E\u6642\u9593 -Pacific/Rarotonga.generic.long=\u5EAB\u514B\u7FA4\u5CF6\u6642\u9593 -Pacific/Saipan.generic.long=\u67E5\u83AB\u7F85\u6642\u9593 -Pacific/Samoa.generic.long=\u85A9\u6469\u4E9E\u6642\u9593 -Pacific/Tahiti.generic.long=\u5927\u6EAA\u5730\u6642\u9593 -Pacific/Tarawa.generic.long=\u5409\u4F2F\u7279\u7FA4\u5CF6\u6642\u9593 -Pacific/Tongatapu.generic.long=\u6771\u52A0\u6642\u9593 -Pacific/Truk.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593 -Pacific/Truk.generic.long=\u695A\u514B\u6642\u9593 -Pacific/Truk.standard.long=\u695A\u514B\u6642\u9593 -Pacific/Wake.generic.long=\u5A01\u514B\u6642\u9593 -Pacific/Wallis.generic.long=\u74E6\u5229\u65AF\u53CA\u798F\u675C\u7D0D\u7FA4\u5CF6\u6642\u9593 -Pacific/Yap.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593 -Pacific/Yap.generic.long=\u695A\u514B\u6642\u9593 -Pacific/Yap.standard.long=\u695A\u514B\u6642\u9593 -Poland.generic.long=\u4E2D\u6B50\u6642\u9593 -Portugal.generic.long=\u897F\u6B50\u6642\u9593 -ROK.generic.long=\u97D3\u570B\u6642\u9593 -SST.generic.long=\u6240\u7F85\u9580\u7FA4\u5CF6\u6642\u9593 -Singapore.generic.long=\u65B0\u52A0\u5761\u6642\u9593 -SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -SystemV/CST6.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -SystemV/CST6CDT.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -SystemV/EST5.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -SystemV/EST5EDT.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -SystemV/HST10.generic.long=\u590F\u5A01\u5937\u6642\u9593 -SystemV/MST7.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -SystemV/MST7MDT.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -SystemV/YST9.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -SystemV/YST9YDT.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -Turkey.generic.long=\u6771\u6B50\u6642\u9593 -UCT.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -US/Alaska.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -US/Aleutian.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593 -US/Arizona.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -US/Central.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -US/East-Indiana.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -US/Eastern.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -US/Hawaii.generic.long=\u590F\u5A01\u5937\u6642\u9593 -US/Indiana-Starke.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -US/Michigan.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -US/Mountain.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -US/Pacific.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -US/Samoa.generic.long=\u85A9\u6469\u4E9E\u6642\u9593 -UTC.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Universal.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -VST.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -W-SU.generic.long=\u83AB\u65AF\u79D1\u6642\u9593 -WET.generic.long=\u897f\u6b50\u6642\u9593 -Zulu.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties deleted file mode 100644 index c2de6fde89e..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=TDT -Asia/Taipei.generic.short=TT -Asia/Taipei.standard.short=TST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/tools/launcher/ExecutionEnvironment.java b/jdk/test/tools/launcher/ExecutionEnvironment.java index fac9c968363..f78649f364c 100644 --- a/jdk/test/tools/launcher/ExecutionEnvironment.java +++ b/jdk/test/tools/launcher/ExecutionEnvironment.java @@ -62,7 +62,9 @@ import java.util.Map; public class ExecutionEnvironment extends TestHelper { static final String LD_LIBRARY_PATH = TestHelper.isMacOSX ? "DYLD_LIBRARY_PATH" - : "LD_LIBRARY_PATH"; + : TestHelper.isAIX + ? "LIBPATH" + : "LD_LIBRARY_PATH"; static final String LD_LIBRARY_PATH_32 = LD_LIBRARY_PATH + "_32"; static final String LD_LIBRARY_PATH_64 = LD_LIBRARY_PATH + "_64"; @@ -134,7 +136,19 @@ public class ExecutionEnvironment extends TestHelper { for (String x : LD_PATH_STRINGS) { if (!tr.contains(x)) { - flagError(tr, "FAIL: did not get <" + x + ">"); + if (TestHelper.isAIX && x.startsWith(LD_LIBRARY_PATH)) { + // AIX does not support the '-rpath' linker options so the + // launchers have to prepend the jdk library path to 'LIBPATH'. + String aixLibPath = LD_LIBRARY_PATH + "=" + + System.getenv(LD_LIBRARY_PATH) + + System.getProperty("path.separator") + LD_LIBRARY_PATH_VALUE; + if (!tr.matches(aixLibPath)) { + flagError(tr, "FAIL: did not get <" + aixLibPath + ">"); + } + } + else { + flagError(tr, "FAIL: did not get <" + x + ">"); + } } } } @@ -170,7 +184,7 @@ public class ExecutionEnvironment extends TestHelper { Map env = new HashMap<>(); - if (TestHelper.isLinux || TestHelper.isMacOSX) { + if (TestHelper.isLinux || TestHelper.isMacOSX || TestHelper.isAIX) { for (String x : LD_PATH_STRINGS) { String pairs[] = x.split("="); env.put(pairs[0], pairs[1]); diff --git a/jdk/test/tools/launcher/Settings.java b/jdk/test/tools/launcher/Settings.java index 57a9ca64447..16fd29b0b16 100644 --- a/jdk/test/tools/launcher/Settings.java +++ b/jdk/test/tools/launcher/Settings.java @@ -73,16 +73,20 @@ public class Settings extends TestHelper { } static void runTestOptionDefault() throws IOException { + String stackSize = "256"; // in kb + if (getArch().equals("ppc64")) { + stackSize = "800"; + } TestResult tr = null; tr = doExec(javaCmd, "-Xms64m", "-Xmx512m", - "-Xss256k", "-XshowSettings", "-jar", testJar.getAbsolutePath()); + "-Xss" + stackSize + "k", "-XshowSettings", "-jar", testJar.getAbsolutePath()); containsAllOptions(tr); if (!tr.isOK()) { System.out.println(tr.status); throw new RuntimeException("test fails"); } tr = doExec(javaCmd, "-Xms65536k", "-Xmx712m", - "-Xss256000", "-XshowSettings", "-jar", testJar.getAbsolutePath()); + "-Xss" + stackSize + "000", "-XshowSettings", "-jar", testJar.getAbsolutePath()); containsAllOptions(tr); if (!tr.isOK()) { System.out.println(tr.status); diff --git a/jdk/test/tools/launcher/TestHelper.java b/jdk/test/tools/launcher/TestHelper.java index da23181a3f6..40737320d52 100644 --- a/jdk/test/tools/launcher/TestHelper.java +++ b/jdk/test/tools/launcher/TestHelper.java @@ -92,6 +92,8 @@ public class TestHelper { System.getProperty("os.name", "unknown").startsWith("SunOS"); static final boolean isLinux = System.getProperty("os.name", "unknown").startsWith("Linux"); + static final boolean isAIX = + System.getProperty("os.name", "unknown").startsWith("AIX"); static final String LIBJVM = isWindows ? "jvm.dll" : "libjvm" + (isMacOSX ? ".dylib" : ".so"); diff --git a/jdk/test/tools/launcher/VersionCheck.java b/jdk/test/tools/launcher/VersionCheck.java index f43c210a9bf..a31ba57a4a4 100644 --- a/jdk/test/tools/launcher/VersionCheck.java +++ b/jdk/test/tools/launcher/VersionCheck.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ /** * @test - * @bug 6545058 6611182 + * @bug 6545058 6611182 8016209 * @summary validate and test -version, -fullversion, and internal, as well as * sanity checks if a tool can be launched. * @compile VersionCheck.java diff --git a/jdk/test/tools/pack200/PackTestZip64.java b/jdk/test/tools/pack200/PackTestZip64.java new file mode 100644 index 00000000000..edfeb5a92d8 --- /dev/null +++ b/jdk/test/tools/pack200/PackTestZip64.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import java.io.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.JarInputStream; +import java.util.jar.JarOutputStream; +import java.util.zip.ZipEntry; +/* + * @test + * @bug 8029646 + * @summary tests that native unpacker produces the same result as Java one + * @compile -XDignore.symbol.file Utils.java PackTestZip64.java + * @run main PackTestZip64 + * @author kizune + */ + +public class PackTestZip64 { + public static void main(String... args) throws Exception { + testPacking(); + Utils.cleanup(); + } + + // 1KB buffer is enough to copy jar content + private static final byte[] BUFFER = new byte[1024]; + + static void testPacking() throws IOException { + // make a copy of the test specimen to local directory + File testFile = new File("tools_java.jar"); + // Add a large number of small files to the golden jar + generateLargeJar(testFile, Utils.locateJar("golden.jar")); + + List cmdsList = new ArrayList<>(); + + // Repack file to get the Java-based result + cmdsList.add(Utils.getPack200Cmd()); + cmdsList.add("--repack"); + cmdsList.add(testFile.getName()); + Utils.runExec(cmdsList); + cmdsList.clear(); + + // Pack file with pack200 and unpack in with unpack200 + File packedFile = new File("tools.pack.gz"); + cmdsList.add(Utils.getPack200Cmd()); + cmdsList.add(packedFile.getName()); + cmdsList.add(testFile.getName()); + Utils.runExec(cmdsList); + cmdsList.clear(); + + File unpackedFile = new File("tools_native.jar"); + cmdsList.add(Utils.getUnpack200Cmd()); + cmdsList.add(packedFile.getName()); + cmdsList.add(unpackedFile.getName()); + Utils.runExec(cmdsList); + + // Compare files binary + compareTwoFiles(testFile, unpackedFile); + + // Cleaning up generated files + testFile.delete(); + packedFile.delete(); + unpackedFile.delete(); + } + + static void compareTwoFiles(File src, File dst) throws IOException { + if (!src.exists()) { + throw new IOException("File " + src.getName() + " does not exist!"); + } + + if(!dst.exists()) { + throw new IOException("File " + dst.getName() + " does not exist!"); + } + + BufferedInputStream srcis, dstis; + srcis = new BufferedInputStream(new FileInputStream(src)); + dstis = new BufferedInputStream(new FileInputStream(dst)); + + int s = 0, d, pos = 0; + while (s != -1) { // Checking of just one result for EOF is enough + s = srcis.read(); + d = dstis.read(); + + if (s != d) { + throw new IOException("Files are differ starting at position: " + + Integer.toHexString(pos)); + } + + pos++; + } + + srcis.close(); + dstis.close(); + } + + static void generateLargeJar(File result, File source) throws IOException { + if (result.exists()) { + result.delete(); + } + + try (JarOutputStream copyTo = new JarOutputStream(new FileOutputStream(result)); + JarFile srcJar = new JarFile(source)) { + + for (JarEntry je : Collections.list(srcJar.entries())) { + copyTo.putNextEntry(je); + if (!je.isDirectory()) { + copyStream(srcJar.getInputStream(je), copyTo); + } + copyTo.closeEntry(); + } + + int many = Short.MAX_VALUE * 2 + 2; + + for (int i = 0 ; i < many ; i++) { + JarEntry e = new JarEntry("F-" + i + ".txt"); + copyTo.putNextEntry(e); + } + copyTo.flush(); + copyTo.close(); + } + } + + static void copyStream(InputStream in, OutputStream out) throws IOException { + int bytesRead; + while ((bytesRead = in.read(BUFFER))!= -1) { + out.write(BUFFER, 0, bytesRead); + } + } +} diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk index 618032762d0..c2dd54b2be5 100644 --- a/make/common/JavaCompilation.gmk +++ b/make/common/JavaCompilation.gmk @@ -163,11 +163,12 @@ define SetupArchive # The capture contents macro finds all files (matching the patterns, typically # .class and .prp) that are newer than the jar-file, ie the new content to be put into the jar. + # NOTICE: please leave the parentheses space separated otherwise the AIX build will break! $1_CAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS), \ - (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) \ + ( ( $(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) \ $$($1_GREP_EXCLUDES) | $(SED) 's|$$(src)/||g' && \ - $(ECHO) $$(subst $$(src)/,,$$($1_EXTRA_FILES))) > \ - $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) + $(ECHO) $$(subst $$(src)/,,$$($1_EXTRA_FILES) ) ) > \ + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE) ) # The capture metainf macro finds all files below the META-INF directory that are newer than the jar-file. ifeq (,$$($1_SKIP_METAINF)) $1_CAPTURE_METAINF =$$(foreach src,$$($1_SRCS),($(FIND) $$(src)/META-INF -type f -a -newer $$@ 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents ) $$(NEWLINE)) @@ -176,19 +177,20 @@ define SetupArchive # tells us what to remove from the jar-file. $1_CAPTURE_DELETES=$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.deleted -newer $$@ -exec $(SED) 's|$$(src)||g' \{\} >> $$($1_DELETES_FILE) \;) $$(NEWLINE)) # The update contents macro updates the jar file with the previously capture contents. - # xargs is used to trim the whitespace from the contents file, to see if it is empty. + # Use 'wc -w' to see if the contents file is empty. $1_UPDATE_CONTENTS=$$(foreach src,$$($1_SRCS), \ (cd $$(src) && \ - if [ -n "`$(CAT) _the.$$($1_JARNAME)_contents | $(XARGS)`" ]; then \ + if [ "`$(WC) -w _the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'`" -gt "0" ]; then \ $(ECHO) " updating" `$(WC) -l _the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'` files && \ $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @_the.$$($1_JARNAME)_contents; \ fi) $$(NEWLINE)) # The s-variants of the above macros are used when the jar is created from scratch. + # NOTICE: please leave the parentheses space separated otherwise the AIX build will break! $1_SCAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS), \ - (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ + ( ( $(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ $$($1_GREP_EXCLUDES) | $(SED) 's|$$(src)/||g' && \ - $$(subst $$(src)/,,$(ECHO) $$($1_EXTRA_FILES))) > \ - $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) + $$(subst $$(src)/,,$(ECHO) $$($1_EXTRA_FILES) ) ) > \ + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE) ) ifeq (,$$($1_SKIP_METAINF)) $1_SCAPTURE_METAINF=$$(foreach src,$$($1_SRCS), \ @@ -245,6 +247,8 @@ define SetupArchive $$($1_SUPDATE_CONTENTS) \ $$($1_JARINDEX) && true ) + # Add jar to target list + $1 += $$($1_JAR) endef define SetupZipArchive @@ -305,6 +309,9 @@ define SetupZipArchive $(ECHO) Updating $$($1_NAME) $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES))) || test "$$$$?" = "12" )$$(NEWLINE)) true $(TOUCH) $$@ + + # Add zip to target list + $1 += $$($1_ZIP) endef define add_file_to_copy @@ -527,16 +534,16 @@ define SetupJavaCompilation # When building in batch, put headers in a temp dir to filter out those that actually # changed before copying them to the real header dir. ifneq (,$$($1_HEADERS)) - $1_HEADERS_ARG := -h $$($1_HEADERS).tmp + $1_HEADERS_ARG := -h $$($1_HEADERS).$1.tmp $$($1_HEADERS)/_the.$1_headers: $$($1_BIN)/_the.$1_batch $(MKDIR) -p $$(@D) - for f in `ls $$($1_HEADERS).tmp`; do \ - if [ ! -f "$$($1_HEADERS)/$$$$f" ] || [ "`$(DIFF) $$($1_HEADERS)/$$$$f $$($1_HEADERS).tmp/$$$$f`" != "" ]; then \ - $(CP) -f $$($1_HEADERS).tmp/$$$$f $$($1_HEADERS)/$$$$f; \ + for f in `ls $$($1_HEADERS).$1.tmp`; do \ + if [ ! -f "$$($1_HEADERS)/$$$$f" ] || [ "`$(DIFF) $$($1_HEADERS)/$$$$f $$($1_HEADERS).$1.tmp/$$$$f`" != "" ]; then \ + $(CP) -f $$($1_HEADERS).$1.tmp/$$$$f $$($1_HEADERS)/$$$$f; \ fi; \ done - $(RM) -r $$($1_HEADERS).tmp + $(RM) -r $$($1_HEADERS).$1.tmp $(TOUCH) $$@ $1 += $$($1_HEADERS)/_the.$1_headers @@ -577,6 +584,9 @@ define SetupJavaCompilation JARINDEX:=$$($1_JARINDEX), \ HEADERS:=$$($1_HEADERS), \ SETUP:=$$($1_SETUP))) + + # Add jar to target list + $1 += $$($1_JAR) endif # Check if a srczip was specified, then setup the rules for the srczip. @@ -587,6 +597,8 @@ define SetupJavaCompilation INCLUDES:=$$($1_INCLUDES), \ EXCLUDES:=$$($1_EXCLUDES), \ EXCLUDE_FILES:=$$($1_EXCLUDE_FILES))) - endif + # Add zip to target list + $1 += $$($1_SRCZIP) + endif endef diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk index c4caac486cc..0c1f7df044e 100644 --- a/make/common/NativeCompilation.gmk +++ b/make/common/NativeCompilation.gmk @@ -512,7 +512,7 @@ define SetupNativeCompilation # Generating a static library, ie object file archive. $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$(call ARCHIVING_MSG,$$($1_LIBRARY)) - $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ + $(AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) endif diff --git a/make/common/TextFileProcessing.gmk b/make/common/TextFileProcessing.gmk new file mode 100644 index 00000000000..f5101626b0d --- /dev/null +++ b/make/common/TextFileProcessing.gmk @@ -0,0 +1,234 @@ +# +# Copyright (c) 2013, 2014 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 EvalDebugWrapper + $(if $(DEBUG_$1), + $(info -------- <<< Begin expansion of $1) + $(info $2) + $(info -------- >>> End expansion of $1) + ) + + $2 +endef + +# Helper function for SetupTextFileProcessing; adds a rule for a single file +# to be processed. +# param 1 = The namespace argument, e.g. BUILD_VERSION_FILE +# param 2 = the source file name (full path) +# param 3 = the target base directory +# param 4 = the target file name (possibly with a partial path) +define SetupSingleTextFileForProcessing + $(strip $3)/$(strip $4): $2 + $(ECHO) $(LOG_INFO) "Processing $(strip $4)" + $(MKDIR) -p '$$(@D)' + $(RM) '$$@' '$$@.includes.tmp' '$$@.replacements.tmp' + $$($1_INCLUDES_COMMAND_LINE) < '$$<' > '$$@.includes.tmp' + $$($1_REPLACEMENTS_COMMAND_LINE) < '$$@.includes.tmp' > '$$@.replacements.tmp' + $(RM) '$$@.includes.tmp' + $(MV) '$$@.replacements.tmp' '$$@' + + $1 += $(strip $3)/$(strip $4) +endef + +# Setup a text file for processing, in which specified markers are replaced with +# a given text, or with the contents of a given file. +# +# param 1 is the name space for this setup, e.g. BUILD_VERSION_FILE +# param 2, 3, .. etc are named args: +# SOURCE_DIRS one or more directory roots to search for files to process +# SOURCE_FILES complete paths to one or more files to process +# OUTPUT_DIR the directory where we store the processed files. +# OUTPUT_FILE the name of the resulting file. Only allowed if processing a +# single file. +# SOURCE_BASE_DIR a common root to all SOURCE_DIRS. +# If specified, files will keep the path relative to the base in the +# OUTPUT_DIR. Otherwise, the hierarchy will be flattened into the OUTPUT_DIR. +# INCLUDE_FILES only include files matching these patterns (used only with +# SOURCE_DIRS) +# EXCLUDE_FILES exclude files matching these patterns (used only with +# SOURCE_DIRS) +# INCLUDES replace the occurances of a pattern with the contents of a file; +# one or more such include pattern, using the syntax: +# PLACEHOLDER => FILE_TO_INCLUDE ; ... +# Each PLACEHOLDER must be on a single, otherwise empty line (whitespace +# padding is allowed). +# REPLACEMENTS one or more text replacement patterns, using the syntax: +# PATTERN => REPLACEMENT_TEXT ; ... +# +# At least one of INCLUDES or REPLACEMENTS must be present. If both are +# present, then the includes will be processed first, and replacements will be +# done on the included fragments as well. +# +define SetupTextFileProcessing + $(if $(16),$(error Internal makefile error: Too many arguments to SetupTextFileProcessing, please update TextFileProcessing.gmk)) + $(call EvalDebugWrapper,$(strip $1),$(call SetupTextFileProcessingInner,$(strip $1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15))) +endef + +define SetupTextFileProcessingInner + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $(strip $($i)),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupTextFileProcessing($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupTextFileProcessing, please update TextFileProcessing.gmk)) + + ifeq ($$($1_REPLACEMENTS)$$($1_INCLUDES),) + $$(error At least one of REPLACEMENTS or INCLUDES are required for $1) + endif + + ifneq ($$($1_SOURCE_FILES),) + ifneq ($$($1_SOURCE_DIRS),) + $$(error Cannot use both SOURCE_FILES and SOURCE_DIRS (in $1)) + endif + ifneq ($$($1_SOURCE_BASE_DIR),) + $$(error Cannot use SOURCE_BASE_DIR without SOURCE_DIRS (in $1)) + endif + ifneq ($$($1_EXCLUDE_FILES)$$($1_INCLUDE_FILES),) + $$(error Cannot INCLUDE/EXCLUDE_FILES with SOURCE_FILES (in $1)) + endif + else + # Find all files in the source trees. Sort to remove duplicates. + $$(foreach src, $$($1_SOURCE_DIRS), $$(if $$(wildcard $$(src)), , \ + $$(error SOURCE_DIRS contains missing directory $$(src) (in $1)))) + ifneq ($$($1_SOURCE_BASE_DIR),) + $$(foreach src, $$($1_SOURCE_DIRS), \ + $$(if $$(findstring $$($1_SOURCE_BASE_DIR), $$(src)), , \ + $$(error SOURCE_DIRS contains directory $$(src) outside \ + SOURCE_BASE_DIR $$($1_SOURCE_BASE_DIR) (in $1)))) + endif + $1_SOURCE_FILES := $$(sort $$(call CacheFind,$$($1_SOURCE_DIRS))) + $1_EXCLUDE_FILES:=$$(foreach i,$$($1_SOURCE_DIRS),$$(addprefix $$i/,$$($1_EXCLUDE_FILES))) + $1_INCLUDE_FILES:=$$(foreach i,$$($1_SOURCE_DIRS),$$(addprefix $$i/,$$($1_INCLUDE_FILES))) + $1_SOURCE_FILES := $$(filter-out $$($1_EXCLUDE_FILES),$$($1_SOURCE_FILES)) + ifneq (,$$(strip $$($1_INCLUDE_FILES))) + $1_SOURCE_FILES := $$(filter $$($1_INCLUDE_FILES),$$($1_SOURCE_FILES)) + endif + ifeq (,$$($1_SOURCE_FILES)) + $$(info No sources found for $1 when looking inside the dirs $$($1_SRC)) + endif + endif + + ifneq ($$($1_REPLACEMENTS),) + # We have a replacement request, prepare it for the recipe + ifneq ($$(findstring /,$$($1_REPLACEMENTS)),) + # Cannot use / as separator + ifneq ($$(findstring @,$$($1_REPLACEMENTS)),) + # Cannot use @ as separator + ifneq ($$(findstring |,$$($1_REPLACEMENTS)),) + # Cannot use | as separator + ifneq ($$(findstring !,$$($1_REPLACEMENTS)),) + # Cannot use ! as separator. Give up. + $$(error No suitable sed separator can be found for $1. Tested /, @, | and !) + else + $1_SEP := ! + endif + else + $1_SEP := | + endif + else + $1_SEP := @ + endif + else + $1_SEP := / + endif + + # If we have a trailing "=>" (i.e. last rule replaces with empty, and is not + # terminated by a ;), add a trailing ; to minimize the number of corner + # cases in the hairy subst expression.. + ifeq ($$(lastword $$($1_REPLACEMENTS)), =>) + $1_REPLACEMENTS += ; + endif + + # If we have a trailing ";", add a dummy replacement, since there is no easy + # way to delete the last word in make. + ifeq ($$(lastword $$($1_REPLACEMENTS)), ;) + $1_REPLACEMENTS += DUMMY_REPLACEMENT => DUMMY_REPLACEMENT + endif + + # Convert the REPLACEMENTS syntax ( A => B ; C => D ; ...) to a sed command + # line (-e "s/A/B/" -e "s/C/D/" ...), basically by replacing '=>' with '/' + # and ';' with '/" -e "s/', and adjusting for edge cases. + $1_REPLACEMENTS_COMMAND_LINE := $(SED) -e "s$$($1_SEP)$$(subst $$(SPACE);$$(SPACE),$$($1_SEP)" \ + -e "s$$($1_SEP),$$(subst $$(SPACE)=>$$(SPACE),$$($1_SEP),$$(subst $$(SPACE)=>$$(SPACE);$$(SPACE),//" \ + -e "s$$($1_SEP),$$(strip $$($1_REPLACEMENTS)))))$$($1_SEP)" + else + # We don't have any replacements, just pipe the file through cat. + $1_REPLACEMENTS_COMMAND_LINE := $(CAT) + endif + + ifneq ($$($1_INCLUDES),) + # We have a include request, prepare it for the recipe. + # Convert an INCLUDE like this PATTERN_1 => file1 ; PATTERN_2 => file2 ; + # into an awk script fragment like this: + # { + # if (matches("PATTERN_1")) { include("file1") } else + # if (matches("PATTERN_2")) { include("file2") } else + # print + # } + + $1_INCLUDES_HEADER_AWK := \ + function matches(pattern) { return ($$$$0 ~ "^[ \t]*" pattern "[ \t]*$$$$") } \ + function include(filename) { while ((getline < filename) == 1) print ; close(filename) } + $1_INCLUDES_PARTIAL_AWK := $$(subst $$(SPACE);,,$$(subst $$(SPACE)=>$$(SPACE),"$$(RIGHT_PAREN)$$(RIGHT_PAREN) \ + { include$$(LEFT_PAREN)",$$(subst $$(SPACE);$$(SPACE),"$$(RIGHT_PAREN) } \ + else if $$(LEFT_PAREN)matches$$(LEFT_PAREN)",$$(strip $$($1_INCLUDES))))) + $1_INCLUDES_COMMAND_LINE := $(NAWK) '$$($1_INCLUDES_HEADER_AWK) \ + { if (matches("$$($1_INCLUDES_PARTIAL_AWK)") } else print }' + else + # We don't have any includes, just pipe the file through cat. + $1_INCLUDES_COMMAND_LINE := $(CAT) + endif + + # Reset target list before populating it + $1 := + + ifneq ($$($1_OUTPUT_FILE),) + ifneq ($$(words $$($1_SOURCE_FILES)), 1) + $$(error Cannot use OUTPUT_FILE for more than one source file (in $1)) + endif + + # Note that $1 is space sensitive and must disobey whitespace rules + $$(eval $$(call SetupSingleTextFileForProcessing,$1, $$($1_SOURCE_FILES), \ + $$(dir $$($1_OUTPUT_FILE)), $$(notdir $$($1_OUTPUT_FILE)))) + else + ifeq ($$($1_OUTPUT_DIR),) + $$(error Neither OUTPUT_FILE nor OUTPUT_DIR was specified (in $1)) + endif + + # Now call add_native_source for each source file we are going to process. + ifeq ($$($1_SOURCE_BASE_DIR),) + # With no base dir specified, put all files in target dir, flattening any + # hierarchies. Note that $1 is space sensitive and must disobey whitespace + # rules. + $$(foreach src, $$($1_SOURCE_FILES), \ + $$(eval $$(call SetupSingleTextFileForProcessing,$1, $$(src), \ + $$($1_OUTPUT_DIR), $$(notdir $$(src))))) + else + # With a base dir, extract the relative portion of the path. Note that $1 + # is space sensitive and must disobey whitespace rules, and so is the + # arguments to patsubst. + $$(foreach src, $$($1_SOURCE_FILES), \ + $$(eval $$(call SetupSingleTextFileForProcessing,$1, $$(src), \ + $$($1_OUTPUT_DIR), $$(patsubst $$($1_SOURCE_BASE_DIR)/%,%,$$(src))))) + endif + endif +endef diff --git a/nashorn/.hgtags b/nashorn/.hgtags index 3d90b565999..6236fcba08e 100644 --- a/nashorn/.hgtags +++ b/nashorn/.hgtags @@ -235,3 +235,4 @@ c3343930c73c58a22c1d58719bb988aeb25a871f jdk8-b119 688f4167f92188482b0d80e315c72f726c6d5ff6 jdk8-b123 32631eed0fad2b31346eb41b29a50227bd29e2ec jdk9-b00 65347535840f045f2cd4341d7466c51009b1b06f jdk9-b01 +b3517e51f40477f10db8bc30a557aa0ea712c274 jdk9-b02 diff --git a/nashorn/src/jdk/internal/dynalink/linker/GuardedTypeConversion.java b/nashorn/src/jdk/internal/dynalink/linker/GuardedTypeConversion.java new file mode 100644 index 00000000000..9baed7c0ebd --- /dev/null +++ b/nashorn/src/jdk/internal/dynalink/linker/GuardedTypeConversion.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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. + */ + +/* + * This file is available under and governed by the GNU General Public + * License version 2 only, as published by the Free Software Foundation. + * However, the following notice accompanied the original version of this + * file, and Oracle licenses the original version of this file under the BSD + * license: + */ +/* + Copyright 2009-2013 Attila Szegedi + + Licensed under both the Apache License, Version 2.0 (the "Apache License") + and the BSD License (the "BSD License"), with licensee being free to + choose either of the two at their discretion. + + You may not use this file except in compliance with either the Apache + License or the BSD License. + + If you choose to use this file in compliance with the Apache License, the + following notice applies to you: + + You may obtain a copy of the Apache License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. + + If you choose to use this file in compliance with the BSD License, the + following notice applies to you: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the names of + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package jdk.internal.dynalink.linker; + +public class GuardedTypeConversion { + private final GuardedInvocation conversionInvocation; + private final boolean cacheable; + + public GuardedTypeConversion(final GuardedInvocation conversionInvocation, final boolean cacheable) { + this.conversionInvocation = conversionInvocation; + this.cacheable = cacheable; + } + + public GuardedInvocation getConversionInvocation() { + return conversionInvocation; + } + + public boolean isCacheable() { + return cacheable; + } +} diff --git a/nashorn/src/jdk/internal/dynalink/linker/GuardingTypeConverterFactory.java b/nashorn/src/jdk/internal/dynalink/linker/GuardingTypeConverterFactory.java index 30ab9467ec4..5f66e8a4bca 100644 --- a/nashorn/src/jdk/internal/dynalink/linker/GuardingTypeConverterFactory.java +++ b/nashorn/src/jdk/internal/dynalink/linker/GuardingTypeConverterFactory.java @@ -96,19 +96,19 @@ import jdk.internal.dynalink.support.TypeUtilities; */ public interface GuardingTypeConverterFactory { /** - * Returns a guarded invocation that receives an Object of the specified source type and returns an Object converted - * to the specified target type. The type of the invocation is targetType(sourceType), while the type of the guard - * is boolean(sourceType). Note that this will never be invoked for type conversions allowed by the JLS 5.3 "Method - * Invocation Conversion", see {@link TypeUtilities#isMethodInvocationConvertible(Class, Class)} for details. An - * implementation can assume it is never requested to produce a converter for these conversions. + * Returns a guarded type conversion that receives an Object of the specified source type and returns an Object + * converted to the specified target type. The type of the invocation is targetType(sourceType), while the type of + * the guard is boolean(sourceType). Note that this will never be invoked for type conversions allowed by the JLS + * 5.3 "Method Invocation Conversion", see {@link TypeUtilities#isMethodInvocationConvertible(Class, Class)} for + * details. An implementation can assume it is never requested to produce a converter for these conversions. * * @param sourceType source type * @param targetType the target type. - * @return a guarded invocation that can take an object (if it passes guard) and returns another object that is its - * representation coerced into the target type. In case the factory is certain it is unable to handle a conversion, - * it can return null. In case the factory is certain that it can always handle the conversion, it can return an - * unconditional invocation (one whose guard is null). + * @return a guarded type conversion that contains a guarded invocation that can take an object (if it passes guard) + * and return another object that is its representation coerced into the target type. In case the factory is certain + * it is unable to handle a conversion, it can return null. In case the factory is certain that it can always handle + * the conversion, it can return an unconditional invocation (one whose guard is null). * @throws Exception if there was an error during creation of the converter */ - public GuardedInvocation convertToType(Class sourceType, Class targetType) throws Exception; + public GuardedTypeConversion convertToType(Class sourceType, Class targetType) throws Exception; } diff --git a/nashorn/src/jdk/internal/dynalink/support/LinkerServicesImpl.java b/nashorn/src/jdk/internal/dynalink/support/LinkerServicesImpl.java index 4eb0ca9da7e..3b8e7b46abe 100644 --- a/nashorn/src/jdk/internal/dynalink/support/LinkerServicesImpl.java +++ b/nashorn/src/jdk/internal/dynalink/support/LinkerServicesImpl.java @@ -98,6 +98,9 @@ import jdk.internal.dynalink.linker.LinkerServices; */ public class LinkerServicesImpl implements LinkerServices { + private static final RuntimePermission GET_CURRENT_LINK_REQUEST = new RuntimePermission("dynalink.getCurrentLinkRequest"); + private static final ThreadLocal threadLinkRequest = new ThreadLocal<>(); + private final TypeConverterFactory typeConverterFactory; private final GuardingDynamicLinker topLevelLinker; @@ -135,6 +138,26 @@ public class LinkerServicesImpl implements LinkerServices { @Override public GuardedInvocation getGuardedInvocation(LinkRequest linkRequest) throws Exception { - return topLevelLinker.getGuardedInvocation(linkRequest, this); + final LinkRequest prevLinkRequest = threadLinkRequest.get(); + threadLinkRequest.set(linkRequest); + try { + return topLevelLinker.getGuardedInvocation(linkRequest, this); + } finally { + threadLinkRequest.set(prevLinkRequest); + } + } + + /** + * Returns the currently processed link request, or null if the method is invoked outside of the linking process. + * @return the currently processed link request, or null. + * @throws SecurityException if the calling code doesn't have the {@code "dynalink.getCurrentLinkRequest"} runtime + * permission. + */ + public static LinkRequest getCurrentLinkRequest() { + SecurityManager sm = System.getSecurityManager(); + if(sm != null) { + sm.checkPermission(GET_CURRENT_LINK_REQUEST); + } + return threadLinkRequest.get(); } } diff --git a/nashorn/src/jdk/internal/dynalink/support/TypeConverterFactory.java b/nashorn/src/jdk/internal/dynalink/support/TypeConverterFactory.java index 5ab541f33f9..436acad7faf 100644 --- a/nashorn/src/jdk/internal/dynalink/support/TypeConverterFactory.java +++ b/nashorn/src/jdk/internal/dynalink/support/TypeConverterFactory.java @@ -94,6 +94,7 @@ import java.util.List; import jdk.internal.dynalink.linker.ConversionComparator; import jdk.internal.dynalink.linker.ConversionComparator.Comparison; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkerServices; @@ -134,8 +135,8 @@ public class TypeConverterFactory { @Override protected MethodHandle computeValue(Class targetType) { if(!canAutoConvert(sourceType, targetType)) { - final MethodHandle converter = getTypeConverterNull(sourceType, targetType); - if(converter != null) { + final MethodHandle converter = getCacheableTypeConverter(sourceType, targetType); + if(converter != IDENTITY_CONVERSION) { return converter; } } @@ -145,6 +146,24 @@ public class TypeConverterFactory { } }; + private final ClassValue> canConvert = new ClassValue>() { + @Override + protected ClassMap computeValue(final Class sourceType) { + return new ClassMap(getClassLoader(sourceType)) { + @Override + protected Boolean computeValue(Class targetType) { + try { + return getTypeConverterNull(sourceType, targetType) != null; + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }; + } + }; + private static final ClassLoader getClassLoader(final Class clazz) { return AccessController.doPrivileged(new PrivilegedAction() { @Override @@ -253,7 +272,7 @@ public class TypeConverterFactory { * @return true if there can be a conversion, false if there can not. */ public boolean canConvert(final Class from, final Class to) { - return canAutoConvert(from, to) || getTypeConverterNull(from, to) != null; + return canAutoConvert(from, to) || canConvert.get(from).get(to).booleanValue(); } /** @@ -294,11 +313,23 @@ public class TypeConverterFactory { return TypeUtilities.isMethodInvocationConvertible(fromType, toType); } - /*private*/ MethodHandle getTypeConverterNull(Class sourceType, Class targetType) { - final MethodHandle converter = converterMap.get(sourceType).get(targetType); + /*private*/ MethodHandle getCacheableTypeConverterNull(Class sourceType, Class targetType) { + final MethodHandle converter = getCacheableTypeConverter(sourceType, targetType); return converter == IDENTITY_CONVERSION ? null : converter; } + /*private*/ MethodHandle getTypeConverterNull(Class sourceType, Class targetType) { + try { + return getCacheableTypeConverterNull(sourceType, targetType); + } catch(NotCacheableConverter e) { + return e.converter; + } + } + + /*private*/ MethodHandle getCacheableTypeConverter(Class sourceType, Class targetType) { + return converterMap.get(sourceType).get(targetType); + } + /** * Given a source and target type, returns a method handle that converts between them. Never returns null; in worst * case it will return an identity conversion (that might fail for some values at runtime). You can use this method @@ -309,22 +340,44 @@ public class TypeConverterFactory { * @return a method handle performing the conversion. */ public MethodHandle getTypeConverter(Class sourceType, Class targetType) { - return converterIdentityMap.get(sourceType).get(targetType); + try { + return converterIdentityMap.get(sourceType).get(targetType); + } catch(NotCacheableConverter e) { + return e.converter; + } } /*private*/ MethodHandle createConverter(Class sourceType, Class targetType) throws Exception { final MethodType type = MethodType.methodType(targetType, sourceType); final MethodHandle identity = IDENTITY_CONVERSION.asType(type); MethodHandle last = identity; + boolean cacheable = true; for(int i = factories.length; i-- > 0;) { - final GuardedInvocation next = factories[i].convertToType(sourceType, targetType); + final GuardedTypeConversion next = factories[i].convertToType(sourceType, targetType); if(next != null) { - next.assertType(type); - last = next.compose(last); + cacheable = cacheable && next.isCacheable(); + final GuardedInvocation conversionInvocation = next.getConversionInvocation(); + conversionInvocation.assertType(type); + last = conversionInvocation.compose(last); } } - return last == identity ? IDENTITY_CONVERSION : last; + if(last == identity) { + return IDENTITY_CONVERSION; + } + if(cacheable) { + return last; + } + throw new NotCacheableConverter(last); } /*private*/ static final MethodHandle IDENTITY_CONVERSION = MethodHandles.identity(Object.class); + + private static class NotCacheableConverter extends RuntimeException { + final MethodHandle converter; + + NotCacheableConverter(final MethodHandle converter) { + super("", null, false, false); + this.converter = converter; + } + } } diff --git a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java index 8028cce229e..3c4d29fc025 100644 --- a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java +++ b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; +import java.lang.invoke.MethodHandles; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.URL; @@ -104,7 +105,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C private volatile Property contextProperty; // default options passed to Nashorn Options object - private static final String[] DEFAULT_OPTIONS = new String[] { "-scripting", "-doe" }; + private static final String[] DEFAULT_OPTIONS = new String[] { "-doe" }; // Nashorn script engine error message management private static final String MESSAGES_RESOURCE = "jdk.nashorn.api.scripting.resources.Messages"; @@ -355,7 +356,8 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C if (! isInterfaceImplemented(clazz, realSelf)) { return null; } - return clazz.cast(JavaAdapterFactory.getConstructor(realSelf.getClass(), clazz).invoke(realSelf)); + return clazz.cast(JavaAdapterFactory.getConstructor(realSelf.getClass(), clazz, + MethodHandles.publicLookup()).invoke(realSelf)); } finally { if (globalChanged) { Context.setGlobal(oldGlobal); diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java b/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java index 5e9ac83d5e1..b863e24f2a5 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java @@ -28,6 +28,7 @@ package jdk.nashorn.internal.objects; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; +import java.lang.invoke.MethodHandles; import java.lang.reflect.Array; import java.util.Collection; import java.util.Deque; @@ -463,12 +464,14 @@ public final class NativeJava { * * We can see several important concepts in the above example: *
        - *
      • Every specified list of Java types will have exactly one extender subclass in Nashorn - repeated invocations - * of {@code extend} for the same list of types will yield the same extender type. It's a generic adapter that - * delegates to whatever JavaScript functions its implementation object has on a per-instance basis.
      • + *
      • Every specified list of Java types will have one extender subclass in Nashorn per caller protection domain - + * repeated invocations of {@code extend} for the same list of types for scripts same protection domain will yield + * the same extender type. It's a generic adapter that delegates to whatever JavaScript functions its implementation + * object has on a per-instance basis.
      • *
      • If the Java method is overloaded (as in the above example {@code List.add()}), then your JavaScript adapter * must be prepared to deal with all overloads.
      • - *
      • You can't invoke {@code super.*()} from adapters for now.
      • + *
      • To invoke super methods from adapters, call them on the adapter instance prefixing them with {@code super$}, + * or use the special {@link #_super(Object, Object) super-adapter}.
      • *
      • It is also possible to specify an ordinary JavaScript object as the last argument to {@code extend}. In that * case, it is treated as a class-level override. {@code extend} will return an extender class where all instances * will have the methods implemented by functions on that object, just as if that object were passed as the last @@ -486,15 +489,18 @@ public final class NativeJava { * t.join() * * As you can see, you don't have to pass any object when you create a new instance of {@code R1} as its - * {@code run()} function was defined already when extending the class. Of course, you can still provide - * instance-level overrides on these objects. The order of precedence is instance-level method, class-level method, - * superclass method, or {@code UnsupportedOperationException} if the superclass method is abstract. If we continue - * our previous example: + * {@code run()} function was defined already when extending the class. If you also want to add instance-level + * overrides on these objects, you will have to repeatedly use {@code extend()} to subclass the class-level adapter. + * For such adapters, the order of precedence is instance-level method, class-level method, superclass method, or + * {@code UnsupportedOperationException} if the superclass method is abstract. If we continue our previous example: *
        -     * var r2 = new R1(function() { print("r2.run() invoked!") })
        +     * var R2 = Java.extend(R1);
        +     * var r2 = new R2(function() { print("r2.run() invoked!") })
              * r2.run()
              * 
        * We'll see it'll print {@code "r2.run() invoked!"}, thus overriding on instance-level the class-level behavior. + * Note that you must use {@code Java.extend} to explicitly create an instance-override adapter class from a + * class-override adapter class, as the class-override adapter class is no longer abstract. *
      • *
      * @param self not used @@ -541,7 +547,18 @@ public final class NativeJava { } catch(final ClassCastException e) { throw typeError("extend.expects.java.types"); } - return JavaAdapterFactory.getAdapterClassFor(stypes, classOverrides); + // Note that while the public API documentation claims self is not used, we actually use it. + // ScriptFunction.findCallMethod will bind the lookup object into it, and we can then use that lookup when + // requesting the adapter class. Note that if Java.extend is invoked with no lookup object, it'll pass the + // public lookup which'll result in generation of a no-permissions adapter. A typical situation this can happen + // is when the extend function is bound. + final MethodHandles.Lookup lookup; + if(self instanceof MethodHandles.Lookup) { + lookup = (MethodHandles.Lookup)self; + } else { + lookup = MethodHandles.publicLookup(); + } + return JavaAdapterFactory.getAdapterClassFor(stypes, classOverrides, lookup); } /** diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java b/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java index dd9231d9386..56baf66d229 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java @@ -33,6 +33,7 @@ import jdk.nashorn.internal.objects.annotations.Attribute; import jdk.nashorn.internal.objects.annotations.Constructor; import jdk.nashorn.internal.objects.annotations.Function; import jdk.nashorn.internal.objects.annotations.ScriptClass; +import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.NativeJavaPackage; import jdk.nashorn.internal.runtime.PropertyMap; import jdk.nashorn.internal.runtime.ScriptObject; @@ -161,8 +162,9 @@ public final class NativeJavaImporter extends ScriptObject { } else if (obj instanceof NativeJavaPackage) { final String pkgName = ((NativeJavaPackage)obj).getName(); final String fullName = pkgName.isEmpty() ? name : (pkgName + "." + name); + final Context context = Global.instance().getContext(); try { - return StaticClass.forClass(Class.forName(fullName)); + return StaticClass.forClass(context.findClass(fullName)); } catch (final ClassNotFoundException e) { // IGNORE } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java b/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java index 5777c96c870..d102c0fb011 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java @@ -645,10 +645,12 @@ public final class NativeObject { targetObj.addBoundProperties(source, props); } else if (source instanceof StaticClass) { final Class clazz = ((StaticClass)source).getRepresentedClass(); + Bootstrap.checkReflectionAccess(clazz, true); bindBeanProperties(targetObj, source, BeansLinker.getReadableStaticPropertyNames(clazz), BeansLinker.getWritableStaticPropertyNames(clazz), BeansLinker.getStaticMethodNames(clazz)); } else { final Class clazz = source.getClass(); + Bootstrap.checkReflectionAccess(clazz, false); bindBeanProperties(targetObj, source, BeansLinker.getReadableInstancePropertyNames(clazz), BeansLinker.getWritableInstancePropertyNames(clazz), BeansLinker.getInstanceMethodNames(clazz)); } @@ -663,7 +665,6 @@ public final class NativeObject { propertyNames.addAll(writablePropertyNames); final Class clazz = source.getClass(); - Bootstrap.checkReflectionAccess(clazz); final MethodType getterType = MethodType.methodType(Object.class, clazz); final MethodType setterType = MethodType.methodType(Object.class, clazz, Object.class); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/Context.java b/nashorn/src/jdk/nashorn/internal/runtime/Context.java index 1817ca928ba..e15ddd2c8fb 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java @@ -37,7 +37,6 @@ import java.io.PrintWriter; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.reflect.Modifier; -import java.util.concurrent.atomic.AtomicLong; import java.net.MalformedURLException; import java.net.URL; import java.security.AccessControlContext; @@ -48,7 +47,7 @@ import java.security.Permissions; import java.security.PrivilegedAction; import java.security.ProtectionDomain; import java.util.Map; - +import java.util.concurrent.atomic.AtomicLong; import jdk.internal.org.objectweb.asm.ClassReader; import jdk.internal.org.objectweb.asm.util.CheckClassAdapter; import jdk.nashorn.api.scripting.ScriptObjectMirror; @@ -651,6 +650,19 @@ public final class Context { } } + /** + * Checks that the given package name can be accessed from no permissions context. + * + * @param pkgName package name + * @throw SecurityException if not accessible + */ + public static void checkPackageAccess(final String pkgName) { + final SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + checkPackageAccess(sm, pkgName.endsWith(".")? pkgName : pkgName + "."); + } + } + /** * Checks that the given package can be accessed from no permissions context. * diff --git a/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java b/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java index a5abacb2134..591fd327c64 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java @@ -85,6 +85,8 @@ public final class NativeJavaPackage extends ScriptObject { */ public NativeJavaPackage(final String name, final ScriptObject proto) { super(proto, null); + // defense-in-path, check here for sensitive packages + Context.checkPackageAccess(name); this.name = name; } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java index ae59855cb4b..d0669d709de 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java @@ -26,14 +26,13 @@ package jdk.nashorn.internal.runtime; import static jdk.nashorn.internal.codegen.CompilerConstants.virtualCallNoLookup; +import static jdk.nashorn.internal.lookup.Lookup.MH; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; -import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; - import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.GuardedInvocation; import jdk.internal.dynalink.linker.LinkRequest; @@ -524,7 +523,11 @@ public abstract class ScriptFunction extends ScriptObject { } } else { final MethodHandle callHandle = getBestInvoker(type.dropParameterTypes(0, 1), request.getArguments()); - if (scopeCall) { + if (data.isBuiltin() && "extend".equals(data.getName())) { + // NOTE: the only built-in named "extend" is NativeJava.extend. As a special-case we're binding the + // current lookup as its "this" so it can do security-sensitive creation of adapter classes. + boundHandle = MH.dropArguments(MH.bindTo(callHandle, desc.getLookup()), 0, Object.class, Object.class); + } else if (scopeCall) { // Make a handle that drops the passed "this" argument and substitutes either Global or Undefined // (this, args...) => (args...) boundHandle = MH.bindTo(callHandle, needsWrappedThis() ? Context.getGlobalTrusted() : ScriptRuntime.UNDEFINED); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java index de1cfccc2a9..52511e5d94e 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java @@ -47,7 +47,8 @@ final class AdaptationResult { ERROR_NON_PUBLIC_CLASS, ERROR_NO_ACCESSIBLE_CONSTRUCTOR, ERROR_MULTIPLE_SUPERCLASSES, - ERROR_NO_COMMON_LOADER + ERROR_NO_COMMON_LOADER, + ERROR_FINAL_FINALIZER } static final AdaptationResult SUCCESSFUL_RESULT = new AdaptationResult(Outcome.SUCCESS, ""); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/Bootstrap.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/Bootstrap.java index 0d5f68a1e2f..c8f39fcfaca 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/Bootstrap.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/Bootstrap.java @@ -278,9 +278,10 @@ public final class Bootstrap { * {@code java.lang.invoke} package, as well a {@link Class} and any subclass of {@link ClassLoader}) and there is * a security manager in the system, then it checks the {@code nashorn.JavaReflection} {@code RuntimePermission}. * @param clazz the class being tested + * @param isStatic is access checked for static members (or instance members) */ - public static void checkReflectionAccess(Class clazz) { - ReflectionCheckLinker.checkReflectionAccess(clazz); + public static void checkReflectionAccess(Class clazz, boolean isStatic) { + ReflectionCheckLinker.checkReflectionAccess(clazz, isStatic); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java index f0d45317a8a..f3c8284be86 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java @@ -32,6 +32,7 @@ import java.util.HashMap; import java.util.Map; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.linker.LinkerServices; @@ -79,7 +80,7 @@ final class JSObjectLinker implements TypeBasedGuardingDynamicLinker, GuardingTy } @Override - public GuardedInvocation convertToType(final Class sourceType, final Class targetType) throws Exception { + public GuardedTypeConversion convertToType(final Class sourceType, final Class targetType) throws Exception { final boolean sourceIsAlwaysJSObject = JSObject.class.isAssignableFrom(sourceType); if(!sourceIsAlwaysJSObject && !sourceType.isAssignableFrom(JSObject.class)) { return null; @@ -90,7 +91,7 @@ final class JSObjectLinker implements TypeBasedGuardingDynamicLinker, GuardingTy return null; } - return new GuardedInvocation(converter, sourceIsAlwaysJSObject ? null : IS_JSOBJECT_GUARD).asType(MethodType.methodType(targetType, sourceType)); + return new GuardedTypeConversion(new GuardedInvocation(converter, sourceIsAlwaysJSObject ? null : IS_JSOBJECT_GUARD).asType(MethodType.methodType(targetType, sourceType)), true); } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java index ef2a6829a25..5aceb206331 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java @@ -59,6 +59,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.Handle; import jdk.internal.org.objectweb.asm.Label; import jdk.internal.org.objectweb.asm.Opcodes; import jdk.internal.org.objectweb.asm.Type; @@ -66,21 +67,23 @@ import jdk.internal.org.objectweb.asm.commons.InstructionAdapter; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; +import jdk.nashorn.internal.runtime.linker.AdaptationResult.Outcome; import sun.reflect.CallerSensitive; /** * Generates bytecode for a Java adapter class. Used by the {@link JavaAdapterFactory}. *

      - * For every protected or public constructor in the extended class, the adapter class will have between one to three + * For every protected or public constructor in the extended class, the adapter class will have either one or two * public constructors (visibility of protected constructors in the extended class is promoted to public). - *

        - *
      • In every case, a constructor taking a trailing ScriptObject argument preceded by original constructor arguments - * is always created on the adapter class. When such a constructor is invoked, the passed ScriptObject's member - * functions are used to implement and/or override methods on the original class, dispatched by name. A single - * JavaScript function will act as the implementation for all overloaded methods of the same name. When methods on an - * adapter instance are invoked, the functions are invoked having the ScriptObject passed in the instance constructor as - * their "this". Subsequent changes to the ScriptObject (reassignment or removal of its functions) are not reflected in - * the adapter instance; the method implementations are bound to functions at constructor invocation time. + *
      • + *
      • For adapter classes with instance-level overrides, a constructor taking a trailing ScriptObject argument preceded + * by original constructor arguments is always created on the adapter class. When such a constructor is invoked, the + * passed ScriptObject's member functions are used to implement and/or override methods on the original class, + * dispatched by name. A single JavaScript function will act as the implementation for all overloaded methods of the + * same name. When methods on an adapter instance are invoked, the functions are invoked having the ScriptObject passed + * in the instance constructor as their "this". Subsequent changes to the ScriptObject (reassignment or removal of its + * functions) are not reflected in the adapter instance; the method implementations are bound to functions at + * constructor invocation time. * {@code java.lang.Object} methods {@code equals}, {@code hashCode}, and {@code toString} can also be overridden. The * only restriction is that since every JavaScript object already has a {@code toString} function through the * {@code Object.prototype}, the {@code toString} in the adapter is only overridden if the passed ScriptObject has a @@ -89,16 +92,17 @@ import sun.reflect.CallerSensitive; *
      • *
      • * If the original types collectively have only one abstract method, or have several of them, but all share the - * same name, an additional constructor is provided for every original constructor; this one takes a ScriptFunction as - * its last argument preceded by original constructor arguments. This constructor will use the passed function as the - * implementation for all abstract methods. For consistency, any concrete methods sharing the single abstract method - * name will also be overridden by the function. When methods on the adapter instance are invoked, the ScriptFunction is - * invoked with global or UNDEFINED as its "this" depending whether the function is non-strict or not. + * same name, an additional constructor for instance-level override adapter is provided for every original constructor; + * this one takes a ScriptFunction as its last argument preceded by original constructor arguments. This constructor + * will use the passed function as the implementation for all abstract methods. For consistency, any concrete methods + * sharing the single abstract method name will also be overridden by the function. When methods on the adapter instance + * are invoked, the ScriptFunction is invoked with UNDEFINED or Global as its "this" depending whether the function is + * strict or not. *
      • *
      • * If the adapter being generated can have class-level overrides, constructors taking same arguments as the superclass - * constructors are also created. These constructors simply delegate to the superclass constructor. They are used to - * create instances of the adapter class with no instance-level overrides. + * constructors are created. These constructors simply delegate to the superclass constructor. They are simply used to + * create instances of the adapter class, with no instance-level overrides, as they don't have them. *
      • *
      *

      @@ -111,16 +115,20 @@ import sun.reflect.CallerSensitive; * source-level script expression new X(a, b) { ... } (which is a proprietary syntax extension Nashorn uses * to resemble Java anonymous classes) is actually equivalent to new X(a, b, { ... }). *

      - * It is possible to create two different classes: those that can have both class-level and instance-level overrides, - * and those that can only have instance-level overrides. When - * {@link JavaAdapterFactory#getAdapterClassFor(Class[], ScriptObject)} is invoked with non-null {@code classOverrides} - * parameter, an adapter class is created that can have class-level overrides, and the passed script object will be used - * as the implementations for its methods, just as in the above case of the constructor taking a script object. Note - * that in the case of class-level overrides, a new adapter class is created on every invocation, and the implementation - * object is bound to the class, not to any instance. All created instances will share these functions. Of course, when - * instances of such a class are being created, they can still take another object (or possibly a function) in their - * constructor's trailing position and thus provide further instance-specific overrides. The order of invocation is - * always instance-specified method, then a class-specified method, and finally the superclass method. + * It is possible to create two different adapter classes: those that can have class-level overrides, and those that can + * have instance-level overrides. When {@link JavaAdapterFactory#getAdapterClassFor(Class[], ScriptObject)} is invoked + * with non-null {@code classOverrides} parameter, an adapter class is created that can have class-level overrides, and + * the passed script object will be used as the implementations for its methods, just as in the above case of the + * constructor taking a script object. Note that in the case of class-level overrides, a new adapter class is created on + * every invocation, and the implementation object is bound to the class, not to any instance. All created instances + * will share these functions. If it is required to have both class-level overrides and instance-level overrides, the + * class-level override adapter class should be subclassed with an instance-override adapter. Since adapters delegate to + * super class when an overriding method handle is not specified, this will behave as expected. It is not possible to + * have both class-level and instance-level overrides in the same class for security reasons: adapter classes are + * defined with a protection domain of their creator code, and an adapter class that has both class and instance level + * overrides would need to have two potentially different protection domains: one for class-based behavior and one for + * instance-based behavior; since Java classes can only belong to a single protection domain, this could not be + * implemented securely. */ final class JavaAdapterBytecodeGenerator { static final Type CONTEXT_TYPE = Type.getType(Context.class); @@ -171,7 +179,6 @@ final class JavaAdapterBytecodeGenerator { private static final int MAX_GENERATED_TYPE_NAME_LENGTH = 255; private static final String CLASS_INIT = ""; - private static final String STATIC_GLOBAL_FIELD_NAME = "staticGlobal"; // Method name prefix for invoking super-methods static final String SUPER_PREFIX = "super$"; @@ -199,6 +206,7 @@ final class JavaAdapterBytecodeGenerator { private final Set finalMethods = new HashSet<>(EXCLUDED); private final Set methodInfos = new HashSet<>(); private boolean autoConvertibleFromFunction = false; + private boolean hasExplicitFinalizer = false; private final ClassWriter cw; @@ -207,8 +215,8 @@ final class JavaAdapterBytecodeGenerator { * @param superClass the superclass the adapter will extend. * @param interfaces the interfaces the adapter will implement. * @param commonLoader the class loader that can see all of superClass, interfaces, and Nashorn classes. - * @param classOverride true to generate the bytecode for the adapter that has both class-level and instance-level - * overrides, false to generate the bytecode for the adapter that only has instance-level overrides. + * @param classOverride true to generate the bytecode for the adapter that has class-level overrides, false to + * generate the bytecode for the adapter that has instance-level overrides. * @throws AdaptationException if the adapter can not be generated for some reason. */ JavaAdapterBytecodeGenerator(final Class superClass, final List> interfaces, @@ -230,8 +238,7 @@ final class JavaAdapterBytecodeGenerator { superClassName = Type.getInternalName(superClass); generatedClassName = getGeneratedClassName(superClass, interfaces); - cw.visit(Opcodes.V1_7, ACC_PUBLIC | ACC_SUPER | ACC_FINAL, generatedClassName, null, superClassName, getInternalTypeNames(interfaces)); - + cw.visit(Opcodes.V1_7, ACC_PUBLIC | ACC_SUPER, generatedClassName, null, superClassName, getInternalTypeNames(interfaces)); generateGlobalFields(); gatherMethods(superClass); @@ -244,17 +251,16 @@ final class JavaAdapterBytecodeGenerator { generateConstructors(); generateMethods(); generateSuperMethods(); + if (hasExplicitFinalizer) { + generateFinalizerMethods(); + } // } cw.visitEnd(); } private void generateGlobalFields() { - cw.visitField(ACC_PRIVATE | ACC_FINAL, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, null).visitEnd(); + cw.visitField(ACC_PRIVATE | ACC_FINAL | (classOverride ? ACC_STATIC : 0), GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, null).visitEnd(); usedFieldNames.add(GLOBAL_FIELD_NAME); - if(classOverride) { - cw.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, STATIC_GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, null).visitEnd(); - usedFieldNames.add(STATIC_GLOBAL_FIELD_NAME); - } } JavaAdapterClassLoader createAdapterClassLoader() { @@ -305,11 +311,9 @@ final class JavaAdapterBytecodeGenerator { } private void generateHandleFields() { + final int flags = ACC_PRIVATE | ACC_FINAL | (classOverride ? ACC_STATIC : 0); for (final MethodInfo mi: methodInfos) { - cw.visitField(ACC_PRIVATE | ACC_FINAL, mi.methodHandleInstanceFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR, null, null).visitEnd(); - if(classOverride) { - cw.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, mi.methodHandleClassFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR, null, null).visitEnd(); - } + cw.visitField(flags, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR, null, null).visitEnd(); } } @@ -337,7 +341,7 @@ final class JavaAdapterBytecodeGenerator { } else { mv.visitInsn(ACONST_NULL); } - mv.putstatic(generatedClassName, mi.methodHandleClassFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); + mv.putstatic(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); } initGlobal = new Label(); mv.goTo(initGlobal); @@ -351,15 +355,15 @@ final class JavaAdapterBytecodeGenerator { mv.aconst(mi.getName()); mv.aconst(Type.getMethodType(mi.type.toMethodDescriptorString())); mv.invokestatic(SERVICES_CLASS_TYPE_NAME, "getHandle", GET_HANDLE_OBJECT_DESCRIPTOR, false); - mv.putstatic(generatedClassName, mi.methodHandleClassFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); + mv.putstatic(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); } if(initGlobal != null) { mv.visitLabel(initGlobal); } - // Assign "staticGlobal = Context.getGlobal()" + // Assign "global = Context.getGlobal()" invokeGetGlobalWithNullCheck(mv); - mv.putstatic(generatedClassName, STATIC_GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); + mv.putstatic(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); endInitMethod(mv); } @@ -390,21 +394,21 @@ final class JavaAdapterBytecodeGenerator { // Generate a constructor that just delegates to ctor. This is used with class-level overrides, when we want // to create instances without further per-instance overrides. generateDelegatingConstructor(ctor); - } + } else { + // Generate a constructor that delegates to ctor, but takes an additional ScriptObject parameter at the + // beginning of its parameter list. + generateOverridingConstructor(ctor, false); - // Generate a constructor that delegates to ctor, but takes an additional ScriptObject parameter at the - // beginning of its parameter list. - generateOverridingConstructor(ctor, false); - - if (samName != null) { - if (!autoConvertibleFromFunction && ctor.getParameterTypes().length == 0) { - // If the original type only has a single abstract method name, as well as a default ctor, then it can - // be automatically converted from JS function. - autoConvertibleFromFunction = true; + if (samName != null) { + if (!autoConvertibleFromFunction && ctor.getParameterTypes().length == 0) { + // If the original type only has a single abstract method name, as well as a default ctor, then it can + // be automatically converted from JS function. + autoConvertibleFromFunction = true; + } + // If all our abstract methods have a single name, generate an additional constructor, one that takes a + // ScriptFunction as its first parameter and assigns it as the implementation for all abstract methods. + generateOverridingConstructor(ctor, true); } - // If all our abstract methods have a single name, generate an additional constructor, one that takes a - // ScriptFunction as its first parameter and assigns it as the implementation for all abstract methods. - generateOverridingConstructor(ctor, true); } } @@ -430,7 +434,7 @@ final class JavaAdapterBytecodeGenerator { } /** - * Generates a constructor for the adapter class. This constructor will take the same arguments as the supertype + * Generates a constructor for the instance adapter class. This constructor will take the same arguments as the supertype * constructor passed as the argument here, and delegate to it. However, it will take an additional argument of * either ScriptObject or ScriptFunction type (based on the value of the "fromFunction" parameter), and initialize * all the method handle fields of the adapter instance with functions from the script object (or the script @@ -498,7 +502,7 @@ final class JavaAdapterBytecodeGenerator { mv.aconst(Type.getMethodType(mi.type.toMethodDescriptorString())); mv.invokestatic(SERVICES_CLASS_TYPE_NAME, "getHandle", getHandleDescriptor, false); } - mv.putfield(generatedClassName, mi.methodHandleInstanceFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); + mv.putfield(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); } // Assign "this.global = Context.getGlobal()" @@ -536,8 +540,7 @@ final class JavaAdapterBytecodeGenerator { private static class MethodInfo { private final Method method; private final MethodType type; - private String methodHandleInstanceFieldName; - private String methodHandleClassFieldName; + private String methodHandleFieldName; private MethodInfo(final Class clazz, final String name, final Class... argTypes) throws NoSuchMethodException { this(clazz.getDeclaredMethod(name, argTypes)); @@ -567,25 +570,20 @@ final class JavaAdapterBytecodeGenerator { return getName().hashCode() ^ type.hashCode(); } - void setIsCanonical(final Set usedFieldNames, boolean classOverride) { - methodHandleInstanceFieldName = nextName(usedFieldNames); - if(classOverride) { - methodHandleClassFieldName = nextName(usedFieldNames); - } + void setIsCanonical(final JavaAdapterBytecodeGenerator self) { + methodHandleFieldName = self.nextName(getName()); } + } - String nextName(final Set usedFieldNames) { - int i = 0; - final String name = getName(); - String nextName = name; - while (!usedFieldNames.add(nextName)) { - final String ordinal = String.valueOf(i++); - final int maxNameLen = 255 - ordinal.length(); - nextName = (name.length() <= maxNameLen ? name : name.substring(0, maxNameLen)).concat(ordinal); - } - return nextName; + private String nextName(final String name) { + int i = 0; + String nextName = name; + while (!usedFieldNames.add(nextName)) { + final String ordinal = String.valueOf(i++); + final int maxNameLen = 255 - ordinal.length(); + nextName = (name.length() <= maxNameLen ? name : name.substring(0, maxNameLen)).concat(ordinal); } - + return nextName; } private void generateMethods() { @@ -624,23 +622,19 @@ final class JavaAdapterBytecodeGenerator { methodDesc, null, exceptionNames)); mv.visitCode(); - final Label instanceHandleDefined = new Label(); - final Label classHandleDefined = new Label(); + final Label handleDefined = new Label(); final Type asmReturnType = Type.getType(type.returnType()); - // See if we have instance handle defined - mv.visitVarInsn(ALOAD, 0); - mv.getfield(generatedClassName, mi.methodHandleInstanceFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); - // stack: [instanceHandle] - jumpIfNonNullKeepOperand(mv, instanceHandleDefined); - + // See if we have overriding method handle defined if(classOverride) { - // See if we have the static handle - mv.getstatic(generatedClassName, mi.methodHandleClassFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); - // stack: [classHandle] - jumpIfNonNullKeepOperand(mv, classHandleDefined); + mv.getstatic(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); + } else { + mv.visitVarInsn(ALOAD, 0); + mv.getfield(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); } + // stack: [handle] + jumpIfNonNullKeepOperand(mv, handleDefined); // No handle is available, fall back to default behavior if(Modifier.isAbstract(method.getModifiers())) { @@ -654,25 +648,17 @@ final class JavaAdapterBytecodeGenerator { emitSuperCall(mv, method.getDeclaringClass(), name, methodDesc); } - final Label setupGlobal = new Label(); - + mv.visitLabel(handleDefined); + // Load the creatingGlobal object if(classOverride) { - mv.visitLabel(classHandleDefined); // If class handle is defined, load the static defining global - mv.getstatic(generatedClassName, STATIC_GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); - // stack: [creatingGlobal := classGlobal, classHandle] - mv.goTo(setupGlobal); + mv.getstatic(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); + } else { + mv.visitVarInsn(ALOAD, 0); + mv.getfield(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); } - - mv.visitLabel(instanceHandleDefined); - // If instance handle is defined, load the instance defining global - mv.visitVarInsn(ALOAD, 0); - mv.getfield(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); - // stack: [creatingGlobal := instanceGlobal, instanceHandle] - - // fallthrough to setupGlobal - - // stack: [creatingGlobal, someHandle] + // stack: [creatingGlobal, handle] + final Label setupGlobal = new Label(); mv.visitLabel(setupGlobal); // Determine the first index for a local variable @@ -685,38 +671,39 @@ final class JavaAdapterBytecodeGenerator { final int globalsDifferVar = nextLocalVar++; mv.dup(); - // stack: [creatingGlobal, creatingGlobal, someHandle] + // stack: [creatingGlobal, creatingGlobal, handle] // Emit code for switching to the creating global // ScriptObject currentGlobal = Context.getGlobal(); invokeGetGlobal(mv); mv.dup(); + mv.visitVarInsn(ASTORE, currentGlobalVar); - // stack: [currentGlobal, creatingGlobal, creatingGlobal, someHandle] + // stack: [currentGlobal, creatingGlobal, creatingGlobal, handle] // if(definingGlobal == currentGlobal) { final Label globalsDiffer = new Label(); mv.ifacmpne(globalsDiffer); - // stack: [someGlobal, someHandle] + // stack: [creatingGlobal, handle] // globalsDiffer = false mv.pop(); - // stack: [someHandle] + // stack: [handle] mv.iconst(0); // false - // stack: [false, someHandle] + // stack: [false, handle] final Label invokeHandle = new Label(); mv.goTo(invokeHandle); mv.visitLabel(globalsDiffer); // } else { // Context.setGlobal(definingGlobal); - // stack: [someGlobal, someHandle] + // stack: [creatingGlobal, handle] invokeSetGlobal(mv); - // stack: [someHandle] + // stack: [handle] // globalsDiffer = true mv.iconst(1); - // stack: [true, someHandle] + // stack: [true, handle] mv.visitLabel(invokeHandle); mv.visitVarInsn(ISTORE, globalsDifferVar); - // stack: [someHandle] + // stack: [handle] // Load all parameters back on stack for dynamic invocation. int varOffset = 1; @@ -835,7 +822,7 @@ final class JavaAdapterBytecodeGenerator { endMethod(mv); } - private void emitSuperCall(final InstructionAdapter mv, final Class owner, final String name, final String methodDesc) { + private void emitSuperCall(final InstructionAdapter mv, final Class owner, final String name, final String methodDesc) { mv.visitVarInsn(ALOAD, 0); int nextParam = 1; final Type methodType = Type.getMethodType(methodDesc); @@ -853,6 +840,42 @@ final class JavaAdapterBytecodeGenerator { mv.areturn(methodType.getReturnType()); } + private void generateFinalizerMethods() { + final String finalizerDelegateName = nextName("access$"); + generateFinalizerDelegate(finalizerDelegateName); + generateFinalizerOverride(finalizerDelegateName); + } + + private void generateFinalizerDelegate(final String finalizerDelegateName) { + // Generate a delegate that will be invoked from the no-permission trampoline. Note it can be private, as we'll + // refer to it with a MethodHandle constant pool entry in the overridden finalize() method (see + // generateFinalizerOverride()). + final InstructionAdapter mv = new InstructionAdapter(cw.visitMethod(ACC_PRIVATE | ACC_STATIC, + finalizerDelegateName, Type.getMethodDescriptor(Type.VOID_TYPE, OBJECT_TYPE), null, null)); + + // Simply invoke super.finalize() + mv.visitVarInsn(ALOAD, 0); + mv.checkcast(Type.getType(generatedClassName)); + mv.invokespecial(superClassName, "finalize", Type.getMethodDescriptor(Type.VOID_TYPE), false); + + mv.visitInsn(RETURN); + endMethod(mv); + } + + private void generateFinalizerOverride(final String finalizerDelegateName) { + final InstructionAdapter mv = new InstructionAdapter(cw.visitMethod(ACC_PUBLIC, "finalize", + VOID_NOARG_METHOD_DESCRIPTOR, null, null)); + // Overridden finalizer will take a MethodHandle to the finalizer delegating method, ... + mv.aconst(new Handle(Opcodes.H_INVOKESTATIC, generatedClassName, finalizerDelegateName, + Type.getMethodDescriptor(Type.VOID_TYPE, OBJECT_TYPE))); + mv.visitVarInsn(ALOAD, 0); + // ...and invoke it through JavaAdapterServices.invokeNoPermissions + mv.invokestatic(SERVICES_CLASS_TYPE_NAME, "invokeNoPermissions", + Type.getMethodDescriptor(METHOD_HANDLE_TYPE, OBJECT_TYPE), false); + mv.visitInsn(RETURN); + endMethod(mv); + } + private static String[] getExceptionNames(final Class[] exceptions) { final String[] exceptionNames = new String[exceptions.length]; for (int i = 0; i < exceptions.length; ++i) { @@ -873,16 +896,32 @@ final class JavaAdapterBytecodeGenerator { * class. * @param type the type defining the methods. */ - private void gatherMethods(final Class type) { + private void gatherMethods(final Class type) throws AdaptationException { if (Modifier.isPublic(type.getModifiers())) { final Method[] typeMethods = type.isInterface() ? type.getMethods() : type.getDeclaredMethods(); for (final Method typeMethod: typeMethods) { + final String name = typeMethod.getName(); + if(name.startsWith(SUPER_PREFIX)) { + continue; + } final int m = typeMethod.getModifiers(); if (Modifier.isStatic(m)) { continue; } if (Modifier.isPublic(m) || Modifier.isProtected(m)) { + // Is it a "finalize()"? + if(name.equals("finalize") && typeMethod.getParameterCount() == 0) { + if(type != Object.class) { + hasExplicitFinalizer = true; + if(Modifier.isFinal(m)) { + // Must be able to override an explicit finalizer + throw new AdaptationException(Outcome.ERROR_FINAL_FINALIZER, type.getCanonicalName()); + } + } + continue; + } + final MethodInfo mi = new MethodInfo(typeMethod); if (Modifier.isFinal(m) || isCallerSensitive(typeMethod)) { finalMethods.add(mi); @@ -890,7 +929,7 @@ final class JavaAdapterBytecodeGenerator { if (Modifier.isAbstract(m)) { abstractMethodNames.add(mi.getName()); } - mi.setIsCanonical(usedFieldNames, classOverride); + mi.setIsCanonical(this); } } } @@ -911,7 +950,7 @@ final class JavaAdapterBytecodeGenerator { } } - private void gatherMethods(final List> classes) { + private void gatherMethods(final List> classes) throws AdaptationException { for(final Class c: classes) { gatherMethods(c); } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java index 0062cd5f893..fa162d88d47 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java @@ -27,10 +27,6 @@ package jdk.nashorn.internal.runtime.linker; import java.security.AccessControlContext; import java.security.AccessController; -import java.security.AllPermission; -import java.security.CodeSigner; -import java.security.CodeSource; -import java.security.Permissions; import java.security.PrivilegedAction; import java.security.ProtectionDomain; import java.security.SecureClassLoader; @@ -45,35 +41,29 @@ import jdk.internal.dynalink.beans.StaticClass; */ @SuppressWarnings("javadoc") final class JavaAdapterClassLoader { - private static final ProtectionDomain GENERATED_PROTECTION_DOMAIN = createGeneratedProtectionDomain(); private static final AccessControlContext CREATE_LOADER_ACC_CTXT = ClassAndLoader.createPermAccCtxt("createClassLoader"); private final String className; - private volatile byte[] classBytes; + private final byte[] classBytes; JavaAdapterClassLoader(String className, byte[] classBytes) { this.className = className.replace('/', '.'); this.classBytes = classBytes; } - /** - * clear classBytes after loading class. - */ - void clearClassBytes() { - this.classBytes = null; - } - /** * Loads the generated adapter class into the JVM. * @param parentLoader the parent class loader for the generated class loader + * @param protectionDomain the protection domain for the generated class * @return the generated adapter class */ - StaticClass generateClass(final ClassLoader parentLoader) { + StaticClass generateClass(final ClassLoader parentLoader, final ProtectionDomain protectionDomain) { + assert protectionDomain != null; return AccessController.doPrivileged(new PrivilegedAction() { @Override public StaticClass run() { try { - return StaticClass.forClass(Class.forName(className, true, createClassLoader(parentLoader))); + return StaticClass.forClass(Class.forName(className, true, createClassLoader(parentLoader, protectionDomain))); } catch (final ClassNotFoundException e) { throw new AssertionError(e); // cannot happen } @@ -88,7 +78,7 @@ final class JavaAdapterClassLoader { // it even more by separating its invocation into a separate static method on the adapter class, but then someone // with ability to introspect on the class and use setAccessible(true) on it could invoke the method. It's a // security tradeoff... - private ClassLoader createClassLoader(final ClassLoader parentLoader) { + private ClassLoader createClassLoader(final ClassLoader parentLoader, final ProtectionDomain protectionDomain) { return new SecureClassLoader(parentLoader) { private final ClassLoader myLoader = getClass().getClassLoader(); @@ -112,21 +102,10 @@ final class JavaAdapterClassLoader { protected Class findClass(final String name) throws ClassNotFoundException { if(name.equals(className)) { assert classBytes != null : "what? already cleared .class bytes!!"; - return defineClass(name, classBytes, 0, classBytes.length, GENERATED_PROTECTION_DOMAIN); + return defineClass(name, classBytes, 0, classBytes.length, protectionDomain); } throw new ClassNotFoundException(name); } }; } - - private static ProtectionDomain createGeneratedProtectionDomain() { - // Generated classes need to have AllPermission. Since we require the "createClassLoader" RuntimePermission, we - // can create a class loader that'll load new classes with any permissions. Our generated classes are just - // delegating adapters, so having AllPermission can't cause anything wrong; the effective set of permissions for - // the executing script functions will still be limited by the permissions of the caller and the permissions of - // the script. - final Permissions permissions = new Permissions(); - permissions.add(new AllPermission()); - return new ProtectionDomain(new CodeSource(null, (CodeSigner[])null), permissions); - } } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java index b221d000034..5e0b890a6d2 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java @@ -29,17 +29,23 @@ import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; import java.lang.invoke.MethodType; import java.lang.reflect.Modifier; import java.security.AccessControlContext; import java.security.AccessController; +import java.security.CodeSigner; +import java.security.CodeSource; +import java.security.Permissions; import java.security.PrivilegedAction; +import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import jdk.internal.dynalink.beans.StaticClass; import jdk.internal.dynalink.support.LinkRequestImpl; import jdk.nashorn.internal.objects.NativeJava; @@ -70,6 +76,8 @@ import jdk.nashorn.internal.runtime.ScriptObject; @SuppressWarnings("javadoc") public final class JavaAdapterFactory { + private static final ProtectionDomain MINIMAL_PERMISSION_DOMAIN = createMinimalPermissionDomain(); + // context with permissions needs for AdapterInfo creation private static final AccessControlContext CREATE_ADAPTER_INFO_ACC_CTXT = ClassAndLoader.createPermAccCtxt("createClassLoader", "getClassLoader", @@ -99,20 +107,45 @@ public final class JavaAdapterFactory { * @param classOverrides a JavaScript object with functions serving as the class-level overrides and * implementations. These overrides are defined for all instances of the class, and can be further overridden on a * per-instance basis by passing additional objects in the constructor. + * @param lookup the lookup object identifying the caller class. The generated adapter class will have the + * protection domain of the caller class iff the lookup object is full-strength, otherwise it will be completely + * unprivileged. * @return an adapter class. See this class' documentation for details on the generated adapter class. * @throws ECMAException with a TypeError if the adapter class can not be generated because the original class is * final, non-public, or has no public or protected constructors. */ - public static StaticClass getAdapterClassFor(final Class[] types, ScriptObject classOverrides) { + public static StaticClass getAdapterClassFor(final Class[] types, ScriptObject classOverrides, final MethodHandles.Lookup lookup) { + return getAdapterClassFor(types, classOverrides, getProtectionDomain(lookup)); + } + + private static StaticClass getAdapterClassFor(final Class[] types, ScriptObject classOverrides, final ProtectionDomain protectionDomain) { assert types != null && types.length > 0; final SecurityManager sm = System.getSecurityManager(); if (sm != null) { for (Class type : types) { // check for restricted package access Context.checkPackageAccess(type); + // check for classes, interfaces in reflection + ReflectionCheckLinker.checkReflectionAccess(type, true); } } - return getAdapterInfo(types).getAdapterClassFor(classOverrides); + return getAdapterInfo(types).getAdapterClass(classOverrides, protectionDomain); + } + + private static ProtectionDomain getProtectionDomain(final MethodHandles.Lookup lookup) { + if((lookup.lookupModes() & Lookup.PRIVATE) == 0) { + return MINIMAL_PERMISSION_DOMAIN; + } + return getProtectionDomain(lookup.lookupClass()); + } + + private static ProtectionDomain getProtectionDomain(final Class clazz) { + return AccessController.doPrivileged(new PrivilegedAction() { + @Override + public ProtectionDomain run() { + return clazz.getProtectionDomain(); + } + }); } /** @@ -127,10 +160,10 @@ public final class JavaAdapterFactory { * @return the constructor method handle. * @throws Exception if anything goes wrong */ - public static MethodHandle getConstructor(final Class sourceType, final Class targetType) throws Exception { - final StaticClass adapterClass = getAdapterClassFor(new Class[] { targetType }, null); + public static MethodHandle getConstructor(final Class sourceType, final Class targetType, final MethodHandles.Lookup lookup) throws Exception { + final StaticClass adapterClass = getAdapterClassFor(new Class[] { targetType }, null, lookup); return MH.bindTo(Bootstrap.getLinkerServices().getGuardedInvocation(new LinkRequestImpl( - NashornCallSiteDescriptor.get(MethodHandles.publicLookup(), "dyn:new", + NashornCallSiteDescriptor.get(lookup, "dyn:new", MethodType.methodType(targetType, StaticClass.class, sourceType), 0), false, adapterClass, null)).getInvocation(), adapterClass); } @@ -218,10 +251,10 @@ public final class JavaAdapterFactory { private static final ClassAndLoader SCRIPT_OBJECT_LOADER = new ClassAndLoader(ScriptObject.class, true); private final ClassLoader commonLoader; - private final JavaAdapterClassLoader adapterGenerator; - // Cacheable adapter class that is shared by all adapter instances that don't have class overrides, only - // instance overrides. - final StaticClass instanceAdapterClass; + // TODO: soft reference the JavaAdapterClassLoader objects. They can be recreated when needed. + private final JavaAdapterClassLoader classAdapterGenerator; + private final JavaAdapterClassLoader instanceAdapterGenerator; + private final Map instanceAdapters = new ConcurrentHashMap<>(); final boolean autoConvertibleFromFunction; final AdaptationResult adaptationResult; @@ -229,11 +262,8 @@ public final class JavaAdapterFactory { this.commonLoader = findCommonLoader(definingLoader); final JavaAdapterBytecodeGenerator gen = new JavaAdapterBytecodeGenerator(superClass, interfaces, commonLoader, false); this.autoConvertibleFromFunction = gen.isAutoConvertibleFromFunction(); - final JavaAdapterClassLoader jacl = gen.createAdapterClassLoader(); - this.instanceAdapterClass = jacl.generateClass(commonLoader); - // loaded Class - no need to keep class bytes around - jacl.clearClassBytes(); - this.adapterGenerator = new JavaAdapterBytecodeGenerator(superClass, interfaces, commonLoader, true).createAdapterClassLoader(); + instanceAdapterGenerator = gen.createAdapterClassLoader(); + this.classAdapterGenerator = new JavaAdapterBytecodeGenerator(superClass, interfaces, commonLoader, true).createAdapterClassLoader(); this.adaptationResult = AdaptationResult.SUCCESSFUL_RESULT; } @@ -243,22 +273,42 @@ public final class JavaAdapterFactory { AdapterInfo(final AdaptationResult adaptationResult) { this.commonLoader = null; - this.adapterGenerator = null; - this.instanceAdapterClass = null; + this.classAdapterGenerator = null; + this.instanceAdapterGenerator = null; this.autoConvertibleFromFunction = false; this.adaptationResult = adaptationResult; } - StaticClass getAdapterClassFor(ScriptObject classOverrides) { + StaticClass getAdapterClass(final ScriptObject classOverrides, final ProtectionDomain protectionDomain) { if(adaptationResult.getOutcome() != AdaptationResult.Outcome.SUCCESS) { throw adaptationResult.typeError(); } - if(classOverrides == null) { + return classOverrides == null ? getInstanceAdapterClass(protectionDomain) : + getClassAdapterClass(classOverrides, protectionDomain); + } + + private StaticClass getInstanceAdapterClass(final ProtectionDomain protectionDomain) { + CodeSource codeSource = protectionDomain.getCodeSource(); + if(codeSource == null) { + codeSource = MINIMAL_PERMISSION_DOMAIN.getCodeSource(); + } + StaticClass instanceAdapterClass = instanceAdapters.get(codeSource); + if(instanceAdapterClass != null) { return instanceAdapterClass; } + // Any "unknown source" code source will default to no permission domain. + final ProtectionDomain effectiveDomain = codeSource.equals(MINIMAL_PERMISSION_DOMAIN.getCodeSource()) ? + MINIMAL_PERMISSION_DOMAIN : protectionDomain; + + instanceAdapterClass = instanceAdapterGenerator.generateClass(commonLoader, effectiveDomain); + final StaticClass existing = instanceAdapters.putIfAbsent(codeSource, instanceAdapterClass); + return existing == null ? instanceAdapterClass : existing; + } + + private StaticClass getClassAdapterClass(final ScriptObject classOverrides, final ProtectionDomain protectionDomain) { JavaAdapterServices.setClassOverrides(classOverrides); try { - return adapterGenerator.generateClass(commonLoader); + return classAdapterGenerator.generateClass(commonLoader, protectionDomain); } finally { JavaAdapterServices.setClassOverrides(null); } @@ -283,4 +333,12 @@ public final class JavaAdapterFactory { throw new AdaptationException(AdaptationResult.Outcome.ERROR_NO_COMMON_LOADER, classAndLoader.getRepresentativeClass().getCanonicalName()); } } + + private static ProtectionDomain createMinimalPermissionDomain() { + // Generated classes need to have at least the permission to access Nashorn runtime and runtime.linker packages. + final Permissions permissions = new Permissions(); + permissions.add(new RuntimePermission("accessClassInPackage.jdk.nashorn.internal.runtime")); + permissions.add(new RuntimePermission("accessClassInPackage.jdk.nashorn.internal.runtime.linker")); + return new ProtectionDomain(new CodeSource(null, (CodeSigner[])null), permissions); + } } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java index 06ae1b1109b..1188c6b6f73 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java @@ -25,10 +25,28 @@ package jdk.nashorn.internal.runtime.linker; +import static jdk.internal.org.objectweb.asm.Opcodes.ACC_FINAL; +import static jdk.internal.org.objectweb.asm.Opcodes.ACC_PUBLIC; +import static jdk.internal.org.objectweb.asm.Opcodes.ACC_STATIC; +import static jdk.internal.org.objectweb.asm.Opcodes.ACC_SUPER; +import static jdk.internal.org.objectweb.asm.Opcodes.ALOAD; +import static jdk.internal.org.objectweb.asm.Opcodes.RETURN; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; +import java.security.AccessController; +import java.security.CodeSigner; +import java.security.CodeSource; +import java.security.Permissions; +import java.security.PrivilegedAction; +import java.security.ProtectionDomain; +import java.security.SecureClassLoader; +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; +import jdk.internal.org.objectweb.asm.commons.InstructionAdapter; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -40,6 +58,7 @@ import jdk.nashorn.internal.runtime.Undefined; */ public final class JavaAdapterServices { private static final ThreadLocal classOverrides = new ThreadLocal<>(); + private static final MethodHandle NO_PERMISSIONS_INVOKER = createNoPermissionsInvoker(); private JavaAdapterServices() { } @@ -55,7 +74,7 @@ public final class JavaAdapterServices { */ public static MethodHandle getHandle(final ScriptFunction fn, final MethodType type) { // JS "this" will be global object or undefined depending on if 'fn' is strict or not - return adaptHandle(fn.getBoundInvokeHandle(fn.isStrict()? ScriptRuntime.UNDEFINED : Context.getGlobal()), type); + return bindAndAdaptHandle(fn, fn.isStrict()? ScriptRuntime.UNDEFINED : Context.getGlobal(), type); } /** @@ -83,7 +102,7 @@ public final class JavaAdapterServices { final Object fnObj = sobj.get(name); if (fnObj instanceof ScriptFunction) { - return adaptHandle(((ScriptFunction)fnObj).getBoundInvokeHandle(sobj), type); + return bindAndAdaptHandle((ScriptFunction)fnObj, sobj, type); } else if(fnObj == null || fnObj instanceof Undefined) { return null; } else { @@ -103,11 +122,67 @@ public final class JavaAdapterServices { return overrides; } + /** + * Takes a method handle and an argument to it, and invokes the method handle passing it the argument. Basically + * equivalent to {@code method.invokeExact(arg)}, except that the method handle will be invoked in a protection + * domain with absolutely no permissions. + * @param method the method handle to invoke. The handle must have the exact type of {@code void(Object)}. + * @param arg the argument to pass to the handle. + * @throws Throwable if anything goes wrong. + */ + public static void invokeNoPermissions(final MethodHandle method, final Object arg) throws Throwable { + NO_PERMISSIONS_INVOKER.invokeExact(method, arg); + } + static void setClassOverrides(ScriptObject overrides) { classOverrides.set(overrides); } - private static MethodHandle adaptHandle(final MethodHandle handle, final MethodType type) { - return Bootstrap.getLinkerServices().asType(ScriptObject.pairArguments(handle, type, false), type); + private static MethodHandle bindAndAdaptHandle(final ScriptFunction fn, final Object self, final MethodType type) { + return Bootstrap.getLinkerServices().asType(ScriptObject.pairArguments(fn.getBoundInvokeHandle(self), type, false), type); + } + + private static MethodHandle createNoPermissionsInvoker() { + final String className = "NoPermissionsInvoker"; + + final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + cw.visit(Opcodes.V1_7, ACC_PUBLIC | ACC_SUPER | ACC_FINAL, className, null, "java/lang/Object", null); + final Type objectType = Type.getType(Object.class); + final Type methodHandleType = Type.getType(MethodHandle.class); + final InstructionAdapter mv = new InstructionAdapter(cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "invoke", + Type.getMethodDescriptor(Type.VOID_TYPE, methodHandleType, objectType), null, null)); + mv.visitCode(); + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.invokevirtual(methodHandleType.getInternalName(), "invokeExact", Type.getMethodDescriptor( + Type.VOID_TYPE, objectType), false); + mv.visitInsn(RETURN); + mv.visitMaxs(0, 0); + mv.visitEnd(); + cw.visitEnd(); + final byte[] bytes = cw.toByteArray(); + + final ClassLoader loader = AccessController.doPrivileged(new PrivilegedAction() { + @Override + public ClassLoader run() { + return new SecureClassLoader(null) { + @Override + protected Class findClass(String name) throws ClassNotFoundException { + if(name.equals(className)) { + return defineClass(name, bytes, 0, bytes.length, new ProtectionDomain( + new CodeSource(null, (CodeSigner[])null), new Permissions())); + } + throw new ClassNotFoundException(name); + } + }; + } + }); + + try { + return MethodHandles.lookup().findStatic(Class.forName(className, true, loader), "invoke", + MethodType.methodType(void.class, MethodHandle.class, Object.class)); + } catch(ReflectiveOperationException e) { + throw new AssertionError(e.getMessage(), e); + } } } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java index c94df15b192..88ccf5a4847 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java @@ -25,19 +25,20 @@ package jdk.nashorn.internal.runtime.linker; +import static jdk.nashorn.internal.lookup.Lookup.MH; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; -import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodType; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.util.Map; import java.util.HashMap; +import java.util.Map; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.beans.BeansLinker; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingDynamicLinker; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkRequest; @@ -134,9 +135,9 @@ final class NashornBottomLinker implements GuardingDynamicLinker, GuardingTypeCo } @Override - public GuardedInvocation convertToType(final Class sourceType, final Class targetType) throws Exception { + public GuardedTypeConversion convertToType(final Class sourceType, final Class targetType) throws Exception { final GuardedInvocation gi = convertToTypeNoCast(sourceType, targetType); - return gi == null ? null : gi.asType(MH.type(targetType, sourceType)); + return gi == null ? null : new GuardedTypeConversion(gi.asType(MH.type(targetType, sourceType)), true); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java index 27e4573f572..0ac5f9a56e5 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java @@ -29,7 +29,10 @@ import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; import java.lang.reflect.Modifier; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.Deque; import java.util.List; import java.util.Map; @@ -37,16 +40,17 @@ import javax.script.Bindings; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.ConversionComparator; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.linker.LinkerServices; import jdk.internal.dynalink.linker.TypeBasedGuardingDynamicLinker; import jdk.internal.dynalink.support.Guards; +import jdk.internal.dynalink.support.LinkerServicesImpl; import jdk.nashorn.api.scripting.JSObject; import jdk.nashorn.api.scripting.ScriptObjectMirror; import jdk.nashorn.api.scripting.ScriptUtils; import jdk.nashorn.internal.objects.NativeArray; -import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.JSType; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -100,9 +104,16 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp } @Override - public GuardedInvocation convertToType(final Class sourceType, final Class targetType) throws Exception { - final GuardedInvocation gi = convertToTypeNoCast(sourceType, targetType); - return gi == null ? null : gi.asType(MH.type(targetType, sourceType)); + public GuardedTypeConversion convertToType(final Class sourceType, final Class targetType) throws Exception { + GuardedInvocation gi = convertToTypeNoCast(sourceType, targetType); + if(gi != null) { + return new GuardedTypeConversion(gi.asType(MH.type(targetType, sourceType)), true); + } + gi = getSamTypeConverter(sourceType, targetType); + if(gi != null) { + return new GuardedTypeConversion(gi.asType(MH.type(targetType, sourceType)), false); + } + return null; } /** @@ -126,12 +137,7 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp return arrayConverter; } - final GuardedInvocation mirrorConverter = getMirrorConverter(sourceType, targetType); - if(mirrorConverter != null) { - return mirrorConverter; - } - - return getSamTypeConverter(sourceType, targetType); + return getMirrorConverter(sourceType, targetType); } /** @@ -150,13 +156,23 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp final boolean isSourceTypeGeneric = sourceType.isAssignableFrom(ScriptFunction.class); if ((isSourceTypeGeneric || ScriptFunction.class.isAssignableFrom(sourceType)) && isAutoConvertibleFromFunction(targetType)) { - final MethodHandle ctor = JavaAdapterFactory.getConstructor(ScriptFunction.class, targetType); + final MethodHandle ctor = JavaAdapterFactory.getConstructor(ScriptFunction.class, targetType, getCurrentLookup()); assert ctor != null; // if isAutoConvertibleFromFunction() returned true, then ctor must exist. return new GuardedInvocation(ctor, isSourceTypeGeneric ? IS_SCRIPT_FUNCTION : null); } return null; } + private static Lookup getCurrentLookup() { + final LinkRequest currentRequest = AccessController.doPrivileged(new PrivilegedAction() { + @Override + public LinkRequest run() { + return LinkerServicesImpl.getCurrentLinkRequest(); + } + }); + return currentRequest == null ? MethodHandles.publicLookup() : currentRequest.getCallSiteDescriptor().getLookup(); + } + /** * Returns a guarded invocation that converts from a source type that is NativeArray to a Java array or List or * Deque type. diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java index ccd95fda642..5cc1cd2c632 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java @@ -31,6 +31,7 @@ import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import jdk.internal.dynalink.linker.ConversionComparator; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.linker.LinkerServices; @@ -75,13 +76,13 @@ final class NashornPrimitiveLinker implements TypeBasedGuardingDynamicLinker, Gu * @return a conditional converter from source to target type */ @Override - public GuardedInvocation convertToType(final Class sourceType, final Class targetType) { + public GuardedTypeConversion convertToType(final Class sourceType, final Class targetType) { final MethodHandle mh = JavaArgumentConverters.getConverter(targetType); if (mh == null) { return null; } - return new GuardedInvocation(mh, canLinkTypeStatic(sourceType) ? null : GUARD_PRIMITIVE).asType(mh.type().changeParameterType(0, sourceType)); + return new GuardedTypeConversion(new GuardedInvocation(mh, canLinkTypeStatic(sourceType) ? null : GUARD_PRIMITIVE).asType(mh.type().changeParameterType(0, sourceType)), true); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java index 72ed97666d0..272b4ec0ac4 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java @@ -65,7 +65,7 @@ final class NashornStaticClassLinker implements TypeBasedGuardingDynamicLinker { return null; } final Class receiverClass = ((StaticClass) self).getRepresentedClass(); - Bootstrap.checkReflectionAccess(receiverClass); + Bootstrap.checkReflectionAccess(receiverClass, true); final CallSiteDescriptor desc = request.getCallSiteDescriptor(); // We intercept "new" on StaticClass instances to provide additional capabilities if ("new".equals(desc.getNameToken(CallSiteDescriptor.OPERATOR))) { @@ -76,7 +76,8 @@ final class NashornStaticClassLinker implements TypeBasedGuardingDynamicLinker { if (NashornLinker.isAbstractClass(receiverClass)) { // Change this link request into a link request on the adapter class. final Object[] args = request.getArguments(); - args[0] = JavaAdapterFactory.getAdapterClassFor(new Class[] { receiverClass }, null); + args[0] = JavaAdapterFactory.getAdapterClassFor(new Class[] { receiverClass }, null, + linkRequest.getCallSiteDescriptor().getLookup()); final LinkRequest adapterRequest = request.replaceArguments(request.getCallSiteDescriptor(), args); final GuardedInvocation gi = checkNullConstructor(delegate(linkerServices, adapterRequest), receiverClass); // Finally, modify the guard to test for the original abstract class. diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java index 6772cbee037..8fc76c19ed6 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java @@ -26,6 +26,7 @@ package jdk.nashorn.internal.runtime.linker; import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.GuardedInvocation; import jdk.internal.dynalink.linker.LinkRequest; @@ -47,6 +48,7 @@ final class ReflectionCheckLinker implements TypeBasedGuardingDynamicLinker{ if (type == Class.class || ClassLoader.class.isAssignableFrom(type)) { return true; } + final String name = type.getName(); return name.startsWith("java.lang.reflect.") || name.startsWith("java.lang.invoke."); } @@ -59,9 +61,25 @@ final class ReflectionCheckLinker implements TypeBasedGuardingDynamicLinker{ return null; } - static void checkReflectionAccess(Class clazz) { + private static boolean isReflectiveCheckNeeded(final Class type, final boolean isStatic) { + // special handling for Proxy subclasses + if (Proxy.class.isAssignableFrom(type)) { + if (Proxy.isProxyClass(type)) { + // real Proxy class - filter only static access + return isStatic; + } + + // fake Proxy subclass - filter it always! + return true; + } + + // check for any other reflective Class + return isReflectionClass(type); + } + + static void checkReflectionAccess(final Class clazz, final boolean isStatic) { final SecurityManager sm = System.getSecurityManager(); - if (sm != null && isReflectionClass(clazz)) { + if (sm != null && isReflectiveCheckNeeded(clazz, isStatic)) { checkReflectionPermission(sm); } } @@ -78,6 +96,7 @@ final class ReflectionCheckLinker implements TypeBasedGuardingDynamicLinker{ if (desc.getNameTokenCount() > CallSiteDescriptor.NAME_OPERAND && "static".equals(desc.getNameToken(CallSiteDescriptor.NAME_OPERAND))) { if (Context.isAccessibleClass((Class)self) && !isReflectionClass((Class)self)) { + // If "getProp:static" passes access checks, allow access. return; } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties index 1a37ba7bf76..95993c9f40e 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties +++ b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties @@ -130,6 +130,7 @@ type.error.extend.ERROR_NON_PUBLIC_CLASS=Can not extend/implement non-public cla type.error.extend.ERROR_NO_ACCESSIBLE_CONSTRUCTOR=Can not extend class {0} as it has no public or protected constructors. type.error.extend.ERROR_MULTIPLE_SUPERCLASSES=Can not extend multiple classes {0}. At most one of the specified types can be a class, the rest must all be interfaces. type.error.extend.ERROR_NO_COMMON_LOADER=Can not find a common class loader for ScriptObject and {0}. +type.error.extend.ERROR_FINAL_FINALIZER=Can not extend class because {0} has a final finalize method. type.error.no.constructor.matches.args=Can not construct {0} with the passed arguments; they do not match any of its constructor signatures. type.error.no.method.matches.args=Can not invoke method {0} with the passed arguments; they do not match any of its method signatures. type.error.method.not.constructor=Java method {0} can't be used as a constructor. diff --git a/nashorn/test/script/basic/JDK-8014647.js b/nashorn/test/script/basic/JDK-8014647.js index 8ecc21101d5..8d06848f557 100644 --- a/nashorn/test/script/basic/JDK-8014647.js +++ b/nashorn/test/script/basic/JDK-8014647.js @@ -32,9 +32,10 @@ var RunnableImpl1 = Java.extend(java.lang.Runnable, function() { print("I'm runn var RunnableImpl2 = Java.extend(java.lang.Runnable, function() { print("I'm runnable 2!") }) var r1 = new RunnableImpl1() var r2 = new RunnableImpl2() -var r3 = new RunnableImpl2(function() { print("I'm runnable 3!") }) +var RunnableImpl3 = Java.extend(RunnableImpl2); +var r3 = new RunnableImpl3({ run: function() { print("I'm runnable 3!") }}) r1.run() r2.run() r3.run() -print("r1.class === r2.class: " + (r1.class === r2.class)) -print("r2.class === r3.class: " + (r2.class === r3.class)) +print("r1.class !== r2.class: " + (r1.class !== r2.class)) +print("r2.class !== r3.class: " + (r2.class !== r3.class)) diff --git a/nashorn/test/script/basic/JDK-8014647.js.EXPECTED b/nashorn/test/script/basic/JDK-8014647.js.EXPECTED index 641a13b1d45..f4f51dcc38f 100644 --- a/nashorn/test/script/basic/JDK-8014647.js.EXPECTED +++ b/nashorn/test/script/basic/JDK-8014647.js.EXPECTED @@ -1,5 +1,5 @@ I'm runnable 1! I'm runnable 2! I'm runnable 3! -r1.class === r2.class: false -r2.class === r3.class: true +r1.class !== r2.class: true +r2.class !== r3.class: true diff --git a/nashorn/test/script/basic/javaclassoverrides.js b/nashorn/test/script/basic/javaclassoverrides.js index e7ad61d841f..2fa7a85720d 100644 --- a/nashorn/test/script/basic/javaclassoverrides.js +++ b/nashorn/test/script/basic/javaclassoverrides.js @@ -46,7 +46,8 @@ var R2 = Java.extend(java.lang.Runnable, { var r1 = new R1 var r2 = new R2 // Create one with an instance-override too -var r3 = new R2(function() { print("r3.run() invoked") }) +var R3 = Java.extend(R2) +var r3 = new R3({ run: function() { print("r3.run() invoked") }}) // Run 'em - we're passing them through a Thread to make sure they indeed // are full-blown Runnables @@ -60,9 +61,9 @@ runInThread(r2) runInThread(r3) // Two class-override classes differ -print("r1.class != r2.class: " + (r1.class != r2.class)) -// However, adding instance-overrides doesn't change the class -print("r2.class == r3.class: " + (r2.class == r3.class)) +print("r1.class !== r2.class: " + (r1.class !== r2.class)) +// instance-override class also differs +print("r2.class !== r3.class: " + (r2.class !== r3.class)) function checkAbstract(r) { try { @@ -77,10 +78,10 @@ function checkAbstract(r) { // overrides nor instance overrides are present var RAbstract = Java.extend(java.lang.Runnable, {}) checkAbstract(new RAbstract()) // class override (empty) -checkAbstract(new RAbstract() {}) // class+instance override (empty) +checkAbstract(new (Java.extend(RAbstract))() {}) // class+instance override (empty) // Check we delegate to superclass if neither class // overrides nor instance overrides are present var ExtendsList = Java.extend(java.util.ArrayList, {}) print("(new ExtendsList).size() = " + (new ExtendsList).size()) -print("(new ExtendsList(){}).size() = " + (new ExtendsList(){}).size()) \ No newline at end of file +print("(new (Java.extend(ExtendsList)){}).size() = " + (new (Java.extend(ExtendsList)){}).size()) diff --git a/nashorn/test/script/basic/javaclassoverrides.js.EXPECTED b/nashorn/test/script/basic/javaclassoverrides.js.EXPECTED index 6c534302d48..ceec09cff85 100644 --- a/nashorn/test/script/basic/javaclassoverrides.js.EXPECTED +++ b/nashorn/test/script/basic/javaclassoverrides.js.EXPECTED @@ -1,9 +1,9 @@ R1.run() invoked R2.run() invoked r3.run() invoked -r1.class != r2.class: true -r2.class == r3.class: true +r1.class !== r2.class: true +r2.class !== r3.class: true Got exception: java.lang.UnsupportedOperationException Got exception: java.lang.UnsupportedOperationException (new ExtendsList).size() = 0 -(new ExtendsList(){}).size() = 0 +(new (Java.extend(ExtendsList)){}).size() = 0 diff --git a/nashorn/test/script/sandbox/classbind.js b/nashorn/test/script/sandbox/classbind.js new file mode 100644 index 00000000000..2dabb3e23d8 --- /dev/null +++ b/nashorn/test/script/sandbox/classbind.js @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Try to bind properties of StaticClass representing Class. + * + * @test + * @bug JDK-8032943: Improve reflection in Nashorn + */ + + +var obj = {} + +try { + Object.bindProperties(obj, Java.type("java.lang.Class")); + fail("SecurityException should have been thrown"); +} catch (e) { + if (! (e instanceof java.lang.SecurityException)) { + fail("SecurityException expected, got " + e); + } +} diff --git a/nashorn/test/script/sandbox/classloader.js b/nashorn/test/script/sandbox/classloader.js index 7676496060d..9de1a5c37f2 100644 --- a/nashorn/test/script/sandbox/classloader.js +++ b/nashorn/test/script/sandbox/classloader.js @@ -26,6 +26,7 @@ * * @test * @security + * @bug JDK-8032954: Nashorn: extend Java.extend */ try { @@ -39,3 +40,24 @@ try { } } +try { + Java.extend(Java.type('java.lang.ClassLoader')); + fail("should have thrown SecurityException"); +} catch (e) { + if (e instanceof java.lang.SecurityException) { + print(e); + } else { + fail("expected SecurityException, got " + e); + } +} + +try { + Java.extend(Java.type("javax.management.loading.MLet")); + fail("should have thrown SecurityException"); +} catch (e) { + if (e instanceof java.lang.SecurityException) { + print(e); + } else { + fail("expected SecurityException, got " + e); + } +} diff --git a/nashorn/test/script/sandbox/classloader.js.EXPECTED b/nashorn/test/script/sandbox/classloader.js.EXPECTED index 356053d4e1d..8c241912f36 100644 --- a/nashorn/test/script/sandbox/classloader.js.EXPECTED +++ b/nashorn/test/script/sandbox/classloader.js.EXPECTED @@ -1 +1,3 @@ java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "nashorn.JavaReflection") +java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "nashorn.JavaReflection") +java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "nashorn.JavaReflection") diff --git a/nashorn/test/script/sandbox/javaextend.js b/nashorn/test/script/sandbox/javaextend.js index 33cc6b01fa0..60eab74d14c 100644 --- a/nashorn/test/script/sandbox/javaextend.js +++ b/nashorn/test/script/sandbox/javaextend.js @@ -51,6 +51,21 @@ try { print(e) } +// Can't extend a class with explicit non-overridable finalizer +try { + Java.extend(model("ClassWithFinalFinalizer")) +} catch(e) { + print(e) +} + +// Can't extend a class with inherited non-overridable finalizer +try { + Java.extend(model("ClassWithInheritedFinalFinalizer")) +} catch(e) { + print(e) +} + + // Can't extend two classes try { Java.extend(java.lang.Thread,java.lang.Number) diff --git a/nashorn/test/script/sandbox/javaextend.js.EXPECTED b/nashorn/test/script/sandbox/javaextend.js.EXPECTED index 69c7818929c..c72774595e8 100644 --- a/nashorn/test/script/sandbox/javaextend.js.EXPECTED +++ b/nashorn/test/script/sandbox/javaextend.js.EXPECTED @@ -1,6 +1,8 @@ TypeError: Can not extend final class jdk.nashorn.test.models.FinalClass. TypeError: Can not extend class jdk.nashorn.test.models.NoAccessibleConstructorClass as it has no public or protected constructors. TypeError: Can not extend/implement non-public class/interface jdk.nashorn.test.models.NonPublicClass. +TypeError: Can not extend class because jdk.nashorn.test.models.ClassWithFinalFinalizer has a final finalize method. +TypeError: Can not extend class because jdk.nashorn.test.models.ClassWithFinalFinalizer has a final finalize method. TypeError: Can not extend multiple classes java.lang.Number and java.lang.Thread. At most one of the specified types can be a class, the rest must all be interfaces. abcdabcd run-object diff --git a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineSecurityTest.java b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineSecurityTest.java index 4f036101bfa..6d0d40f6042 100644 --- a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineSecurityTest.java +++ b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineSecurityTest.java @@ -27,11 +27,14 @@ package jdk.nashorn.api.scripting; import static org.testng.Assert.fail; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; import java.util.Objects; import javax.script.Invocable; import javax.script.ScriptEngine; -import javax.script.ScriptException; import javax.script.ScriptEngineManager; +import javax.script.ScriptException; import org.testng.annotations.Test; /** @@ -127,6 +130,23 @@ public class ScriptEngineSecurityTest { } } + + @Test + public void securitySystemExitFromFinalizerThread() throws ScriptException { + if (System.getSecurityManager() == null) { + // pass vacuously + return; + } + + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + e.eval("var o = Java.extend(Java.type('javax.imageio.spi.ServiceRegistry'), { deregisterAll: this.exit.bind(null, 1234)});\n" + + "new o(new java.util.ArrayList().iterator())"); + System.gc(); + System.runFinalization(); + // NOTE: this test just exits the VM if it fails. + } + @Test public void securitySystemLoadLibrary() { if (System.getSecurityManager() == null) { @@ -183,4 +203,98 @@ public class ScriptEngineSecurityTest { } } } + + // @bug 8032948: Nashorn linkages awry + public static class FakeProxy extends Proxy { + public FakeProxy(InvocationHandler ih) { + super(ih); + } + + public static Class makeProxyClass(ClassLoader cl, Class... ifaces) { + return Proxy.getProxyClass(cl, ifaces); + } + } + + @Test + public void fakeProxySubclassAccessCheckTest() throws ScriptException { + if (System.getSecurityManager() == null) { + // pass vacuously + return; + } + + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + + e.put("name", ScriptEngineSecurityTest.class.getName()); + e.put("cl", ScriptEngineSecurityTest.class.getClassLoader()); + e.put("intfs", new Class[] { Runnable.class }); + + String getClass = "Java.type(name + '$FakeProxy').getProxyClass(cl, intfs);"; + + // Should not be able to call static methods of Proxy via fake subclass + try { + Class c = (Class)e.eval(getClass); + fail("should have thrown SecurityException"); + } catch (final Exception exp) { + if (! (exp instanceof SecurityException)) { + fail("SecurityException expected, got " + exp); + } + } + } + + @Test + public void fakeProxySubclassAccessCheckTest2() throws ScriptException { + if (System.getSecurityManager() == null) { + // pass vacuously + return; + } + + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + + e.put("name", ScriptEngineSecurityTest.class.getName()); + e.put("cl", ScriptEngineSecurityTest.class.getClassLoader()); + e.put("intfs", new Class[] { Runnable.class }); + + String getClass = "Java.type(name + '$FakeProxy').makeProxyClass(cl, intfs);"; + + // Should not be able to call static methods of Proxy via fake subclass + try { + Class c = (Class)e.eval(getClass); + fail("should have thrown SecurityException"); + } catch (final Exception exp) { + if (! (exp instanceof SecurityException)) { + fail("SecurityException expected, got " + exp); + } + } + } + + @Test + public static void proxyStaticAccessCheckTest() throws ScriptException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Runnable r = (Runnable)Proxy.newProxyInstance( + ScriptEngineTest.class.getClassLoader(), + new Class[] { Runnable.class }, + new InvocationHandler() { + @Override + public Object invoke(Object p, Method m, Object[] a) { + return null; + } + }); + + e.put("rc", r.getClass()); + e.put("cl", ScriptEngineSecurityTest.class.getClassLoader()); + e.put("intfs", new Class[] { Runnable.class }); + + // make sure static methods of Proxy is not accessible via subclass + try { + e.eval("rc.static.getProxyClass(cl, intfs)"); + fail("Should have thrown SecurityException"); + } catch (final Exception exp) { + if (! (exp instanceof SecurityException)) { + fail("SecurityException expected, got " + exp); + } + } + } } diff --git a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java index 2c7df64d4b6..df8696d8e4c 100644 --- a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java +++ b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java @@ -33,7 +33,9 @@ import static org.testng.Assert.fail; import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; +import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.util.concurrent.Callable; import javax.script.Compilable; import javax.script.CompiledScript; @@ -535,6 +537,29 @@ public class ScriptEngineTest { assertEquals(e.eval("Window.funcJSObject(obj)"), "hello"); } + // @bug 8032948: Nashorn linkages awry + @Test + public void checkProxyAccess() throws ScriptException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final boolean[] reached = new boolean[1]; + final Runnable r = (Runnable)Proxy.newProxyInstance( + ScriptEngineTest.class.getClassLoader(), + new Class[] { Runnable.class }, + new InvocationHandler() { + @Override + public Object invoke(Object p, Method m, Object[] a) { + reached[0] = true; + return null; + } + }); + + e.put("r", r); + e.eval("r.run()"); + + assertTrue(reached[0]); + } + private static final String LINE_SEPARATOR = System.getProperty("line.separator"); // Returns String that would be the result of calling PrintWriter.println diff --git a/nashorn/test/src/jdk/nashorn/test/models/ClassWithFinalFinalizer.java b/nashorn/test/src/jdk/nashorn/test/models/ClassWithFinalFinalizer.java new file mode 100644 index 00000000000..ba0d86d8a96 --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/test/models/ClassWithFinalFinalizer.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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 jdk.nashorn.test.models; + +public class ClassWithFinalFinalizer { + protected final void finalize() { + } +} diff --git a/nashorn/test/src/jdk/nashorn/test/models/ClassWithInheritedFinalFinalizer.java b/nashorn/test/src/jdk/nashorn/test/models/ClassWithInheritedFinalFinalizer.java new file mode 100644 index 00000000000..80393fbbe2b --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/test/models/ClassWithInheritedFinalFinalizer.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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 jdk.nashorn.test.models; + +public class ClassWithInheritedFinalFinalizer extends ClassWithFinalFinalizer { +}