Merge
This commit is contained in:
commit
49dc297cc1
1
.hgtags
1
.hgtags
@ -233,3 +233,4 @@ b5ed503c26ad38869c247c5e32debec217fd056b jdk8-b104
|
||||
af9a674e12a16da1a4bd53e4990ddb1121a21ef1 jdk8-b109
|
||||
b5d2bf482a3ea1cca08c994512804ffbc73de0a1 jdk8-b110
|
||||
b9a0f6c693f347a6f4b9bb994957f4eaa05bdedd jdk8-b111
|
||||
ad67c34f79c28a8e755f4a49f313868619d6702c jdk8-b112
|
||||
|
@ -233,3 +233,4 @@ b7e64be81c8a7690703df5711f4fc2375da8a9cb jdk8-b103
|
||||
91f47e8da5c60de58ed195e9b57f3bf192a18f83 jdk8-b109
|
||||
4faa09c7fe555de086dd9048d3c5cc92317d6f45 jdk8-b110
|
||||
d086227bfc45d124f09b3bd72a07956b4073bf71 jdk8-b111
|
||||
547316ea137d83d9c63083a9b83db64198fe0c81 jdk8-b112
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2012, 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
|
||||
@ -36,10 +36,8 @@ default:
|
||||
TEST_FOR_NON_GNUMAKE:sh=echo You are not using GNU make/gmake, this is a requirement. Check your path. 1>&2 && exit 1
|
||||
|
||||
# Assume we have GNU make, but check version.
|
||||
ifeq (,$(findstring 3.81,$(MAKE_VERSION)))
|
||||
ifeq (,$(findstring 3.82,$(MAKE_VERSION)))
|
||||
$(error This version of GNU Make is too low ($(MAKE_VERSION)). Check your path, or upgrade to 3.81 or newer.)
|
||||
endif
|
||||
ifeq ($(strip $(foreach v, 3.81% 3.82% 4.%, $(filter $v, $(MAKE_VERSION)))), )
|
||||
$(error This version of GNU Make is too low ($(MAKE_VERSION)). Check your path, or upgrade to 3.81 or newer.)
|
||||
endif
|
||||
|
||||
# Locate this Makefile
|
||||
|
@ -212,6 +212,18 @@ AC_DEFUN([BASIC_DEPRECATED_ARG_WITH],
|
||||
[AC_MSG_WARN([Option --with-$1 is deprecated and will be ignored.])])
|
||||
])
|
||||
|
||||
# Register a --enable argument but mark it as deprecated
|
||||
# $1: The name of the with argument to deprecate, not including --enable-
|
||||
# $2: The name of the argument to deprecate, in shell variable style (i.e. with _ instead of -)
|
||||
AC_DEFUN([BASIC_DEPRECATED_ARG_ENABLE],
|
||||
[
|
||||
AC_ARG_ENABLE($1, [AS_HELP_STRING([--enable-$1],
|
||||
[Deprecated. Option is kept for backwards compatibility and is ignored])])
|
||||
if test "x$enable_$2" != x; then
|
||||
AC_MSG_WARN([Option --enable-$1 is deprecated and will be ignored.])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([BASIC_INIT],
|
||||
[
|
||||
# Save the original command line. This is passed to us by the wrapper configure script.
|
||||
@ -502,7 +514,7 @@ AC_DEFUN([BASIC_CHECK_MAKE_VERSION],
|
||||
if test "x$IS_GNU_MAKE" = x; then
|
||||
AC_MSG_NOTICE([Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring.])
|
||||
else
|
||||
IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[[12346789]]'`
|
||||
IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '\(3\.8[[12]]\)\|\(4\.\)'`
|
||||
if test "x$IS_MODERN_MAKE" = x; then
|
||||
AC_MSG_NOTICE([Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring.])
|
||||
else
|
||||
@ -644,6 +656,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
|
||||
fi
|
||||
|
||||
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
||||
BASIC_REQUIRE_PROG(DSYMUTIL, dsymutil)
|
||||
BASIC_REQUIRE_PROG(XATTR, xattr)
|
||||
AC_PATH_PROG(CODESIGN, codesign)
|
||||
if test "x$CODESIGN" != "x"; then
|
||||
|
@ -177,6 +177,9 @@ JDKOPT_SETUP_DEBUG_SYMBOLS
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
# After we have toolchain, we can compile fixpath. It's needed by the lib checks.
|
||||
BASIC_COMPILE_FIXPATH
|
||||
|
||||
LIB_SETUP_INIT
|
||||
LIB_SETUP_X11
|
||||
LIB_SETUP_CUPS
|
||||
@ -185,8 +188,6 @@ LIB_SETUP_ALSA
|
||||
LIB_SETUP_MISC_LIBS
|
||||
LIB_SETUP_STATIC_LINK_LIBSTDCPP
|
||||
|
||||
# After we have toolchain and the paths to all libraries (needed by msys), we can compile the fixpath helper
|
||||
BASIC_COMPILE_FIXPATH
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -31,43 +31,76 @@ AC_DEFUN_ONCE([HELP_SETUP_DEPENDENCY_HELP],
|
||||
AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY],
|
||||
[
|
||||
# Print a helpful message on how to acquire the necessary build dependency.
|
||||
# $1 is the help tag: freetyp2, cups, pulse, alsa etc
|
||||
# $1 is the help tag: freetype, cups, pulse, alsa etc
|
||||
MISSING_DEPENDENCY=$1
|
||||
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$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=
|
||||
|
||||
if test "x$PKGHANDLER_COMMAND" != x; then
|
||||
HELP_MSG="You might be able to fix this by running '$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
|
||||
])
|
||||
|
||||
cygwin_help() {
|
||||
case $1 in
|
||||
unzip)
|
||||
PKGHANDLER_COMMAND="cd <location of cygwin setup.exe> && cmd /c setup -q -P unzip" ;;
|
||||
PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P unzip )"
|
||||
HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
|
||||
;;
|
||||
zip)
|
||||
PKGHANDLER_COMMAND="cd <location of cygwin setup.exe> && cmd /c setup -q -P zip" ;;
|
||||
PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P zip )"
|
||||
HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
|
||||
;;
|
||||
make)
|
||||
PKGHANDLER_COMMAND="cd <location of cygwin setup.exe> && cmd /c setup -q -P make" ;;
|
||||
PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P make )"
|
||||
HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
|
||||
;;
|
||||
freetype)
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
HELP_MSG="To install freetype, run:
|
||||
wget \"http://gnuwin32.sourceforge.net/downlinks/freetype.php\" -O /tmp/freetype-setup.exe
|
||||
chmod +x /tmp/freetype-setup.exe
|
||||
/tmp/freetype-setup.exe
|
||||
Follow GUI prompts, and install to default directory \"C:\Program Files (x86)\GnuWin32\".
|
||||
After installation, locate lib/libfreetype.dll.a and make a copy with the name freetype.dll."
|
||||
else
|
||||
HELP_MSG="You need to build a 64-bit version of freetype.
|
||||
This is not readily available.
|
||||
You can find source code and build instructions on
|
||||
http://www.freetype.org/
|
||||
If you put the resulting build in \"C:\Program Files\GnuWin32\", it will be found automatically."
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
break ;;
|
||||
esac
|
||||
}
|
||||
|
||||
msys_help() {
|
||||
PKGHANDLER_COMMAND=""
|
||||
}
|
||||
|
||||
apt_help() {
|
||||
case $1 in
|
||||
devkit)
|
||||
@ -78,7 +111,7 @@ apt_help() {
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;;
|
||||
cups)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;;
|
||||
freetype2)
|
||||
freetype)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;;
|
||||
pulse)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;;
|
||||
@ -101,7 +134,7 @@ yum_help() {
|
||||
PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;;
|
||||
cups)
|
||||
PKGHANDLER_COMMAND="sudo yum install cups-devel" ;;
|
||||
freetype2)
|
||||
freetype)
|
||||
PKGHANDLER_COMMAND="sudo yum install freetype-devel" ;;
|
||||
pulse)
|
||||
PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;;
|
||||
|
@ -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
|
||||
@ -123,8 +123,7 @@ endif
|
||||
# Hotspot expects the variable ZIP_DEBUGINFO_FILES=1/0 and not true/false.
|
||||
ifeq ($(ZIP_DEBUGINFO_FILES)$(ENABLE_DEBUG_SYMBOLS), truetrue)
|
||||
ZIP_DEBUGINFO_FILES:=1
|
||||
endif
|
||||
ifeq ($(ZIP_DEBUGINFO_FILES), false)
|
||||
else
|
||||
ZIP_DEBUGINFO_FILES:=0
|
||||
endif
|
||||
|
||||
|
@ -516,11 +516,11 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
|
||||
elif test "x$enable_debug_symbols" = "xno"; then
|
||||
ENABLE_DEBUG_SYMBOLS=false
|
||||
else
|
||||
# default on macosx is false
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
|
||||
ENABLE_DEBUG_SYMBOLS=false
|
||||
# Default is on if objcopy is found, otherwise off
|
||||
elif test "x$OBJCOPY" != x || test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
# Default is on if objcopy is found
|
||||
if test "x$OBJCOPY" != x; then
|
||||
ENABLE_DEBUG_SYMBOLS=true
|
||||
# MacOS X and Windows don't use objcopy but default is on for those OSes
|
||||
elif test "x$OPENJDK_TARGET_OS" = xmacosx || test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
ENABLE_DEBUG_SYMBOLS=true
|
||||
else
|
||||
ENABLE_DEBUG_SYMBOLS=false
|
||||
|
@ -57,7 +57,6 @@ AC_DEFUN_ONCE([LIB_SETUP_INIT],
|
||||
ALSA_NOT_NEEDED=yes
|
||||
PULSE_NOT_NEEDED=yes
|
||||
X11_NOT_NEEDED=yes
|
||||
FREETYPE2_NOT_NEEDED=yes
|
||||
# If the java runtime framework is disabled, then we need X11.
|
||||
# This will be adjusted below.
|
||||
AC_MSG_RESULT([alsa pulse x11])
|
||||
@ -70,7 +69,7 @@ AC_DEFUN_ONCE([LIB_SETUP_INIT],
|
||||
fi
|
||||
|
||||
if test "x$OPENJDK" = "xfalse"; then
|
||||
FREETYPE2_NOT_NEEDED=yes
|
||||
FREETYPE_NOT_NEEDED=yes
|
||||
fi
|
||||
|
||||
if test "x$SUPPORT_HEADFUL" = xno; then
|
||||
@ -79,33 +78,17 @@ AC_DEFUN_ONCE([LIB_SETUP_INIT],
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM
|
||||
# that uses this API.
|
||||
# Check for MacOSX support for OpenJDK.
|
||||
#
|
||||
AC_ARG_ENABLE([macosx-runtime-support], [AS_HELP_STRING([--disable-macosx-runtime-support],
|
||||
[disable the use of MacOSX Java runtime support framework @<:@enabled@:>@])],
|
||||
[MACOSX_RUNTIME_SUPPORT="${enableval}"],[MACOSX_RUNTIME_SUPPORT="no"])
|
||||
|
||||
USE_MACOSX_RUNTIME_SUPPORT=no
|
||||
AC_MSG_CHECKING([for explicit Java runtime support in the OS])
|
||||
BASIC_DEPRECATED_ARG_ENABLE(macosx-runtime-support, macosx_runtime_support)
|
||||
|
||||
AC_MSG_CHECKING([for Mac OS X Java Framework])
|
||||
if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then
|
||||
if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then
|
||||
MACOSX_RUNTIME_SUPPORT=yes
|
||||
USE_MACOSX_RUNTIME_SUPPORT=yes
|
||||
AC_MSG_RESULT([yes, does not need alsa freetype2 pulse and X11])
|
||||
else
|
||||
AC_MSG_RESULT([yes, but explicitly disabled.])
|
||||
fi
|
||||
AC_MSG_RESULT([/System/Library/Frameworks/JavaVM.framework])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then
|
||||
AC_MSG_CHECKING([what is not needed on an X11 build on MacOSX?])
|
||||
X11_NOT_NEEDED=
|
||||
FREETYPE2_NOT_NEEDED=
|
||||
AC_MSG_RESULT([alsa pulse])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([LIB_SETUP_X11],
|
||||
@ -153,16 +136,6 @@ AC_DEFUN_ONCE([LIB_SETUP_X11],
|
||||
AC_MSG_ERROR([Could not find X11 libraries. $HELP_MSG])
|
||||
fi
|
||||
|
||||
# Some of the old makefiles require a setting of OPENWIN_HOME
|
||||
# Since the X11R6 directory has disappeared on later Linuxes,
|
||||
# we need to probe for it.
|
||||
if test "x$OPENJDK_TARGET_OS" = xlinux; then
|
||||
if test -d "$SYS_ROOT/usr/X11R6"; then
|
||||
OPENWIN_HOME="$SYS_ROOT/usr/X11R6"
|
||||
elif test -d "$SYS_ROOT/usr/include/X11"; then
|
||||
OPENWIN_HOME="$SYS_ROOT/usr"
|
||||
fi
|
||||
fi
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
OPENWIN_HOME="/usr/openwin"
|
||||
fi
|
||||
@ -277,151 +250,279 @@ AC_DEFUN_ONCE([LIB_SETUP_CUPS],
|
||||
|
||||
])
|
||||
|
||||
AC_DEFUN([LIB_CHECK_POTENTIAL_FREETYPE],
|
||||
[
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$1"
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$2"
|
||||
METHOD="$3"
|
||||
|
||||
# First check if the files exists.
|
||||
if test -s "$POTENTIAL_FREETYPE_INCLUDE_PATH/ft2build.h"; then
|
||||
# We found an arbitrary include file. That's a good sign.
|
||||
AC_MSG_NOTICE([Found freetype include files at $POTENTIAL_FREETYPE_INCLUDE_PATH using $METHOD])
|
||||
FOUND_FREETYPE=yes
|
||||
|
||||
FREETYPE_LIB_NAME="${LIBRARY_PREFIX}freetype${SHARED_LIBRARY_SUFFIX}"
|
||||
if ! test -s "$POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME"; then
|
||||
AC_MSG_NOTICE([Could not find $POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME. Ignoring location.])
|
||||
FOUND_FREETYPE=no
|
||||
else
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
# On Windows, we will need both .lib and .dll file.
|
||||
if ! test -s "$POTENTIAL_FREETYPE_LIB_PATH/freetype.lib"; then
|
||||
AC_MSG_NOTICE([Could not find $POTENTIAL_FREETYPE_LIB_PATH/freetype.lib. Ignoring location.])
|
||||
FOUND_FREETYPE=no
|
||||
fi
|
||||
elif test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64 && test -s "$POTENTIAL_FREETYPE_LIB_PATH/amd64/$FREETYPE_LIB_NAME"; then
|
||||
# On solaris-x86_86, default is (normally) PATH/lib/amd64. Update our guess!
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$POTENTIAL_FREETYPE_LIB_PATH/amd64"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" = xyes; then
|
||||
BASIC_FIXUP_PATH(POTENTIAL_FREETYPE_INCLUDE_PATH)
|
||||
BASIC_FIXUP_PATH(POTENTIAL_FREETYPE_LIB_PATH)
|
||||
|
||||
FREETYPE_INCLUDE_PATH="$POTENTIAL_FREETYPE_INCLUDE_PATH"
|
||||
AC_MSG_CHECKING([for freetype includes])
|
||||
AC_MSG_RESULT([$FREETYPE_INCLUDE_PATH])
|
||||
FREETYPE_LIB_PATH="$POTENTIAL_FREETYPE_LIB_PATH"
|
||||
AC_MSG_CHECKING([for freetype libraries])
|
||||
AC_MSG_RESULT([$FREETYPE_LIB_PATH])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([LIB_SETUP_FREETYPE],
|
||||
[
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# The ubiquitous freetype2 library is used to render fonts.
|
||||
# The ubiquitous freetype library is used to render fonts.
|
||||
#
|
||||
AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype],
|
||||
[specify prefix directory for the freetype2 package
|
||||
[specify prefix directory for the freetype package
|
||||
(expecting the libraries under PATH/lib and the headers under PATH/include)])])
|
||||
AC_ARG_WITH(freetype-include, [AS_HELP_STRING([--with-freetype-include],
|
||||
[specify directory for the freetype include files])])
|
||||
AC_ARG_WITH(freetype-lib, [AS_HELP_STRING([--with-freetype-lib],
|
||||
[specify directory for the freetype library])])
|
||||
AC_ARG_ENABLE(freetype-bundling, [AS_HELP_STRING([--disable-freetype-bundling],
|
||||
[disable bundling of the freetype library with the build result @<:@enabled on Windows or when using --with-freetype, disabled otherwise@:>@])])
|
||||
|
||||
# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree
|
||||
USING_SYSTEM_FT_LIB=false
|
||||
FREETYPE_CFLAGS=
|
||||
FREETYPE_LIBS=
|
||||
FREETYPE_BUNDLE_LIB_PATH=
|
||||
|
||||
if test "x$FREETYPE2_NOT_NEEDED" = xyes; then
|
||||
if test "x$FREETYPE_NOT_NEEDED" = xyes; then
|
||||
if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then
|
||||
AC_MSG_WARN([freetype not used, so --with-freetype is ignored])
|
||||
fi
|
||||
FREETYPE2_CFLAGS=
|
||||
FREETYPE2_LIBS=
|
||||
FREETYPE2_LIB_PATH=
|
||||
if test "x$enable_freetype_bundling" != x; then
|
||||
AC_MSG_WARN([freetype not used, so --enable-freetype-bundling is ignored])
|
||||
fi
|
||||
else
|
||||
FREETYPE2_FOUND=no
|
||||
# freetype is needed to build; go get it!
|
||||
|
||||
if test "x$with_freetype" != x; then
|
||||
BASIC_FIXUP_PATH(with_freetype)
|
||||
FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype"
|
||||
FREETYPE2_LIB_PATH="$with_freetype/lib"
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64 && test -d "$with_freetype/lib/amd64"; then
|
||||
FREETYPE2_LIBS="-L$with_freetype/lib/amd64 -lfreetype"
|
||||
FREETYPE2_LIB_PATH="$with_freetype/lib/amd64"
|
||||
BUNDLE_FREETYPE="$enable_freetype_bundling"
|
||||
|
||||
if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then
|
||||
# User has specified settings
|
||||
|
||||
if test "x$BUNDLE_FREETYPE" = x; then
|
||||
# If not specified, default is to bundle freetype
|
||||
BUNDLE_FREETYPE=yes
|
||||
fi
|
||||
|
||||
if test "x$with_freetype" != x; then
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$with_freetype/include"
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$with_freetype/lib"
|
||||
fi
|
||||
|
||||
# Allow --with-freetype-lib and --with-freetype-include to override
|
||||
if test "x$with_freetype_include" != x; then
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$with_freetype_include"
|
||||
fi
|
||||
if test "x$with_freetype_lib" != x; then
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$with_freetype_lib"
|
||||
fi
|
||||
|
||||
if test "x$POTENTIAL_FREETYPE_INCLUDE_PATH" != x && test "x$POTENTIAL_FREETYPE_LIB_PATH" != x; then
|
||||
# Okay, we got it. Check that it works.
|
||||
LIB_CHECK_POTENTIAL_FREETYPE($POTENTIAL_FREETYPE_INCLUDE_PATH, $POTENTIAL_FREETYPE_LIB_PATH, [--with-freetype])
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
AC_MSG_ERROR([Can not find or use freetype at location given by --with-freetype])
|
||||
fi
|
||||
else
|
||||
# User specified only one of lib or include. This is an error.
|
||||
if test "x$POTENTIAL_FREETYPE_INCLUDE_PATH" = x ; then
|
||||
AC_MSG_NOTICE([User specified --with-freetype-lib but not --with-freetype-include])
|
||||
AC_MSG_ERROR([Need both freetype lib and include paths. Consider using --with-freetype instead.])
|
||||
else
|
||||
AC_MSG_NOTICE([User specified --with-freetype-include but not --with-freetype-lib])
|
||||
AC_MSG_ERROR([Need both freetype lib and include paths. Consider using --with-freetype instead.])
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# User did not specify settings, but we need freetype. Try to locate it.
|
||||
|
||||
if test "x$BUNDLE_FREETYPE" = x; then
|
||||
# If not specified, default is to bundle freetype only on windows
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
BUNDLE_FREETYPE=yes
|
||||
else
|
||||
BUNDLE_FREETYPE=no
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
# Check builddeps
|
||||
BDEPS_CHECK_MODULE(FREETYPE, freetype2, xxx, [FOUND_FREETYPE=yes], [FOUND_FREETYPE=no])
|
||||
# BDEPS_CHECK_MODULE will set FREETYPE_CFLAGS and _LIBS, but we don't get a lib path for bundling.
|
||||
if test "x$FOUND_FREETYPE" = xyes; then
|
||||
if test "x$BUNDLE_FREETYPE" = xyes; then
|
||||
AC_MSG_NOTICE([Found freetype using builddeps, but ignoring since we can not bundle that])
|
||||
FOUND_FREETYPE=no
|
||||
else
|
||||
AC_MSG_CHECKING([for freetype])
|
||||
AC_MSG_RESULT([yes (using builddeps)])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
# Check modules using pkg-config, but only if we have it (ugly output results otherwise)
|
||||
if test "x$PKG_CONFIG" != x; then
|
||||
PKG_CHECK_MODULES(FREETYPE, freetype2, [FOUND_FREETYPE=yes], [FOUND_FREETYPE=no])
|
||||
if test "x$FOUND_FREETYPE" = xyes; then
|
||||
# On solaris, pkg_check adds -lz to freetype libs, which isn't necessary for us.
|
||||
FREETYPE_LIBS=`$ECHO $FREETYPE_LIBS | $SED 's/-lz//g'`
|
||||
# 64-bit libs for Solaris x86 are installed in the amd64 subdirectory, change lib to lib/amd64
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64; then
|
||||
FREETYPE_LIBS=`$ECHO $FREETYPE_LIBS | $SED 's?/lib?/lib/amd64?g'`
|
||||
fi
|
||||
# BDEPS_CHECK_MODULE will set FREETYPE_CFLAGS and _LIBS, but we don't get a lib path for bundling.
|
||||
if test "x$BUNDLE_FREETYPE" = xyes; then
|
||||
AC_MSG_NOTICE([Found freetype using pkg-config, but ignoring since we can not bundle that])
|
||||
FOUND_FREETYPE=no
|
||||
else
|
||||
AC_MSG_CHECKING([for freetype])
|
||||
AC_MSG_RESULT([yes (using pkg-config)])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
# Check in well-known locations
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
FREETYPE_BASE_DIR="$PROGRAMFILES/GnuWin32"
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(FREETYPE_BASE_DIR)
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
FREETYPE_BASE_DIR="$ProgramW6432/GnuWin32"
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(FREETYPE_BASE_DIR)
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
fi
|
||||
else
|
||||
if test "x$SYS_ROOT" = "x/"; then
|
||||
FREETYPE_ROOT=
|
||||
else
|
||||
FREETYPE_ROOT="$SYS_ROOT"
|
||||
fi
|
||||
FREETYPE_BASE_DIR="$FREETYPE_ROOT/usr"
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
FREETYPE_BASE_DIR="$FREETYPE_ROOT/usr/X11"
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
FREETYPE_BASE_DIR="$FREETYPE_ROOT/usr"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/x86_64-linux-gnu], [well-known location])
|
||||
else
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/i386-linux-gnu], [well-known location])
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib32], [well-known location])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi # end check in well-known locations
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([freetype])
|
||||
AC_MSG_ERROR([Could not find freetype! $HELP_MSG ])
|
||||
fi
|
||||
fi # end user specified settings
|
||||
|
||||
# Set FREETYPE_CFLAGS, _LIBS and _LIB_PATH from include and lib dir.
|
||||
if test "x$FREETYPE_CFLAGS" = x; then
|
||||
BASIC_FIXUP_PATH(FREETYPE_INCLUDE_PATH)
|
||||
if test -d $FREETYPE_INCLUDE_PATH/freetype2/freetype; then
|
||||
FREETYPE_CFLAGS="-I$FREETYPE_INCLUDE_PATH/freetype2 -I$FREETYPE_INCLUDE_PATH"
|
||||
else
|
||||
FREETYPE_CFLAGS="-I$FREETYPE_INCLUDE_PATH"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FREETYPE_LIBS" = x; then
|
||||
BASIC_FIXUP_PATH(FREETYPE_LIB_PATH)
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
FREETYPE2_LIBS="$with_freetype/lib/freetype.lib"
|
||||
FREETYPE_LIBS="$FREETYPE_LIB_PATH/freetype.lib"
|
||||
else
|
||||
FREETYPE_LIBS="-L$FREETYPE_LIB_PATH -lfreetype"
|
||||
fi
|
||||
FREETYPE2_CFLAGS="-I$with_freetype/include"
|
||||
if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then
|
||||
FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include"
|
||||
fi
|
||||
FREETYPE2_FOUND=yes
|
||||
if test "x$FREETYPE2_FOUND" = xyes; then
|
||||
# Verify that the directories exist
|
||||
if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then
|
||||
AC_MSG_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include])
|
||||
fi
|
||||
# List the contents of the lib.
|
||||
FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null`
|
||||
if test "x$FREETYPELIB" = x; then
|
||||
AC_MSG_ERROR([Could not find libfreetype.so nor freetype.dll in $with_freetype/lib])
|
||||
fi
|
||||
# Check one h-file
|
||||
if ! test -s "$with_freetype/include/ft2build.h"; then
|
||||
AC_MSG_ERROR([Could not find $with_freetype/include/ft2build.h])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "x$FREETYPE2_FOUND" = xno; then
|
||||
BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no])
|
||||
USING_SYSTEM_FT_LIB=true
|
||||
fi
|
||||
if test "x$FREETYPE2_FOUND" = xno && test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
FREETYPELOCATION="$PROGRAMFILES/GnuWin32"
|
||||
BASIC_FIXUP_PATH(FREETYPELOCATION)
|
||||
AC_MSG_CHECKING([for freetype in some standard windows locations])
|
||||
if test -s "$FREETYPELOCATION/include/ft2build.h" && test -d "$FREETYPELOCATION/include/freetype2/freetype"; then
|
||||
FREETYPE2_CFLAGS="-I$FREETYPELOCATION/include/freetype2 -I$FREETYPELOCATION/include"
|
||||
FREETYPE2_LIBS="$FREETYPELOCATION/lib/freetype.lib"
|
||||
FREETYPE2_LIB_PATH="$FREETYPELOCATION/lib"
|
||||
if ! test -s "$FREETYPE2_LIBS"; then
|
||||
AC_MSG_ERROR([Could not find $FREETYPE2_LIBS])
|
||||
fi
|
||||
if ! test -s "$FREETYPE2_LIB_PATH/freetype.dll"; then
|
||||
AC_MSG_ERROR([Could not find $FREETYPE2_LIB_PATH/freetype.dll])
|
||||
fi
|
||||
USING_SYSTEM_FT_LIB=true
|
||||
FREETYPE2_FOUND=yes
|
||||
fi
|
||||
AC_MSG_RESULT([$FREETYPE2_FOUND])
|
||||
fi
|
||||
if test "x$FREETYPE2_FOUND" = xno; then
|
||||
PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no])
|
||||
# On solaris, pkg_check adds -lz to freetype libs, which isn't necessary for us.
|
||||
FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's/-lz//g'`
|
||||
USING_SYSTEM_FT_LIB=true
|
||||
# 64-bit libs for Solaris x86 are installed in the amd64 subdirectory, change lib to lib/amd64
|
||||
if test "x$FREETYPE2_FOUND" = xyes && test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64; then
|
||||
FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's?/lib?/lib/amd64?g'`
|
||||
fi
|
||||
fi
|
||||
if test "x$FREETYPE2_FOUND" = xno; then
|
||||
AC_MSG_CHECKING([for freetype in some standard locations])
|
||||
|
||||
if test -s $SYS_ROOT/usr/X11/include/ft2build.h && test -d $SYS_ROOT/usr/X11/include/freetype2/freetype; then
|
||||
DEFAULT_FREETYPE_CFLAGS="-I$SYS_ROOT/usr/X11/include/freetype2 -I$SYS_ROOT/usr/X11/include"
|
||||
DEFAULT_FREETYPE_LIBS="-L$SYS_ROOT/usr/X11/lib -lfreetype"
|
||||
fi
|
||||
if test -s $SYS_ROOT/usr/include/ft2build.h && test -d $SYS_ROOT/usr/include/freetype2/freetype; then
|
||||
DEFAULT_FREETYPE_CFLAGS="-I$SYS_ROOT/usr/include/freetype2"
|
||||
DEFAULT_FREETYPE_LIBS="-lfreetype"
|
||||
fi
|
||||
|
||||
PREV_CXXCFLAGS="$CXXFLAGS"
|
||||
PREV_LDFLAGS="$LDFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS"
|
||||
LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||
#include<ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
int main() { return 0; }
|
||||
]])],
|
||||
[
|
||||
# Yes, the default cflags and libs did the trick.
|
||||
FREETYPE2_FOUND=yes
|
||||
FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS"
|
||||
FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS"
|
||||
],
|
||||
[
|
||||
FREETYPE2_FOUND=no
|
||||
]
|
||||
)
|
||||
CXXCFLAGS="$PREV_CXXFLAGS"
|
||||
LDFLAGS="$PREV_LDFLAGS"
|
||||
AC_MSG_RESULT([$FREETYPE2_FOUND])
|
||||
USING_SYSTEM_FT_LIB=true
|
||||
fi
|
||||
if test "x$FREETYPE2_FOUND" = xno; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([freetype2])
|
||||
AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ])
|
||||
fi
|
||||
|
||||
if test "x$OPENJDK_TARGET_OS" != xwindows; then
|
||||
# AC_CHECK_LIB does not support use of cl.exe
|
||||
PREV_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="$FREETYPE2_LIBS"
|
||||
AC_CHECK_LIB(freetype, FT_Init_FreeType,
|
||||
FREETYPE2_FOUND=true,
|
||||
AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ]))
|
||||
LDFLAGS="$PREV_LDFLAGS"
|
||||
fi
|
||||
fi
|
||||
# Try to compile it
|
||||
AC_MSG_CHECKING([if we can compile and link with freetype])
|
||||
AC_LANG_PUSH(C++)
|
||||
PREV_CXXCFLAGS="$CXXFLAGS"
|
||||
PREV_LDFLAGS="$LDFLAGS"
|
||||
PREV_CXX="$CXX"
|
||||
CXXFLAGS="$CXXFLAGS $FREETYPE_CFLAGS"
|
||||
LDFLAGS="$LDFLAGS $FREETYPE_LIBS"
|
||||
CXX="$FIXPATH $CXX"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||
#include<ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
int main () {
|
||||
FT_Init_FreeType(NULL);
|
||||
return 0;
|
||||
}
|
||||
]])],
|
||||
[
|
||||
AC_MSG_RESULT([yes])
|
||||
],
|
||||
[
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_NOTICE([Could not compile and link with freetype. This might be a 32/64-bit mismatch.])
|
||||
AC_MSG_NOTICE([Using FREETYPE_CFLAGS=$FREETYPE_CFLAGS and FREETYPE_LIBS=$FREETYPE_LIBS])
|
||||
|
||||
HELP_MSG_MISSING_DEPENDENCY([freetype])
|
||||
|
||||
AC_MSG_ERROR([Can not continue without freetype. $HELP_MSG])
|
||||
]
|
||||
)
|
||||
CXXCFLAGS="$PREV_CXXFLAGS"
|
||||
LDFLAGS="$PREV_LDFLAGS"
|
||||
CXX="$PREV_CXX"
|
||||
AC_LANG_POP(C++)
|
||||
|
||||
AC_SUBST(USING_SYSTEM_FT_LIB)
|
||||
AC_SUBST(FREETYPE2_LIB_PATH)
|
||||
AC_SUBST(FREETYPE2_CFLAGS)
|
||||
AC_SUBST(FREETYPE2_LIBS)
|
||||
AC_MSG_CHECKING([if we should bundle freetype])
|
||||
if test "x$BUNDLE_FREETYPE" = xyes; then
|
||||
FREETYPE_BUNDLE_LIB_PATH="$FREETYPE_LIB_PATH"
|
||||
fi
|
||||
AC_MSG_RESULT([$BUNDLE_FREETYPE])
|
||||
|
||||
fi # end freetype needed
|
||||
|
||||
AC_SUBST(FREETYPE_BUNDLE_LIB_PATH)
|
||||
AC_SUBST(FREETYPE_CFLAGS)
|
||||
AC_SUBST(FREETYPE_LIBS)
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([LIB_SETUP_ALSA],
|
||||
|
@ -268,13 +268,9 @@ SJAVAC_SERVER_DIR:=@SJAVAC_SERVER_DIR@
|
||||
# Number of parallel jobs to use for compilation
|
||||
JOBS?=@JOBS@
|
||||
|
||||
# The OpenJDK makefiles should be changed to using the standard
|
||||
# configure output ..._CFLAGS and ..._LIBS. In the meantime we
|
||||
# extract the information here.
|
||||
FREETYPE2_LIB_PATH:=@FREETYPE2_LIB_PATH@
|
||||
FREETYPE2_LIBS:=@FREETYPE2_LIBS@
|
||||
FREETYPE2_CFLAGS:=@FREETYPE2_CFLAGS@
|
||||
USING_SYSTEM_FT_LIB=@USING_SYSTEM_FT_LIB@
|
||||
FREETYPE_LIBS:=@FREETYPE_LIBS@
|
||||
FREETYPE_CFLAGS:=@FREETYPE_CFLAGS@
|
||||
FREETYPE_BUNDLE_LIB_PATH=@FREETYPE_BUNDLE_LIB_PATH@
|
||||
CUPS_CFLAGS:=@CUPS_CFLAGS@
|
||||
ALSA_LIBS:=@ALSA_LIBS@
|
||||
ALSA_CFLAGS:=@ALSA_CFLAGS@
|
||||
@ -485,6 +481,7 @@ CUT:=@CUT@
|
||||
DATE:=@DATE@
|
||||
DIFF:=@DIFF@
|
||||
DIRNAME:=@DIRNAME@
|
||||
DSYMUTIL:=@DSYMUTIL@
|
||||
FIND:=@FIND@
|
||||
FIND_DELETE:=@FIND_DELETE@
|
||||
ECHO:=@ECHO@
|
||||
|
@ -176,6 +176,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS],
|
||||
[
|
||||
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
|
||||
TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV
|
||||
TOOLCHAIN_SETUP_MSVCR_DLL
|
||||
BASIC_DEPRECATED_ARG_WITH([dxsdk])
|
||||
BASIC_DEPRECATED_ARG_WITH([dxsdk-lib])
|
||||
BASIC_DEPRECATED_ARG_WITH([dxsdk-include])
|
||||
|
@ -228,52 +228,113 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
|
||||
AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([for msvcr100.dll])
|
||||
AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL],
|
||||
[
|
||||
POSSIBLE_MSVCR_DLL="$1"
|
||||
METHOD="$2"
|
||||
if test -e "$POSSIBLE_MSVCR_DLL"; then
|
||||
AC_MSG_NOTICE([Found msvcr100.dll at $POSSIBLE_MSVCR_DLL using $METHOD])
|
||||
|
||||
# Need to check if the found msvcr is correct architecture
|
||||
AC_MSG_CHECKING([found msvcr100.dll architecture])
|
||||
MSVCR_DLL_FILETYPE=`$FILE -b "$POSSIBLE_MSVCR_DLL"`
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
CORRECT_MSVCR_ARCH=386
|
||||
else
|
||||
CORRECT_MSVCR_ARCH=x86-64
|
||||
fi
|
||||
if $ECHO "$MSVCR_DLL_FILETYPE" | $GREP $CORRECT_MSVCR_ARCH 2>&1 > /dev/null; then
|
||||
AC_MSG_RESULT([ok])
|
||||
MSVCR_DLL="$POSSIBLE_MSVCR_DLL"
|
||||
AC_MSG_CHECKING([for msvcr100.dll])
|
||||
AC_MSG_RESULT([$MSVCR_DLL])
|
||||
else
|
||||
AC_MSG_RESULT([incorrect, ignoring])
|
||||
AC_MSG_NOTICE([The file type of the located msvcr100.dll is $MSVCR_DLL_FILETYPE])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([TOOLCHAIN_SETUP_MSVCR_DLL],
|
||||
[
|
||||
AC_ARG_WITH(msvcr-dll, [AS_HELP_STRING([--with-msvcr-dll],
|
||||
[copy this msvcr100.dll into the built JDK (Windows only) @<:@probed@:>@])])
|
||||
|
||||
if test "x$with_msvcr_dll" != x; then
|
||||
MSVCR_DLL="$with_msvcr_dll"
|
||||
else
|
||||
if test "x$VCINSTALLDIR" != x; then
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x64 | head --lines 1`
|
||||
else
|
||||
MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1`
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | head --lines 1`
|
||||
fi
|
||||
fi
|
||||
if test "x$MSVCR_DLL" != x; then
|
||||
AC_MSG_NOTICE([msvcr100.dll found in VCINSTALLDIR: $VCINSTALLDIR])
|
||||
else
|
||||
AC_MSG_NOTICE([Warning: msvcr100.dll not found in VCINSTALLDIR: $VCINSTALLDIR])
|
||||
fi
|
||||
fi
|
||||
# Try some fallback alternatives
|
||||
# If given explicitely by user, do not probe. If not present, fail directly.
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$with_msvcr_dll], [--with-msvcr-dll])
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
# If visual studio express is installed, there is usually one with the debugger
|
||||
if test "x$VS100COMNTOOLS" != x; then
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
MSVCR_DLL=`find "$VS100COMNTOOLS/.." -name msvcr100.dll | grep -i x64 | head --lines 1`
|
||||
AC_MSG_NOTICE([msvcr100.dll found in $VS100COMNTOOLS..: $VS100COMNTOOLS..])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
# Fallback for 32bit builds, look in the windows directory.
|
||||
if test -f "$SYSTEMROOT/system32/msvcr100.dll"; then
|
||||
AC_MSG_NOTICE([msvcr100.dll found in $SYSTEMROOT/system32])
|
||||
MSVCR_DLL="$SYSTEMROOT/system32/msvcr100.dll"
|
||||
fi
|
||||
fi
|
||||
AC_MSG_ERROR([Could not find a proper msvcr100.dll as specified by --with-msvcr-dll])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([Could not find msvcr100.dll !])
|
||||
# Probe: Using well-known location from Visual Studio 10.0
|
||||
if test "x$VCINSTALLDIR" != x; then
|
||||
CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VC_INSTALL_DIR)
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVCR_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC100.CRT/msvcr100.dll"
|
||||
else
|
||||
POSSIBLE_MSVCR_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC100.CRT/msvcr100.dll"
|
||||
fi
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$POSSIBLE_MSVCR_DLL], [well-known location in VCINSTALLDIR])
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT([$MSVCR_DLL])
|
||||
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
# Probe: Check in the Boot JDK directory.
|
||||
POSSIBLE_MSVCR_DLL="$BOOT_JDK/bin/msvcr100.dll"
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$POSSIBLE_MSVCR_DLL], [well-known location in Boot JDK])
|
||||
fi
|
||||
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
# Probe: Look in the Windows system32 directory
|
||||
CYGWIN_SYSTEMROOT="$SYSTEMROOT"
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_SYSTEMROOT)
|
||||
POSSIBLE_MSVCR_DLL="$CYGWIN_SYSTEMROOT/system32/msvcr100.dll"
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$POSSIBLE_MSVCR_DLL], [well-known location in SYSTEMROOT])
|
||||
fi
|
||||
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
# Probe: If Visual Studio Express is installed, there is usually one with the debugger
|
||||
if test "x$VS100COMNTOOLS" != x; then
|
||||
CYGWIN_VS_TOOLS_DIR="$VS100COMNTOOLS/.."
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VS_TOOLS_DIR)
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVCR_DLL=`$FIND "$CYGWIN_VS_TOOLS_DIR" -name msvcr100.dll | $GREP -i /x64/ | $HEAD --lines 1`
|
||||
else
|
||||
POSSIBLE_MSVCR_DLL=`$FIND "$CYGWIN_VS_TOOLS_DIR" -name msvcr100.dll | $GREP -i /x86/ | $HEAD --lines 1`
|
||||
fi
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$POSSIBLE_MSVCR_DLL], [search of VS100COMNTOOLS])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
# Probe: Search wildly in the VCINSTALLDIR. We've probably lost by now.
|
||||
# (This was the original behaviour; kept since it might turn up something)
|
||||
if test "x$CYGWIN_VC_INSTALL_DIR" != x; then
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVCR_DLL=`$FIND "$CYGWIN_VC_INSTALL_DIR" -name msvcr100.dll | $GREP x64 | $HEAD --lines 1`
|
||||
else
|
||||
POSSIBLE_MSVCR_DLL=`$FIND "$CYGWIN_VC_INSTALL_DIR" -name msvcr100.dll | $GREP x86 | $GREP -v ia64 | $GREP -v x64 | $HEAD --lines 1`
|
||||
if test "x$POSSIBLE_MSVCR_DLL" = x; then
|
||||
# We're grasping at straws now...
|
||||
POSSIBLE_MSVCR_DLL=`$FIND "$CYGWIN_VC_INSTALL_DIR" -name msvcr100.dll | $HEAD --lines 1`
|
||||
fi
|
||||
fi
|
||||
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$POSSIBLE_MSVCR_DLL], [search of VCINSTALLDIR])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$MSVCR_DLL" = x; then
|
||||
AC_MSG_CHECKING([for msvcr100.dll])
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([Could not find msvcr100.dll. Please specify using --with-msvcr-dll.])
|
||||
fi
|
||||
|
||||
BASIC_FIXUP_PATH(MSVCR_DLL)
|
||||
])
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,37 +27,11 @@
|
||||
command="$1"
|
||||
pull_extra_base="$2"
|
||||
|
||||
# Python always buffers stdout significantly, thus we will not see any output from hg clone jdk,
|
||||
# until a lot of time has passed! By passing -u to python, we get incremental updates
|
||||
# on stdout. Much nicer.
|
||||
whichhg="`which hg 2> /dev/null | grep -v '^no hg in'`"
|
||||
|
||||
if [ "${whichhg}" = "" ] ; then
|
||||
echo Cannot find hg!
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "" = "$command" ] ; then
|
||||
echo No command to hg supplied!
|
||||
exit 1
|
||||
fi
|
||||
|
||||
has_hash_bang="`head -n 1 "${whichhg}" | cut -b 1-2`"
|
||||
python=""
|
||||
bpython=""
|
||||
|
||||
if [ "#!" = "$has_hash_bang" ] ; then
|
||||
python="`head -n 1 ${whichhg} | cut -b 3- | sed -e 's/^[ \t]*//;s/[ \t]*$//'`"
|
||||
bpython="`basename "$python"`"
|
||||
fi
|
||||
|
||||
if [ -x "$python" -a ! -d "$python" -a "`${python} -V 2>&1 | cut -f 1 -d ' '`" = "Python" ] ; then
|
||||
hg="${python} -u ${whichhg}"
|
||||
else
|
||||
echo Cannot find python from hg launcher. Running plain hg, which probably has buffered stdout.
|
||||
hg="hg"
|
||||
fi
|
||||
|
||||
# Clean out the temporary directory that stores the pid files.
|
||||
tmp=/tmp/forest.$$
|
||||
rm -f -r ${tmp}
|
||||
@ -171,7 +145,7 @@ for i in ${repos} ${repos_extra} ; do
|
||||
(
|
||||
if [ "${command}" = "clone" -o "${command}" = "fclone" ] ; then
|
||||
pull_newrepo="`echo ${pull_base}/${i} | sed -e 's@\([^:]/\)//*@\1@g'`"
|
||||
echo ${hg} clone ${pull_newrepo} ${i}
|
||||
echo hg clone ${pull_newrepo} ${i}
|
||||
path="`dirname ${i}`"
|
||||
if [ "${path}" != "." ] ; then
|
||||
times=0
|
||||
@ -184,10 +158,10 @@ for i in ${repos} ${repos_extra} ; do
|
||||
sleep 5
|
||||
done
|
||||
fi
|
||||
(${hg} clone ${pull_newrepo} ${i}; echo "$?" > ${tmp}/${repopidfile}.pid.rc )&
|
||||
(PYTHONUNBUFFERED=true hg clone ${pull_newrepo} ${i}; echo "$?" > ${tmp}/${repopidfile}.pid.rc )&
|
||||
else
|
||||
echo "cd ${i} && ${hg} $*"
|
||||
cd ${i} && (${hg} "$@"; echo "$?" > ${tmp}/${repopidfile}.pid.rc )&
|
||||
echo "cd ${i} && hg $*"
|
||||
cd ${i} && (PYTHONUNBUFFERED=true hg "$@"; echo "$?" > ${tmp}/${repopidfile}.pid.rc )&
|
||||
fi
|
||||
echo $! > ${tmp}/${repopidfile}.pid
|
||||
) 2>&1 | sed -e "s@^@${reponame}: @") &
|
||||
|
@ -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
|
||||
@ -266,8 +266,12 @@ define SetupZipArchive
|
||||
endif
|
||||
|
||||
# Find all files in the source tree.
|
||||
$1_ALL_SRCS := $$(call not-containing,_the., \
|
||||
$$(filter $$(addprefix %,$$($1_SUFFIXES)),$$(call CacheFind,$$($1_FIND_LIST))))
|
||||
$1_ALL_SRCS := $$(call not-containing,_the.,$$(call CacheFind,$$($1_FIND_LIST)))
|
||||
|
||||
# Filter on suffixes if set
|
||||
ifneq ($$($1_SUFFIXES),)
|
||||
$1_ALL_SRCS := $$(filter $$(addprefix %, $$($1_SUFFIXES)), $$($1_ALL_SRCS))
|
||||
endif
|
||||
|
||||
ifneq ($$($1_INCLUDES),)
|
||||
ifneq ($$($1_SUFFIXES),)
|
||||
@ -371,8 +375,8 @@ define SetupJavaCompilation
|
||||
# INCLUDE_FILES:="com/sun/SolarisFoobar.java" means only compile this file!
|
||||
# EXCLUDE_FILES:="com/sun/SolarisFoobar.java" means do not compile this particular file!
|
||||
# "SolarisFoobar.java" means do not compile SolarisFoobar, wherever it is found.
|
||||
# JAVAC_SOURCE_PATH_UGLY_OVERRIDE:=Don't use this. This forces an explicit -sourcepath to javac.
|
||||
# Its only here until we cleanup some nasty source code pasta in the jdk.
|
||||
# JAVAC_SOURCE_PATH_OVERRIDE:=This forces an explicit -sourcepath to javac instead of the complete
|
||||
# source roots from SRC. This is sometimes needed when compiling specific subsets of the source.
|
||||
# HEADERS:=path to directory where all generated c-headers are written.
|
||||
# DEPENDS:=Extra dependecy
|
||||
$(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE))
|
||||
@ -474,8 +478,8 @@ define SetupJavaCompilation
|
||||
endif
|
||||
|
||||
# Prep the source paths.
|
||||
ifneq ($$($1_JAVAC_SOURCE_PATH_UGLY_OVERRIDE),)
|
||||
$$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_JAVAC_SOURCE_PATH_UGLY_OVERRIDE)))
|
||||
ifneq ($$($1_JAVAC_SOURCE_PATH_OVERRIDE),)
|
||||
$$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_JAVAC_SOURCE_PATH_OVERRIDE)))
|
||||
else
|
||||
$$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_SRC)))
|
||||
endif
|
||||
|
@ -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
|
||||
@ -435,31 +435,36 @@ define SetupNativeCompilation
|
||||
$(CP) $$< $$@
|
||||
endif
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
|
||||
# Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
|
||||
# empty section headers until a fixed $(OBJCOPY) is available.
|
||||
# An empty section header has sh_addr == 0 and sh_size == 0.
|
||||
# This problem has only been seen on Solaris X64, but we call this tool
|
||||
# on all Solaris builds just in case.
|
||||
#
|
||||
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
|
||||
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
|
||||
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \
|
||||
$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
|
||||
$(RM) $$@
|
||||
$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
|
||||
$(OBJCOPY) --only-keep-debug $$< $$@
|
||||
$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
|
||||
else # not solaris
|
||||
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET)
|
||||
$(RM) $$@
|
||||
$(OBJCOPY) --only-keep-debug $$< $$@
|
||||
$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
|
||||
endif # Touch to not retrigger rule on rebuild
|
||||
ifneq ($(OPENJDK_TARGET_OS), macosx) # OBJCOPY is not used on MacOS X
|
||||
ifneq ($(OPENJDK_TARGET_OS), windows) # nor on Windows
|
||||
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
|
||||
# Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
|
||||
# empty section headers until a fixed $(OBJCOPY) is available.
|
||||
# An empty section header has sh_addr == 0 and sh_size == 0.
|
||||
# This problem has only been seen on Solaris X64, but we call this tool
|
||||
# on all Solaris builds just in case.
|
||||
#
|
||||
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
|
||||
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
|
||||
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \
|
||||
$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
|
||||
$(RM) $$@
|
||||
$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
|
||||
$(OBJCOPY) --only-keep-debug $$< $$@
|
||||
$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
|
||||
else # not solaris
|
||||
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET)
|
||||
$(RM) $$@
|
||||
$(OBJCOPY) --only-keep-debug $$< $$@
|
||||
$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
|
||||
endif # Touch to not retrigger rule on rebuild
|
||||
$(TOUCH) $$@
|
||||
endif # !windows
|
||||
endif # !macosx
|
||||
|
||||
ifeq ($(ZIP_DEBUGINFO_FILES), true)
|
||||
ifneq ($(OPENJDK_TARGET_OS), macosx) # no MacOS X support yet
|
||||
$1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
@ -472,11 +477,12 @@ define SetupNativeCompilation
|
||||
$(CD) $$($1_OBJECT_DIR) \
|
||||
&& $(ZIP) -q $$@ $$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo
|
||||
endif
|
||||
endif # no MacOS X support yet
|
||||
else
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
$1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \
|
||||
$$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb
|
||||
else
|
||||
else ifneq ($(OPENJDK_TARGET_OS), macosx) # MacOS X does not use .debuginfo files
|
||||
$1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo
|
||||
endif
|
||||
endif
|
||||
@ -513,31 +519,36 @@ define SetupNativeCompilation
|
||||
$(CP) $$< $$@
|
||||
endif
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
|
||||
# Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
|
||||
# empty section headers until a fixed $(OBJCOPY) is available.
|
||||
# An empty section header has sh_addr == 0 and sh_size == 0.
|
||||
# This problem has only been seen on Solaris X64, but we call this tool
|
||||
# on all Solaris builds just in case.
|
||||
#
|
||||
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
|
||||
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
|
||||
$$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \
|
||||
$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
|
||||
$(RM) $$@
|
||||
$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
|
||||
$(OBJCOPY) --only-keep-debug $$< $$@
|
||||
$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
|
||||
else # not solaris
|
||||
$$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET)
|
||||
$(RM) $$@
|
||||
$(OBJCOPY) --only-keep-debug $$< $$@
|
||||
$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
|
||||
endif
|
||||
$(TOUCH) $$@
|
||||
ifneq ($(OPENJDK_TARGET_OS), macosx) # OBJCOPY is not used on MacOS X
|
||||
ifneq ($(OPENJDK_TARGET_OS), windows) # nor on Windows
|
||||
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
|
||||
# Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
|
||||
# empty section headers until a fixed $(OBJCOPY) is available.
|
||||
# An empty section header has sh_addr == 0 and sh_size == 0.
|
||||
# This problem has only been seen on Solaris X64, but we call this tool
|
||||
# on all Solaris builds just in case.
|
||||
#
|
||||
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
|
||||
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
|
||||
$$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \
|
||||
$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
|
||||
$(RM) $$@
|
||||
$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
|
||||
$(OBJCOPY) --only-keep-debug $$< $$@
|
||||
$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
|
||||
else # not solaris
|
||||
$$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET)
|
||||
$(RM) $$@
|
||||
$(OBJCOPY) --only-keep-debug $$< $$@
|
||||
$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
|
||||
endif
|
||||
$(TOUCH) $$@
|
||||
endif # !windows
|
||||
endif # !macosx
|
||||
|
||||
ifeq ($(ZIP_DEBUGINFO_FILES), true)
|
||||
ifneq ($(OPENJDK_TARGET_OS), macosx) # no MacOS X support yet
|
||||
$1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
@ -550,11 +561,12 @@ define SetupNativeCompilation
|
||||
$(CD) $$($1_OBJECT_DIR) \
|
||||
&& $(ZIP) -q $$@ $$($1_PROGRAM).debuginfo
|
||||
endif
|
||||
endif # no MacOS X support yet
|
||||
else
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
$1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \
|
||||
$$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb
|
||||
else
|
||||
else ifneq ($(OPENJDK_TARGET_OS), macosx) # MacOS X does not use .debuginfo files
|
||||
$1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo
|
||||
endif
|
||||
endif
|
||||
|
@ -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
|
||||
@ -38,7 +38,7 @@ define SetupRMICompilation
|
||||
$(call LogSetupMacroEntry,SetupRMICompilation($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 SetupRMICompilation, please update RMICompilation.gmk))
|
||||
|
||||
$1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic
|
||||
$1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/_the.$1_rmic.generated
|
||||
|
||||
$1_CLASSES_SLASH := $$(subst .,/,$$($1_CLASSES))
|
||||
$1_CLASS_FILES := $$(addprefix $$($1_CLASSES_DIR)/,$$(addsuffix .class,$$($1_CLASSES_SLASH)))
|
||||
@ -60,11 +60,11 @@ define SetupRMICompilation
|
||||
|
||||
ifneq (,$$($1_RUN_IIOP))
|
||||
$1_TARGETS += $$($1_TIE_FILES)
|
||||
$1_ARGS += -iiop
|
||||
$1_ARGS += -iiop -emitPermissionCheck
|
||||
endif
|
||||
ifneq (,$$($1_RUN_IIOP_STDPKG))
|
||||
$1_TARGETS += $$($1_TIE_STDPKG_FILES)
|
||||
$1_ARGS2 := -iiop -standardPackage
|
||||
$1_ARGS2 := -iiop -emitPermissionCheck -standardPackage
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_KEEP_GENERATED))
|
||||
@ -88,10 +88,9 @@ define SetupRMICompilation
|
||||
$(RMIC) $$($1_ARGS2) -classpath "$$($1_CLASSES_DIR)" \
|
||||
-d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES); \
|
||||
fi;
|
||||
$(TOUCH) $$@
|
||||
|
||||
|
||||
$1 := $$($1_TARGETS)
|
||||
$1 := $$($1_TARGETS) $$($1_DEP_FILE)
|
||||
|
||||
# By marking as secondary, this "touch" file doesn't need to be touched and will never exist.
|
||||
.SECONDARY: $$($1_DEP_FILE)
|
||||
endef
|
||||
|
@ -233,3 +233,4 @@ a4bb3b4500164748a9c33b2283cfda76d89f25ab jdk8-b108
|
||||
428428cf5e06163322144cfb5367e1faa86acf20 jdk8-b109
|
||||
3d2b7ce93c5c2e3db748f29c3d29620a8b3b748a jdk8-b110
|
||||
85c1c94e723582f9a1dd0251502c42b73d6deea7 jdk8-b111
|
||||
43cec76d1d62587a07af07e2d9bec93aba2a506b jdk8-b112
|
||||
|
@ -33,9 +33,7 @@ jprt.build.flavors=product,fastdebug
|
||||
|
||||
# Standard list of jprt build targets for this source tree
|
||||
jprt.build.targets= \
|
||||
solaris_sparc_5.10-{product|fastdebug}, \
|
||||
solaris_sparcv9_5.10-{product|fastdebug}, \
|
||||
solaris_i586_5.10-{product|fastdebug}, \
|
||||
solaris_x64_5.10-{product|fastdebug}, \
|
||||
linux_i586_2.6-{product|fastdebug}, \
|
||||
linux_x64_2.6-{product|fastdebug}, \
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2007, 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,7 +45,9 @@ DISABLE_CORBA_WARNINGS := -Xlint:all,-deprecation,-unchecked,-serial,-fallthroug
|
||||
$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \
|
||||
JVM := $(JAVA), \
|
||||
JAVAC := $(NEW_JAVAC), \
|
||||
FLAGS := $(BOOT_JDK_SOURCETARGET) -bootclasspath $(BOOT_RTJAR) $(DISABLE_CORBA_WARNINGS), \
|
||||
FLAGS := $(BOOT_JDK_SOURCETARGET) \
|
||||
-bootclasspath "$(BOOT_RTJAR)$(PATH_SEP)$(BOOT_TOOLSJAR)" \
|
||||
$(DISABLE_CORBA_WARNINGS), \
|
||||
SERVER_DIR := $(SJAVAC_SERVER_DIR), \
|
||||
SERVER_JVM := $(SJAVAC_SERVER_JAVA)))
|
||||
|
||||
@ -183,6 +185,15 @@ ifeq ($(LOGWRAPPERS_ARE_CREATED), yes)
|
||||
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, \
|
||||
@ -241,6 +252,7 @@ ifeq ($(LOGWRAPPERS_ARE_CREATED), yes)
|
||||
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
|
||||
|
@ -905,28 +905,4 @@ public class IDLNameTranslatorImpl implements IDLNameTranslator {
|
||||
|
||||
return contents.toString();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
Class remoteInterface = java.rmi.Remote.class;
|
||||
|
||||
if( args.length > 0 ) {
|
||||
String className = args[0];
|
||||
try {
|
||||
remoteInterface = Class.forName(className);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
System.exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Building name translation for " + remoteInterface);
|
||||
try {
|
||||
IDLNameTranslator nameTranslator =
|
||||
IDLNameTranslatorImpl.get(remoteInterface);
|
||||
System.out.println(nameTranslator);
|
||||
} catch(IllegalStateException ise) {
|
||||
ise.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -43,6 +43,8 @@ import com.sun.corba.se.spi.orbutil.proxy.InvocationHandlerFactory ;
|
||||
import com.sun.corba.se.spi.orbutil.proxy.DelegateInvocationHandlerImpl ;
|
||||
import com.sun.corba.se.spi.orbutil.proxy.CompositeInvocationHandler ;
|
||||
import com.sun.corba.se.spi.orbutil.proxy.CompositeInvocationHandlerImpl ;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
|
||||
public class InvocationHandlerFactoryImpl implements InvocationHandlerFactory
|
||||
{
|
||||
@ -114,24 +116,32 @@ public class InvocationHandlerFactoryImpl implements InvocationHandlerFactory
|
||||
// which extends org.omg.CORBA.Object. This handler delegates all
|
||||
// calls directly to a DynamicStubImpl, which extends
|
||||
// org.omg.CORBA.portable.ObjectImpl.
|
||||
InvocationHandler dynamicStubHandler =
|
||||
final InvocationHandler dynamicStubHandler =
|
||||
DelegateInvocationHandlerImpl.create( stub ) ;
|
||||
|
||||
// Create an invocation handler that handles any remote interface
|
||||
// methods.
|
||||
InvocationHandler stubMethodHandler = new StubInvocationHandlerImpl(
|
||||
final InvocationHandler stubMethodHandler = new StubInvocationHandlerImpl(
|
||||
pm, classData, stub ) ;
|
||||
|
||||
// Create a composite handler that handles the DynamicStub interface
|
||||
// as well as the remote interfaces.
|
||||
final CompositeInvocationHandler handler =
|
||||
new CustomCompositeInvocationHandlerImpl( stub ) ;
|
||||
|
||||
AccessController.doPrivileged(new PrivilegedAction<Void>() {
|
||||
@Override
|
||||
public Void run() {
|
||||
handler.addInvocationHandler( DynamicStub.class,
|
||||
dynamicStubHandler ) ;
|
||||
handler.addInvocationHandler( org.omg.CORBA.Object.class,
|
||||
dynamicStubHandler ) ;
|
||||
handler.addInvocationHandler( Object.class,
|
||||
dynamicStubHandler ) ;
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// If the method passed to invoke is not from DynamicStub or its superclasses,
|
||||
// it must be from an implemented interface, so we just handle
|
||||
|
@ -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
|
||||
@ -55,7 +55,7 @@ import com.sun.corba.se.impl.orbutil.ORBUtility;
|
||||
/**
|
||||
* @author Harold Carr
|
||||
*/
|
||||
public class SelectorImpl
|
||||
class SelectorImpl
|
||||
extends
|
||||
Thread
|
||||
implements
|
||||
|
@ -36,6 +36,7 @@ import java.lang.reflect.InvocationHandler ;
|
||||
|
||||
import com.sun.corba.se.spi.logging.CORBALogDomains ;
|
||||
import com.sun.corba.se.impl.logging.ORBUtilSystemException ;
|
||||
import com.sun.corba.se.impl.presentation.rmi.DynamicAccessPermission;
|
||||
|
||||
public class CompositeInvocationHandlerImpl implements
|
||||
CompositeInvocationHandler
|
||||
@ -46,11 +47,13 @@ public class CompositeInvocationHandlerImpl implements
|
||||
public void addInvocationHandler( Class interf,
|
||||
InvocationHandler handler )
|
||||
{
|
||||
checkAccess();
|
||||
classToInvocationHandler.put( interf, handler ) ;
|
||||
}
|
||||
|
||||
public void setDefaultHandler( InvocationHandler handler )
|
||||
{
|
||||
checkAccess();
|
||||
defaultHandler = handler ;
|
||||
}
|
||||
|
||||
@ -78,4 +81,12 @@ public class CompositeInvocationHandlerImpl implements
|
||||
|
||||
return handler.invoke( proxy, method, args ) ;
|
||||
}
|
||||
|
||||
private static final DynamicAccessPermission perm = new DynamicAccessPermission("access");
|
||||
private void checkAccess() {
|
||||
final SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
sm.checkPermission(perm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
@ -34,6 +34,9 @@ package sun.rmi.rmic.iiop;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.SerializablePermission;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.util.Vector;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Enumeration;
|
||||
@ -49,6 +52,7 @@ import com.sun.corba.se.impl.util.Utility;
|
||||
import com.sun.corba.se.impl.util.PackagePrefixChecker;
|
||||
import sun.rmi.rmic.Main;
|
||||
|
||||
|
||||
/**
|
||||
* An IIOP stub/tie generator for rmic.
|
||||
*
|
||||
@ -78,6 +82,7 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator {
|
||||
protected boolean castArray = false;
|
||||
protected Hashtable transactionalObjects = new Hashtable() ;
|
||||
protected boolean POATie = false ;
|
||||
protected boolean emitPermissionCheck = false;
|
||||
|
||||
/**
|
||||
* Default constructor for Main to use.
|
||||
@ -193,6 +198,9 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator {
|
||||
} else if (argv[i].equals("-standardPackage")) {
|
||||
standardPackage = true;
|
||||
argv[i] = null;
|
||||
} else if (argv[i].equals("-emitPermissionCheck")) {
|
||||
emitPermissionCheck = true;
|
||||
argv[i] = null;
|
||||
} else if (arg.equals("-xstubbase")) {
|
||||
argv[i] = null;
|
||||
if (++i < argv.length && argv[i] != null && !argv[i].startsWith("-")) {
|
||||
@ -390,9 +398,22 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator {
|
||||
|
||||
writePackageAndImports(p);
|
||||
|
||||
// generate
|
||||
// import java.security.AccessController;
|
||||
// import java.security.PrivilegedAction;
|
||||
// import java.io.SerializablePermission;
|
||||
if (emitPermissionCheck) {
|
||||
p.pln("import java.security.AccessController;");
|
||||
p.pln("import java.security.PrivilegedAction;");
|
||||
p.pln("import java.io.SerializablePermission;");
|
||||
p.pln();
|
||||
p.pln();
|
||||
}
|
||||
|
||||
// Declare the stub class; implement all remote interfaces.
|
||||
|
||||
p.p("public class " + currentClass);
|
||||
|
||||
p.p(" extends " + getName(stubBaseClass));
|
||||
p.p(" implements ");
|
||||
if (remoteInterfaces.length > 0) {
|
||||
@ -422,6 +443,57 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator {
|
||||
writeIds( p, theType, false );
|
||||
p.pln();
|
||||
|
||||
if (emitPermissionCheck) {
|
||||
|
||||
// produce the following generated code for example
|
||||
// private static Void checkPermission() {
|
||||
// SecurityManager sm = System.getSecurityManager();
|
||||
// if (sm != null) {
|
||||
// sm.checkPermission(new SerializablePermission(
|
||||
// "enableSubclassImplementation")); // testing
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// private _XXXXX_Stub(Void ignore) {
|
||||
// }
|
||||
//
|
||||
// public _XXXXX_Stub() {
|
||||
// this(checkPermission());
|
||||
// }
|
||||
//
|
||||
// where XXXXX is the name of the remote interface
|
||||
|
||||
p.pln();
|
||||
p.plnI("private static Void checkPermission() {");
|
||||
p.plnI("SecurityManager sm = System.getSecurityManager();");
|
||||
p.pln("if (sm != null) {");
|
||||
p.pI();
|
||||
p.plnI("sm.checkPermission(new SerializablePermission(");
|
||||
p.plnI("\"enableSubclassImplementation\"));");
|
||||
p.pO();
|
||||
p.pO();
|
||||
p.pOln("}");
|
||||
p.pln("return null;");
|
||||
p.pO();
|
||||
p.pOln("}");
|
||||
p.pln();
|
||||
p.pO();
|
||||
|
||||
p.pI();
|
||||
p.pln("private " + currentClass + "(Void ignore) { }");
|
||||
p.pln();
|
||||
|
||||
p.plnI("public " + currentClass + "() { ");
|
||||
p.pln("this(checkPermission());");
|
||||
p.pOln("}");
|
||||
p.pln();
|
||||
}
|
||||
|
||||
if (!emitPermissionCheck) {
|
||||
p.pI();
|
||||
}
|
||||
|
||||
// Write the _ids() method...
|
||||
|
||||
p.plnI("public String[] _ids() { ");
|
||||
@ -815,7 +887,6 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator {
|
||||
CompoundType theType) throws IOException {
|
||||
|
||||
// Wtite the method declaration and opening brace...
|
||||
|
||||
String methodName = method.getName();
|
||||
String methodIDLName = method.getIDLName();
|
||||
|
||||
|
@ -387,3 +387,5 @@ f6962730bbde82f279a0ae3a1c14bc5e58096c6e jdk8-b111
|
||||
4a845c7a463844cead9e1e1641d6bcfb8a77f1c7 hs25-b54
|
||||
0ed9a90f45e1b392c671005f9ee22ce1acf02984 jdk8-b112
|
||||
23b8db5ea31d3079f1326afde4cd5c67b1dac49c hs25-b55
|
||||
4589b398ab03aba6a5da8c06ff53603488d1b8f4 jdk8-b113
|
||||
82a9cdbf683e374a76f2009352de53e16bed5a91 hs25-b56
|
||||
|
@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2013
|
||||
|
||||
HS_MAJOR_VER=25
|
||||
HS_MINOR_VER=0
|
||||
HS_BUILD_NUMBER=56
|
||||
HS_BUILD_NUMBER=57
|
||||
|
||||
JDK_MAJOR_VER=1
|
||||
JDK_MINOR_VER=8
|
||||
|
@ -181,6 +181,7 @@ DEBUG_OPT_OPTION = /Od
|
||||
PRODUCT_OPT_OPTION = /O2 /Oy-
|
||||
FASTDEBUG_OPT_OPTION = /O2 /Oy-
|
||||
DEBUG_OPT_OPTION = /Od
|
||||
SAFESEH_FLAG = /SAFESEH
|
||||
!endif
|
||||
|
||||
!if "$(COMPILER_NAME)" == "VS2005"
|
||||
@ -199,6 +200,7 @@ LD_FLAGS = /manifest $(LD_FLAGS) $(BUFFEROVERFLOWLIB)
|
||||
!if "x$(MT)" == "x"
|
||||
MT=mt.exe
|
||||
!endif
|
||||
SAFESEH_FLAG = /SAFESEH
|
||||
!endif
|
||||
|
||||
!if "$(COMPILER_NAME)" == "VS2008"
|
||||
@ -213,6 +215,7 @@ MP_FLAG = /MP
|
||||
!if "x$(MT)" == "x"
|
||||
MT=mt.exe
|
||||
!endif
|
||||
SAFESEH_FLAG = /SAFESEH
|
||||
!endif
|
||||
|
||||
!if "$(COMPILER_NAME)" == "VS2010"
|
||||
@ -244,9 +247,11 @@ MP_FLAG = /MP
|
||||
!if "x$(MT)" == "x"
|
||||
MT=mt.exe
|
||||
!endif
|
||||
!if "$(BUILDARCH)" == "i486"
|
||||
LD_FLAGS = /SAFESEH $(LD_FLAGS)
|
||||
SAFESEH_FLAG = /SAFESEH
|
||||
!endif
|
||||
|
||||
!if "$(BUILDARCH)" == "i486"
|
||||
LD_FLAGS = $(SAFESEH_FLAG) $(LD_FLAGS)
|
||||
!endif
|
||||
|
||||
CXX_FLAGS = $(CXX_FLAGS) $(MP_FLAG)
|
||||
|
@ -110,6 +110,9 @@ SA_LFLAGS = $(SA_LD_FLAGS) -nologo -subsystem:console -machine:$(MACHINE)
|
||||
!if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1"
|
||||
SA_LFLAGS = $(SA_LFLAGS) -map -debug
|
||||
!endif
|
||||
!if "$(BUILDARCH)" == "i486"
|
||||
SA_LFLAGS = $(SAFESEH_FLAG) $(SA_LFLAGS)
|
||||
!endif
|
||||
|
||||
SA_CFLAGS = $(SA_CFLAGS) $(MP_FLAG)
|
||||
|
||||
|
@ -365,7 +365,7 @@ address CppInterpreterGenerator::generate_stack_to_native_abi_converter(BasicTyp
|
||||
return entry;
|
||||
}
|
||||
|
||||
address CppInterpreter::return_entry(TosState state, int length) {
|
||||
address CppInterpreter::return_entry(TosState state, int length, Bytecodes::Code code) {
|
||||
// make it look good in the debugger
|
||||
return CAST_FROM_FN_PTR(address, RecursiveInterpreterActivation) + frame::pc_return_offset;
|
||||
}
|
||||
|
@ -153,13 +153,9 @@ address TemplateInterpreterGenerator::generate_StackOverflowError_handler() {
|
||||
}
|
||||
|
||||
|
||||
address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step) {
|
||||
TosState incoming_state = state;
|
||||
|
||||
Label cont;
|
||||
address compiled_entry = __ pc();
|
||||
|
||||
address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) {
|
||||
address entry = __ pc();
|
||||
|
||||
#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.
|
||||
@ -170,14 +166,12 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state,
|
||||
// do this here. Unfortunately if we did a rethrow we'd see an machepilog node
|
||||
// first which would move g1 -> O0/O1 and destroy the exception we were throwing.
|
||||
|
||||
if (incoming_state == ltos) {
|
||||
if (state == ltos) {
|
||||
__ srl (G1, 0, O1);
|
||||
__ srlx(G1, 32, O0);
|
||||
}
|
||||
#endif // !_LP64 && COMPILER2
|
||||
|
||||
__ bind(cont);
|
||||
|
||||
// The callee returns with the stack possibly adjusted by adapter transition
|
||||
// We remove that possible adjustment here.
|
||||
// All interpreter local registers are untouched. Any result is passed back
|
||||
@ -186,28 +180,17 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state,
|
||||
|
||||
__ mov(Llast_SP, SP); // Remove any adapter added stack space.
|
||||
|
||||
Label L_got_cache, L_giant_index;
|
||||
const Register cache = G3_scratch;
|
||||
const Register size = G1_scratch;
|
||||
if (EnableInvokeDynamic) {
|
||||
__ ldub(Address(Lbcp, 0), G1_scratch); // Load current bytecode.
|
||||
__ cmp_and_br_short(G1_scratch, Bytecodes::_invokedynamic, Assembler::equal, Assembler::pn, L_giant_index);
|
||||
}
|
||||
__ get_cache_and_index_at_bcp(cache, G1_scratch, 1);
|
||||
__ bind(L_got_cache);
|
||||
__ ld_ptr(cache, ConstantPoolCache::base_offset() +
|
||||
ConstantPoolCacheEntry::flags_offset(), size);
|
||||
__ and3(size, 0xFF, size); // argument size in words
|
||||
__ sll(size, Interpreter::logStackElementSize, size); // each argument size in bytes
|
||||
__ add(Lesp, size, Lesp); // pop arguments
|
||||
__ dispatch_next(state, step);
|
||||
const Register index = G1_scratch;
|
||||
__ get_cache_and_index_at_bcp(cache, index, 1, index_size);
|
||||
|
||||
// out of the main line of code...
|
||||
if (EnableInvokeDynamic) {
|
||||
__ bind(L_giant_index);
|
||||
__ get_cache_and_index_at_bcp(cache, G1_scratch, 1, sizeof(u4));
|
||||
__ ba_short(L_got_cache);
|
||||
}
|
||||
const Register flags = cache;
|
||||
__ ld_ptr(cache, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset(), flags);
|
||||
const Register parameter_size = flags;
|
||||
__ and3(flags, ConstantPoolCacheEntry::parameter_size_mask, parameter_size); // argument size in words
|
||||
__ sll(parameter_size, Interpreter::logStackElementSize, parameter_size); // each argument size in bytes
|
||||
__ add(Lesp, parameter_size, Lesp); // pop arguments
|
||||
__ dispatch_next(state, step);
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
@ -2932,9 +2932,7 @@ void TemplateTable::prepare_invoke(int byte_no,
|
||||
ConstantPoolCacheEntry::verify_tos_state_shift();
|
||||
// load return address
|
||||
{
|
||||
const address table_addr = (is_invokeinterface || is_invokedynamic) ?
|
||||
(address)Interpreter::return_5_addrs_by_index_table() :
|
||||
(address)Interpreter::return_3_addrs_by_index_table();
|
||||
const address table_addr = (address) Interpreter::invoke_return_entry_table_for(code);
|
||||
AddressLiteral table(table_addr);
|
||||
__ set(table, temp);
|
||||
__ sll(ra, LogBytesPerWord, ra);
|
||||
@ -2984,7 +2982,7 @@ void TemplateTable::invokevirtual(int byte_no) {
|
||||
__ verify_oop(O0_recv);
|
||||
|
||||
// get return address
|
||||
AddressLiteral table(Interpreter::return_3_addrs_by_index_table());
|
||||
AddressLiteral table(Interpreter::invoke_return_entry_table());
|
||||
__ set(table, Rtemp);
|
||||
__ srl(Rret, ConstantPoolCacheEntry::tos_state_shift, Rret); // get return type
|
||||
// Make sure we don't need to mask Rret after the above shift
|
||||
@ -3026,7 +3024,7 @@ void TemplateTable::invokevfinal_helper(Register Rscratch, Register Rret) {
|
||||
__ profile_final_call(O4);
|
||||
|
||||
// get return address
|
||||
AddressLiteral table(Interpreter::return_3_addrs_by_index_table());
|
||||
AddressLiteral table(Interpreter::invoke_return_entry_table());
|
||||
__ set(table, Rtemp);
|
||||
__ srl(Rret, ConstantPoolCacheEntry::tos_state_shift, Rret); // get return type
|
||||
// Make sure we don't need to mask Rret after the above shift
|
||||
|
@ -1468,19 +1468,18 @@ void LIRGenerator::do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) {
|
||||
addr = new LIR_Address(src.result(), offset, type);
|
||||
}
|
||||
|
||||
if (data != dst) {
|
||||
__ move(data, dst);
|
||||
data = dst;
|
||||
}
|
||||
// Because we want a 2-arg form of xchg and xadd
|
||||
__ move(data, dst);
|
||||
|
||||
if (x->is_add()) {
|
||||
__ xadd(LIR_OprFact::address(addr), data, dst, LIR_OprFact::illegalOpr);
|
||||
__ xadd(LIR_OprFact::address(addr), dst, dst, LIR_OprFact::illegalOpr);
|
||||
} else {
|
||||
if (is_obj) {
|
||||
// Do the pre-write barrier, if any.
|
||||
pre_barrier(LIR_OprFact::address(addr), LIR_OprFact::illegalOpr /* pre_val */,
|
||||
true /* do_load */, false /* patch */, NULL);
|
||||
}
|
||||
__ xchg(LIR_OprFact::address(addr), data, dst, LIR_OprFact::illegalOpr);
|
||||
__ xchg(LIR_OprFact::address(addr), dst, dst, LIR_OprFact::illegalOpr);
|
||||
if (is_obj) {
|
||||
// Seems to be a precise address
|
||||
post_barrier(LIR_OprFact::address(addr), data);
|
||||
|
@ -367,7 +367,7 @@ address CppInterpreterGenerator::generate_stack_to_native_abi_converter(BasicTyp
|
||||
return entry;
|
||||
}
|
||||
|
||||
address CppInterpreter::return_entry(TosState state, int length) {
|
||||
address CppInterpreter::return_entry(TosState state, int length, Bytecodes::Code code) {
|
||||
// make it look good in the debugger
|
||||
return CAST_FROM_FN_PTR(address, RecursiveInterpreterActivation);
|
||||
}
|
||||
|
@ -150,13 +150,12 @@ address TemplateInterpreterGenerator::generate_continuation_for(TosState state)
|
||||
}
|
||||
|
||||
|
||||
address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step) {
|
||||
TosState incoming_state = state;
|
||||
address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) {
|
||||
address entry = __ pc();
|
||||
|
||||
#ifdef COMPILER2
|
||||
// The FPU stack is clean if UseSSE >= 2 but must be cleaned in other cases
|
||||
if ((incoming_state == ftos && UseSSE < 1) || (incoming_state == dtos && UseSSE < 2)) {
|
||||
if ((state == ftos && UseSSE < 1) || (state == dtos && UseSSE < 2)) {
|
||||
for (int i = 1; i < 8; i++) {
|
||||
__ ffree(i);
|
||||
}
|
||||
@ -164,7 +163,7 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state,
|
||||
__ empty_FPU_stack();
|
||||
}
|
||||
#endif
|
||||
if ((incoming_state == ftos && UseSSE < 1) || (incoming_state == dtos && UseSSE < 2)) {
|
||||
if ((state == ftos && UseSSE < 1) || (state == dtos && UseSSE < 2)) {
|
||||
__ MacroAssembler::verify_FPU(1, "generate_return_entry_for compiled");
|
||||
} else {
|
||||
__ MacroAssembler::verify_FPU(0, "generate_return_entry_for compiled");
|
||||
@ -172,12 +171,12 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state,
|
||||
|
||||
// In SSE mode, interpreter returns FP results in xmm0 but they need
|
||||
// to end up back on the FPU so it can operate on them.
|
||||
if (incoming_state == ftos && UseSSE >= 1) {
|
||||
if (state == ftos && UseSSE >= 1) {
|
||||
__ subptr(rsp, wordSize);
|
||||
__ movflt(Address(rsp, 0), xmm0);
|
||||
__ fld_s(Address(rsp, 0));
|
||||
__ addptr(rsp, wordSize);
|
||||
} else if (incoming_state == dtos && UseSSE >= 2) {
|
||||
} else if (state == dtos && UseSSE >= 2) {
|
||||
__ subptr(rsp, 2*wordSize);
|
||||
__ movdbl(Address(rsp, 0), xmm0);
|
||||
__ fld_d(Address(rsp, 0));
|
||||
@ -194,32 +193,21 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state,
|
||||
__ restore_bcp();
|
||||
__ restore_locals();
|
||||
|
||||
if (incoming_state == atos) {
|
||||
if (state == atos) {
|
||||
Register mdp = rbx;
|
||||
Register tmp = rcx;
|
||||
__ profile_return_type(mdp, rax, tmp);
|
||||
}
|
||||
|
||||
Label L_got_cache, L_giant_index;
|
||||
if (EnableInvokeDynamic) {
|
||||
__ cmpb(Address(rsi, 0), Bytecodes::_invokedynamic);
|
||||
__ jcc(Assembler::equal, L_giant_index);
|
||||
}
|
||||
__ get_cache_and_index_at_bcp(rbx, rcx, 1, sizeof(u2));
|
||||
__ bind(L_got_cache);
|
||||
__ movl(rbx, Address(rbx, rcx,
|
||||
Address::times_ptr, ConstantPoolCache::base_offset() +
|
||||
ConstantPoolCacheEntry::flags_offset()));
|
||||
__ andptr(rbx, 0xFF);
|
||||
__ lea(rsp, Address(rsp, rbx, Interpreter::stackElementScale()));
|
||||
__ dispatch_next(state, step);
|
||||
const Register cache = rbx;
|
||||
const Register index = rcx;
|
||||
__ get_cache_and_index_at_bcp(cache, index, 1, index_size);
|
||||
|
||||
// out of the main line of code...
|
||||
if (EnableInvokeDynamic) {
|
||||
__ bind(L_giant_index);
|
||||
__ get_cache_and_index_at_bcp(rbx, rcx, 1, sizeof(u4));
|
||||
__ jmp(L_got_cache);
|
||||
}
|
||||
const Register flags = cache;
|
||||
__ movl(flags, Address(cache, index, Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()));
|
||||
__ andl(flags, ConstantPoolCacheEntry::parameter_size_mask);
|
||||
__ lea(rsp, Address(rsp, flags, Interpreter::stackElementScale()));
|
||||
__ dispatch_next(state, step);
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
@ -166,7 +166,7 @@ address TemplateInterpreterGenerator::generate_continuation_for(TosState state)
|
||||
}
|
||||
|
||||
|
||||
address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step) {
|
||||
address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) {
|
||||
address entry = __ pc();
|
||||
|
||||
// Restore stack bottom in case i2c adjusted stack
|
||||
@ -183,27 +183,15 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state,
|
||||
__ profile_return_type(mdp, rax, tmp);
|
||||
}
|
||||
|
||||
Label L_got_cache, L_giant_index;
|
||||
if (EnableInvokeDynamic) {
|
||||
__ cmpb(Address(r13, 0), Bytecodes::_invokedynamic);
|
||||
__ jcc(Assembler::equal, L_giant_index);
|
||||
}
|
||||
__ get_cache_and_index_at_bcp(rbx, rcx, 1, sizeof(u2));
|
||||
__ bind(L_got_cache);
|
||||
__ movl(rbx, Address(rbx, rcx,
|
||||
Address::times_ptr,
|
||||
in_bytes(ConstantPoolCache::base_offset()) +
|
||||
3 * wordSize));
|
||||
__ andl(rbx, 0xFF);
|
||||
__ lea(rsp, Address(rsp, rbx, Address::times_8));
|
||||
__ dispatch_next(state, step);
|
||||
const Register cache = rbx;
|
||||
const Register index = rcx;
|
||||
__ get_cache_and_index_at_bcp(cache, index, 1, index_size);
|
||||
|
||||
// out of the main line of code...
|
||||
if (EnableInvokeDynamic) {
|
||||
__ bind(L_giant_index);
|
||||
__ get_cache_and_index_at_bcp(rbx, rcx, 1, sizeof(u4));
|
||||
__ jmp(L_got_cache);
|
||||
}
|
||||
const Register flags = cache;
|
||||
__ movl(flags, Address(cache, index, Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()));
|
||||
__ andl(flags, ConstantPoolCacheEntry::parameter_size_mask);
|
||||
__ lea(rsp, Address(rsp, flags, Interpreter::stackElementScale()));
|
||||
__ dispatch_next(state, step);
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
@ -2929,9 +2929,7 @@ void TemplateTable::prepare_invoke(int byte_no,
|
||||
ConstantPoolCacheEntry::verify_tos_state_shift();
|
||||
// load return address
|
||||
{
|
||||
const address table_addr = (is_invokeinterface || is_invokedynamic) ?
|
||||
(address)Interpreter::return_5_addrs_by_index_table() :
|
||||
(address)Interpreter::return_3_addrs_by_index_table();
|
||||
const address table_addr = (address) Interpreter::invoke_return_entry_table_for(code);
|
||||
ExternalAddress table(table_addr);
|
||||
__ movptr(flags, ArrayAddress(table, Address(noreg, flags, Address::times_ptr)));
|
||||
}
|
||||
|
@ -2984,9 +2984,7 @@ void TemplateTable::prepare_invoke(int byte_no,
|
||||
ConstantPoolCacheEntry::verify_tos_state_shift();
|
||||
// load return address
|
||||
{
|
||||
const address table_addr = (is_invokeinterface || is_invokedynamic) ?
|
||||
(address)Interpreter::return_5_addrs_by_index_table() :
|
||||
(address)Interpreter::return_3_addrs_by_index_table();
|
||||
const address table_addr = (address) Interpreter::invoke_return_entry_table_for(code);
|
||||
ExternalAddress table(table_addr);
|
||||
__ lea(rscratch1, table);
|
||||
__ movptr(flags, Address(rscratch1, flags, Address::times_ptr));
|
||||
|
@ -1006,7 +1006,7 @@ void BytecodeInterpreter::layout_interpreterState(interpreterState istate,
|
||||
istate->set_stack_limit(stack_base - method->max_stack() - 1);
|
||||
}
|
||||
|
||||
address CppInterpreter::return_entry(TosState state, int length) {
|
||||
address CppInterpreter::return_entry(TosState state, int length, Bytecodes::Code code) {
|
||||
ShouldNotCallThis();
|
||||
return NULL;
|
||||
}
|
||||
|
@ -57,6 +57,8 @@ define_pd_global(bool, UseMembar, true);
|
||||
// GC Ergo Flags
|
||||
define_pd_global(uintx, CMSYoungGenPerWorker, 16*M); // default max size of CMS young gen, per GC worker thread
|
||||
|
||||
define_pd_global(uintx, TypeProfileLevel, 0);
|
||||
|
||||
#define ARCH_FLAGS(develop, product, diagnostic, experimental, notproduct)
|
||||
|
||||
#endif // CPU_ZERO_VM_GLOBALS_ZERO_HPP
|
||||
|
@ -1873,7 +1873,7 @@ void GraphBuilder::invoke(Bytecodes::Code code) {
|
||||
// number of implementors for decl_interface is 0 or 1. If
|
||||
// it's 0 then no class implements decl_interface and there's
|
||||
// no point in inlining.
|
||||
if (!holder->is_loaded() || decl_interface->nof_implementors() != 1) {
|
||||
if (!holder->is_loaded() || decl_interface->nof_implementors() != 1 || decl_interface->has_default_methods()) {
|
||||
singleton = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -57,6 +57,7 @@ ciInstanceKlass::ciInstanceKlass(KlassHandle h_k) :
|
||||
_init_state = ik->init_state();
|
||||
_nonstatic_field_size = ik->nonstatic_field_size();
|
||||
_has_nonstatic_fields = ik->has_nonstatic_fields();
|
||||
_has_default_methods = ik->has_default_methods();
|
||||
_nonstatic_fields = NULL; // initialized lazily by compute_nonstatic_fields:
|
||||
|
||||
_implementor = NULL; // we will fill these lazily
|
||||
|
@ -52,6 +52,7 @@ private:
|
||||
bool _has_finalizer;
|
||||
bool _has_subklass;
|
||||
bool _has_nonstatic_fields;
|
||||
bool _has_default_methods;
|
||||
|
||||
ciFlags _flags;
|
||||
jint _nonstatic_field_size;
|
||||
@ -171,6 +172,11 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
bool has_default_methods() {
|
||||
assert(is_loaded(), "must be loaded");
|
||||
return _has_default_methods;
|
||||
}
|
||||
|
||||
ciInstanceKlass* get_canonical_holder(int offset);
|
||||
ciField* get_field_by_offset(int field_offset, bool is_static);
|
||||
ciField* get_field_by_name(ciSymbol* name, ciSymbol* signature, bool is_static);
|
||||
|
@ -2197,8 +2197,8 @@ methodHandle ClassFileParser::parse_method(bool is_interface,
|
||||
}
|
||||
if (lvt_cnt == max_lvt_cnt) {
|
||||
max_lvt_cnt <<= 1;
|
||||
REALLOC_RESOURCE_ARRAY(u2, localvariable_table_length, lvt_cnt, max_lvt_cnt);
|
||||
REALLOC_RESOURCE_ARRAY(u2*, localvariable_table_start, lvt_cnt, max_lvt_cnt);
|
||||
localvariable_table_length = REALLOC_RESOURCE_ARRAY(u2, localvariable_table_length, lvt_cnt, max_lvt_cnt);
|
||||
localvariable_table_start = REALLOC_RESOURCE_ARRAY(u2*, localvariable_table_start, lvt_cnt, max_lvt_cnt);
|
||||
}
|
||||
localvariable_table_start[lvt_cnt] =
|
||||
parse_localvariable_table(code_length,
|
||||
@ -2226,8 +2226,8 @@ methodHandle ClassFileParser::parse_method(bool is_interface,
|
||||
// Parse local variable type table
|
||||
if (lvtt_cnt == max_lvtt_cnt) {
|
||||
max_lvtt_cnt <<= 1;
|
||||
REALLOC_RESOURCE_ARRAY(u2, localvariable_type_table_length, lvtt_cnt, max_lvtt_cnt);
|
||||
REALLOC_RESOURCE_ARRAY(u2*, localvariable_type_table_start, lvtt_cnt, max_lvtt_cnt);
|
||||
localvariable_type_table_length = REALLOC_RESOURCE_ARRAY(u2, localvariable_type_table_length, lvtt_cnt, max_lvtt_cnt);
|
||||
localvariable_type_table_start = REALLOC_RESOURCE_ARRAY(u2*, localvariable_type_table_start, lvtt_cnt, max_lvtt_cnt);
|
||||
}
|
||||
localvariable_type_table_start[lvtt_cnt] =
|
||||
parse_localvariable_table(code_length,
|
||||
@ -4483,9 +4483,8 @@ void ClassFileParser::check_final_method_override(instanceKlassHandle this_klass
|
||||
for (int index = 0; index < num_methods; index++) {
|
||||
Method* m = methods->at(index);
|
||||
|
||||
// skip private, static and <init> methods
|
||||
if ((!m->is_private()) &&
|
||||
(!m->is_static()) &&
|
||||
// skip static and <init> methods
|
||||
if ((!m->is_static()) &&
|
||||
(m->name() != vmSymbols::object_initializer_name())) {
|
||||
|
||||
Symbol* name = m->name();
|
||||
|
@ -173,8 +173,6 @@ class SymbolPropertyTable;
|
||||
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
|
||||
do_klass(nio_Buffer_klass, java_nio_Buffer, Opt ) \
|
||||
\
|
||||
do_klass(PostVMInitHook_klass, sun_misc_PostVMInitHook, Opt ) \
|
||||
\
|
||||
/* Preload boxing klasses */ \
|
||||
do_klass(Boolean_klass, java_lang_Boolean, Pre ) \
|
||||
do_klass(Character_klass, java_lang_Character, Pre ) \
|
||||
|
@ -780,6 +780,10 @@ CompilerCounters::CompilerCounters(const char* thread_name, int instance, TRAPS)
|
||||
void CompileBroker::compilation_init() {
|
||||
_last_method_compiled[0] = '\0';
|
||||
|
||||
// No need to initialize compilation system if we do not use it.
|
||||
if (!UseCompiler) {
|
||||
return;
|
||||
}
|
||||
#ifndef SHARK
|
||||
// Set the interface to the current compiler(s).
|
||||
int c1_count = CompilationPolicy::policy()->compiler_count(CompLevel_simple);
|
||||
|
@ -158,8 +158,8 @@ class AbstractInterpreter: AllStatic {
|
||||
// Runtime support
|
||||
|
||||
// length = invoke bytecode length (to advance to next bytecode)
|
||||
static address deopt_entry (TosState state, int length) { ShouldNotReachHere(); return NULL; }
|
||||
static address return_entry (TosState state, int length) { ShouldNotReachHere(); return NULL; }
|
||||
static address deopt_entry(TosState state, int length) { ShouldNotReachHere(); return NULL; }
|
||||
static address return_entry(TosState state, int length, Bytecodes::Code code) { ShouldNotReachHere(); return NULL; }
|
||||
|
||||
static address rethrow_exception_entry() { return _rethrow_exception_entry; }
|
||||
|
||||
|
@ -78,7 +78,7 @@ class CppInterpreter: public AbstractInterpreter {
|
||||
static address stack_result_to_stack(int index) { return _stack_to_stack[index]; }
|
||||
static address stack_result_to_native(int index) { return _stack_to_native_abi[index]; }
|
||||
|
||||
static address return_entry (TosState state, int length);
|
||||
static address return_entry (TosState state, int length, Bytecodes::Code code);
|
||||
static address deopt_entry (TosState state, int length);
|
||||
|
||||
#ifdef TARGET_ARCH_x86
|
||||
|
@ -329,15 +329,21 @@ void AbstractInterpreter::print_method_kind(MethodKind kind) {
|
||||
//------------------------------------------------------------------------------------------------------------------------
|
||||
// Deoptimization support
|
||||
|
||||
// If deoptimization happens, this function returns the point of next bytecode to continue execution
|
||||
/**
|
||||
* If a deoptimization happens, this function returns the point of next bytecode to continue execution.
|
||||
*/
|
||||
address AbstractInterpreter::deopt_continue_after_entry(Method* method, address bcp, int callee_parameters, bool is_top_frame) {
|
||||
assert(method->contains(bcp), "just checkin'");
|
||||
Bytecodes::Code code = Bytecodes::java_code_at(method, bcp);
|
||||
|
||||
// Get the original and rewritten bytecode.
|
||||
Bytecodes::Code code = Bytecodes::java_code_at(method, bcp);
|
||||
assert(!Interpreter::bytecode_should_reexecute(code), "should not reexecute");
|
||||
int bci = method->bci_from(bcp);
|
||||
int length = -1; // initial value for debugging
|
||||
|
||||
const int bci = method->bci_from(bcp);
|
||||
|
||||
// compute continuation length
|
||||
length = Bytecodes::length_at(method, bcp);
|
||||
const int length = Bytecodes::length_at(method, bcp);
|
||||
|
||||
// compute result type
|
||||
BasicType type = T_ILLEGAL;
|
||||
|
||||
@ -393,7 +399,7 @@ address AbstractInterpreter::deopt_continue_after_entry(Method* method, address
|
||||
return
|
||||
is_top_frame
|
||||
? Interpreter::deopt_entry (as_TosState(type), length)
|
||||
: Interpreter::return_entry(as_TosState(type), length);
|
||||
: Interpreter::return_entry(as_TosState(type), length, code);
|
||||
}
|
||||
|
||||
// If deoptimization happens, this function returns the point where the interpreter reexecutes
|
||||
|
@ -184,8 +184,9 @@ EntryPoint TemplateInterpreter::_deopt_entry [TemplateInterpreter::number_of_deo
|
||||
EntryPoint TemplateInterpreter::_continuation_entry;
|
||||
EntryPoint TemplateInterpreter::_safept_entry;
|
||||
|
||||
address TemplateInterpreter::_return_3_addrs_by_index[TemplateInterpreter::number_of_return_addrs];
|
||||
address TemplateInterpreter::_return_5_addrs_by_index[TemplateInterpreter::number_of_return_addrs];
|
||||
address TemplateInterpreter::_invoke_return_entry[TemplateInterpreter::number_of_return_addrs];
|
||||
address TemplateInterpreter::_invokeinterface_return_entry[TemplateInterpreter::number_of_return_addrs];
|
||||
address TemplateInterpreter::_invokedynamic_return_entry[TemplateInterpreter::number_of_return_addrs];
|
||||
|
||||
DispatchTable TemplateInterpreter::_active_table;
|
||||
DispatchTable TemplateInterpreter::_normal_table;
|
||||
@ -237,22 +238,37 @@ void TemplateInterpreterGenerator::generate_all() {
|
||||
#endif // !PRODUCT
|
||||
|
||||
{ CodeletMark cm(_masm, "return entry points");
|
||||
const int index_size = sizeof(u2);
|
||||
for (int i = 0; i < Interpreter::number_of_return_entries; i++) {
|
||||
Interpreter::_return_entry[i] =
|
||||
EntryPoint(
|
||||
generate_return_entry_for(itos, i),
|
||||
generate_return_entry_for(itos, i),
|
||||
generate_return_entry_for(itos, i),
|
||||
generate_return_entry_for(atos, i),
|
||||
generate_return_entry_for(itos, i),
|
||||
generate_return_entry_for(ltos, i),
|
||||
generate_return_entry_for(ftos, i),
|
||||
generate_return_entry_for(dtos, i),
|
||||
generate_return_entry_for(vtos, i)
|
||||
generate_return_entry_for(itos, i, index_size),
|
||||
generate_return_entry_for(itos, i, index_size),
|
||||
generate_return_entry_for(itos, i, index_size),
|
||||
generate_return_entry_for(atos, i, index_size),
|
||||
generate_return_entry_for(itos, i, index_size),
|
||||
generate_return_entry_for(ltos, i, index_size),
|
||||
generate_return_entry_for(ftos, i, index_size),
|
||||
generate_return_entry_for(dtos, i, index_size),
|
||||
generate_return_entry_for(vtos, i, index_size)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
{ CodeletMark cm(_masm, "invoke return entry points");
|
||||
const TosState states[] = {itos, itos, itos, itos, ltos, ftos, dtos, atos, vtos};
|
||||
const int invoke_length = Bytecodes::length_for(Bytecodes::_invokestatic);
|
||||
const int invokeinterface_length = Bytecodes::length_for(Bytecodes::_invokeinterface);
|
||||
const int invokedynamic_length = Bytecodes::length_for(Bytecodes::_invokedynamic);
|
||||
|
||||
for (int i = 0; i < Interpreter::number_of_return_addrs; i++) {
|
||||
TosState state = states[i];
|
||||
Interpreter::_invoke_return_entry[i] = generate_return_entry_for(state, invoke_length, sizeof(u2));
|
||||
Interpreter::_invokeinterface_return_entry[i] = generate_return_entry_for(state, invokeinterface_length, sizeof(u2));
|
||||
Interpreter::_invokedynamic_return_entry[i] = generate_return_entry_for(state, invokedynamic_length, sizeof(u4));
|
||||
}
|
||||
}
|
||||
|
||||
{ CodeletMark cm(_masm, "earlyret entry points");
|
||||
Interpreter::_earlyret_entry =
|
||||
EntryPoint(
|
||||
@ -298,13 +314,6 @@ void TemplateInterpreterGenerator::generate_all() {
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = 0; j < number_of_states; j++) {
|
||||
const TosState states[] = {btos, ctos, stos, itos, ltos, ftos, dtos, atos, vtos};
|
||||
int index = Interpreter::TosState_as_index(states[j]);
|
||||
Interpreter::_return_3_addrs_by_index[index] = Interpreter::return_entry(states[j], 3);
|
||||
Interpreter::_return_5_addrs_by_index[index] = Interpreter::return_entry(states[j], 5);
|
||||
}
|
||||
|
||||
{ CodeletMark cm(_masm, "continuation entry points");
|
||||
Interpreter::_continuation_entry =
|
||||
EntryPoint(
|
||||
@ -534,9 +543,46 @@ void TemplateInterpreterGenerator::generate_and_dispatch(Template* t, TosState t
|
||||
//------------------------------------------------------------------------------------------------------------------------
|
||||
// Entry points
|
||||
|
||||
address TemplateInterpreter::return_entry(TosState state, int length) {
|
||||
/**
|
||||
* Returns the return entry table for the given invoke bytecode.
|
||||
*/
|
||||
address* TemplateInterpreter::invoke_return_entry_table_for(Bytecodes::Code code) {
|
||||
switch (code) {
|
||||
case Bytecodes::_invokestatic:
|
||||
case Bytecodes::_invokespecial:
|
||||
case Bytecodes::_invokevirtual:
|
||||
case Bytecodes::_invokehandle:
|
||||
return Interpreter::invoke_return_entry_table();
|
||||
case Bytecodes::_invokeinterface:
|
||||
return Interpreter::invokeinterface_return_entry_table();
|
||||
case Bytecodes::_invokedynamic:
|
||||
return Interpreter::invokedynamic_return_entry_table();
|
||||
default:
|
||||
fatal(err_msg("invalid bytecode: %s", Bytecodes::name(code)));
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the return entry address for the given top-of-stack state and bytecode.
|
||||
*/
|
||||
address TemplateInterpreter::return_entry(TosState state, int length, Bytecodes::Code code) {
|
||||
guarantee(0 <= length && length < Interpreter::number_of_return_entries, "illegal length");
|
||||
return _return_entry[length].entry(state);
|
||||
const int index = TosState_as_index(state);
|
||||
switch (code) {
|
||||
case Bytecodes::_invokestatic:
|
||||
case Bytecodes::_invokespecial:
|
||||
case Bytecodes::_invokevirtual:
|
||||
case Bytecodes::_invokehandle:
|
||||
return _invoke_return_entry[index];
|
||||
case Bytecodes::_invokeinterface:
|
||||
return _invokeinterface_return_entry[index];
|
||||
case Bytecodes::_invokedynamic:
|
||||
return _invokedynamic_return_entry[index];
|
||||
default:
|
||||
assert(!Bytecodes::is_invoke(code), err_msg("invoke instructions should be handled separately: %s", Bytecodes::name(code)));
|
||||
return _return_entry[length].entry(state);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -120,8 +120,9 @@ class TemplateInterpreter: public AbstractInterpreter {
|
||||
static EntryPoint _continuation_entry;
|
||||
static EntryPoint _safept_entry;
|
||||
|
||||
static address _return_3_addrs_by_index[number_of_return_addrs]; // for invokevirtual return entries
|
||||
static address _return_5_addrs_by_index[number_of_return_addrs]; // for invokeinterface return entries
|
||||
static address _invoke_return_entry[number_of_return_addrs]; // for invokestatic, invokespecial, invokevirtual return entries
|
||||
static address _invokeinterface_return_entry[number_of_return_addrs]; // for invokeinterface return entries
|
||||
static address _invokedynamic_return_entry[number_of_return_addrs]; // for invokedynamic return entries
|
||||
|
||||
static DispatchTable _active_table; // the active dispatch table (used by the interpreter for dispatch)
|
||||
static DispatchTable _normal_table; // the normal dispatch table (used to set the active table in normal mode)
|
||||
@ -161,12 +162,15 @@ class TemplateInterpreter: public AbstractInterpreter {
|
||||
static address* normal_table() { return _normal_table.table_for(); }
|
||||
|
||||
// Support for invokes
|
||||
static address* return_3_addrs_by_index_table() { return _return_3_addrs_by_index; }
|
||||
static address* return_5_addrs_by_index_table() { return _return_5_addrs_by_index; }
|
||||
static int TosState_as_index(TosState state); // computes index into return_3_entry_by_index table
|
||||
static address* invoke_return_entry_table() { return _invoke_return_entry; }
|
||||
static address* invokeinterface_return_entry_table() { return _invokeinterface_return_entry; }
|
||||
static address* invokedynamic_return_entry_table() { return _invokedynamic_return_entry; }
|
||||
static int TosState_as_index(TosState state);
|
||||
|
||||
static address return_entry (TosState state, int length);
|
||||
static address deopt_entry (TosState state, int length);
|
||||
static address* invoke_return_entry_table_for(Bytecodes::Code code);
|
||||
|
||||
static address deopt_entry(TosState state, int length);
|
||||
static address return_entry(TosState state, int length, Bytecodes::Code code);
|
||||
|
||||
// Safepoint support
|
||||
static void notice_safepoints(); // stops the thread when reaching a safepoint
|
||||
|
@ -53,7 +53,7 @@ class TemplateInterpreterGenerator: public AbstractInterpreterGenerator {
|
||||
address generate_ClassCastException_handler();
|
||||
address generate_ArrayIndexOutOfBounds_handler(const char* name);
|
||||
address generate_continuation_for(TosState state);
|
||||
address generate_return_entry_for(TosState state, int step);
|
||||
address generate_return_entry_for(TosState state, int step, size_t index_size);
|
||||
address generate_earlyret_entry_for(TosState state);
|
||||
address generate_deopt_entry_for(TosState state, int step);
|
||||
address generate_safept_entry_for(TosState state, address runtime_entry);
|
||||
|
@ -1515,7 +1515,10 @@ Bytecodes::Code Method::orig_bytecode_at(int bci) const {
|
||||
return bp->orig_bytecode();
|
||||
}
|
||||
}
|
||||
ShouldNotReachHere();
|
||||
{
|
||||
ResourceMark rm;
|
||||
fatal(err_msg("no original bytecode found in %s at bci %d", name_and_sig_as_C_string(), bci));
|
||||
}
|
||||
return Bytecodes::_shouldnotreachhere;
|
||||
}
|
||||
|
||||
|
@ -2006,9 +2006,9 @@ bool LibraryCallKit::inline_math_addExactI(bool is_increment) {
|
||||
Node* arg2 = NULL;
|
||||
|
||||
if (is_increment) {
|
||||
arg2 = intcon(1);
|
||||
arg2 = intcon(1);
|
||||
} else {
|
||||
arg2 = argument(1);
|
||||
arg2 = argument(1);
|
||||
}
|
||||
|
||||
Node* add = _gvn.transform( new(C) AddExactINode(NULL, arg1, arg2) );
|
||||
@ -2056,7 +2056,7 @@ bool LibraryCallKit::inline_math_subtractExactL(bool is_decrement) {
|
||||
if (is_decrement) {
|
||||
arg2 = longcon(1);
|
||||
} else {
|
||||
Node* arg2 = argument(2); // type long
|
||||
arg2 = argument(2); // type long
|
||||
// argument(3) == TOP
|
||||
}
|
||||
|
||||
|
@ -713,6 +713,10 @@ bool IdealLoopTree::policy_unroll( PhaseIdealLoop *phase ) const {
|
||||
case Op_ModL: body_size += 30; break;
|
||||
case Op_DivL: body_size += 30; break;
|
||||
case Op_MulL: body_size += 10; break;
|
||||
case Op_FlagsProj:
|
||||
// Can't handle unrolling of loops containing
|
||||
// nodes that generate a FlagsProj at the moment
|
||||
return false;
|
||||
case Op_StrComp:
|
||||
case Op_StrEquals:
|
||||
case Op_StrIndexOf:
|
||||
|
@ -97,7 +97,8 @@ int PhaseChaitin::yank( Node *old, Block *current_block, Node_List *value, Node_
|
||||
static bool expected_yanked_node(Node *old, Node *orig_old) {
|
||||
// This code is expected only next original nodes:
|
||||
// - load from constant table node which may have next data input nodes:
|
||||
// MachConstantBase, Phi, MachTemp, MachSpillCopy
|
||||
// MachConstantBase, MachTemp, MachSpillCopy
|
||||
// - Phi nodes that are considered Junk
|
||||
// - load constant node which may have next data input nodes:
|
||||
// MachTemp, MachSpillCopy
|
||||
// - MachSpillCopy
|
||||
@ -112,7 +113,9 @@ static bool expected_yanked_node(Node *old, Node *orig_old) {
|
||||
return (old == orig_old);
|
||||
} else if (old->is_MachTemp()) {
|
||||
return orig_old->is_Con();
|
||||
} else if (old->is_Phi() || old->is_MachConstantBase()) {
|
||||
} else if (old->is_Phi()) { // Junk phi's
|
||||
return true;
|
||||
} else if (old->is_MachConstantBase()) {
|
||||
return (orig_old->is_Con() && orig_old->is_MachConstant());
|
||||
}
|
||||
return false;
|
||||
@ -522,11 +525,9 @@ void PhaseChaitin::post_allocate_copy_removal() {
|
||||
u = u ? NodeSentinel : x; // Capture unique input, or NodeSentinel for 2nd input
|
||||
}
|
||||
if (u != NodeSentinel) { // Junk Phi. Remove
|
||||
block->remove_node(j--);
|
||||
phi_dex--;
|
||||
_cfg.unmap_node_from_block(phi);
|
||||
phi->replace_by(u);
|
||||
phi->disconnect_inputs(NULL, C);
|
||||
j -= yank_if_dead(phi, block, &value, ®nd);
|
||||
phi_dex--;
|
||||
continue;
|
||||
}
|
||||
// Note that if value[pidx] exists, then we merged no new values here
|
||||
|
@ -2787,13 +2787,11 @@ intptr_t TypeOopPtr::get_con() const {
|
||||
|
||||
//-----------------------------filter------------------------------------------
|
||||
// Do not allow interface-vs.-noninterface joins to collapse to top.
|
||||
const Type *TypeOopPtr::filter( const Type *kills ) const {
|
||||
const Type *TypeOopPtr::filter(const Type *kills) const {
|
||||
|
||||
const Type* ft = join(kills);
|
||||
const TypeInstPtr* ftip = ft->isa_instptr();
|
||||
const TypeInstPtr* ktip = kills->isa_instptr();
|
||||
const TypeKlassPtr* ftkp = ft->isa_klassptr();
|
||||
const TypeKlassPtr* ktkp = kills->isa_klassptr();
|
||||
|
||||
if (ft->empty()) {
|
||||
// Check for evil case of 'this' being a class and 'kills' expecting an
|
||||
@ -2807,8 +2805,6 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
|
||||
// uplift the type.
|
||||
if (!empty() && ktip != NULL && ktip->is_loaded() && ktip->klass()->is_interface())
|
||||
return kills; // Uplift to interface
|
||||
if (!empty() && ktkp != NULL && ktkp->klass()->is_loaded() && ktkp->klass()->is_interface())
|
||||
return kills; // Uplift to interface
|
||||
|
||||
return Type::TOP; // Canonical empty value
|
||||
}
|
||||
@ -2825,14 +2821,6 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
|
||||
assert(!ftip->klass_is_exact(), "interface could not be exact");
|
||||
return ktip->cast_to_ptr_type(ftip->ptr());
|
||||
}
|
||||
// Interface klass type could be exact in opposite to interface type,
|
||||
// return it here instead of incorrect Constant ptr J/L/Object (6894807).
|
||||
if (ftkp != NULL && ktkp != NULL &&
|
||||
ftkp->is_loaded() && ftkp->klass()->is_interface() &&
|
||||
!ftkp->klass_is_exact() && // Keep exact interface klass
|
||||
ktkp->is_loaded() && !ktkp->klass()->is_interface()) {
|
||||
return ktkp->cast_to_ptr_type(ftkp->ptr());
|
||||
}
|
||||
|
||||
return ft;
|
||||
}
|
||||
@ -4385,6 +4373,33 @@ bool TypeKlassPtr::singleton(void) const {
|
||||
return (_offset == 0) && !below_centerline(_ptr);
|
||||
}
|
||||
|
||||
// Do not allow interface-vs.-noninterface joins to collapse to top.
|
||||
const Type *TypeKlassPtr::filter(const Type *kills) const {
|
||||
// logic here mirrors the one from TypeOopPtr::filter. See comments
|
||||
// there.
|
||||
const Type* ft = join(kills);
|
||||
const TypeKlassPtr* ftkp = ft->isa_klassptr();
|
||||
const TypeKlassPtr* ktkp = kills->isa_klassptr();
|
||||
|
||||
if (ft->empty()) {
|
||||
if (!empty() && ktkp != NULL && ktkp->klass()->is_loaded() && ktkp->klass()->is_interface())
|
||||
return kills; // Uplift to interface
|
||||
|
||||
return Type::TOP; // Canonical empty value
|
||||
}
|
||||
|
||||
// Interface klass type could be exact in opposite to interface type,
|
||||
// return it here instead of incorrect Constant ptr J/L/Object (6894807).
|
||||
if (ftkp != NULL && ktkp != NULL &&
|
||||
ftkp->is_loaded() && ftkp->klass()->is_interface() &&
|
||||
!ftkp->klass_is_exact() && // Keep exact interface klass
|
||||
ktkp->is_loaded() && !ktkp->klass()->is_interface()) {
|
||||
return ktkp->cast_to_ptr_type(ftkp->ptr());
|
||||
}
|
||||
|
||||
return ft;
|
||||
}
|
||||
|
||||
//----------------------compute_klass------------------------------------------
|
||||
// Compute the defining klass for this class
|
||||
ciKlass* TypeAryPtr::compute_klass(DEBUG_ONLY(bool verify)) const {
|
||||
|
@ -63,7 +63,7 @@ class TypeRawPtr;
|
||||
class TypeOopPtr;
|
||||
class TypeInstPtr;
|
||||
class TypeAryPtr;
|
||||
class TypeKlassPtr;
|
||||
class TypeKlassPtr;
|
||||
class TypeMetadataPtr;
|
||||
|
||||
//------------------------------Type-------------------------------------------
|
||||
@ -1202,6 +1202,9 @@ public:
|
||||
|
||||
virtual intptr_t get_con() const;
|
||||
|
||||
// Do not allow interface-vs.-noninterface joins to collapse to top.
|
||||
virtual const Type *filter( const Type *kills ) const;
|
||||
|
||||
// Convenience common pre-built types.
|
||||
static const TypeKlassPtr* OBJECT; // Not-null object klass or below
|
||||
static const TypeKlassPtr* OBJECT_OR_NULL; // Maybe-null version of same
|
||||
|
@ -1988,6 +1988,15 @@ void Arguments::check_deprecated_gc_flags() {
|
||||
warning("DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. "
|
||||
"Use MaxRAMFraction instead.");
|
||||
}
|
||||
if (FLAG_IS_CMDLINE(UseCMSCompactAtFullCollection)) {
|
||||
warning("UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.");
|
||||
}
|
||||
if (FLAG_IS_CMDLINE(CMSFullGCsBeforeCompaction)) {
|
||||
warning("CMSFullGCsBeforeCompaction is deprecated and will likely be removed in a future release.");
|
||||
}
|
||||
if (FLAG_IS_CMDLINE(UseCMSCollectionPassing)) {
|
||||
warning("UseCMSCollectionPassing is deprecated and will likely be removed in a future release.");
|
||||
}
|
||||
}
|
||||
|
||||
// Check stack pages settings
|
||||
|
@ -45,7 +45,7 @@
|
||||
oop* HandleArea::allocate_handle(oop obj) {
|
||||
assert(_handle_mark_nesting > 1, "memory leak: allocating handle outside HandleMark");
|
||||
assert(_no_handle_mark_nesting == 0, "allocating handle inside NoHandleMark");
|
||||
assert(obj->is_oop(), "sanity check");
|
||||
assert(obj->is_oop(), err_msg("not an oop: " INTPTR_FORMAT, (intptr_t*) obj));
|
||||
return real_allocate_handle(obj);
|
||||
}
|
||||
|
||||
|
@ -1097,7 +1097,7 @@ static const char* get_java_runtime_version(TRAPS) {
|
||||
// General purpose hook into Java code, run once when the VM is initialized.
|
||||
// The Java library method itself may be changed independently from the VM.
|
||||
static void call_postVMInitHook(TRAPS) {
|
||||
Klass* k = SystemDictionary::PostVMInitHook_klass();
|
||||
Klass* k = SystemDictionary::resolve_or_null(vmSymbols::sun_misc_PostVMInitHook(), THREAD);
|
||||
instanceKlassHandle klass (THREAD, k);
|
||||
if (klass.not_null()) {
|
||||
JavaValue result(T_VOID);
|
||||
|
@ -48,7 +48,7 @@ void DCmdRegistrant::register_dcmds(){
|
||||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SystemGCDCmd>(full_export, true, false));
|
||||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<RunFinalizationDCmd>(full_export, true, false));
|
||||
#if INCLUDE_SERVICES // Heap dumping/inspection supported
|
||||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<HeapDumpDCmd>(full_export, true, false));
|
||||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<HeapDumpDCmd>(DCmd_Source_Internal | DCmd_Source_AttachAPI, true, false));
|
||||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassHistogramDCmd>(full_export, true, false));
|
||||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassStatsDCmd>(full_export, true, false));
|
||||
#endif // INCLUDE_SERVICES
|
||||
|
64
hotspot/test/compiler/inlining/InlineDefaultMethod.java
Normal file
64
hotspot/test/compiler/inlining/InlineDefaultMethod.java
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* 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 8026735
|
||||
* @summary CHA in C1 should make correct decisions about default methods
|
||||
* @run main/othervm -Xcomp -XX:CompileOnly=InlineDefaultMethod::test -XX:TieredStopAtLevel=1 InlineDefaultMethod
|
||||
*/
|
||||
|
||||
|
||||
interface InterfaceWithDefaultMethod0 {
|
||||
default public int defaultMethod() {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
interface InterfaceWithDefaultMethod1 extends InterfaceWithDefaultMethod0 { }
|
||||
|
||||
abstract class Subtype implements InterfaceWithDefaultMethod1 { }
|
||||
|
||||
class Decoy extends Subtype {
|
||||
public int defaultMethod() {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
class Instance extends Subtype { }
|
||||
|
||||
public class InlineDefaultMethod {
|
||||
public static int test(InterfaceWithDefaultMethod1 x) {
|
||||
return x.defaultMethod();
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
InterfaceWithDefaultMethod1 a = new Decoy();
|
||||
InterfaceWithDefaultMethod1 b = new Instance();
|
||||
if (test(a) != 2 ||
|
||||
test(b) != 1) {
|
||||
System.err.println("FAILED");
|
||||
System.exit(97);
|
||||
}
|
||||
System.err.println("PASSED");
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* 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 8027444
|
||||
* @summary Test nested loops
|
||||
* @compile NestedMathExactTest.java
|
||||
* @run main NestedMathExactTest
|
||||
*
|
||||
*/
|
||||
|
||||
public class NestedMathExactTest {
|
||||
public static final int LIMIT = 100;
|
||||
public static int[] result = new int[LIMIT];
|
||||
public static int value = 17;
|
||||
|
||||
public static void main(String[] args) {
|
||||
for (int i = 0; i < 100; ++i) {
|
||||
result[i] = runTest();
|
||||
}
|
||||
}
|
||||
|
||||
public static int runTest() {
|
||||
int sum = 0;
|
||||
for (int j = 0; j < 100000; j = Math.addExact(j, 1)) {
|
||||
sum = 1;
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
sum *= value;
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
}
|
@ -24,6 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8026844
|
||||
* @bug 8027353
|
||||
* @summary Test constant subtractExact
|
||||
* @compile SubExactLConstantTest.java Verify.java
|
||||
* @run main SubExactLConstantTest
|
||||
|
@ -24,6 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8026844
|
||||
* @bug 8027353
|
||||
* @summary Test non constant subtractExact
|
||||
* @compile SubExactLNonConstantTest.java Verify.java
|
||||
* @run main SubExactLNonConstantTest
|
||||
|
44
hotspot/test/compiler/startup/StartupOutput.java
Normal file
44
hotspot/test/compiler/startup/StartupOutput.java
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* 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 8026949
|
||||
* @summary Test ensures correct VM output during startup
|
||||
* @library ../../testlibrary
|
||||
*
|
||||
*/
|
||||
import com.oracle.java.testlibrary.*;
|
||||
|
||||
public class StartupOutput {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb;
|
||||
OutputAnalyzer out;
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder("-Xint", "-XX:+DisplayVMOutputToStdout", "-version");
|
||||
out = new OutputAnalyzer(pb.start());
|
||||
out.shouldNotContain("no space to run compilers");
|
||||
|
||||
out.shouldHaveExitValue(0);
|
||||
}
|
||||
}
|
52
hotspot/test/gc/startup_warnings/TestCMSForegroundFlags.java
Normal file
52
hotspot/test/gc/startup_warnings/TestCMSForegroundFlags.java
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* 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 TestCMSForegroundFlags
|
||||
* @key gc
|
||||
* @bug 8027132
|
||||
* @summary Test that the deprecated CMS foreground collector flags print warning messages
|
||||
* @library /testlibrary
|
||||
* @run main TestCMSForegroundFlags -XX:-UseCMSCompactAtFullCollection UseCMSCompactAtFullCollection
|
||||
* @run main TestCMSForegroundFlags -XX:CMSFullGCsBeforeCompaction=4 CMSFullGCsBeforeCompaction
|
||||
* @run main TestCMSForegroundFlags -XX:-UseCMSCollectionPassing UseCMSCollectionPassing
|
||||
*/
|
||||
|
||||
import com.oracle.java.testlibrary.OutputAnalyzer;
|
||||
import com.oracle.java.testlibrary.ProcessTools;
|
||||
|
||||
public class TestCMSForegroundFlags {
|
||||
public static void main(String[] args) throws Exception {
|
||||
if (args.length != 2) {
|
||||
throw new Exception("Expected two arguments,flagValue and flagName");
|
||||
}
|
||||
String flagValue = args[0];
|
||||
String flagName = args[1];
|
||||
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flagValue, "-version");
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("warning: " + flagName + " is deprecated and will likely be removed in a future release.");
|
||||
output.shouldNotContain("error");
|
||||
output.shouldHaveExitValue(0);
|
||||
}
|
||||
}
|
@ -233,3 +233,4 @@ d6a32e3831aab20a9a3bc78cdc0a60aaad725c6c jdk8-b107
|
||||
02bfab2aa93899e0f02584f1e85537485a196553 jdk8-b109
|
||||
4c84c5b447b09aff27f3b72667ab3a5401e85968 jdk8-b110
|
||||
17ee0d3e97fdb412e48f14d87f504946a708f846 jdk8-b111
|
||||
c1f9158fbb9c2da50f6946fffd974e8236e08447 jdk8-b112
|
||||
|
@ -33,9 +33,7 @@ jprt.build.flavors=product,fastdebug
|
||||
|
||||
# Standard list of jprt build targets for this source tree
|
||||
jprt.build.targets= \
|
||||
solaris_sparc_5.10-{product|fastdebug}, \
|
||||
solaris_sparcv9_5.10-{product|fastdebug}, \
|
||||
solaris_i586_5.10-{product|fastdebug}, \
|
||||
solaris_x64_5.10-{product|fastdebug}, \
|
||||
linux_i586_2.6-{product|fastdebug}, \
|
||||
linux_x64_2.6-{product|fastdebug}, \
|
||||
|
@ -39,6 +39,116 @@ public final class XalanConstants {
|
||||
//
|
||||
// Constants
|
||||
//
|
||||
//Xerces security manager
|
||||
public static final String SECURITY_MANAGER =
|
||||
"http://apache.org/xml/properties/security-manager";
|
||||
|
||||
//
|
||||
// Implementation limits: API properties
|
||||
//
|
||||
/** Oracle JAXP property prefix ("http://www.oracle.com/xml/jaxp/properties/"). */
|
||||
public static final String ORACLE_JAXP_PROPERTY_PREFIX =
|
||||
"http://www.oracle.com/xml/jaxp/properties/";
|
||||
/**
|
||||
* JDK entity expansion limit; Note that the existing system property
|
||||
* "entityExpansionLimit" with no prefix is still observed
|
||||
*/
|
||||
public static final String JDK_ENTITY_EXPANSION_LIMIT =
|
||||
ORACLE_JAXP_PROPERTY_PREFIX + "entityExpansionLimit";
|
||||
|
||||
/**
|
||||
* JDK element attribute limit; Note that the existing system property
|
||||
* "elementAttributeLimit" with no prefix is still observed
|
||||
*/
|
||||
public static final String JDK_ELEMENT_ATTRIBUTE_LIMIT =
|
||||
ORACLE_JAXP_PROPERTY_PREFIX + "elementAttributeLimit";
|
||||
|
||||
/**
|
||||
* JDK maxOccur limit; Note that the existing system property
|
||||
* "maxOccurLimit" with no prefix is still observed
|
||||
*/
|
||||
public static final String JDK_MAX_OCCUR_LIMIT =
|
||||
ORACLE_JAXP_PROPERTY_PREFIX + "maxOccurLimit";
|
||||
|
||||
/**
|
||||
* JDK total entity size limit
|
||||
*/
|
||||
public static final String JDK_TOTAL_ENTITY_SIZE_LIMIT =
|
||||
ORACLE_JAXP_PROPERTY_PREFIX + "totalEntitySizeLimit";
|
||||
|
||||
/**
|
||||
* JDK maximum general entity size limit
|
||||
*/
|
||||
public static final String JDK_GENEAL_ENTITY_SIZE_LIMIT =
|
||||
ORACLE_JAXP_PROPERTY_PREFIX + "maxGeneralEntitySizeLimit";
|
||||
/**
|
||||
* JDK maximum parameter entity size limit
|
||||
*/
|
||||
public static final String JDK_PARAMETER_ENTITY_SIZE_LIMIT =
|
||||
ORACLE_JAXP_PROPERTY_PREFIX + "maxParameterEntitySizeLimit";
|
||||
/**
|
||||
* JDK maximum XML name limit
|
||||
*/
|
||||
public static final String JDK_XML_NAME_LIMIT =
|
||||
ORACLE_JAXP_PROPERTY_PREFIX + "maxXMLNameLimit";
|
||||
/**
|
||||
* JDK property indicating whether the parser shall print out entity
|
||||
* count information
|
||||
* Value: a string "yes" means print, "no" or any other string means not.
|
||||
*/
|
||||
public static final String JDK_ENTITY_COUNT_INFO =
|
||||
ORACLE_JAXP_PROPERTY_PREFIX + "getEntityCountInfo";
|
||||
|
||||
//
|
||||
// Implementation limits: corresponding System Properties of the above
|
||||
// API properties
|
||||
//
|
||||
/**
|
||||
* JDK entity expansion limit; Note that the existing system property
|
||||
* "entityExpansionLimit" with no prefix is still observed
|
||||
*/
|
||||
public static final String SP_ENTITY_EXPANSION_LIMIT = "jdk.xml.entityExpansionLimit";
|
||||
|
||||
/**
|
||||
* JDK element attribute limit; Note that the existing system property
|
||||
* "elementAttributeLimit" with no prefix is still observed
|
||||
*/
|
||||
public static final String SP_ELEMENT_ATTRIBUTE_LIMIT = "jdk.xml.elementAttributeLimit";
|
||||
|
||||
/**
|
||||
* JDK maxOccur limit; Note that the existing system property
|
||||
* "maxOccurLimit" with no prefix is still observed
|
||||
*/
|
||||
public static final String SP_MAX_OCCUR_LIMIT = "jdk.xml.maxOccurLimit";
|
||||
|
||||
/**
|
||||
* JDK total entity size limit
|
||||
*/
|
||||
public static final String SP_TOTAL_ENTITY_SIZE_LIMIT = "jdk.xml.totalEntitySizeLimit";
|
||||
|
||||
/**
|
||||
* JDK maximum general entity size limit
|
||||
*/
|
||||
public static final String SP_GENEAL_ENTITY_SIZE_LIMIT = "jdk.xml.maxGeneralEntitySizeLimit";
|
||||
/**
|
||||
* JDK maximum parameter entity size limit
|
||||
*/
|
||||
public static final String SP_PARAMETER_ENTITY_SIZE_LIMIT = "jdk.xml.maxParameterEntitySizeLimit";
|
||||
/**
|
||||
* JDK maximum XML name limit
|
||||
*/
|
||||
public static final String SP_XML_NAME_LIMIT = "jdk.xml.maxXMLNameLimit";
|
||||
|
||||
//legacy System Properties
|
||||
public final static String ENTITY_EXPANSION_LIMIT = "entityExpansionLimit";
|
||||
public static final String ELEMENT_ATTRIBUTE_LIMIT = "elementAttributeLimit" ;
|
||||
public final static String MAX_OCCUR_LIMIT = "maxOccurLimit";
|
||||
|
||||
/**
|
||||
* A string "yes" that can be used for properties such as getEntityCountInfo
|
||||
*/
|
||||
public static final String JDK_YES = "yes";
|
||||
|
||||
// Oracle Feature:
|
||||
/**
|
||||
* <p>Use Service Mechanism</p>
|
||||
@ -51,21 +161,16 @@ public final class XalanConstants {
|
||||
* <li>
|
||||
* {@code false} instruct an object to skip service mechanism and
|
||||
* use the default implementation for that service.
|
||||
* </li>
|
||||
* </ul>
|
||||
*/
|
||||
|
||||
* </li>
|
||||
* </ul>
|
||||
*/
|
||||
public static final String ORACLE_FEATURE_SERVICE_MECHANISM = "http://www.oracle.com/feature/use-service-mechanism";
|
||||
|
||||
/** Oracle JAXP property prefix ("http://www.oracle.com/xml/jaxp/properties/"). */
|
||||
public static final String ORACLE_JAXP_PROPERTY_PREFIX =
|
||||
"http://www.oracle.com/xml/jaxp/properties/";
|
||||
|
||||
//System Properties corresponding to ACCESS_EXTERNAL_* properties
|
||||
public static final String SP_ACCESS_EXTERNAL_STYLESHEET = "javax.xml.accessExternalStylesheet";
|
||||
public static final String SP_ACCESS_EXTERNAL_DTD = "javax.xml.accessExternalDTD";
|
||||
|
||||
|
||||
//all access keyword
|
||||
public static final String ACCESS_EXTERNAL_ALL = "all";
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_de extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_de extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_es extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_es extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_fr extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_fr extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_it extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_it extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_ja extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_ja extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_ko extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_ko extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_pt_BR extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_pt_BR extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_sv extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_sv extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_zh_CN extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_zh_CN extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -471,7 +471,13 @@ public class XSLTErrorResources_zh_TW extends ListResourceBundle
|
||||
|
||||
// Error messages...
|
||||
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
|
||||
/** Error message ID that has a null message, but takes in a single object. */
|
||||
{"ER0000" , "{0}" },
|
||||
@ -1412,13 +1418,6 @@ public class XSLTErrorResources_zh_TW extends ListResourceBundle
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The int to message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
// ================= INFRASTRUCTURE ======================
|
||||
|
||||
|
@ -0,0 +1,449 @@
|
||||
/*
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
*
|
||||
* Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* The contents of this file are subject to the terms of either the GNU
|
||||
* General Public License Version 2 only ("GPL") or the Common Development
|
||||
* and Distribution License("CDDL") (collectively, the "License"). You
|
||||
* may not use this file except in compliance with the License. You can
|
||||
* obtain a copy of the License at
|
||||
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
|
||||
* or packager/legal/LICENSE.txt. See the License for the specific
|
||||
* language governing permissions and limitations under the License.
|
||||
*
|
||||
* When distributing the software, include this License Header Notice in each
|
||||
* file and include the License file at packager/legal/LICENSE.txt.
|
||||
*
|
||||
* GPL Classpath Exception:
|
||||
* Oracle designates this particular file as subject to the "Classpath"
|
||||
* exception as provided by Oracle in the GPL Version 2 section of the License
|
||||
* file that accompanied this code.
|
||||
*
|
||||
* Modifications:
|
||||
* If applicable, add the following below the License Header, with the fields
|
||||
* enclosed by brackets [] replaced by your own identifying information:
|
||||
* "Portions Copyright [year] [name of copyright owner]"
|
||||
*
|
||||
* Contributor(s):
|
||||
* If you wish your version of this file to be governed by only the CDDL or
|
||||
* only the GPL Version 2, indicate your decision by adding "[Contributor]
|
||||
* elects to include this software in this distribution under the [CDDL or GPL
|
||||
* Version 2] license." If you don't indicate a single choice of license, a
|
||||
* recipient has the option to distribute your version of this file under
|
||||
* either the CDDL, the GPL Version 2 or to extend the choice of license to
|
||||
* its licensees as provided above. However, if you add GPL Version 2 code
|
||||
* and therefore, elected the GPL Version 2 license, then the option applies
|
||||
* only if the new code is made subject to such option by the copyright
|
||||
* holder.
|
||||
*/
|
||||
package com.sun.org.apache.xalan.internal.utils;
|
||||
|
||||
import com.sun.org.apache.xalan.internal.XalanConstants;
|
||||
|
||||
|
||||
/**
|
||||
* This class is not the same as that in Xerces. It is used to manage the
|
||||
* state of corresponding Xerces properties and pass the values over to
|
||||
* the Xerces Security Manager.
|
||||
*
|
||||
* @author Joe Wang Oracle Corp.
|
||||
*
|
||||
*/
|
||||
public final class XMLSecurityManager {
|
||||
|
||||
/**
|
||||
* States of the settings of a property, in the order: default value, value
|
||||
* set by FEATURE_SECURE_PROCESSING, jaxp.properties file, jaxp system
|
||||
* properties, and jaxp api properties
|
||||
*/
|
||||
public static enum State {
|
||||
//this order reflects the overriding order
|
||||
|
||||
DEFAULT("default"), FSP("FEATURE_SECURE_PROCESSING"),
|
||||
JAXPDOTPROPERTIES("jaxp.properties"), SYSTEMPROPERTY("system property"),
|
||||
APIPROPERTY("property");
|
||||
|
||||
final String literal;
|
||||
State(String literal) {
|
||||
this.literal = literal;
|
||||
}
|
||||
|
||||
String literal() {
|
||||
return literal;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Limits managed by the security manager
|
||||
*/
|
||||
public static enum Limit {
|
||||
|
||||
ENTITY_EXPANSION_LIMIT(XalanConstants.JDK_ENTITY_EXPANSION_LIMIT,
|
||||
XalanConstants.SP_ENTITY_EXPANSION_LIMIT, 0, 64000),
|
||||
MAX_OCCUR_NODE_LIMIT(XalanConstants.JDK_MAX_OCCUR_LIMIT,
|
||||
XalanConstants.SP_MAX_OCCUR_LIMIT, 0, 5000),
|
||||
ELEMENT_ATTRIBUTE_LIMIT(XalanConstants.JDK_ELEMENT_ATTRIBUTE_LIMIT,
|
||||
XalanConstants.SP_ELEMENT_ATTRIBUTE_LIMIT, 0, 10000),
|
||||
TOTAL_ENTITY_SIZE_LIMIT(XalanConstants.JDK_TOTAL_ENTITY_SIZE_LIMIT,
|
||||
XalanConstants.SP_TOTAL_ENTITY_SIZE_LIMIT, 0, 50000000),
|
||||
GENEAL_ENTITY_SIZE_LIMIT(XalanConstants.JDK_GENEAL_ENTITY_SIZE_LIMIT,
|
||||
XalanConstants.SP_GENEAL_ENTITY_SIZE_LIMIT, 0, 0),
|
||||
PARAMETER_ENTITY_SIZE_LIMIT(XalanConstants.JDK_PARAMETER_ENTITY_SIZE_LIMIT,
|
||||
XalanConstants.SP_PARAMETER_ENTITY_SIZE_LIMIT, 0, 1000000);
|
||||
|
||||
final String apiProperty;
|
||||
final String systemProperty;
|
||||
final int defaultValue;
|
||||
final int secureValue;
|
||||
|
||||
Limit(String apiProperty, String systemProperty, int value, int secureValue) {
|
||||
this.apiProperty = apiProperty;
|
||||
this.systemProperty = systemProperty;
|
||||
this.defaultValue = value;
|
||||
this.secureValue = secureValue;
|
||||
}
|
||||
|
||||
public boolean equalsAPIPropertyName(String propertyName) {
|
||||
return (propertyName == null) ? false : apiProperty.equals(propertyName);
|
||||
}
|
||||
|
||||
public boolean equalsSystemPropertyName(String propertyName) {
|
||||
return (propertyName == null) ? false : systemProperty.equals(propertyName);
|
||||
}
|
||||
|
||||
public String apiProperty() {
|
||||
return apiProperty;
|
||||
}
|
||||
|
||||
String systemProperty() {
|
||||
return systemProperty;
|
||||
}
|
||||
|
||||
int defaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
int secureValue() {
|
||||
return secureValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Map old property names with the new ones
|
||||
*/
|
||||
public static enum NameMap {
|
||||
|
||||
ENTITY_EXPANSION_LIMIT(XalanConstants.SP_ENTITY_EXPANSION_LIMIT,
|
||||
XalanConstants.ENTITY_EXPANSION_LIMIT),
|
||||
MAX_OCCUR_NODE_LIMIT(XalanConstants.SP_MAX_OCCUR_LIMIT,
|
||||
XalanConstants.MAX_OCCUR_LIMIT),
|
||||
ELEMENT_ATTRIBUTE_LIMIT(XalanConstants.SP_ELEMENT_ATTRIBUTE_LIMIT,
|
||||
XalanConstants.ELEMENT_ATTRIBUTE_LIMIT);
|
||||
final String newName;
|
||||
final String oldName;
|
||||
|
||||
NameMap(String newName, String oldName) {
|
||||
this.newName = newName;
|
||||
this.oldName = oldName;
|
||||
}
|
||||
|
||||
String getOldName(String newName) {
|
||||
if (newName.equals(this.newName)) {
|
||||
return oldName;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Values of the properties
|
||||
*/
|
||||
private final int[] values;
|
||||
/**
|
||||
* States of the settings for each property
|
||||
*/
|
||||
private State[] states;
|
||||
/**
|
||||
* States that determine if properties are set explicitly
|
||||
*/
|
||||
private boolean[] isSet;
|
||||
|
||||
|
||||
/**
|
||||
* Index of the special entityCountInfo property
|
||||
*/
|
||||
private int indexEntityCountInfo = 10000;
|
||||
private String printEntityCountInfo = "";
|
||||
|
||||
/**
|
||||
* Default constructor. Establishes default values for known security
|
||||
* vulnerabilities.
|
||||
*/
|
||||
public XMLSecurityManager() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiate Security Manager in accordance with the status of
|
||||
* secure processing
|
||||
* @param secureProcessing
|
||||
*/
|
||||
public XMLSecurityManager(boolean secureProcessing) {
|
||||
values = new int[Limit.values().length];
|
||||
states = new State[Limit.values().length];
|
||||
isSet = new boolean[Limit.values().length];
|
||||
for (Limit limit : Limit.values()) {
|
||||
if (secureProcessing) {
|
||||
values[limit.ordinal()] = limit.secureValue();
|
||||
states[limit.ordinal()] = State.FSP;
|
||||
} else {
|
||||
values[limit.ordinal()] = limit.defaultValue();
|
||||
states[limit.ordinal()] = State.DEFAULT;
|
||||
}
|
||||
}
|
||||
//read system properties or jaxp.properties
|
||||
readSystemProperties();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setting FEATURE_SECURE_PROCESSING explicitly
|
||||
*/
|
||||
public void setSecureProcessing(boolean secure) {
|
||||
for (Limit limit : Limit.values()) {
|
||||
if (secure) {
|
||||
setLimit(limit.ordinal(), State.FSP, limit.secureValue());
|
||||
} else {
|
||||
setLimit(limit.ordinal(), State.FSP, limit.defaultValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set limit by property name and state
|
||||
* @param propertyName property name
|
||||
* @param state the state of the property
|
||||
* @param value the value of the property
|
||||
* @return true if the property is managed by the security manager; false
|
||||
* if otherwise.
|
||||
*/
|
||||
public boolean setLimit(String propertyName, State state, Object value) {
|
||||
int index = getIndex(propertyName);
|
||||
if (index > -1) {
|
||||
setLimit(index, state, value);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value for a specific limit.
|
||||
*
|
||||
* @param limit the limit
|
||||
* @param state the state of the property
|
||||
* @param value the value of the property
|
||||
*/
|
||||
public void setLimit(Limit limit, State state, int value) {
|
||||
setLimit(limit.ordinal(), state, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a property by its index
|
||||
*
|
||||
* @param index the index of the property
|
||||
* @param state the state of the property
|
||||
* @param value the value of the property
|
||||
*/
|
||||
public void setLimit(int index, State state, Object value) {
|
||||
if (index == indexEntityCountInfo) {
|
||||
//if it's explicitly set, it's treated as yes no matter the value
|
||||
printEntityCountInfo = (String)value;
|
||||
} else {
|
||||
int temp = 0;
|
||||
try {
|
||||
temp = Integer.parseInt((String) value);
|
||||
if (temp < 0) {
|
||||
temp = 0;
|
||||
}
|
||||
} catch (NumberFormatException e) {}
|
||||
setLimit(index, state, temp); }
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a property by its index
|
||||
*
|
||||
* @param index the index of the property
|
||||
* @param state the state of the property
|
||||
* @param value the value of the property
|
||||
*/
|
||||
public void setLimit(int index, State state, int value) {
|
||||
if (index == indexEntityCountInfo) {
|
||||
//if it's explicitly set, it's treated as yes no matter the value
|
||||
printEntityCountInfo = XalanConstants.JDK_YES;
|
||||
} else {
|
||||
//only update if it shall override
|
||||
if (state.compareTo(states[index]) >= 0) {
|
||||
values[index] = value;
|
||||
states[index] = state;
|
||||
isSet[index] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the value of the specified property.
|
||||
*
|
||||
* @param propertyName the property name
|
||||
* @return the value of the property as a string. If a property is managed
|
||||
* by this manager, its value shall not be null.
|
||||
*/
|
||||
public String getLimitAsString(String propertyName) {
|
||||
int index = getIndex(propertyName);
|
||||
if (index > -1) {
|
||||
return getLimitValueByIndex(index);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of a property by its ordinal
|
||||
*
|
||||
* @param limit the property
|
||||
* @return value of a property
|
||||
*/
|
||||
public String getLimitValueAsString(Limit limit) {
|
||||
return Integer.toString(values[limit.ordinal()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of the specified property
|
||||
*
|
||||
* @param limit the property
|
||||
* @return the value of the property
|
||||
*/
|
||||
public int getLimit(Limit limit) {
|
||||
return values[limit.ordinal()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of a property by its ordinal
|
||||
*
|
||||
* @param index the index of a property
|
||||
* @return value of a property
|
||||
*/
|
||||
public int getLimitByIndex(int index) {
|
||||
return values[index];
|
||||
}
|
||||
/**
|
||||
* Return the value of a property by its index
|
||||
*
|
||||
* @param index the index of a property
|
||||
* @return limit of a property as a string
|
||||
*/
|
||||
public String getLimitValueByIndex(int index) {
|
||||
if (index == indexEntityCountInfo) {
|
||||
return printEntityCountInfo;
|
||||
}
|
||||
|
||||
return Integer.toString(values[index]);
|
||||
}
|
||||
/**
|
||||
* Return the state of the limit property
|
||||
*
|
||||
* @param limit the limit
|
||||
* @return the state of the limit property
|
||||
*/
|
||||
public State getState(Limit limit) {
|
||||
return states[limit.ordinal()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the state of the limit property
|
||||
*
|
||||
* @param limit the limit
|
||||
* @return the state of the limit property
|
||||
*/
|
||||
public String getStateLiteral(Limit limit) {
|
||||
return states[limit.ordinal()].literal();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index by property name
|
||||
*
|
||||
* @param propertyName property name
|
||||
* @return the index of the property if found; return -1 if not
|
||||
*/
|
||||
public int getIndex(String propertyName) {
|
||||
for (Limit limit : Limit.values()) {
|
||||
if (limit.equalsAPIPropertyName(propertyName)) {
|
||||
//internally, ordinal is used as index
|
||||
return limit.ordinal();
|
||||
}
|
||||
}
|
||||
//special property to return entity count info
|
||||
if (propertyName.equals(XalanConstants.JDK_ENTITY_COUNT_INFO)) {
|
||||
return indexEntityCountInfo;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate if a property is set explicitly
|
||||
* @param index
|
||||
* @return
|
||||
*/
|
||||
public boolean isSet(int index) {
|
||||
return isSet[index];
|
||||
}
|
||||
|
||||
public boolean printEntityCountInfo() {
|
||||
return printEntityCountInfo.equals(XalanConstants.JDK_YES);
|
||||
}
|
||||
/**
|
||||
* Read from system properties, or those in jaxp.properties
|
||||
*/
|
||||
private void readSystemProperties() {
|
||||
|
||||
for (Limit limit : Limit.values()) {
|
||||
if (!getSystemProperty(limit, limit.systemProperty())) {
|
||||
//if system property is not found, try the older form if any
|
||||
for (NameMap nameMap : NameMap.values()) {
|
||||
String oldName = nameMap.getOldName(limit.systemProperty());
|
||||
if (oldName != null) {
|
||||
getSystemProperty(limit, oldName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Read from system properties, or those in jaxp.properties
|
||||
*
|
||||
* @param property the type of the property
|
||||
* @param sysPropertyName the name of system property
|
||||
*/
|
||||
private boolean getSystemProperty(Limit limit, String sysPropertyName) {
|
||||
try {
|
||||
String value = SecuritySupport.getSystemProperty(sysPropertyName);
|
||||
if (value != null && !value.equals("")) {
|
||||
values[limit.ordinal()] = Integer.parseInt(value);
|
||||
states[limit.ordinal()] = State.SYSTEMPROPERTY;
|
||||
return true;
|
||||
}
|
||||
|
||||
value = SecuritySupport.readJAXPProperty(sysPropertyName);
|
||||
if (value != null && !value.equals("")) {
|
||||
values[limit.ordinal()] = Integer.parseInt(value);
|
||||
states[limit.ordinal()] = State.JAXPDOTPROPERTIES;
|
||||
return true;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
//invalid setting
|
||||
throw new NumberFormatException("Invalid setting for system property: " + limit.systemProperty());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -93,6 +93,23 @@ public final class XMLSecurityPropertyManager {
|
||||
readSystemProperties();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set limit by property name and state
|
||||
* @param propertyName property name
|
||||
* @param state the state of the property
|
||||
* @param value the value of the property
|
||||
* @return true if the property is managed by the security property manager;
|
||||
* false if otherwise.
|
||||
*/
|
||||
public boolean setValue(String propertyName, State state, Object value) {
|
||||
int index = getIndex(propertyName);
|
||||
if (index > -1) {
|
||||
setValue(index, state, (String)value);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value for a specific property.
|
||||
*
|
||||
@ -121,6 +138,22 @@ public final class XMLSecurityPropertyManager {
|
||||
states[index] = state;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of the specified property
|
||||
*
|
||||
* @param propertyName the property name
|
||||
* @return the value of the property as a string
|
||||
*/
|
||||
public String getValue(String propertyName) {
|
||||
int index = getIndex(propertyName);
|
||||
if (index > -1) {
|
||||
return getValueByIndex(index);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of the specified property
|
||||
*
|
||||
|
@ -86,7 +86,7 @@ final class Import extends TopLevelElement {
|
||||
if (input == null) {
|
||||
docToLoad = SystemIDResolver.getAbsoluteURI(docToLoad, currLoadedDoc);
|
||||
String accessError = SecuritySupport.checkAccess(docToLoad,
|
||||
xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_STYLESHEET),
|
||||
(String)xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_STYLESHEET),
|
||||
XalanConstants.ACCESS_EXTERNAL_ALL);
|
||||
|
||||
if (accessError != null) {
|
||||
|
@ -87,7 +87,7 @@ final class Include extends TopLevelElement {
|
||||
if (input == null) {
|
||||
docToLoad = SystemIDResolver.getAbsoluteURI(docToLoad, currLoadedDoc);
|
||||
String accessError = SecuritySupport.checkAccess(docToLoad,
|
||||
xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_STYLESHEET),
|
||||
(String)xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_STYLESHEET),
|
||||
XalanConstants.ACCESS_EXTERNAL_ALL);
|
||||
|
||||
if (accessError != null) {
|
||||
|
@ -28,6 +28,7 @@ import com.sun.org.apache.xalan.internal.XalanConstants;
|
||||
import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
|
||||
import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
|
||||
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
|
||||
import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
|
||||
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
|
||||
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodType;
|
||||
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type;
|
||||
@ -487,6 +488,20 @@ public class Parser implements Constants, ContentHandler {
|
||||
}
|
||||
|
||||
final XMLReader reader = parser.getXMLReader();
|
||||
try {
|
||||
XMLSecurityManager securityManager =
|
||||
(XMLSecurityManager)_xsltc.getProperty(XalanConstants.SECURITY_MANAGER);
|
||||
for (XMLSecurityManager.Limit limit : XMLSecurityManager.Limit.values()) {
|
||||
reader.setProperty(limit.apiProperty(), securityManager.getLimitValueAsString(limit));
|
||||
}
|
||||
if (securityManager.printEntityCountInfo()) {
|
||||
parser.setProperty(XalanConstants.JDK_ENTITY_COUNT_INFO, XalanConstants.JDK_YES);
|
||||
}
|
||||
} catch (SAXException se) {
|
||||
System.err.println("Warning: " + reader.getClass().getName() + ": "
|
||||
+ se.getMessage());
|
||||
}
|
||||
|
||||
return(parse(reader, input));
|
||||
}
|
||||
catch (ParserConfigurationException e) {
|
||||
@ -565,7 +580,7 @@ public class Parser implements Constants, ContentHandler {
|
||||
}
|
||||
path = SystemIDResolver.getAbsoluteURI(path);
|
||||
String accessError = SecuritySupport.checkAccess(path,
|
||||
_xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_STYLESHEET),
|
||||
(String)_xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_STYLESHEET),
|
||||
XalanConstants.ACCESS_EXTERNAL_ALL);
|
||||
if (accessError != null) {
|
||||
ErrorMsg msg = new ErrorMsg(ErrorMsg.ACCESSING_XSLT_TARGET_ERR,
|
||||
|
@ -44,11 +44,11 @@ import javax.xml.XMLConstants;
|
||||
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
|
||||
import com.sun.org.apache.xalan.internal.XalanConstants;
|
||||
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
|
||||
import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
|
||||
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
|
||||
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Util;
|
||||
import com.sun.org.apache.xml.internal.dtm.DTM;
|
||||
|
||||
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.XMLReader;
|
||||
|
||||
@ -146,6 +146,7 @@ public final class XSLTC {
|
||||
*/
|
||||
private String _accessExternalDTD = XalanConstants.EXTERNAL_ACCESS_DEFAULT;
|
||||
|
||||
private XMLSecurityManager _xmlSecurityManager;
|
||||
|
||||
/**
|
||||
* XSLTC compiler constructor
|
||||
@ -184,12 +185,14 @@ public final class XSLTC {
|
||||
/**
|
||||
* Return allowed protocols for accessing external stylesheet.
|
||||
*/
|
||||
public String getProperty(String name) {
|
||||
public Object getProperty(String name) {
|
||||
if (name.equals(XMLConstants.ACCESS_EXTERNAL_STYLESHEET)) {
|
||||
return _accessExternalStylesheet;
|
||||
}
|
||||
else if (name.equals(XMLConstants.ACCESS_EXTERNAL_DTD)) {
|
||||
return _accessExternalDTD;
|
||||
} else if (name.equals(XalanConstants.SECURITY_MANAGER)) {
|
||||
return _xmlSecurityManager;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -197,12 +200,14 @@ public final class XSLTC {
|
||||
/**
|
||||
* Set allowed protocols for accessing external stylesheet.
|
||||
*/
|
||||
public void setProperty(String name, String value) {
|
||||
public void setProperty(String name, Object value) {
|
||||
if (name.equals(XMLConstants.ACCESS_EXTERNAL_STYLESHEET)) {
|
||||
_accessExternalStylesheet = (String)value;
|
||||
}
|
||||
else if (name.equals(XMLConstants.ACCESS_EXTERNAL_DTD)) {
|
||||
_accessExternalDTD = (String)value;
|
||||
} else if (name.equals(XalanConstants.SECURITY_MANAGER)) {
|
||||
_xmlSecurityManager = (XMLSecurityManager)value;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"More than one stylesheet defined in the same file."},
|
||||
|
||||
@ -1012,12 +1018,5 @@ public class ErrorMessages extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_ca extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"S'ha definit m\u00e9s d'un full d'estils en el mateix fitxer."},
|
||||
|
||||
@ -853,12 +859,5 @@ public class ErrorMessages_ca extends ListResourceBundle {
|
||||
"FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."}
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_cs extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"V\u00edce ne\u017e jedna p\u0159edloha stylu je definov\u00e1na ve stejn\u00e9m souboru."},
|
||||
|
||||
@ -853,12 +859,5 @@ public class ErrorMessages_cs extends ListResourceBundle {
|
||||
"FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."}
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_de extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"Mehrere Stylesheets in derselben Datei definiert."},
|
||||
|
||||
@ -964,12 +970,5 @@ public class ErrorMessages_de extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_es extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"Se ha definido m\u00E1s de una hoja de estilo en el mismo archivo."},
|
||||
|
||||
@ -964,12 +970,5 @@ public class ErrorMessages_es extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_fr extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"Plusieurs feuilles de style d\u00E9finies dans le m\u00EAme fichier."},
|
||||
|
||||
@ -964,12 +970,5 @@ public class ErrorMessages_fr extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_it extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"Sono stati definiti pi\u00F9 fogli di stile nello stesso file."},
|
||||
|
||||
@ -964,12 +970,5 @@ public class ErrorMessages_it extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_ja extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u306B\u8907\u6570\u306E\u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u3059\u3002"},
|
||||
|
||||
@ -964,12 +970,5 @@ public class ErrorMessages_ja extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_ko extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"\uB3D9\uC77C\uD55C \uD30C\uC77C\uC5D0 \uC2A4\uD0C0\uC77C\uC2DC\uD2B8\uAC00 \uB450 \uAC1C \uC774\uC0C1 \uC815\uC758\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
|
||||
|
||||
@ -964,12 +970,5 @@ public class ErrorMessages_ko extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_pt_BR extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"Mais de uma folha de estilos definida no mesmo arquivo."},
|
||||
|
||||
@ -964,12 +970,5 @@ public class ErrorMessages_pt_BR extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_sk extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"Viac ne\u017e jeden \u0161t\u00fdl dokumentu bol definovan\u00fd v rovnakom s\u00fabore."},
|
||||
|
||||
@ -853,12 +859,5 @@ public class ErrorMessages_sk extends ListResourceBundle {
|
||||
"FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."}
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,13 @@ public class ErrorMessages_sv extends ListResourceBundle {
|
||||
*/
|
||||
|
||||
// These message should be read from a locale-specific resource bundle
|
||||
private static final Object[][] _contents = new Object[][] {
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return new Object[][] {
|
||||
{ErrorMsg.MULTIPLE_STYLESHEET_ERR,
|
||||
"Fler \u00E4n en formatmall har definierats i samma fil."},
|
||||
|
||||
@ -964,12 +970,5 @@ public class ErrorMessages_sv extends ListResourceBundle {
|
||||
|
||||
};
|
||||
|
||||
/** Get the lookup table for error messages.
|
||||
*
|
||||
* @return The message lookup table.
|
||||
*/
|
||||
public Object[][] getContents()
|
||||
{
|
||||
return _contents;
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user